From 132d477cb7aa323c0eae6dd9a09f9c93fb570b83 Mon Sep 17 00:00:00 2001 From: Mskxn Date: Thu, 6 Jul 2023 16:24:58 +0800 Subject: [PATCH] use stopCh to avoid goroutine leak in tests --- .../namespace/lifecycle/admission_test.go | 6 +++- .../pkg/util/flowcontrol/apf_filter_test.go | 8 ++++-- .../controllers/node/node_controller_test.go | 28 +++++++++++++------ 3 files changed, 30 insertions(+), 12 deletions(-) diff --git a/staging/src/k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle/admission_test.go b/staging/src/k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle/admission_test.go index d712028eee7..bc4ff7b1af0 100644 --- a/staging/src/k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle/admission_test.go +++ b/staging/src/k8s.io/apiserver/pkg/admission/plugin/namespace/lifecycle/admission_test.go @@ -107,7 +107,11 @@ func TestAccessReviewCheckOnMissingNamespace(t *testing.T) { if err != nil { t.Errorf("unexpected error initializing handler: %v", err) } - informerFactory.Start(wait.NeverStop) + + stopCh := make(chan struct{}) + defer close(stopCh) + + informerFactory.Start(stopCh) err = handler.Admit(context.TODO(), admission.NewAttributesRecord(nil, nil, schema.GroupVersionKind{Group: "authorization.k8s.io", Version: "v1", Kind: "LocalSubjectAccesReview"}, namespace, "", schema.GroupVersionResource{Group: "authorization.k8s.io", Version: "v1", Resource: "localsubjectaccessreviews"}, "", admission.Create, &metav1.CreateOptions{}, false, nil), nil) if err != nil { diff --git a/staging/src/k8s.io/apiserver/pkg/util/flowcontrol/apf_filter_test.go b/staging/src/k8s.io/apiserver/pkg/util/flowcontrol/apf_filter_test.go index 742ada095f6..840fecd75ac 100644 --- a/staging/src/k8s.io/apiserver/pkg/util/flowcontrol/apf_filter_test.go +++ b/staging/src/k8s.io/apiserver/pkg/util/flowcontrol/apf_filter_test.go @@ -115,15 +115,17 @@ func TestQueueWaitTimeLatencyTracker(t *testing.T) { QueueSetFactory: fqs.NewQueueSetFactory(clk), }) - informerFactory.Start(nil) + stopCh := make(chan struct{}) + defer close(stopCh) - status := informerFactory.WaitForCacheSync(nil) + informerFactory.Start(stopCh) + status := informerFactory.WaitForCacheSync(stopCh) if names := unsynced(status); len(names) > 0 { t.Fatalf("WaitForCacheSync did not successfully complete, resources=%#v", names) } go func() { - controller.Run(nil) + controller.Run(stopCh) }() // ensure that the controller has run its first loop. diff --git a/staging/src/k8s.io/cloud-provider/controllers/node/node_controller_test.go b/staging/src/k8s.io/cloud-provider/controllers/node/node_controller_test.go index 9bb65f693d1..e377fd50708 100644 --- a/staging/src/k8s.io/cloud-provider/controllers/node/node_controller_test.go +++ b/staging/src/k8s.io/cloud-provider/controllers/node/node_controller_test.go @@ -1656,8 +1656,11 @@ func Test_syncNode(t *testing.T) { nodeStatusUpdateFrequency: 1 * time.Second, } - factory.Start(nil) - factory.WaitForCacheSync(nil) + stopCh := make(chan struct{}) + defer close(stopCh) + + factory.Start(stopCh) + factory.WaitForCacheSync(stopCh) w := eventBroadcaster.StartLogging(klog.Infof) defer w.Stop() @@ -1740,8 +1743,11 @@ func TestGCEConditionV2(t *testing.T) { nodeStatusUpdateFrequency: 1 * time.Second, } - factory.Start(nil) - factory.WaitForCacheSync(nil) + stopCh := make(chan struct{}) + defer close(stopCh) + + factory.Start(stopCh) + factory.WaitForCacheSync(stopCh) w := eventBroadcaster.StartLogging(klog.Infof) defer w.Stop() @@ -1828,8 +1834,11 @@ func TestGCECondition(t *testing.T) { nodeStatusUpdateFrequency: 1 * time.Second, } - factory.Start(nil) - factory.WaitForCacheSync(nil) + stopCh := make(chan struct{}) + defer close(stopCh) + + factory.Start(stopCh) + factory.WaitForCacheSync(stopCh) w := eventBroadcaster.StartLogging(klog.Infof) defer w.Stop() @@ -1934,10 +1943,13 @@ func Test_reconcileNodeLabels(t *testing.T) { nodeInformer: factory.Core().V1().Nodes(), } + stopCh := make(chan struct{}) + defer close(stopCh) + // activate node informer factory.Core().V1().Nodes().Informer() - factory.Start(nil) - factory.WaitForCacheSync(nil) + factory.Start(stopCh) + factory.WaitForCacheSync(stopCh) err := cnc.reconcileNodeLabels("node01") if err != test.expectedErr {