diff --git a/pkg/utils/kubeclient/cronjob_test.go b/pkg/utils/kubeclient/cronjob_test.go index a8f127050fc..be16119899a 100644 --- a/pkg/utils/kubeclient/cronjob_test.go +++ b/pkg/utils/kubeclient/cronjob_test.go @@ -17,6 +17,7 @@ limitations under the License. package kubeclient import ( + "sync" "time" "github.com/agiledragon/gomonkey/v2" @@ -25,6 +26,8 @@ import ( . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" batchv1 "k8s.io/api/batch/v1" + batchv1beta1 "k8s.io/api/batch/v1beta1" + corev1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" "k8s.io/apimachinery/pkg/types" @@ -40,6 +43,8 @@ var _ = Describe("GetCronJobStatus", func() { testCronJobs []runtime.Object client client.Client patch *gomonkey.Patches + addSchemeOnce sync.Once + addSchemeErr error ) BeforeEach(func() { @@ -64,6 +69,10 @@ var _ = Describe("GetCronJobStatus", func() { testCronJobs = append(testCronJobs, cj.DeepCopy()) } + addSchemeOnce.Do(func() { + addSchemeErr = batchv1beta1.AddToScheme(testScheme) + }) + Expect(addSchemeErr).To(Succeed()) client = fake.NewFakeClientWithScheme(testScheme, testCronJobs...) // Apply gomonkey patch @@ -106,4 +115,55 @@ var _ = Describe("GetCronJobStatus", func() { Expect(got).To(BeNil()) }) }) + + Context("when batchv1 CronJob is not supported", func() { + BeforeEach(func() { + patch.Reset() + patch = gomonkey.ApplyFunc(compatibility.IsBatchV1CronJobSupported, func() bool { + return false + }) + }) + + It("should return converted status from batchv1beta1", func() { + key := types.NamespacedName{ + Namespace: namespace, + Name: "test-beta", + } + betaCronJob := &batchv1beta1.CronJob{ + ObjectMeta: metav1.ObjectMeta{ + Name: "test-beta", + Namespace: namespace, + }, + Status: batchv1beta1.CronJobStatus{ + Active: []corev1.ObjectReference{ + {Name: "pod-0"}, + }, + LastScheduleTime: &testDate, + LastSuccessfulTime: &testDate, + }, + } + betaClient := fake.NewFakeClientWithScheme(testScheme, betaCronJob.DeepCopy()) + + got, err := GetCronJobStatus(betaClient, key) + + Expect(err).NotTo(HaveOccurred()) + Expect(got).NotTo(BeNil()) + Expect(got.LastScheduleTime).To(Equal(&testDate)) + Expect(got.LastSuccessfulTime).To(Equal(&testDate)) + Expect(got.Active).To(HaveLen(1)) + Expect(got.Active[0].Name).To(Equal("pod-0")) + }) + It("should return an error", func() { + key := types.NamespacedName{ + Namespace: namespace, + Name: "test-beta-notexist", + } + emptyClient := fake.NewFakeClientWithScheme(testScheme) + + got, err := GetCronJobStatus(emptyClient, key) + + Expect(err).To(HaveOccurred()) + Expect(got).To(BeNil()) + }) + }) })