mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-27 21:47:07 +00:00
Ensure goroutines exit in CSI attacher tests
The reason for adding an expectedVolumeHost field is to prevent a channel read from hanging when a test fails prior to creating the VolumeAttachment watch.
This commit is contained in:
parent
f098ada9d1
commit
70eddfefec
@ -216,8 +216,10 @@ func TestAttacherAttach(t *testing.T) {
|
|||||||
|
|
||||||
csiAttacher := getCsiAttacherFromVolumeAttacher(attacher)
|
csiAttacher := getCsiAttacherFromVolumeAttacher(attacher)
|
||||||
|
|
||||||
// FIXME: We need to ensure this goroutine exits in the test.
|
var wg sync.WaitGroup
|
||||||
|
wg.Add(1)
|
||||||
go func(spec *volume.Spec, nodename string, fail bool) {
|
go func(spec *volume.Spec, nodename string, fail bool) {
|
||||||
|
defer wg.Done()
|
||||||
attachID, err := csiAttacher.Attach(spec, types.NodeName(nodename))
|
attachID, err := csiAttacher.Attach(spec, types.NodeName(nodename))
|
||||||
if !fail && err != nil {
|
if !fail && err != nil {
|
||||||
t.Errorf("expecting no failure, but got err: %v", err)
|
t.Errorf("expecting no failure, but got err: %v", err)
|
||||||
@ -242,6 +244,7 @@ func TestAttacherAttach(t *testing.T) {
|
|||||||
status.Attached = true
|
status.Attached = true
|
||||||
}
|
}
|
||||||
markVolumeAttached(t, csiAttacher.k8s, fakeWatcher, tc.attachID, status)
|
markVolumeAttached(t, csiAttacher.k8s, fakeWatcher, tc.attachID, status)
|
||||||
|
wg.Wait()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -303,8 +306,10 @@ func TestAttacherAttachWithInline(t *testing.T) {
|
|||||||
}
|
}
|
||||||
csiAttacher := getCsiAttacherFromVolumeAttacher(attacher)
|
csiAttacher := getCsiAttacherFromVolumeAttacher(attacher)
|
||||||
|
|
||||||
// FIXME: We need to ensure this goroutine exits in the test.
|
var wg sync.WaitGroup
|
||||||
|
wg.Add(1)
|
||||||
go func(spec *volume.Spec, nodename string, fail bool) {
|
go func(spec *volume.Spec, nodename string, fail bool) {
|
||||||
|
defer wg.Done()
|
||||||
attachID, err := csiAttacher.Attach(spec, types.NodeName(nodename))
|
attachID, err := csiAttacher.Attach(spec, types.NodeName(nodename))
|
||||||
if fail != (err != nil) {
|
if fail != (err != nil) {
|
||||||
t.Errorf("expecting no failure, but got err: %v", err)
|
t.Errorf("expecting no failure, but got err: %v", err)
|
||||||
@ -324,6 +329,7 @@ func TestAttacherAttachWithInline(t *testing.T) {
|
|||||||
status.Attached = true
|
status.Attached = true
|
||||||
}
|
}
|
||||||
markVolumeAttached(t, csiAttacher.k8s, fakeWatcher, tc.attachID, status)
|
markVolumeAttached(t, csiAttacher.k8s, fakeWatcher, tc.attachID, status)
|
||||||
|
wg.Wait()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -744,9 +750,12 @@ func TestAttacherWaitForVolumeAttachment(t *testing.T) {
|
|||||||
trigerWatchEventTime := tc.trigerWatchEventTime
|
trigerWatchEventTime := tc.trigerWatchEventTime
|
||||||
finalAttached := tc.finalAttached
|
finalAttached := tc.finalAttached
|
||||||
finalAttachErr := tc.finalAttachErr
|
finalAttachErr := tc.finalAttachErr
|
||||||
|
var wg sync.WaitGroup
|
||||||
// after timeout, fakeWatcher will be closed by csiAttacher.waitForVolumeAttachment
|
// after timeout, fakeWatcher will be closed by csiAttacher.waitForVolumeAttachment
|
||||||
if tc.trigerWatchEventTime > 0 && tc.trigerWatchEventTime < tc.timeout {
|
if tc.trigerWatchEventTime > 0 && tc.trigerWatchEventTime < tc.timeout {
|
||||||
|
wg.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
|
defer wg.Done()
|
||||||
time.Sleep(trigerWatchEventTime)
|
time.Sleep(trigerWatchEventTime)
|
||||||
attachment := makeTestAttachment(attachID, nodeName, pvName)
|
attachment := makeTestAttachment(attachID, nodeName, pvName)
|
||||||
attachment.Status.Attached = finalAttached
|
attachment.Status.Attached = finalAttached
|
||||||
@ -767,6 +776,7 @@ func TestAttacherWaitForVolumeAttachment(t *testing.T) {
|
|||||||
if err == nil && retID != attachID {
|
if err == nil && retID != attachID {
|
||||||
t.Errorf("attacher.WaitForAttach not returning attachment ID")
|
t.Errorf("attacher.WaitForAttach not returning attachment ID")
|
||||||
}
|
}
|
||||||
|
wg.Wait()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1006,7 +1016,10 @@ func TestAttacherDetach(t *testing.T) {
|
|||||||
t.Errorf("test case %s failed: %v", tc.name, err)
|
t.Errorf("test case %s failed: %v", tc.name, err)
|
||||||
}
|
}
|
||||||
watchError := tc.watcherError
|
watchError := tc.watcherError
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
wg.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
|
defer wg.Done()
|
||||||
if watchError {
|
if watchError {
|
||||||
errStatus := apierrors.NewInternalError(fmt.Errorf("we got an error")).Status()
|
errStatus := apierrors.NewInternalError(fmt.Errorf("we got an error")).Status()
|
||||||
fakeWatcher.Error(&errStatus)
|
fakeWatcher.Error(&errStatus)
|
||||||
@ -1031,6 +1044,7 @@ func TestAttacherDetach(t *testing.T) {
|
|||||||
t.Errorf("expecting attachment not to be nil, but it is")
|
t.Errorf("expecting attachment not to be nil, but it is")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
wg.Wait()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1222,6 +1236,7 @@ func TestAttacherMountDevice(t *testing.T) {
|
|||||||
|
|
||||||
nodeName := string(csiAttacher.plugin.host.GetNodeName())
|
nodeName := string(csiAttacher.plugin.host.GetNodeName())
|
||||||
attachID := getAttachmentName(tc.volName, testDriver, nodeName)
|
attachID := getAttachmentName(tc.volName, testDriver, nodeName)
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
|
||||||
if tc.createAttachment {
|
if tc.createAttachment {
|
||||||
// Set up volume attachment
|
// Set up volume attachment
|
||||||
@ -1230,7 +1245,9 @@ func TestAttacherMountDevice(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("failed to attach: %v", err)
|
t.Fatalf("failed to attach: %v", err)
|
||||||
}
|
}
|
||||||
|
wg.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
|
defer wg.Done()
|
||||||
fakeWatcher.Delete(attachment)
|
fakeWatcher.Delete(attachment)
|
||||||
}()
|
}()
|
||||||
}
|
}
|
||||||
@ -1288,6 +1305,8 @@ func TestAttacherMountDevice(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wg.Wait()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1396,7 +1415,12 @@ func TestAttacherMountDeviceWithInline(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("failed to attach: %v", err)
|
t.Fatalf("failed to attach: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var wg sync.WaitGroup
|
||||||
|
wg.Add(1)
|
||||||
|
|
||||||
go func() {
|
go func() {
|
||||||
|
defer wg.Done()
|
||||||
fakeWatcher.Delete(attachment)
|
fakeWatcher.Delete(attachment)
|
||||||
}()
|
}()
|
||||||
|
|
||||||
@ -1434,6 +1458,8 @@ func TestAttacherMountDeviceWithInline(t *testing.T) {
|
|||||||
t.Errorf("expected mount path: %s. got: %s", tc.deviceMountPath, vol.Path)
|
t.Errorf("expected mount path: %s. got: %s", tc.deviceMountPath, vol.Path)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wg.Wait()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user