e2e apps: fix "context canceled" error

Using the ctx of the ginkgo.BeforeEach in callbacks that are invoked after the
BeforeEach is done causes "context canceled" errors. Previously, this code used
context.TODO(). The best solution is to create a new context and cancel it
during test cleanup, then that context can be used for the API calls and as
stop channel.
This commit is contained in:
Patrick Ohly 2022-12-18 14:01:56 +01:00
parent 02b6b6520a
commit 2296fc4b1f

View File

@ -216,7 +216,6 @@ var _ = SIGDescribe("DaemonRestart [Disruptive]", func() {
var config testutils.RCConfig
var controller cache.Controller
var newPods cache.Store
var stopCh chan struct{}
var tracker *podTracker
ginkgo.BeforeEach(func(ctx context.Context) {
@ -237,18 +236,21 @@ var _ = SIGDescribe("DaemonRestart [Disruptive]", func() {
framework.ExpectNoError(e2erc.RunRC(ctx, config))
replacePods(*config.CreatedPods, existingPods)
stopCh = make(chan struct{})
// The following code continues to run after the BeforeEach and thus
// must not use ctx.
backgroundCtx, cancel := context.WithCancel(context.Background())
ginkgo.DeferCleanup(cancel)
tracker = newPodTracker()
newPods, controller = cache.NewInformer(
&cache.ListWatch{
ListFunc: func(options metav1.ListOptions) (runtime.Object, error) {
options.LabelSelector = labelSelector.String()
obj, err := f.ClientSet.CoreV1().Pods(ns).List(ctx, options)
obj, err := f.ClientSet.CoreV1().Pods(ns).List(backgroundCtx, options)
return runtime.Object(obj), err
},
WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) {
options.LabelSelector = labelSelector.String()
return f.ClientSet.CoreV1().Pods(ns).Watch(ctx, options)
return f.ClientSet.CoreV1().Pods(ns).Watch(backgroundCtx, options)
},
},
&v1.Pod{},
@ -265,11 +267,7 @@ var _ = SIGDescribe("DaemonRestart [Disruptive]", func() {
},
},
)
go controller.Run(stopCh)
})
ginkgo.AfterEach(func() {
close(stopCh)
go controller.Run(backgroundCtx.Done())
})
ginkgo.It("Controller Manager should not create/delete replicas across restart", func(ctx context.Context) {