Add unit test for Job Controller for panic when PodFailurePolicy is used on 1.28

This commit is contained in:
Michal Wozniak 2023-12-11 11:08:17 +01:00
parent 0c645922ed
commit 34bc590418

View File

@ -256,6 +256,7 @@ func TestControllerSyncJob(t *testing.T) {
wasSuspended bool wasSuspended bool
suspend bool suspend bool
podReplacementPolicy *batch.PodReplacementPolicy podReplacementPolicy *batch.PodReplacementPolicy
podFailurePolicy *batch.PodFailurePolicy
initialStatus *jobInitialStatus initialStatus *jobInitialStatus
backoffRecord *backoffRecord backoffRecord *backoffRecord
controllerTime *time.Time controllerTime *time.Time
@ -293,6 +294,7 @@ func TestControllerSyncJob(t *testing.T) {
// features // features
podIndexLabelDisabled bool podIndexLabelDisabled bool
jobPodReplacementPolicy bool jobPodReplacementPolicy bool
jobPodFailurePolicy bool
}{ }{
"job start": { "job start": {
parallelism: 2, parallelism: 2,
@ -407,6 +409,22 @@ func TestControllerSyncJob(t *testing.T) {
expectedDeletions: 1, expectedDeletions: 1,
expectedPodPatches: 1, expectedPodPatches: 1,
}, },
"more terminating pods than parallelism; PodFailurePolicy used": {
// Repro for https://github.com/kubernetes/kubernetes/issues/122235
parallelism: 1,
completions: 1,
backoffLimit: 6,
activePods: 2,
failedPods: 0,
terminatingPods: 4,
jobPodFailurePolicy: true,
podFailurePolicy: &batch.PodFailurePolicy{},
expectedTerminating: nil,
expectedReady: ptr.To[int32](0),
expectedActive: 1,
expectedDeletions: 1,
expectedPodPatches: 1,
},
"too few active pods and active back-off": { "too few active pods and active back-off": {
parallelism: 1, parallelism: 1,
completions: 1, completions: 1,
@ -935,6 +953,7 @@ func TestControllerSyncJob(t *testing.T) {
logger, _ := ktesting.NewTestContext(t) logger, _ := ktesting.NewTestContext(t)
defer featuregatetesting.SetFeatureGateDuringTest(t, feature.DefaultFeatureGate, features.PodIndexLabel, !tc.podIndexLabelDisabled)() defer featuregatetesting.SetFeatureGateDuringTest(t, feature.DefaultFeatureGate, features.PodIndexLabel, !tc.podIndexLabelDisabled)()
defer featuregatetesting.SetFeatureGateDuringTest(t, feature.DefaultFeatureGate, features.JobPodReplacementPolicy, tc.jobPodReplacementPolicy)() defer featuregatetesting.SetFeatureGateDuringTest(t, feature.DefaultFeatureGate, features.JobPodReplacementPolicy, tc.jobPodReplacementPolicy)()
defer featuregatetesting.SetFeatureGateDuringTest(t, feature.DefaultFeatureGate, features.JobPodFailurePolicy, tc.jobPodFailurePolicy)()
// job manager setup // job manager setup
clientSet := clientset.NewForConfigOrDie(&restclient.Config{Host: "", ContentConfig: restclient.ContentConfig{GroupVersion: &schema.GroupVersion{Group: "", Version: "v1"}}}) clientSet := clientset.NewForConfigOrDie(&restclient.Config{Host: "", ContentConfig: restclient.ContentConfig{GroupVersion: &schema.GroupVersion{Group: "", Version: "v1"}}})
@ -957,6 +976,9 @@ func TestControllerSyncJob(t *testing.T) {
if tc.jobPodReplacementPolicy { if tc.jobPodReplacementPolicy {
job.Spec.PodReplacementPolicy = tc.podReplacementPolicy job.Spec.PodReplacementPolicy = tc.podReplacementPolicy
} }
if tc.jobPodFailurePolicy {
job.Spec.PodFailurePolicy = tc.podFailurePolicy
}
if tc.initialStatus != nil { if tc.initialStatus != nil {
startTime := metav1.Now() startTime := metav1.Now()
job.Status.StartTime = &startTime job.Status.StartTime = &startTime