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  }