From 0314135290d69e35c4f3c70330cc212ae0186a7c Mon Sep 17 00:00:00 2001 From: Austin Abro Date: Fri, 7 Feb 2025 14:34:37 +0000 Subject: [PATCH] tests passing Signed-off-by: Austin Abro --- pkg/kube/statuswait_test.go | 73 ++++++++++++++++++++++++++++++++++--- 1 file changed, 68 insertions(+), 5 deletions(-) diff --git a/pkg/kube/statuswait_test.go b/pkg/kube/statuswait_test.go index ba4e79a58..9e3b696d5 100644 --- a/pkg/kube/statuswait_test.go +++ b/pkg/kube/statuswait_test.go @@ -76,7 +76,7 @@ var jobReadyManifest = ` apiVersion: batch/v1 kind: Job metadata: - name: sleep-job + name: ready-not-complete namespace: default generation: 1 status: @@ -182,8 +182,8 @@ func TestStatusWaitForDelete(t *testing.T) { t.Run(tt.name, func(t *testing.T) { t.Parallel() c := newTestClient(t) - timeout := time.Second * 2 - timeUntilPodDelete := time.Second * 1 + timeout := time.Second + timeUntilPodDelete := time.Millisecond * 500 fakeClient := dynamicfake.NewSimpleDynamicClient(scheme.Scheme) fakeMapper := testutil.NewFakeRESTMapper( v1.SchemeGroupVersion.WithKind("Pod"), @@ -232,7 +232,6 @@ func TestStatusWaitForDelete(t *testing.T) { assert.NoError(t, err) }) } - } func TestStatusWait(t *testing.T) { @@ -314,7 +313,7 @@ func TestStatusWait(t *testing.T) { var err error if tt.waitForJobs { err = statusWaiter.WaitWithJobs(resourceList, time.Second*3) - } else { + } else { err = statusWaiter.Wait(resourceList, time.Second*3) } if tt.expectErrs != nil { @@ -325,3 +324,67 @@ func TestStatusWait(t *testing.T) { }) } } + +func TestWaitForJobComplete(t *testing.T) { + t.Parallel() + tests := []struct { + name string + objManifests []string + expectErrs []error + }{ + { + name: "Job is complete", + objManifests: []string{jobCompleteManifest}, + }, + { + name: "Job is not ready", + objManifests: []string{jobNoStatusManifest}, + expectErrs: []error{errors.New("resource not ready, name: test, kind: Job, status: InProgress"), errors.New("context deadline exceeded")}, + }, + { + name: "Job is ready but not complete", + objManifests: []string{jobReadyManifest}, + expectErrs: []error{errors.New("resource not ready, name: ready-not-complete, kind: Job, status: InProgress"), errors.New("context deadline exceeded")}, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + t.Parallel() + c := newTestClient(t) + fakeClient := dynamicfake.NewSimpleDynamicClient(scheme.Scheme) + fakeMapper := testutil.NewFakeRESTMapper( + batchv1.SchemeGroupVersion.WithKind("Job"), + ) + statusWaiter := statusWaiter{ + client: fakeClient, + restMapper: fakeMapper, + log: t.Logf, + } + objs := []runtime.Object{} + for _, podYaml := range tt.objManifests { + m := make(map[string]interface{}) + err := yaml.Unmarshal([]byte(podYaml), &m) + assert.NoError(t, err) + resource := &unstructured.Unstructured{Object: m} + objs = append(objs, resource) + gvr := getGVR(t, fakeMapper, resource) + err = fakeClient.Tracker().Create(gvr, resource, resource.GetNamespace()) + assert.NoError(t, err) + } + resourceList := ResourceList{} + for _, obj := range objs { + list, err := c.Build(objBody(obj), false) + assert.NoError(t, err) + resourceList = append(resourceList, list...) + } + + err := statusWaiter.WaitWithJobs(resourceList, time.Second*3) + if tt.expectErrs != nil { + assert.EqualError(t, err, errors.Join(tt.expectErrs...).Error()) + return + } + assert.NoError(t, err) + }) + } +}