Skip to content

Commit 5e799c5

Browse files
committed
DRY up resource mock production in recon test
There was a lot of repetitive code in the pkg/runtime/reconciler_test.go unit test file around construction of the CR mocks and the k8s apimachinery meta object and k8s runtime object mocks. This patch adds a utility function `resourceMocks` that returns a tuple of the resource mock, the k8s runtime object mock, and the meta object associated with that k8s runtime object/resource. This allows unit tests to reduce the amount of boilerplate code substantially and focus on the specific differences to those mocks that impact the code behaviour under test.
1 parent 21bb874 commit 5e799c5

File tree

1 file changed

+38
-104
lines changed

1 file changed

+38
-104
lines changed

pkg/runtime/reconciler_test.go

Lines changed: 38 additions & 104 deletions
Original file line numberDiff line numberDiff line change
@@ -38,15 +38,11 @@ import (
3838
ackmocks "github.com/aws-controllers-k8s/runtime/mocks/pkg/types"
3939
)
4040

41-
func TestReconcilerUpdate(t *testing.T) {
42-
require := require.New(t)
43-
44-
ctx := context.TODO()
45-
arn := ackv1alpha1.AWSResourceName("mybook-arn")
46-
47-
delta := ackcompare.NewDelta()
48-
delta.Add("Spec.A", "val1", "val2")
49-
41+
func resourceMocks() (
42+
*ackmocks.AWSResource, // mocked resource
43+
*k8srtmocks.Object, // mocked k8s controller-runtime RuntimeObject
44+
*k8sobj.Unstructured, // NON-mocked k8s apimachinery meta object
45+
) {
5046
objKind := &k8srtschemamocks.ObjectKind{}
5147
objKind.On("GroupVersionKind").Return(
5248
k8srtschema.GroupVersionKind{
@@ -56,38 +52,40 @@ func TestReconcilerUpdate(t *testing.T) {
5652
},
5753
)
5854

59-
desiredRTObj := &k8srtmocks.Object{}
60-
desiredRTObj.On("GetObjectKind").Return(objKind)
61-
desiredRTObj.On("DeepCopyObject").Return(desiredRTObj)
55+
rtObj := &k8srtmocks.Object{}
56+
rtObj.On("GetObjectKind").Return(objKind)
57+
rtObj.On("DeepCopyObject").Return(rtObj)
6258

63-
desiredMetaObj := &k8sobj.Unstructured{}
64-
desiredMetaObj.SetAnnotations(map[string]string{})
65-
desiredMetaObj.SetNamespace("default")
66-
desiredMetaObj.SetName("mybook")
67-
desiredMetaObj.SetGeneration(int64(1))
59+
metaObj := &k8sobj.Unstructured{}
60+
metaObj.SetAnnotations(map[string]string{})
61+
metaObj.SetNamespace("default")
62+
metaObj.SetName("mybook")
63+
metaObj.SetGeneration(int64(1))
6864

69-
desired := &ackmocks.AWSResource{}
70-
desired.On("MetaObject").Return(desiredMetaObj)
71-
desired.On("RuntimeObject").Return(desiredRTObj)
65+
res := &ackmocks.AWSResource{}
66+
res.On("MetaObject").Return(metaObj)
67+
res.On("RuntimeObject").Return(rtObj)
7268

73-
ids := &ackmocks.AWSResourceIdentifiers{}
74-
ids.On("ARN").Return(&arn)
69+
return res, rtObj, metaObj
70+
}
71+
72+
func TestReconcilerUpdate(t *testing.T) {
73+
require := require.New(t)
7574

76-
latestRTObj := &k8srtmocks.Object{}
77-
latestRTObj.On("GetObjectKind").Return(objKind)
78-
latestRTObj.On("DeepCopyObject").Return(latestRTObj)
75+
ctx := context.TODO()
76+
arn := ackv1alpha1.AWSResourceName("mybook-arn")
77+
78+
delta := ackcompare.NewDelta()
79+
delta.Add("Spec.A", "val1", "val2")
7980

80-
latestMetaObj := &k8sobj.Unstructured{}
81-
latestMetaObj.SetAnnotations(map[string]string{})
82-
latestMetaObj.SetNamespace("default")
83-
latestMetaObj.SetName("mybook")
84-
latestMetaObj.SetGeneration(int64(1))
81+
desired, desiredRTObj, _ := resourceMocks()
8582

86-
latest := &ackmocks.AWSResource{}
83+
ids := &ackmocks.AWSResourceIdentifiers{}
84+
ids.On("ARN").Return(&arn)
85+
86+
latest, latestRTObj, _ := resourceMocks()
8787
latest.On("Identifiers").Return(ids)
8888
latest.On("Conditions").Return([]*ackv1alpha1.Condition{})
89-
latest.On("MetaObject").Return(latestMetaObj)
90-
latest.On("RuntimeObject").Return(latestRTObj)
9189

9290
rd := &ackmocks.AWSResourceDescriptor{}
9391
rd.On("GroupKind").Return(
@@ -163,48 +161,17 @@ func TestReconcilerUpdate_PatchMetadataAndSpec_DiffInMetadata(t *testing.T) {
163161
delta := ackcompare.NewDelta()
164162
delta.Add("Spec.A", "val1", "val2")
165163

166-
objKind := &k8srtschemamocks.ObjectKind{}
167-
objKind.On("GroupVersionKind").Return(
168-
k8srtschema.GroupVersionKind{
169-
Group: "bookstore.services.k8s.aws",
170-
Kind: "Book",
171-
Version: "v1alpha1",
172-
},
173-
)
174-
175-
desiredRTObj := &k8srtmocks.Object{}
176-
desiredRTObj.On("GetObjectKind").Return(objKind)
177-
desiredRTObj.On("DeepCopyObject").Return(desiredRTObj)
178-
179-
desiredMetaObj := &k8sobj.Unstructured{}
180-
desiredMetaObj.SetAnnotations(map[string]string{})
181-
desiredMetaObj.SetNamespace("default")
182-
desiredMetaObj.SetName("mybook")
183-
desiredMetaObj.SetGeneration(int64(1))
184-
185-
desired := &ackmocks.AWSResource{}
186-
desired.On("MetaObject").Return(desiredMetaObj)
187-
desired.On("RuntimeObject").Return(desiredRTObj)
164+
desired, desiredRTObj, _ := resourceMocks()
188165

189166
ids := &ackmocks.AWSResourceIdentifiers{}
190167
ids.On("ARN").Return(&arn)
191168

192-
latestRTObj := &k8srtmocks.Object{}
193-
latestRTObj.On("GetObjectKind").Return(objKind)
194-
latestRTObj.On("DeepCopyObject").Return(latestRTObj)
169+
latest, latestRTObj, latestMetaObj := resourceMocks()
170+
latest.On("Identifiers").Return(ids)
171+
latest.On("Conditions").Return([]*ackv1alpha1.Condition{})
195172

196-
latestMetaObj := &k8sobj.Unstructured{}
197173
// Note the change in annotaions
198174
latestMetaObj.SetAnnotations(map[string]string{"a": "b"})
199-
latestMetaObj.SetNamespace("default")
200-
latestMetaObj.SetName("mybook")
201-
latestMetaObj.SetGeneration(int64(1))
202-
203-
latest := &ackmocks.AWSResource{}
204-
latest.On("Identifiers").Return(ids)
205-
latest.On("Conditions").Return([]*ackv1alpha1.Condition{})
206-
latest.On("MetaObject").Return(latestMetaObj)
207-
latest.On("RuntimeObject").Return(latestRTObj)
208175

209176
rd := &ackmocks.AWSResourceDescriptor{}
210177
rd.On("GroupKind").Return(
@@ -280,48 +247,15 @@ func TestReconcilerUpdate_PatchMetadataAndSpec_DiffInSpec(t *testing.T) {
280247
delta := ackcompare.NewDelta()
281248
delta.Add("Spec.A", "val1", "val2")
282249

283-
objKind := &k8srtschemamocks.ObjectKind{}
284-
objKind.On("GroupVersionKind").Return(
285-
k8srtschema.GroupVersionKind{
286-
Group: "bookstore.services.k8s.aws",
287-
Kind: "Book",
288-
Version: "v1alpha1",
289-
},
290-
)
291-
292-
desiredRTObj := &k8srtmocks.Object{}
293-
desiredRTObj.On("GetObjectKind").Return(objKind)
294-
desiredRTObj.On("DeepCopyObject").Return(desiredRTObj)
295-
296-
desiredMetaObj := &k8sobj.Unstructured{}
297-
desiredMetaObj.SetAnnotations(map[string]string{})
298-
desiredMetaObj.SetNamespace("default")
299-
desiredMetaObj.SetName("mybook")
300-
desiredMetaObj.SetGeneration(int64(1))
301-
302-
desired := &ackmocks.AWSResource{}
303-
desired.On("MetaObject").Return(desiredMetaObj)
304-
desired.On("RuntimeObject").Return(desiredRTObj)
250+
desired, desiredRTObj, _ := resourceMocks()
305251

306252
ids := &ackmocks.AWSResourceIdentifiers{}
307253
ids.On("ARN").Return(&arn)
308254

309-
latestRTObj := &k8srtmocks.Object{}
310-
latestRTObj.On("GetObjectKind").Return(objKind)
311-
latestRTObj.On("DeepCopyObject").Return(latestRTObj)
312-
313-
latestMetaObj := &k8sobj.Unstructured{}
314-
// Note Similar metadata
315-
latestMetaObj.SetAnnotations(map[string]string{})
316-
latestMetaObj.SetNamespace("default")
317-
latestMetaObj.SetName("mybook")
318-
latestMetaObj.SetGeneration(int64(1))
319-
320-
latest := &ackmocks.AWSResource{}
255+
latest, latestRTObj, _ := resourceMocks()
321256
latest.On("Identifiers").Return(ids)
322257
latest.On("Conditions").Return([]*ackv1alpha1.Condition{})
323-
latest.On("MetaObject").Return(latestMetaObj)
324-
latest.On("RuntimeObject").Return(latestRTObj)
258+
// Note no change to metadata...
325259

326260
rd := &ackmocks.AWSResourceDescriptor{}
327261
rd.On("GroupKind").Return(

0 commit comments

Comments
 (0)