github.com/castai/kvisor@v1.7.1-0.20240516114728-b3572a2607b5/cmd/controller/state/jobs_cleanup_controller_test.go (about) 1 package state 2 3 import ( 4 "context" 5 "errors" 6 "testing" 7 "time" 8 9 "github.com/castai/kvisor/pkg/logging" 10 "github.com/stretchr/testify/require" 11 batchv1 "k8s.io/api/batch/v1" 12 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 13 "k8s.io/client-go/kubernetes/fake" 14 ) 15 16 func TestJobsCleanupController(t *testing.T) { 17 r := require.New(t) 18 ctx, cancel := context.WithCancel(context.Background()) 19 defer cancel() 20 log := logging.NewTestLog() 21 ns := "castai-agent" 22 23 oldJob := &batchv1.Job{ 24 ObjectMeta: metav1.ObjectMeta{ 25 Name: "old-job", 26 Namespace: ns, 27 Labels: map[string]string{ 28 "app.kubernetes.io/managed-by": "castai", 29 }, 30 CreationTimestamp: metav1.NewTime(time.Now().Add(-11 * time.Minute)), 31 }, 32 } 33 34 newJob := &batchv1.Job{ 35 ObjectMeta: metav1.ObjectMeta{ 36 Name: "new-job", 37 Namespace: ns, 38 Labels: map[string]string{ 39 "app.kubernetes.io/managed-by": "castai", 40 }, 41 CreationTimestamp: metav1.NewTime(time.Now().Add(-1 * time.Minute)), 42 }, 43 } 44 45 clientset := fake.NewSimpleClientset(oldJob, newJob) 46 47 gc := NewJobsCleanupController(log, clientset, JobsCleanupConfig{ 48 CleanupInterval: 1 * time.Millisecond, 49 CleanupJobAge: 10 * time.Minute, 50 Namespace: ns, 51 }) 52 go func() { 53 err := gc.Run(ctx) 54 if err != nil && !errors.Is(err, context.Canceled) { 55 r.Error(err) 56 } 57 }() 58 59 r.Eventually(func() bool { 60 jobs, err := clientset.BatchV1().Jobs(ns).List(ctx, metav1.ListOptions{}) 61 r.NoError(err) 62 return len(jobs.Items) == 1 && jobs.Items[0].Name == newJob.Name 63 }, 3*time.Second, 1*time.Millisecond) 64 }