Merge pull request #130731 from Jefftree/cle-int-refactor

Fix context usage in CLE integration test
This commit is contained in:
Kubernetes Prow Robot 2025-03-11 15:59:52 -07:00 committed by GitHub
commit c5d4e53444
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -63,12 +63,13 @@ func TestSingleLeaseCandidate(t *testing.T) {
} }
defer server.TearDownFn() defer server.TearDownFn()
config := server.ClientConfig config := server.ClientConfig
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
for _, tc := range tests { for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) { t.Run(tc.name, func(t *testing.T) {
cletest := setupCLE(config, ctx, cancel, t) ctx, cancel := context.WithCancel(context.Background())
defer cancel()
cletest := setupCLE(config, ctx, t)
defer cletest.cleanup() defer cletest.cleanup()
go cletest.createAndRunFakeController("foo1", "default", "foo", "1.20.0", "1.20.0", tc.preferredStrategy) go cletest.createAndRunFakeController("foo1", "default", "foo", "1.20.0", "1.20.0", tc.preferredStrategy)
cletest.pollForLease(ctx, "foo", "default", tc.expectedHolderIdentity) cletest.pollForLease(ctx, "foo", "default", tc.expectedHolderIdentity)
@ -101,12 +102,13 @@ func TestSingleLeaseCandidateUsingThirdPartyStrategy(t *testing.T) {
} }
defer server.TearDownFn() defer server.TearDownFn()
config := server.ClientConfig config := server.ClientConfig
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
for _, tc := range tests { for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) { t.Run(tc.name, func(t *testing.T) {
cletest := setupCLE(config, ctx, cancel, t) ctx, cancel := context.WithCancel(context.Background())
defer cancel()
cletest := setupCLE(config, ctx, t)
defer cletest.cleanup() defer cletest.cleanup()
go cletest.createAndRunFakeController("foo1", "default", "foo", "1.20.0", "1.20.0", tc.preferredStrategy) go cletest.createAndRunFakeController("foo1", "default", "foo", "1.20.0", "1.20.0", tc.preferredStrategy)
cletest.pollForLease(ctx, "foo", "default", tc.expectedHolderIdentity) cletest.pollForLease(ctx, "foo", "default", tc.expectedHolderIdentity)
@ -139,12 +141,12 @@ func TestMultipleLeaseCandidate(t *testing.T) {
defer server.TearDownFn() defer server.TearDownFn()
config := server.ClientConfig config := server.ClientConfig
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
for _, tc := range tests { for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) { t.Run(tc.name, func(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
cletest := setupCLE(config, ctx, cancel, t) cletest := setupCLE(config, ctx, t)
defer cletest.cleanup() defer cletest.cleanup()
go cletest.createAndRunFakeController("baz1", "default", "baz", "1.20.0", "1.20.0", tc.preferredStrategy) go cletest.createAndRunFakeController("baz1", "default", "baz", "1.20.0", "1.20.0", tc.preferredStrategy)
go cletest.createAndRunFakeController("baz2", "default", "baz", "1.20.0", "1.19.0", tc.preferredStrategy) go cletest.createAndRunFakeController("baz2", "default", "baz", "1.20.0", "1.19.0", tc.preferredStrategy)
@ -182,12 +184,13 @@ func TestMultipleLeaseCandidateUsingThirdPartyStrategy(t *testing.T) {
} }
defer server.TearDownFn() defer server.TearDownFn()
config := server.ClientConfig config := server.ClientConfig
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
for _, tc := range tests { for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) { t.Run(tc.name, func(t *testing.T) {
cletest := setupCLE(config, ctx, cancel, t) ctx, cancel := context.WithCancel(context.Background())
defer cancel()
cletest := setupCLE(config, ctx, t)
defer cletest.cleanup() defer cletest.cleanup()
go cletest.createAndRunFakeController("baz1", "default", "baz", "1.20.0", "1.20.0", tc.preferredStrategy) go cletest.createAndRunFakeController("baz1", "default", "baz", "1.20.0", "1.20.0", tc.preferredStrategy)
go cletest.createAndRunFakeController("baz2", "default", "baz", "1.20.0", "1.19.0", tc.preferredStrategy) go cletest.createAndRunFakeController("baz2", "default", "baz", "1.20.0", "1.19.0", tc.preferredStrategy)
@ -211,7 +214,8 @@ func TestLeaseSwapIfBetterAvailable(t *testing.T) {
config := server.ClientConfig config := server.ClientConfig
ctx, cancel := context.WithCancel(context.Background()) ctx, cancel := context.WithCancel(context.Background())
cletest := setupCLE(config, ctx, cancel, t) defer cancel()
cletest := setupCLE(config, ctx, t)
defer cletest.cleanup() defer cletest.cleanup()
go cletest.createAndRunFakeController("bar1", "default", "bar", "1.20.0", "1.20.0", v1.OldestEmulationVersion) go cletest.createAndRunFakeController("bar1", "default", "bar", "1.20.0", "1.20.0", v1.OldestEmulationVersion)
@ -234,7 +238,7 @@ func TestUpgradeSkew(t *testing.T) {
ctx, cancel := context.WithCancel(context.Background()) ctx, cancel := context.WithCancel(context.Background())
defer cancel() defer cancel()
cletest := setupCLE(config, ctx, cancel, t) cletest := setupCLE(config, ctx, t)
defer cletest.cleanup() defer cletest.cleanup()
go cletest.createAndRunFakeLegacyController("foo1-130", "default", "foobar") go cletest.createAndRunFakeLegacyController("foo1-130", "default", "foobar")
@ -307,11 +311,12 @@ type cleTest struct {
clientset *kubernetes.Clientset clientset *kubernetes.Clientset
t *testing.T t *testing.T
mu sync.Mutex mu sync.Mutex
ctx context.Context
ctxList map[string]ctxCancelPair ctxList map[string]ctxCancelPair
} }
func (t *cleTest) createAndRunFakeLegacyController(name string, namespace string, targetLease string) { func (t *cleTest) createAndRunFakeLegacyController(name string, namespace string, targetLease string) {
ctx, cancel := context.WithCancel(context.Background()) ctx, cancel := context.WithCancel(t.ctx)
t.mu.Lock() t.mu.Lock()
defer t.mu.Unlock() defer t.mu.Unlock()
t.ctxList[name+"/"+namespace] = ctxCancelPair{ctx, cancel} t.ctxList[name+"/"+namespace] = ctxCancelPair{ctx, cancel}
@ -345,7 +350,7 @@ func (t *cleTest) createAndRunFakeController(name string, namespace string, targ
t.t.Error(err) t.t.Error(err)
} }
ctx, cancel := context.WithCancel(context.Background()) ctx, cancel := context.WithCancel(t.ctx)
t.mu.Lock() t.mu.Lock()
t.ctxList[name+"/"+namespace] = ctxCancelPair{ctx, cancel} t.ctxList[name+"/"+namespace] = ctxCancelPair{ctx, cancel}
t.mu.Unlock() t.mu.Unlock()
@ -415,7 +420,7 @@ func (t *cleTest) pollForLease(ctx context.Context, name, namespace string, hold
return lease.Spec.HolderIdentity != nil && *lease.Spec.HolderIdentity == *holder, nil return lease.Spec.HolderIdentity != nil && *lease.Spec.HolderIdentity == *holder, nil
}) })
if err != nil { if err != nil {
t.t.Fatalf("timeout awiting for Lease %s %s err: %v", name, namespace, err) t.t.Fatalf("timeout waiting for Lease %s %s err: %v", name, namespace, err)
} }
} }
@ -427,28 +432,23 @@ func (t *cleTest) cancelController(name, namespace string) {
} }
func (t *cleTest) cleanup() { func (t *cleTest) cleanup() {
t.mu.Lock()
defer t.mu.Unlock()
for _, c := range t.ctxList {
c.cancel()
}
err := t.clientset.CoordinationV1().Leases("kube-system").Delete(context.TODO(), "leader-election-controller", metav1.DeleteOptions{}) err := t.clientset.CoordinationV1().Leases("kube-system").Delete(context.TODO(), "leader-election-controller", metav1.DeleteOptions{})
if err != nil && !apierrors.IsNotFound(err) { if err != nil && !apierrors.IsNotFound(err) {
t.t.Error(err) t.t.Error(err)
} }
} }
func setupCLE(config *rest.Config, ctx context.Context, cancel func(), t *testing.T) *cleTest { func setupCLE(config *rest.Config, ctx context.Context, t *testing.T) *cleTest {
clientset, err := kubernetes.NewForConfig(config) clientset, err := kubernetes.NewForConfig(config)
if err != nil { if err != nil {
t.Fatal(err) t.Fatal(err)
} }
a := ctxCancelPair{ctx, cancel}
return &cleTest{ return &cleTest{
config: config, config: config,
clientset: clientset, clientset: clientset,
ctxList: map[string]ctxCancelPair{"main": a}, ctx: ctx,
ctxList: map[string]ctxCancelPair{},
t: t, t: t,
} }
} }