From 85448df36457be4059e02174b9335f9e106411d8 Mon Sep 17 00:00:00 2001 From: Aldo Culquicondor Date: Thu, 11 Feb 2021 22:10:57 +0000 Subject: [PATCH] Add E2E test for indexed job --- test/e2e/apps/job.go | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/test/e2e/apps/job.go b/test/e2e/apps/job.go index 352da6907b1..b95ae739ede 100644 --- a/test/e2e/apps/job.go +++ b/test/e2e/apps/job.go @@ -19,12 +19,14 @@ package apps import ( "context" "fmt" + "strconv" "time" batchv1 "k8s.io/api/batch/v1" v1 "k8s.io/api/core/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" + "k8s.io/apimachinery/pkg/util/sets" "k8s.io/apimachinery/pkg/util/wait" clientset "k8s.io/client-go/kubernetes" batchinternal "k8s.io/kubernetes/pkg/apis/batch" @@ -67,6 +69,37 @@ var _ = SIGDescribe("Job", func() { framework.ExpectEqual(successes, completions, "epected %d successful job pods, but got %d", completions, successes) }) + /* + Testcase: Ensure Pods of an Indexed Job get a unique index. + Description: Create an Indexed Job, wait for completion, capture the output of the pods and verify that they contain the completion index. + */ + ginkgo.It("[Feature:IndexedJob] should create pods for an Indexed job with completion indexes", func() { + ginkgo.By("Creating Indexed job") + job := e2ejob.NewTestJob("succeed", "indexed-job", v1.RestartPolicyNever, parallelism, completions, nil, backoffLimit) + job.Spec.CompletionMode = batchv1.IndexedCompletion + job, err := e2ejob.CreateJob(f.ClientSet, f.Namespace.Name, job) + framework.ExpectNoError(err, "failed to create indexed job in namespace %s", f.Namespace.Name) + + ginkgo.By("Ensuring job reaches completions") + err = e2ejob.WaitForJobComplete(f.ClientSet, f.Namespace.Name, job.Name, completions) + framework.ExpectNoError(err, "failed to ensure job completion in namespace: %s", f.Namespace.Name) + + ginkgo.By("Ensuring pods with index for job exist") + pods, err := e2ejob.GetJobPods(f.ClientSet, f.Namespace.Name, job.Name) + framework.ExpectNoError(err, "failed to get pod list for job in namespace: %s", f.Namespace.Name) + succeededIndexes := sets.NewInt() + for _, pod := range pods.Items { + if pod.Status.Phase == v1.PodSucceeded && pod.Annotations != nil { + ix, err := strconv.Atoi(pod.Annotations[batchv1.JobCompletionIndexAnnotationAlpha]) + framework.ExpectNoError(err, "failed obtaining completion index from pod in namespace: %s", f.Namespace.Name) + succeededIndexes.Insert(ix) + } + } + gotIndexes := succeededIndexes.List() + wantIndexes := []int{0, 1, 2, 3} + framework.ExpectEqual(gotIndexes, wantIndexes, "expected completed indexes %s, but got %s", gotIndexes, wantIndexes) + }) + /* Testcase: Ensure that the pods associated with the job are removed once the job is deleted Description: Create a job and ensure the associated pod count is equal to paralellism count. Delete the