@@ -17,8 +17,14 @@ limitations under the License.
17
17
package upgrades
18
18
19
19
import (
20
+ "fmt"
21
+ "strings"
22
+
20
23
batchv1 "k8s.io/api/batch/v1"
21
- "k8s.io/api/core/v1"
24
+ v1 "k8s.io/api/core/v1"
25
+ metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
26
+ "k8s.io/apimachinery/pkg/labels"
27
+ clientset "k8s.io/client-go/kubernetes"
22
28
"k8s.io/kubernetes/test/e2e/framework"
23
29
jobutil "k8s.io/kubernetes/test/e2e/framework/job"
24
30
"k8s.io/kubernetes/test/e2e/upgrades"
@@ -54,11 +60,35 @@ func (t *JobUpgradeTest) Setup(f *framework.Framework) {
54
60
func (t * JobUpgradeTest ) Test (f * framework.Framework , done <- chan struct {}, upgrade upgrades.UpgradeType ) {
55
61
<- done
56
62
ginkgo .By ("Ensuring active pods == parallelism" )
57
- err := jobutil . EnsureAllJobPodsRunning (f .ClientSet , t .namespace , t .job .Name , 2 )
63
+ err := ensureAllJobPodsRunning (f .ClientSet , t .namespace , t .job .Name , 2 )
58
64
framework .ExpectNoError (err )
59
65
}
60
66
61
67
// Teardown cleans up any remaining resources.
62
68
func (t * JobUpgradeTest ) Teardown (f * framework.Framework ) {
63
69
// rely on the namespace deletion to clean up everything
64
70
}
71
+
72
+ // ensureAllJobPodsRunning uses c to check in the Job named jobName in ns
73
+ // is running, returning an error if the expected parallelism is not
74
+ // satisfied.
75
+ func ensureAllJobPodsRunning (c clientset.Interface , ns , jobName string , parallelism int32 ) error {
76
+ label := labels .SelectorFromSet (labels .Set (map [string ]string {jobutil .JobSelectorKey : jobName }))
77
+ options := metav1.ListOptions {LabelSelector : label .String ()}
78
+ pods , err := c .CoreV1 ().Pods (ns ).List (options )
79
+ if err != nil {
80
+ return err
81
+ }
82
+ podsSummary := make ([]string , 0 , parallelism )
83
+ count := int32 (0 )
84
+ for _ , p := range pods .Items {
85
+ if p .Status .Phase == v1 .PodRunning {
86
+ count ++
87
+ }
88
+ podsSummary = append (podsSummary , fmt .Sprintf ("%s (%s: %s)" , p .ObjectMeta .Name , p .Status .Phase , p .Status .Message ))
89
+ }
90
+ if count != parallelism {
91
+ return fmt .Errorf ("job has %d of %d expected running pods: %s" , count , parallelism , strings .Join (podsSummary , ", " ))
92
+ }
93
+ return nil
94
+ }
0 commit comments