Skip to content

Commit

Permalink
c/r changes: fake client subresource update mechanism
Browse files Browse the repository at this point in the history
Fake client now expects that objects that have status subresource are added to 'withStatusSubresource' collection so that their status gets correctly updated or not updated depending on whether the update/patch operation targets status subresource or not. See kubernetes-sigs/controller-runtime#2259

Signed-off-by: irbekrm <irbekrm@gmail.com>
  • Loading branch information
irbekrm committed May 24, 2023
1 parent d37cddb commit 353b25c
Show file tree
Hide file tree
Showing 2 changed files with 108 additions and 67 deletions.
148 changes: 89 additions & 59 deletions internal/controllers/certificaterequest_controller_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,9 @@ func TestCertificateRequestReconcile(t *testing.T) {

type testCase struct {
name types.NamespacedName
objects []client.Object
secretObjects []client.Object
issuerObjects []client.Object
crObjects []client.Object
signerBuilder signer.SignerBuilder
clusterResourceNamespace string
expectedResult ctrl.Result
Expand All @@ -60,7 +62,7 @@ func TestCertificateRequestReconcile(t *testing.T) {
tests := map[string]testCase{
"success-issuer": {
name: types.NamespacedName{Namespace: "ns1", Name: "cr1"},
objects: []client.Object{
crObjects: []client.Object{
cmgen.CertificateRequest(
"cr1",
cmgen.SetCertificateRequestNamespace("ns1"),
Expand All @@ -78,30 +80,32 @@ func TestCertificateRequestReconcile(t *testing.T) {
Status: cmmeta.ConditionUnknown,
}),
),
&sampleissuerapi.Issuer{
ObjectMeta: metav1.ObjectMeta{
Name: "issuer1",
Namespace: "ns1",
},
Spec: sampleissuerapi.IssuerSpec{
AuthSecretName: "issuer1-credentials",
},
Status: sampleissuerapi.IssuerStatus{
Conditions: []sampleissuerapi.IssuerCondition{
{
Type: sampleissuerapi.IssuerConditionReady,
Status: sampleissuerapi.ConditionTrue,
},
},
issuerObjects: []client.Object{&sampleissuerapi.Issuer{
ObjectMeta: metav1.ObjectMeta{
Name: "issuer1",
Namespace: "ns1",
},
Spec: sampleissuerapi.IssuerSpec{
AuthSecretName: "issuer1-credentials",
},
Status: sampleissuerapi.IssuerStatus{
Conditions: []sampleissuerapi.IssuerCondition{
{
Type: sampleissuerapi.IssuerConditionReady,
Status: sampleissuerapi.ConditionTrue,
},
},
},
&corev1.Secret{
ObjectMeta: metav1.ObjectMeta{
Name: "issuer1-credentials",
Namespace: "ns1",
},
},
},
secretObjects: []client.Object{&corev1.Secret{
ObjectMeta: metav1.ObjectMeta{
Name: "issuer1-credentials",
Namespace: "ns1",
},
},
},
signerBuilder: func(*sampleissuerapi.IssuerSpec, map[string][]byte) (signer.Signer, error) {
return &fakeSigner{}, nil
},
Expand All @@ -112,7 +116,7 @@ func TestCertificateRequestReconcile(t *testing.T) {
},
"success-cluster-issuer": {
name: types.NamespacedName{Namespace: "ns1", Name: "cr1"},
objects: []client.Object{
crObjects: []client.Object{
cmgen.CertificateRequest(
"cr1",
cmgen.SetCertificateRequestNamespace("ns1"),
Expand All @@ -130,6 +134,8 @@ func TestCertificateRequestReconcile(t *testing.T) {
Status: cmmeta.ConditionUnknown,
}),
),
},
issuerObjects: []client.Object{
&sampleissuerapi.ClusterIssuer{
ObjectMeta: metav1.ObjectMeta{
Name: "clusterissuer1",
Expand All @@ -146,13 +152,13 @@ func TestCertificateRequestReconcile(t *testing.T) {
},
},
},
&corev1.Secret{
ObjectMeta: metav1.ObjectMeta{
Name: "clusterissuer1-credentials",
Namespace: "kube-system",
},
},
},
secretObjects: []client.Object{&corev1.Secret{
ObjectMeta: metav1.ObjectMeta{
Name: "clusterissuer1-credentials",
Namespace: "kube-system",
},
}},
signerBuilder: func(*sampleissuerapi.IssuerSpec, map[string][]byte) (signer.Signer, error) {
return &fakeSigner{}, nil
},
Expand All @@ -167,7 +173,7 @@ func TestCertificateRequestReconcile(t *testing.T) {
},
"issuer-ref-foreign-group": {
name: types.NamespacedName{Namespace: "ns1", Name: "cr1"},
objects: []client.Object{
crObjects: []client.Object{
cmgen.CertificateRequest(
"cr1",
cmgen.SetCertificateRequestNamespace("ns1"),
Expand All @@ -180,7 +186,7 @@ func TestCertificateRequestReconcile(t *testing.T) {
},
"certificaterequest-already-ready": {
name: types.NamespacedName{Namespace: "ns1", Name: "cr1"},
objects: []client.Object{
crObjects: []client.Object{
cmgen.CertificateRequest(
"cr1",
cmgen.SetCertificateRequestNamespace("ns1"),
Expand All @@ -202,7 +208,7 @@ func TestCertificateRequestReconcile(t *testing.T) {
},
"certificaterequest-missing-ready-condition": {
name: types.NamespacedName{Namespace: "ns1", Name: "cr1"},
objects: []client.Object{
crObjects: []client.Object{
cmgen.CertificateRequest(
"cr1",
cmgen.SetCertificateRequestNamespace("ns1"),
Expand All @@ -222,7 +228,7 @@ func TestCertificateRequestReconcile(t *testing.T) {
},
"issuer-ref-unknown-kind": {
name: types.NamespacedName{Namespace: "ns1", Name: "cr1"},
objects: []client.Object{
crObjects: []client.Object{
cmgen.CertificateRequest(
"cr1",
cmgen.SetCertificateRequestNamespace("ns1"),
Expand All @@ -246,7 +252,7 @@ func TestCertificateRequestReconcile(t *testing.T) {
},
"issuer-not-found": {
name: types.NamespacedName{Namespace: "ns1", Name: "cr1"},
objects: []client.Object{
crObjects: []client.Object{
cmgen.CertificateRequest(
"cr1",
cmgen.SetCertificateRequestNamespace("ns1"),
Expand All @@ -271,7 +277,7 @@ func TestCertificateRequestReconcile(t *testing.T) {
},
"clusterissuer-not-found": {
name: types.NamespacedName{Namespace: "ns1", Name: "cr1"},
objects: []client.Object{
crObjects: []client.Object{
cmgen.CertificateRequest(
"cr1",
cmgen.SetCertificateRequestNamespace("ns1"),
Expand All @@ -296,7 +302,7 @@ func TestCertificateRequestReconcile(t *testing.T) {
},
"issuer-not-ready": {
name: types.NamespacedName{Namespace: "ns1", Name: "cr1"},
objects: []client.Object{
crObjects: []client.Object{
cmgen.CertificateRequest(
"cr1",
cmgen.SetCertificateRequestNamespace("ns1"),
Expand All @@ -314,6 +320,8 @@ func TestCertificateRequestReconcile(t *testing.T) {
Status: cmmeta.ConditionUnknown,
}),
),
},
issuerObjects: []client.Object{
&sampleissuerapi.Issuer{
ObjectMeta: metav1.ObjectMeta{
Name: "issuer1",
Expand All @@ -335,7 +343,7 @@ func TestCertificateRequestReconcile(t *testing.T) {
},
"issuer-secret-not-found": {
name: types.NamespacedName{Namespace: "ns1", Name: "cr1"},
objects: []client.Object{
crObjects: []client.Object{
cmgen.CertificateRequest(
"cr1",
cmgen.SetCertificateRequestNamespace("ns1"),
Expand All @@ -353,6 +361,8 @@ func TestCertificateRequestReconcile(t *testing.T) {
Status: cmmeta.ConditionUnknown,
}),
),
},
issuerObjects: []client.Object{
&sampleissuerapi.Issuer{
ObjectMeta: metav1.ObjectMeta{
Name: "issuer1",
Expand All @@ -377,7 +387,7 @@ func TestCertificateRequestReconcile(t *testing.T) {
},
"signer-builder-error": {
name: types.NamespacedName{Namespace: "ns1", Name: "cr1"},
objects: []client.Object{
crObjects: []client.Object{
cmgen.CertificateRequest(
"cr1",
cmgen.SetCertificateRequestNamespace("ns1"),
Expand All @@ -395,6 +405,16 @@ func TestCertificateRequestReconcile(t *testing.T) {
Status: cmmeta.ConditionUnknown,
}),
),
},
secretObjects: []client.Object{
&corev1.Secret{
ObjectMeta: metav1.ObjectMeta{
Name: "issuer1-credentials",
Namespace: "ns1",
},
},
},
issuerObjects: []client.Object{
&sampleissuerapi.Issuer{
ObjectMeta: metav1.ObjectMeta{
Name: "issuer1",
Expand All @@ -412,12 +432,6 @@ func TestCertificateRequestReconcile(t *testing.T) {
},
},
},
&corev1.Secret{
ObjectMeta: metav1.ObjectMeta{
Name: "issuer1-credentials",
Namespace: "ns1",
},
},
},
signerBuilder: func(*sampleissuerapi.IssuerSpec, map[string][]byte) (signer.Signer, error) {
return nil, errors.New("simulated signer builder error")
Expand All @@ -428,7 +442,7 @@ func TestCertificateRequestReconcile(t *testing.T) {
},
"signer-error": {
name: types.NamespacedName{Namespace: "ns1", Name: "cr1"},
objects: []client.Object{
crObjects: []client.Object{
cmgen.CertificateRequest(
"cr1",
cmgen.SetCertificateRequestNamespace("ns1"),
Expand All @@ -446,6 +460,16 @@ func TestCertificateRequestReconcile(t *testing.T) {
Status: cmmeta.ConditionUnknown,
}),
),
},
secretObjects: []client.Object{
&corev1.Secret{
ObjectMeta: metav1.ObjectMeta{
Name: "issuer1-credentials",
Namespace: "ns1",
},
},
},
issuerObjects: []client.Object{
&sampleissuerapi.Issuer{
ObjectMeta: metav1.ObjectMeta{
Name: "issuer1",
Expand All @@ -463,12 +487,6 @@ func TestCertificateRequestReconcile(t *testing.T) {
},
},
},
&corev1.Secret{
ObjectMeta: metav1.ObjectMeta{
Name: "issuer1-credentials",
Namespace: "ns1",
},
},
},
signerBuilder: func(*sampleissuerapi.IssuerSpec, map[string][]byte) (signer.Signer, error) {
return &fakeSigner{errSign: errors.New("simulated sign error")}, nil
Expand All @@ -479,7 +497,7 @@ func TestCertificateRequestReconcile(t *testing.T) {
},
"request-not-approved": {
name: types.NamespacedName{Namespace: "ns1", Name: "cr1"},
objects: []client.Object{
crObjects: []client.Object{
cmgen.CertificateRequest(
"cr1",
cmgen.SetCertificateRequestNamespace("ns1"),
Expand All @@ -493,6 +511,16 @@ func TestCertificateRequestReconcile(t *testing.T) {
Status: cmmeta.ConditionUnknown,
}),
),
},
secretObjects: []client.Object{
&corev1.Secret{
ObjectMeta: metav1.ObjectMeta{
Name: "issuer1-credentials",
Namespace: "ns1",
},
},
},
issuerObjects: []client.Object{
&sampleissuerapi.Issuer{
ObjectMeta: metav1.ObjectMeta{
Name: "issuer1",
Expand All @@ -510,12 +538,6 @@ func TestCertificateRequestReconcile(t *testing.T) {
},
},
},
&corev1.Secret{
ObjectMeta: metav1.ObjectMeta{
Name: "issuer1-credentials",
Namespace: "ns1",
},
},
},
signerBuilder: func(*sampleissuerapi.IssuerSpec, map[string][]byte) (signer.Signer, error) {
return &fakeSigner{}, nil
Expand All @@ -525,7 +547,7 @@ func TestCertificateRequestReconcile(t *testing.T) {
},
"request-denied": {
name: types.NamespacedName{Namespace: "ns1", Name: "cr1"},
objects: []client.Object{
crObjects: []client.Object{
cmgen.CertificateRequest(
"cr1",
cmgen.SetCertificateRequestNamespace("ns1"),
Expand All @@ -543,6 +565,8 @@ func TestCertificateRequestReconcile(t *testing.T) {
Status: cmmeta.ConditionUnknown,
}),
),
},
issuerObjects: []client.Object{
&sampleissuerapi.Issuer{
ObjectMeta: metav1.ObjectMeta{
Name: "issuer1",
Expand All @@ -560,6 +584,8 @@ func TestCertificateRequestReconcile(t *testing.T) {
},
},
},
},
secretObjects: []client.Object{
&corev1.Secret{
ObjectMeta: metav1.ObjectMeta{
Name: "issuer1-credentials",
Expand All @@ -586,7 +612,11 @@ func TestCertificateRequestReconcile(t *testing.T) {
t.Run(name, func(t *testing.T) {
fakeClient := fake.NewClientBuilder().
WithScheme(scheme).
WithObjects(tc.objects...).
WithObjects(tc.secretObjects...).
WithObjects(tc.crObjects...).
WithObjects(tc.issuerObjects...).
WithStatusSubresource(tc.issuerObjects...).
WithStatusSubresource(tc.crObjects...).
Build()
controller := CertificateRequestReconciler{
Client: fakeClient,
Expand Down
Loading

0 comments on commit 353b25c

Please sign in to comment.