Skip to content

Commit b67106a

Browse files
authored
Merge pull request red-hat-storage#1306 from priyanka19-98/fix-unit-tests
Fixed usage of global mock variables in unit-tests
2 parents 943ddc4 + c03f6da commit b67106a

7 files changed

+50
-108
lines changed

CONTRIBUTING.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ make unit-test
119119

120120
*It is of special note that many of the mock objects in the [StorageCluster
121121
tests](./pkg/controller/storagecluster/storagecluster_controller_test.go) are
122-
reused in many other test cases. They may be useful in developing your own.*
122+
reused in many other test cases. Please avoid using the global mock variables directly, instead use the mock variables by creating DeepCopy() to prevent modification of global mock variables. They may be useful in developing your own.*
123123

124124
### Certificate of Origin
125125

controllers/storagecluster/cephcluster_test.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,7 @@ func TestEnsureCephCluster(t *testing.T) {
7272

7373
reconciler := createFakeStorageClusterReconciler(t)
7474

75-
expected := newCephCluster(mockStorageCluster, "", 3, reconciler.serverVersion, nil, log)
75+
expected := newCephCluster(mockStorageCluster.DeepCopy(), "", 3, reconciler.serverVersion, nil, log)
7676
expected.ObjectMeta.SelfLink = "/api/v1/namespaces/ceph/secrets/pvc-ceph-client-key"
7777
expected.Status.State = c.cephClusterState
7878

@@ -158,7 +158,7 @@ func TestCephClusterMonTimeout(t *testing.T) {
158158
mockStorageCluster.DeepCopyInto(sc)
159159
sc.Status.Images.Ceph = &api.ComponentImageStatus{}
160160

161-
reconciler := createFakeStorageClusterReconciler(t, mockCephCluster)
161+
reconciler := createFakeStorageClusterReconciler(t, mockCephCluster.DeepCopy())
162162

163163
reconciler.platform = &Platform{
164164
platform: c.platform,

controllers/storagecluster/initialization_reconciler_test.go

+2-57
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,14 @@ import (
55
"os"
66
"testing"
77

8-
snapapi "github.com/kubernetes-csi/external-snapshotter/client/v4/apis/volumesnapshot/v1"
98
nbv1 "github.com/noobaa/noobaa-operator/v2/pkg/apis/noobaa/v1alpha1"
109
configv1 "github.com/openshift/api/config/v1"
1110
routev1 "github.com/openshift/api/route/v1"
12-
openshiftv1 "github.com/openshift/api/template/v1"
1311
api "github.com/openshift/ocs-operator/api/v1"
14-
monitoringv1 "github.com/prometheus-operator/prometheus-operator/pkg/apis/monitoring/v1"
1512
cephv1 "github.com/rook/rook/pkg/apis/ceph.rook.io/v1"
1613
"github.com/stretchr/testify/assert"
1714
appsv1 "k8s.io/api/apps/v1"
18-
batchv1 "k8s.io/api/batch/v1"
19-
corev1 "k8s.io/api/core/v1"
2015
storagev1 "k8s.io/api/storage/v1"
21-
extv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
2216
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
2317
"k8s.io/apimachinery/pkg/runtime"
2418
"k8s.io/apimachinery/pkg/types"
@@ -163,8 +157,8 @@ func createFakeInitializationStorageClusterReconciler(t *testing.T, obj ...runti
163157
func createFakeInitializationStorageClusterReconcilerWithPlatform(t *testing.T,
164158
platform *Platform,
165159
obj ...runtime.Object) StorageClusterReconciler {
166-
scheme := createFakeInitializationScheme(t, obj...)
167-
obj = append(obj, mockNodeList)
160+
scheme := createFakeScheme(t)
161+
obj = append(obj, mockNodeList.DeepCopy())
168162
client := fake.NewClientBuilder().WithScheme(scheme).WithRuntimeObjects(obj...).Build()
169163
if platform == nil {
170164
platform = &Platform{platform: configv1.NonePlatformType}
@@ -178,52 +172,3 @@ func createFakeInitializationStorageClusterReconcilerWithPlatform(t *testing.T,
178172
platform: platform,
179173
}
180174
}
181-
182-
func createFakeInitializationScheme(t *testing.T, obj ...runtime.Object) *runtime.Scheme {
183-
registerObjs := obj
184-
registerObjs = append(registerObjs) //nolint:staticcheck
185-
api.SchemeBuilder.Register(registerObjs...)
186-
scheme, err := api.SchemeBuilder.Build()
187-
if err != nil {
188-
assert.Fail(t, "unable to build scheme")
189-
}
190-
err = corev1.AddToScheme(scheme)
191-
if err != nil {
192-
assert.Fail(t, "failed to add corev1 scheme")
193-
}
194-
err = cephv1.AddToScheme(scheme)
195-
if err != nil {
196-
assert.Fail(t, "failed to add cephv1 scheme")
197-
}
198-
err = storagev1.AddToScheme(scheme)
199-
if err != nil {
200-
assert.Fail(t, "failed to add storagev1 scheme")
201-
}
202-
err = openshiftv1.AddToScheme(scheme)
203-
if err != nil {
204-
assert.Fail(t, "failed to add openshiftv1 scheme")
205-
}
206-
err = snapapi.AddToScheme(scheme)
207-
if err != nil {
208-
assert.Fail(t, "failed to add volume-snapshot scheme")
209-
}
210-
err = monitoringv1.AddToScheme(scheme)
211-
if err != nil {
212-
assert.Fail(t, "failed to add monitoringv1 scheme")
213-
}
214-
err = extv1.AddToScheme(scheme)
215-
if err != nil {
216-
assert.Fail(t, "failed to add extv1 scheme")
217-
}
218-
err = routev1.AddToScheme(scheme)
219-
if err != nil {
220-
assert.Fail(t, "failed to add routev1 scheme")
221-
}
222-
223-
err = batchv1.AddToScheme(scheme)
224-
if err != nil {
225-
assert.Fail(t, "failed to add batchv1 scheme")
226-
}
227-
228-
return scheme
229-
}

controllers/storagecluster/noobaa_system_reconciler_test.go

+6-20
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import (
88

99
"github.com/noobaa/noobaa-operator/v2/pkg/apis/noobaa/v1alpha1"
1010
nbv1 "github.com/noobaa/noobaa-operator/v2/pkg/apis/noobaa/v1alpha1"
11-
openshiftv1 "github.com/openshift/api/template/v1"
1211
v1 "github.com/openshift/ocs-operator/api/v1"
1312
cephv1 "github.com/rook/rook/pkg/apis/ceph.rook.io/v1"
1413
"github.com/stretchr/testify/assert"
@@ -76,20 +75,20 @@ func TestEnsureNooBaaSystem(t *testing.T) {
7675
{
7776
label: "case 1", //ensure create logic
7877
namespacedName: namespacedName,
79-
sc: sc,
80-
noobaa: noobaa,
78+
sc: *sc.DeepCopy(),
79+
noobaa: *noobaa.DeepCopy(),
8180
isCreate: true,
8281
},
8382
{
8483
label: "case 2", //ensure update logic
8584
namespacedName: namespacedName,
86-
sc: sc,
87-
noobaa: noobaa,
85+
sc: *sc.DeepCopy(),
86+
noobaa: *noobaa.DeepCopy(),
8887
},
8988
{
9089
label: "case 3", //equal, no update
9190
namespacedName: namespacedName,
92-
sc: sc,
91+
sc: *sc.DeepCopy(),
9392
noobaa: v1alpha1.NooBaa{
9493
ObjectMeta: metav1.ObjectMeta{
9594
Name: namespacedName.Name,
@@ -399,20 +398,7 @@ func assertNoobaaResource(t *testing.T, reconciler StorageClusterReconciler) {
399398
func getReconciler(t *testing.T, objs ...runtime.Object) StorageClusterReconciler {
400399
registerObjs := []runtime.Object{&v1.StorageCluster{}}
401400
registerObjs = append(registerObjs, objs...)
402-
v1.SchemeBuilder.Register(registerObjs...)
403-
404-
scheme, err := v1.SchemeBuilder.Build()
405-
if err != nil {
406-
assert.Fail(t, "unable to build scheme")
407-
}
408-
err = cephv1.AddToScheme(scheme)
409-
if err != nil {
410-
assert.Fail(t, "failed to add rookCephv1 scheme")
411-
}
412-
err = openshiftv1.AddToScheme(scheme)
413-
if err != nil {
414-
assert.Fail(t, "failed to add openshiftv1 scheme")
415-
}
401+
scheme := createFakeScheme(t)
416402
client := fake.NewClientBuilder().WithScheme(scheme).WithRuntimeObjects(registerObjs...).Build()
417403

418404
return StorageClusterReconciler{

controllers/storagecluster/placement_test.go

+10-10
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ func TestGetPlacement(t *testing.T) {
116116
}{
117117
{
118118
label: "Case 1: Defaults are preserved i.e no placement and no label selector",
119-
storageCluster: mockStorageCluster,
119+
storageCluster: mockStorageCluster.DeepCopy(),
120120
placements: rookCephv1.PlacementSpec{},
121121
labelSelector: nil,
122122
expectedPlacements: rookCephv1.PlacementSpec{
@@ -132,7 +132,7 @@ func TestGetPlacement(t *testing.T) {
132132
},
133133
{
134134
label: "Case 2: The configured Placements override the defaults",
135-
storageCluster: mockStorageCluster,
135+
storageCluster: mockStorageCluster.DeepCopy(),
136136
placements: emptyPlacements,
137137
labelSelector: nil,
138138
expectedPlacements: rookCephv1.PlacementSpec{
@@ -147,7 +147,7 @@ func TestGetPlacement(t *testing.T) {
147147
},
148148
{
149149
label: "Case 3: LabelSelector to modify the default Placements correctly",
150-
storageCluster: mockStorageCluster,
150+
storageCluster: mockStorageCluster.DeepCopy(),
151151
placements: rookCephv1.PlacementSpec{},
152152
labelSelector: &workerLabelSelector,
153153
expectedPlacements: rookCephv1.PlacementSpec{
@@ -163,7 +163,7 @@ func TestGetPlacement(t *testing.T) {
163163
},
164164
{
165165
label: "Case 4: LabelSelector modifies an empty NodeAffinity",
166-
storageCluster: mockStorageCluster,
166+
storageCluster: mockStorageCluster.DeepCopy(),
167167
placements: emptyPlacements,
168168
labelSelector: &workerLabelSelector,
169169
expectedPlacements: rookCephv1.PlacementSpec{
@@ -178,7 +178,7 @@ func TestGetPlacement(t *testing.T) {
178178
},
179179
{
180180
label: "Case 5: LabelSelector modifies a configured NodeAffinity",
181-
storageCluster: mockStorageCluster,
181+
storageCluster: mockStorageCluster.DeepCopy(),
182182
placements: workerPlacements,
183183
labelSelector: &masterLabelSelector,
184184
expectedPlacements: rookCephv1.PlacementSpec{
@@ -220,7 +220,7 @@ func TestGetPlacement(t *testing.T) {
220220
},
221221
{
222222
label: "Case 6: Empty LabelSelector sets no NodeAffinity",
223-
storageCluster: mockStorageCluster,
223+
storageCluster: mockStorageCluster.DeepCopy(),
224224
placements: rookCephv1.PlacementSpec{},
225225
labelSelector: &emptyLabelSelector,
226226
expectedPlacements: rookCephv1.PlacementSpec{
@@ -234,7 +234,7 @@ func TestGetPlacement(t *testing.T) {
234234
},
235235
{
236236
label: "Case 7: Custom placement is applied without failure",
237-
storageCluster: mockStorageCluster,
237+
storageCluster: mockStorageCluster.DeepCopy(),
238238
placements: rookCephv1.PlacementSpec{
239239
"mon": customPlacement,
240240
},
@@ -251,7 +251,7 @@ func TestGetPlacement(t *testing.T) {
251251
},
252252
{
253253
label: "Case 8: Custom placement is modified by labelSelector",
254-
storageCluster: mockStorageCluster,
254+
storageCluster: mockStorageCluster.DeepCopy(),
255255
placements: rookCephv1.PlacementSpec{
256256
"mon": customPlacement,
257257
},
@@ -269,7 +269,7 @@ func TestGetPlacement(t *testing.T) {
269269
},
270270
{
271271
label: "Case 9: NodeTopologyMap modifies default mon placement",
272-
storageCluster: mockStorageCluster,
272+
storageCluster: mockStorageCluster.DeepCopy(),
273273
placements: rookCephv1.PlacementSpec{},
274274
expectedPlacements: rookCephv1.PlacementSpec{
275275
"all": {
@@ -308,7 +308,7 @@ func TestGetPlacement(t *testing.T) {
308308
},
309309
{
310310
label: "Case 10: skip podAntiAffinity in mon placement in case of stretched cluster",
311-
storageCluster: mockStorageClusterWithArbiter,
311+
storageCluster: mockStorageClusterWithArbiter.DeepCopy(),
312312
placements: rookCephv1.PlacementSpec{},
313313
labelSelector: nil,
314314
expectedPlacements: rookCephv1.PlacementSpec{

0 commit comments

Comments
 (0)