Skip to content

Commit 918f5c4

Browse files
author
ak017151
committed
fix flaky unit tests
1 parent ab34f35 commit 918f5c4

13 files changed

+71
-43
lines changed

pkg/common/cns-lib/volume/listview.go

+5-2
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,8 @@ var ErrListViewTaskAddition = errors.New("failure to add task to listview")
7272
var ErrSessionNotAuthenticated = errors.New("session is not authenticated")
7373

7474
// NewListViewImpl creates a new listView object and starts a goroutine to listen to property collector task updates
75-
func NewListViewImpl(ctx context.Context, virtualCenter *cnsvsphere.VirtualCenter) (*ListViewImpl, error) {
75+
func NewListViewImpl(ctx context.Context, virtualCenter *cnsvsphere.VirtualCenter, isUnitTestRun bool) (*ListViewImpl,
76+
error) {
7677
log := logger.GetLogger(ctx)
7778
t := &ListViewImpl{
7879
taskMap: NewTaskMap(),
@@ -84,7 +85,9 @@ func NewListViewImpl(ctx context.Context, virtualCenter *cnsvsphere.VirtualCente
8485
return nil, logger.LogNewErrorf(log, "failed to create a ListView. error: %+v", err)
8586
}
8687
go t.listenToTaskUpdates()
87-
go t.restartContainer()
88+
if !isUnitTestRun {
89+
go t.restartContainer()
90+
}
8891
return t, nil
8992
}
9093

pkg/common/cns-lib/volume/manager.go

+6-7
Original file line numberDiff line numberDiff line change
@@ -239,9 +239,8 @@ type createVolumeTaskDetails struct {
239239
// GetManager returns the Manager instance.
240240
func GetManager(ctx context.Context, vc *cnsvsphere.VirtualCenter,
241241
operationStore cnsvolumeoperationrequest.VolumeOperationRequest,
242-
idempotencyHandlingEnabled, multivCenterEnabled,
243-
multivCenterTopologyDeployment bool,
244-
clusterFlavor cnstypes.CnsClusterFlavor) (Manager, error) {
242+
idempotencyHandlingEnabled, multivCenterEnabled, multivCenterTopologyDeployment bool,
243+
clusterFlavor cnstypes.CnsClusterFlavor, isUnitTestRun bool) (Manager, error) {
245244
log := logger.GetLogger(ctx)
246245
managerInstanceLock.Lock()
247246
defer managerInstanceLock.Unlock()
@@ -273,7 +272,7 @@ func GetManager(ctx context.Context, vc *cnsvsphere.VirtualCenter,
273272
}
274273
managerInstanceMap[vc.Config.Host] = managerInstance
275274
}
276-
err := managerInstance.initListView(ctx)
275+
err := managerInstance.initListView(ctx, isUnitTestRun)
277276
if err != nil {
278277
return nil, err
279278
}
@@ -675,7 +674,7 @@ func (m *defaultManager) waitOnTask(csiOpContext context.Context,
675674
taskMoRef vim25types.ManagedObjectReference) (*vim25types.TaskInfo, error) {
676675
log := logger.GetLogger(csiOpContext)
677676
if m.listViewIf == nil {
678-
err := m.initListView(context.Background())
677+
err := m.initListView(context.Background(), false)
679678
if err != nil {
680679
return nil, err
681680
}
@@ -723,10 +722,10 @@ func waitForResultOrTimeout(csiOpContext context.Context, taskMoRef vim25types.M
723722
return taskInfo, err
724723
}
725724

726-
func (m *defaultManager) initListView(ctx context.Context) error {
725+
func (m *defaultManager) initListView(ctx context.Context, isUnitTestRun bool) error {
727726
log := logger.GetLogger(ctx)
728727
var err error
729-
m.listViewIf, err = NewListViewImpl(ctx, m.virtualCenter)
728+
m.listViewIf, err = NewListViewImpl(ctx, m.virtualCenter, isUnitTestRun)
730729
if err != nil {
731730
return logger.LogNewErrorf(log, "failed to initialize listView object. err: %v", err)
732731
}

pkg/common/utils/utils_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ func getCommonUtilsTest(t *testing.T) *commonUtilsTest {
131131
t.Fatal(err)
132132
}
133133

134-
volumeManager, err := cnsvolumes.GetManager(ctx, virtualCenter, nil, false, false, false, "")
134+
volumeManager, err := cnsvolumes.GetManager(ctx, virtualCenter, nil, false, false, false, "", true)
135135
if err != nil {
136136
t.Fatalf("failed to create an instance of volume manager. err=%v", err)
137137
}

pkg/csi/service/vanilla/controller.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -153,9 +153,9 @@ func (c *controller) Init(config *cnsconfig.Config, version string) error {
153153
return err
154154
}
155155
vc.Config = vcenterconfig
156-
volumeManager, err := cnsvolume.GetManager(ctx, vc, operationStore,
157-
true, false,
158-
false, cnstypes.CnsClusterFlavorVanilla)
156+
volumeManager, err := cnsvolume.GetManager(ctx, vc, operationStore, true,
157+
false, false,
158+
cnstypes.CnsClusterFlavorVanilla, false)
159159
if err != nil {
160160
return logger.LogNewErrorf(log, "failed to create an instance of volume manager. err=%v", err)
161161
}
@@ -218,9 +218,9 @@ func (c *controller) Init(config *cnsconfig.Config, version string) error {
218218
"err=%v", vcenterconfig.Host, err)
219219
}
220220
c.managers.VcenterConfigs[vcenterconfig.Host] = vcenterconfig
221-
volumeManager, err := cnsvolume.GetManager(ctx, vcenter,
222-
operationStore, true, true,
223-
multivCenterTopologyDeployment, cnstypes.CnsClusterFlavorVanilla)
221+
volumeManager, err := cnsvolume.GetManager(ctx, vcenter, operationStore,
222+
true, true, multivCenterTopologyDeployment,
223+
cnstypes.CnsClusterFlavorVanilla, false)
224224
if err != nil {
225225
return logger.LogNewErrorf(log, "failed to create an instance of volume manager. err=%v", err)
226226
}

pkg/csi/service/vanilla/controller_test.go

+14-3
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import (
2525
"strings"
2626
"sync"
2727
"testing"
28+
"time"
2829

2930
"github.com/google/uuid"
3031
"github.com/vmware/govmomi/cns"
@@ -33,6 +34,7 @@ import (
3334
"github.com/vmware/govmomi/pbm/types"
3435
"google.golang.org/grpc/codes"
3536
"google.golang.org/grpc/status"
37+
"k8s.io/apimachinery/pkg/util/wait"
3638

3739
"github.com/container-storage-interface/spec/lib/go/csi"
3840
"github.com/vmware/govmomi/simulator"
@@ -216,13 +218,22 @@ func getControllerTest(t *testing.T) *controllerTest {
216218
t.Fatal(err)
217219
}
218220

219-
volumeManager, err := cnsvolume.GetManager(ctx, vcenter,
220-
fakeOpStore, true, false,
221-
false, cnstypes.CnsClusterFlavorVanilla)
221+
volumeManager, err := cnsvolume.GetManager(ctx, vcenter, fakeOpStore,
222+
true, false, false,
223+
cnstypes.CnsClusterFlavorVanilla, true)
222224
if err != nil {
223225
t.Fatalf("failed to create an instance of volume manager. err=%v", err)
224226
}
225227

228+
// wait till property collector has been started
229+
err = wait.PollUntilContextTimeout(ctx, 1*time.Second, 10*time.Second, false,
230+
func(ctx context.Context) (done bool, err error) {
231+
return volumeManager.IsListViewReady(), nil
232+
})
233+
if err != nil {
234+
t.Fatalf("listview not ready. err=%v", err)
235+
}
236+
226237
manager := &common.Manager{
227238
VcenterConfig: vcenterconfig,
228239
CnsConfig: config,

pkg/csi/service/vanilla/controller_topology_test.go

+2-3
Original file line numberDiff line numberDiff line change
@@ -361,9 +361,8 @@ func getControllerTestWithTopology(t *testing.T) *controllerTestTopology {
361361
t.Fatal(err)
362362
}
363363

364-
volumeManager, err := cnsvolume.GetManager(ctxtopology, vcenter,
365-
fakeOpStore, true, false,
366-
false, cnstypes.CnsClusterFlavorVanilla)
364+
volumeManager, err := cnsvolume.GetManager(ctxtopology, vcenter, fakeOpStore, true, false, false,
365+
cnstypes.CnsClusterFlavorVanilla, true)
367366
if err != nil {
368367
t.Fatalf("failed to create an instance of volume manager. err=%v", err)
369368
}

pkg/csi/service/wcp/controller.go

+4-4
Original file line numberDiff line numberDiff line change
@@ -171,8 +171,8 @@ func (c *controller) Init(config *cnsconfig.Config, version string) error {
171171
}
172172

173173
volumeManager, err := cnsvolume.GetManager(ctx, vcenter, operationStore,
174-
idempotencyHandlingEnabled, false,
175-
false, cnstypes.CnsClusterFlavorWorkload)
174+
idempotencyHandlingEnabled, false, false,
175+
cnstypes.CnsClusterFlavorWorkload, false)
176176
if err != nil {
177177
return logger.LogNewErrorf(log, "failed to create an instance of volume manager. err=%v", err)
178178
}
@@ -397,8 +397,8 @@ func (c *controller) ReloadConfiguration(reconnectToVCFromNewConfig bool) error
397397
c.manager.VcenterConfig = newVCConfig
398398

399399
volumeManager, err := cnsvolume.GetManager(ctx, vcenter, operationStore,
400-
idempotencyHandlingEnabled, false,
401-
false, cnstypes.CnsClusterFlavorWorkload)
400+
idempotencyHandlingEnabled, false, false,
401+
cnstypes.CnsClusterFlavorWorkload, false)
402402
if err != nil {
403403
return logger.LogNewErrorf(log, "failed to create an instance of volume manager. err=%v", err)
404404
}

pkg/csi/service/wcp/controller_test.go

+15-3
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,11 @@ import (
2222
"strings"
2323
"sync"
2424
"testing"
25+
"time"
2526

2627
"google.golang.org/grpc/codes"
2728
"google.golang.org/grpc/status"
29+
"k8s.io/apimachinery/pkg/util/wait"
2830

2931
"github.com/container-storage-interface/spec/lib/go/csi"
3032
"github.com/google/uuid"
@@ -33,6 +35,7 @@ import (
3335
v1 "k8s.io/api/core/v1"
3436

3537
cnstypes "github.com/vmware/govmomi/cns/types"
38+
3639
cnsvolume "sigs.k8s.io/vsphere-csi-driver/v3/pkg/common/cns-lib/volume"
3740
cnsvsphere "sigs.k8s.io/vsphere-csi-driver/v3/pkg/common/cns-lib/vsphere"
3841
"sigs.k8s.io/vsphere-csi-driver/v3/pkg/common/config"
@@ -112,13 +115,22 @@ func getControllerTest(t *testing.T) *controllerTest {
112115
t.Fatalf("Failed to create co agnostic interface. err=%v", err)
113116
}
114117

115-
volumeManager, err := cnsvolume.GetManager(ctx, vcenter,
116-
fakeOpStore, true, false,
117-
false, cnstypes.CnsClusterFlavorWorkload)
118+
volumeManager, err := cnsvolume.GetManager(ctx, vcenter, fakeOpStore,
119+
true, false, false,
120+
cnstypes.CnsClusterFlavorWorkload, false)
118121
if err != nil {
119122
t.Fatalf("failed to create an instance of volume manager. err=%v", err)
120123
}
121124

125+
// wait till property collector has been started
126+
err = wait.PollUntilContextTimeout(ctx, 1*time.Second, 10*time.Second, false,
127+
func(ctx context.Context) (done bool, err error) {
128+
return volumeManager.IsListViewReady(), nil
129+
})
130+
if err != nil {
131+
t.Fatalf("listview not ready. err=%v", err)
132+
}
133+
122134
manager := &common.Manager{
123135
VcenterConfig: vcenterconfig,
124136
CnsConfig: config,

pkg/syncer/cnsoperator/manager/init.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ func InitCnsOperator(ctx context.Context, clusterFlavor cnstypes.CnsClusterFlavo
9494
}
9595
}
9696

97-
volumeManager, err = volumes.GetManager(ctx, vCenter, nil, false, false, false, clusterFlavor)
97+
volumeManager, err = volumes.GetManager(ctx, vCenter, nil, false, false, false, clusterFlavor, false)
9898
if err != nil {
9999
return logger.LogNewErrorf(log, "failed to create an instance of volume manager. err=%v", err)
100100
}

pkg/syncer/metadatasyncer.go

+14-10
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ import (
5050

5151
"github.com/go-logr/zapr"
5252
cr_log "sigs.k8s.io/controller-runtime/pkg/log"
53+
5354
cnsoperatorv1alpha1 "sigs.k8s.io/vsphere-csi-driver/v3/pkg/apis/cnsoperator"
5455
storagepolicyv1alpha2 "sigs.k8s.io/vsphere-csi-driver/v3/pkg/apis/cnsoperator/storagepolicy/v1alpha2"
5556
sqperiodicsyncv1alpha1 "sigs.k8s.io/vsphere-csi-driver/v3/pkg/apis/cnsoperator/storagequotaperiodicsync/v1alpha1"
@@ -98,7 +99,7 @@ var (
9899
// isMultiVCenterFssEnabled is true if the Multi VC support FSS is enabled, false otherwise.
99100
isMultiVCenterFssEnabled bool
100101

101-
//IsMigrationEnabled is true when in-tree to CSI Migration FSS is enabled for the driver, false otherwise.
102+
// IsMigrationEnabled is true when in-tree to CSI Migration FSS is enabled for the driver, false otherwise.
102103
IsMigrationEnabled bool
103104
// nodeMgr stores the manager to interact with nodeVMs.
104105
nodeMgr node.Manager
@@ -463,8 +464,9 @@ func InitMetadataSyncer(ctx context.Context, clusterFlavor cnstypes.CnsClusterFl
463464
volumeInfoCrDeletionMap[metadataSyncer.host] = make(map[string]bool)
464465
volumeOperationsLock[metadataSyncer.host] = &sync.Mutex{}
465466

466-
volumeManager, err := volumes.GetManager(ctx, vCenter,
467-
nil, false, false, false, metadataSyncer.clusterFlavor)
467+
volumeManager, err := volumes.GetManager(ctx, vCenter, nil,
468+
false, false,
469+
false, metadataSyncer.clusterFlavor, false)
468470
if err != nil {
469471
return logger.LogNewErrorf(log, "failed to create an instance of volume manager. err=%v", err)
470472
}
@@ -538,8 +540,9 @@ func InitMetadataSyncer(ctx context.Context, clusterFlavor cnstypes.CnsClusterFl
538540
volumeInfoCrDeletionMap[metadataSyncer.host] = make(map[string]bool)
539541
volumeOperationsLock[metadataSyncer.host] = &sync.Mutex{}
540542

541-
volumeManager, err := volumes.GetManager(ctx, vCenter, nil, false, false, false,
542-
metadataSyncer.clusterFlavor)
543+
volumeManager, err := volumes.GetManager(ctx, vCenter, nil,
544+
false, false,
545+
false, metadataSyncer.clusterFlavor, false)
543546
if err != nil {
544547
return logger.LogNewErrorf(log, "failed to create an instance of volume manager. err=%v", err)
545548
}
@@ -561,9 +564,9 @@ func InitMetadataSyncer(ctx context.Context, clusterFlavor cnstypes.CnsClusterFl
561564
return logger.LogNewErrorf(log, "failed to get vCenterInstance for vCenter Host: %q, err: %v",
562565
vcconfig.Host, err)
563566
}
564-
volumeManager, err := volumes.GetManager(ctx, vCenter,
565-
nil, false, true,
566-
multivCenterTopologyDeployment, metadataSyncer.clusterFlavor)
567+
volumeManager, err := volumes.GetManager(ctx, vCenter, nil,
568+
false, true,
569+
multivCenterTopologyDeployment, metadataSyncer.clusterFlavor, false)
567570
if err != nil {
568571
return logger.LogNewErrorf(log, "failed to create an instance of volume manager. err=%v", err)
569572
}
@@ -2222,8 +2225,9 @@ func ReloadConfiguration(metadataSyncer *metadataSyncInformer, reconnectToVCFrom
22222225
if err != nil {
22232226
return logger.LogNewErrorf(log, "failed to reset volume manager. err=%v", err)
22242227
}
2225-
volumeManager, err := volumes.GetManager(ctx, vcenter, nil, false, false, false,
2226-
metadataSyncer.clusterFlavor)
2228+
volumeManager, err := volumes.GetManager(ctx, vcenter, nil,
2229+
false, false,
2230+
false, metadataSyncer.clusterFlavor, false)
22272231
if err != nil {
22282232
return logger.LogNewErrorf(log, "failed to create an instance of volume manager. err=%v", err)
22292233
}

pkg/syncer/storagepool/diskDecommissionController.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ func (w *DiskDecommController) detachVolumes(ctx context.Context, storagePoolNam
105105
if err != nil {
106106
return logger.LogNewErrorf(log, "failed to get cluster flavor. Error: %v", err)
107107
}
108-
volManager, err := volume.GetManager(ctx, &vc, nil, false, false, false, clusterFlavor)
108+
volManager, err := volume.GetManager(ctx, &vc, nil, false, false, false, clusterFlavor, false)
109109
if err != nil {
110110
return logger.LogNewErrorf(log, "failed to create an instance of volume manager. err=%v", err)
111111
}

pkg/syncer/storagepool/migrationController.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ func (m *migrationController) relocateCNSVolume(ctx context.Context, volumeID st
8484
if err != nil {
8585
return logger.LogNewErrorf(log, "failed to get cluster flavor. Error: %v", err)
8686
}
87-
volManager, err := volume.GetManager(ctx, m.vc, nil, false, false, false, clusterFlavor)
87+
volManager, err := volume.GetManager(ctx, m.vc, nil, false, false, false, clusterFlavor, false)
8888
if err != nil {
8989
return logger.LogNewErrorf(log, "failed to create an instance of volume manager. err=%v", err)
9090
}

pkg/syncer/syncer_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ func TestSyncerWorkflows(t *testing.T) {
140140
}
141141
}()
142142

143-
volumeManager, err = cnsvolumes.GetManager(ctx, virtualCenter, nil, false, false, false, "")
143+
volumeManager, err = cnsvolumes.GetManager(ctx, virtualCenter, nil, false, false, false, "", false)
144144
if err != nil {
145145
t.Fatalf("failed to create an instance of volume manager. err=%v", err)
146146
}

0 commit comments

Comments
 (0)