Fix context usage

This commit is contained in:
Jefftree 2025-03-11 19:29:21 +00:00
parent 9b57a960f8
commit b7b1e78d62

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,
} }
} }