Merge pull request #10047 from lsowen/feature-10042

Fix SIGSEGV when job.Spec.Completions is nil
pull/10063/head
Matt Farina 3 years ago committed by GitHub
commit f509bc6891
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -227,7 +227,7 @@ func (c *ReadyChecker) jobReady(job *batchv1.Job) bool {
c.log("Job is failed: %s/%s", job.GetNamespace(), job.GetName()) c.log("Job is failed: %s/%s", job.GetNamespace(), job.GetName())
return false return false
} }
if job.Status.Succeeded < *job.Spec.Completions { if job.Spec.Completions != nil && job.Status.Succeeded < *job.Spec.Completions {
c.log("Job is not completed: %s/%s", job.GetNamespace(), job.GetName()) c.log("Job is not completed: %s/%s", job.GetNamespace(), job.GetName())
return false return false
} }

@ -241,39 +241,44 @@ func Test_ReadyChecker_jobReady(t *testing.T) {
}{ }{
{ {
name: "job is completed", name: "job is completed",
args: args{job: newJob("foo", 1, 1, 1, 0)}, args: args{job: newJob("foo", 1, intToInt32(1), 1, 0)},
want: true, want: true,
}, },
{ {
name: "job is incomplete", name: "job is incomplete",
args: args{job: newJob("foo", 1, 1, 0, 0)}, args: args{job: newJob("foo", 1, intToInt32(1), 0, 0)},
want: false, want: false,
}, },
{ {
name: "job is failed", name: "job is failed",
args: args{job: newJob("foo", 1, 1, 0, 1)}, args: args{job: newJob("foo", 1, intToInt32(1), 0, 1)},
want: false, want: false,
}, },
{ {
name: "job is completed with retry", name: "job is completed with retry",
args: args{job: newJob("foo", 1, 1, 1, 1)}, args: args{job: newJob("foo", 1, intToInt32(1), 1, 1)},
want: true, want: true,
}, },
{ {
name: "job is failed with retry", name: "job is failed with retry",
args: args{job: newJob("foo", 1, 1, 0, 2)}, args: args{job: newJob("foo", 1, intToInt32(1), 0, 2)},
want: false, want: false,
}, },
{ {
name: "job is completed single run", name: "job is completed single run",
args: args{job: newJob("foo", 0, 1, 1, 0)}, args: args{job: newJob("foo", 0, intToInt32(1), 1, 0)},
want: true, want: true,
}, },
{ {
name: "job is failed single run", name: "job is failed single run",
args: args{job: newJob("foo", 0, 1, 0, 1)}, args: args{job: newJob("foo", 0, intToInt32(1), 0, 1)},
want: false, want: false,
}, },
{
name: "job with null completions",
args: args{job: newJob("foo", 0, nil, 1, 0)},
want: true,
},
} }
for _, tt := range tests { for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) { t.Run(tt.name, func(t *testing.T) {
@ -481,7 +486,7 @@ func newPersistentVolumeClaim(name string, phase corev1.PersistentVolumeClaimPha
} }
} }
func newJob(name string, backoffLimit, completions, succeeded, failed int) *batchv1.Job { func newJob(name string, backoffLimit int, completions *int32, succeeded int, failed int) *batchv1.Job {
return &batchv1.Job{ return &batchv1.Job{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: name, Name: name,
@ -489,7 +494,7 @@ func newJob(name string, backoffLimit, completions, succeeded, failed int) *batc
}, },
Spec: batchv1.JobSpec{ Spec: batchv1.JobSpec{
BackoffLimit: intToInt32(backoffLimit), BackoffLimit: intToInt32(backoffLimit),
Completions: intToInt32(completions), Completions: completions,
Template: corev1.PodTemplateSpec{ Template: corev1.PodTemplateSpec{
ObjectMeta: metav1.ObjectMeta{ ObjectMeta: metav1.ObjectMeta{
Name: name, Name: name,

Loading…
Cancel
Save