mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-21 09:34:40 +00:00
fix: Refactor TestFinalizerCleanup unit test by asserting job and pod informer state (#121856)
* fix: change informer resync period in TestFinalizerCleanup unit test * refactor TestFinalizerCleanup to avoid flakiness by asserting job and pod informer state * minor cleanups in TestFinalizerCleanup test in job_controller_test.go another minor cleanup in TestFinalizerCleanup test in job_controller_test.go * reduce poll time to 10ms in TestFinalizerCleanup in job_controller_test.go when waiting for podStore cache to get updated * remove a whitespace from TestFinalizerCleanup to keep diff smaller
This commit is contained in:
parent
b0ccc04e47
commit
31710a799d
@ -5261,13 +5261,12 @@ func TestFinalizerCleanup(t *testing.T) {
|
|||||||
manager.podStoreSynced = alwaysReady
|
manager.podStoreSynced = alwaysReady
|
||||||
manager.jobStoreSynced = alwaysReady
|
manager.jobStoreSynced = alwaysReady
|
||||||
|
|
||||||
// Initialize the controller with 0 workers to make sure the
|
|
||||||
// pod finalizers are not removed by the "syncJob" function.
|
|
||||||
go manager.Run(ctx, 0)
|
|
||||||
|
|
||||||
// Start the Pod and Job informers.
|
// Start the Pod and Job informers.
|
||||||
sharedInformers.Start(ctx.Done())
|
sharedInformers.Start(ctx.Done())
|
||||||
sharedInformers.WaitForCacheSync(ctx.Done())
|
sharedInformers.WaitForCacheSync(ctx.Done())
|
||||||
|
// Initialize the controller with 0 workers to make sure the
|
||||||
|
// pod finalizers are not removed by the "syncJob" function.
|
||||||
|
go manager.Run(ctx, 0)
|
||||||
|
|
||||||
// Create a simple Job
|
// Create a simple Job
|
||||||
job := newJob(1, 1, 1, batch.NonIndexedCompletion)
|
job := newJob(1, 1, 1, batch.NonIndexedCompletion)
|
||||||
@ -5276,6 +5275,14 @@ func TestFinalizerCleanup(t *testing.T) {
|
|||||||
t.Fatalf("Creating job: %v", err)
|
t.Fatalf("Creating job: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Await for the Job to appear in the jobLister to ensure so that Job Pod gets tracked correctly.
|
||||||
|
if err := wait.PollUntilContextTimeout(ctx, 10*time.Millisecond, wait.ForeverTestTimeout, false, func(ctx context.Context) (bool, error) {
|
||||||
|
job, _ := manager.jobLister.Jobs(job.GetNamespace()).Get(job.Name)
|
||||||
|
return job != nil, nil
|
||||||
|
}); err != nil {
|
||||||
|
t.Fatalf("Waiting for Job object to appear in jobLister: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
// Create a Pod with the job tracking finalizer
|
// Create a Pod with the job tracking finalizer
|
||||||
pod := newPod("test-pod", job)
|
pod := newPod("test-pod", job)
|
||||||
pod.Finalizers = append(pod.Finalizers, batch.JobTrackingFinalizer)
|
pod.Finalizers = append(pod.Finalizers, batch.JobTrackingFinalizer)
|
||||||
@ -5284,6 +5291,16 @@ func TestFinalizerCleanup(t *testing.T) {
|
|||||||
t.Fatalf("Creating pod: %v", err)
|
t.Fatalf("Creating pod: %v", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Await for the Pod to appear in the podStore to ensure that the pod exists when cleaning up the Job.
|
||||||
|
// In a production environment, there wouldn't be these guarantees, but the Pod would be cleaned up
|
||||||
|
// by the orphan pod worker, when the Pod finishes.
|
||||||
|
if err := wait.PollUntilContextTimeout(ctx, 10*time.Millisecond, wait.ForeverTestTimeout, false, func(ctx context.Context) (bool, error) {
|
||||||
|
pod, _ := manager.podStore.Pods(pod.GetNamespace()).Get(pod.Name)
|
||||||
|
return pod != nil, nil
|
||||||
|
}); err != nil {
|
||||||
|
t.Fatalf("Waiting for Pod to appear in podLister: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
// Mark Job as complete.
|
// Mark Job as complete.
|
||||||
job.Status.Conditions = append(job.Status.Conditions, batch.JobCondition{
|
job.Status.Conditions = append(job.Status.Conditions, batch.JobCondition{
|
||||||
Type: batch.JobComplete,
|
Type: batch.JobComplete,
|
||||||
|
Loading…
Reference in New Issue
Block a user