From d358b121b7d1e87c87d15de0102464ef53247bec Mon Sep 17 00:00:00 2001 From: Caleb Woodbine Date: Wed, 11 Sep 2019 08:52:15 +1200 Subject: [PATCH 1/4] Create PriorityClassName test --- test/e2e/scheduling/preemption.go | 65 +++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/test/e2e/scheduling/preemption.go b/test/e2e/scheduling/preemption.go index bdcf31250155..04a6933e2fdc 100644 --- a/test/e2e/scheduling/preemption.go +++ b/test/e2e/scheduling/preemption.go @@ -38,6 +38,7 @@ import ( e2enode "k8s.io/kubernetes/test/e2e/framework/node" e2epod "k8s.io/kubernetes/test/e2e/framework/pod" "k8s.io/kubernetes/test/e2e/framework/replicaset" + imageutils "k8s.io/kubernetes/test/utils/image" "github.com/onsi/ginkgo" "github.com/onsi/gomega" @@ -467,6 +468,70 @@ var _ = SIGDescribe("PreemptionExecutionPath", func() { } } }) + // this test makes sure that Pods with a higher PriorityClass via their PriorityClassName start earlier than Pods with a lower PriorityClassName + ginkgo.It("should ensure Pods using a PriorityClassName which is higher begins first", func() { + podNamesSeen := []string{} + stopCh := make(chan struct{}) + pods := []v1.Pod{} + // define Pod specs - order in from highest to lowest priority + ginkgo.By("Defining Pod specs") + for i := 4; i >= 1; i-- { + pods = append(pods, v1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Name: fmt.Sprintf("priority-class-p%v", i), + }, + Spec: v1.PodSpec{ + Containers: []v1.Container{{ + Name: "priority-class", + Image: imageutils.GetE2EImage(imageutils.Agnhost), + Command: []string{"sleep", "3600"}, + }}, + PriorityClassName: fmt.Sprintf("p%v", i), + RestartPolicy: v1.RestartPolicyNever, + }, + }) + } + // watch for when new pods come up + _, podController := cache.NewInformer( + &cache.ListWatch{ + ListFunc: func(options metav1.ListOptions) (runtime.Object, error) { + obj, err := f.ClientSet.CoreV1().Pods(ns).List(options) + return runtime.Object(obj), err + }, + WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { + return f.ClientSet.CoreV1().Pods(ns).Watch(options) + }, + }, + &v1.Pod{}, + 0, + cache.ResourceEventHandlerFuncs{ + AddFunc: func(obj interface{}) { + if pod, ok := obj.(*v1.Pod); ok { + fmt.Println(fmt.Sprintf("Seen Pod %v/%v: %v", len(podNamesSeen)+1, len(pods), pod.Name)) + podNamesSeen = append(podNamesSeen, pod.Name) + } + }, + }, + ) + + go podController.Run(stopCh) + defer close(stopCh) + + ginkgo.By("Creating Pods with priority") + for podNum := 0; podNum < len(pods); podNum++ { + podName := pods[podNum].ObjectMeta.Name + fmt.Println(fmt.Sprintf("Creating Pod %v/%v: %v", podNum+1, len(pods), podName)) + _, err := f.ClientSet.CoreV1().Pods(f.Namespace.Name).Create(&pods[podNum]) + framework.ExpectNoError(err, "Failed creating Pod") + } + fmt.Println(fmt.Sprintf("Pods seen so far: %v", podNamesSeen)) + framework.ExpectEqual(len(podNamesSeen), len(pods), "PodsSeen doesn't match Pods created") + + for podNum := 0; podNum < len(pods); podNum++ { + podName := pods[podNum].ObjectMeta.Name + framework.ExpectEqual(podNamesSeen[podNum], podName, "Pods preempted in incorrect order") + } + }) }) type pauseRSConfig struct { From 50de4bfa9e52d2fba96458a88f093a30606db892 Mon Sep 17 00:00:00 2001 From: Caleb Woodbine Date: Wed, 11 Sep 2019 10:30:39 +1200 Subject: [PATCH 2/4] Update test name --- test/e2e/scheduling/preemption.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/e2e/scheduling/preemption.go b/test/e2e/scheduling/preemption.go index 04a6933e2fdc..403078f42a70 100644 --- a/test/e2e/scheduling/preemption.go +++ b/test/e2e/scheduling/preemption.go @@ -469,7 +469,7 @@ var _ = SIGDescribe("PreemptionExecutionPath", func() { } }) // this test makes sure that Pods with a higher PriorityClass via their PriorityClassName start earlier than Pods with a lower PriorityClassName - ginkgo.It("should ensure Pods using a PriorityClassName which is higher begins first", func() { + ginkgo.It("should ensure Pods using a PriorityClassName which is higher begin first", func() { podNamesSeen := []string{} stopCh := make(chan struct{}) pods := []v1.Pod{} From fd0e5475c5e0173db27ceebb85f34bc5b87dabc7 Mon Sep 17 00:00:00 2001 From: Caleb Woodbine Date: Wed, 11 Sep 2019 14:25:06 +1200 Subject: [PATCH 3/4] Update logging to use e2elog.Lgs --- test/e2e/scheduling/preemption.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/test/e2e/scheduling/preemption.go b/test/e2e/scheduling/preemption.go index 403078f42a70..c1876a88a81f 100644 --- a/test/e2e/scheduling/preemption.go +++ b/test/e2e/scheduling/preemption.go @@ -507,7 +507,7 @@ var _ = SIGDescribe("PreemptionExecutionPath", func() { cache.ResourceEventHandlerFuncs{ AddFunc: func(obj interface{}) { if pod, ok := obj.(*v1.Pod); ok { - fmt.Println(fmt.Sprintf("Seen Pod %v/%v: %v", len(podNamesSeen)+1, len(pods), pod.Name)) + e2elog.Logf("Seen Pod %v/%v: %v", len(podNamesSeen)+1, len(pods), pod.Name) podNamesSeen = append(podNamesSeen, pod.Name) } }, @@ -520,11 +520,12 @@ var _ = SIGDescribe("PreemptionExecutionPath", func() { ginkgo.By("Creating Pods with priority") for podNum := 0; podNum < len(pods); podNum++ { podName := pods[podNum].ObjectMeta.Name - fmt.Println(fmt.Sprintf("Creating Pod %v/%v: %v", podNum+1, len(pods), podName)) + e2elog.Logf("Creating Pod %v/%v: %v", podNum+1, len(pods), podName) _, err := f.ClientSet.CoreV1().Pods(f.Namespace.Name).Create(&pods[podNum]) framework.ExpectNoError(err, "Failed creating Pod") } - fmt.Println(fmt.Sprintf("Pods seen so far: %v", podNamesSeen)) + //fmt.Println(fmt.Sprintf("Pods seen so far: %v", podNamesSeen)) + e2elog.Logf("Pods seen so far: %v", podNamesSeen) framework.ExpectEqual(len(podNamesSeen), len(pods), "PodsSeen doesn't match Pods created") for podNum := 0; podNum < len(pods); podNum++ { From 3e5d4a41d5f29a03546a76ffcb4c4f181e383763 Mon Sep 17 00:00:00 2001 From: Caleb Woodbine Date: Wed, 11 Sep 2019 15:32:09 +1200 Subject: [PATCH 4/4] Remove commented code line --- test/e2e/scheduling/preemption.go | 1 - 1 file changed, 1 deletion(-) diff --git a/test/e2e/scheduling/preemption.go b/test/e2e/scheduling/preemption.go index c1876a88a81f..88aee015bca4 100644 --- a/test/e2e/scheduling/preemption.go +++ b/test/e2e/scheduling/preemption.go @@ -524,7 +524,6 @@ var _ = SIGDescribe("PreemptionExecutionPath", func() { _, err := f.ClientSet.CoreV1().Pods(f.Namespace.Name).Create(&pods[podNum]) framework.ExpectNoError(err, "Failed creating Pod") } - //fmt.Println(fmt.Sprintf("Pods seen so far: %v", podNamesSeen)) e2elog.Logf("Pods seen so far: %v", podNamesSeen) framework.ExpectEqual(len(podNamesSeen), len(pods), "PodsSeen doesn't match Pods created")