Merge pull request #109252 from kerthcet/fix/goroutine-leak-in-integration-tests

fix: resolve goroutine leak in integration tests
This commit is contained in:
Kubernetes Prow Robot 2022-05-06 09:07:17 -07:00 committed by GitHub
commit 7e6a8bc3db
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 13 additions and 13 deletions

View File

@ -124,8 +124,8 @@ func TestSpecReplicasChange(t *testing.T) {
defer closeFn() defer closeFn()
ns := framework.CreateTestingNamespace("test-spec-replicas-change", s, t) ns := framework.CreateTestingNamespace("test-spec-replicas-change", s, t)
defer framework.DeleteTestingNamespace(ns, s, t) defer framework.DeleteTestingNamespace(ns, s, t)
stopCh := runControllerAndInformers(rm, informers) cancel := runControllerAndInformers(rm, informers)
defer close(stopCh) defer cancel()
createHeadlessService(t, c, newHeadlessService(ns.Name)) createHeadlessService(t, c, newHeadlessService(ns.Name))
sts := newSTS("sts", ns.Name, 2) sts := newSTS("sts", ns.Name, 2)
@ -167,8 +167,8 @@ func TestDeletingAndFailedPods(t *testing.T) {
defer closeFn() defer closeFn()
ns := framework.CreateTestingNamespace("test-deleting-and-failed-pods", s, t) ns := framework.CreateTestingNamespace("test-deleting-and-failed-pods", s, t)
defer framework.DeleteTestingNamespace(ns, s, t) defer framework.DeleteTestingNamespace(ns, s, t)
stopCh := runControllerAndInformers(rm, informers) cancel := runControllerAndInformers(rm, informers)
defer close(stopCh) defer cancel()
labelMap := labelMap() labelMap := labelMap()
sts := newSTS("sts", ns.Name, 2) sts := newSTS("sts", ns.Name, 2)
@ -268,8 +268,8 @@ func TestStatefulSetAvailable(t *testing.T) {
defer closeFn() defer closeFn()
ns := framework.CreateTestingNamespace("test-available-pods", s, t) ns := framework.CreateTestingNamespace("test-available-pods", s, t)
defer framework.DeleteTestingNamespace(ns, s, t) defer framework.DeleteTestingNamespace(ns, s, t)
stopCh := runControllerAndInformers(rm, informers) cancel := runControllerAndInformers(rm, informers)
defer close(stopCh) defer cancel()
labelMap := labelMap() labelMap := labelMap()
sts := newSTS("sts", ns.Name, 4) sts := newSTS("sts", ns.Name, 4)

View File

@ -24,7 +24,7 @@ import (
"time" "time"
appsv1 "k8s.io/api/apps/v1" appsv1 "k8s.io/api/apps/v1"
"k8s.io/api/core/v1" v1 "k8s.io/api/core/v1"
"k8s.io/apimachinery/pkg/api/resource" "k8s.io/apimachinery/pkg/api/resource"
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/labels" "k8s.io/apimachinery/pkg/labels"
@ -182,11 +182,11 @@ func scSetup(t *testing.T) (*httptest.Server, framework.CloseFunc, *statefulset.
} }
// Run STS controller and informers // Run STS controller and informers
func runControllerAndInformers(sc *statefulset.StatefulSetController, informers informers.SharedInformerFactory) chan struct{} { func runControllerAndInformers(sc *statefulset.StatefulSetController, informers informers.SharedInformerFactory) context.CancelFunc {
stopCh := make(chan struct{}) ctx, cancel := context.WithCancel(context.Background())
informers.Start(stopCh) informers.Start(ctx.Done())
go sc.Run(context.TODO(), 5) go sc.Run(ctx, 5)
return stopCh return cancel
} }
func createHeadlessService(t *testing.T, clientSet clientset.Interface, headlessService *v1.Service) { func createHeadlessService(t *testing.T, clientSet clientset.Interface, headlessService *v1.Service) {

View File

@ -54,7 +54,7 @@ func setupClusterForVolumeCapacityPriority(t *testing.T, nsName string, resyncPe
if err != nil { if err != nil {
t.Fatalf("Failed to create PV controller: %v", err) t.Fatalf("Failed to create PV controller: %v", err)
} }
go ctrl.Run(context.TODO()) go ctrl.Run(textCtx.ctx)
// Start informer factory after all controllers are configured and running. // Start informer factory after all controllers are configured and running.
informerFactory.Start(textCtx.ctx.Done()) informerFactory.Start(textCtx.ctx.Done())