package resource import ( "testing" "time" "github.com/stretchr/testify/assert" batchv1 "k8s.io/api/batch/v1" v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) func TestJobToCompletion(t *testing.T) { t0 := testTime() t1, t2 := metav1.Time{Time: t0}, metav1.Time{Time: t0.Add(10 * time.Second)} var c, p int32 = 10, 20 uu := []struct { j batchv1.JobSpec s batchv1.JobStatus e string }{ { batchv1.JobSpec{ Completions: &c, Parallelism: &p, }, batchv1.JobStatus{ Succeeded: 1, Active: 1, Failed: 0, StartTime: &t1, CompletionTime: &t2, }, "1/10", }, { batchv1.JobSpec{ Parallelism: &p, }, batchv1.JobStatus{ Succeeded: 1, Active: 1, Failed: 0, StartTime: &t1, CompletionTime: &t2, }, "1/1 of 20", }, { batchv1.JobSpec{ Completions: &c, }, batchv1.JobStatus{ Succeeded: 1, Active: 1, Failed: 0, StartTime: &t1, CompletionTime: &t2, }, "1/10", }, { batchv1.JobSpec{}, batchv1.JobStatus{ Succeeded: 1, Active: 1, Failed: 0, StartTime: &t1, CompletionTime: &t2, }, "1/1", }, } var j *Job for _, u := range uu { assert.Equal(t, u.e, j.toCompletion(u.j, u.s)) } } func TestJobToDuration(t *testing.T) { t0 := testTime().UTC() t1, t2 := metav1.Time{Time: t0}, metav1.Time{Time: t0.Add(10 * time.Second)} uu := []struct { s batchv1.JobStatus e string }{ { batchv1.JobStatus{ StartTime: &t1, CompletionTime: &t2, }, "10s", }, { batchv1.JobStatus{ StartTime: &metav1.Time{Time: time.Now().Add(-10 * time.Second)}, }, "10s", }, { batchv1.JobStatus{ CompletionTime: &t2, }, MissingValue, }, } var j *Job for _, u := range uu { assert.Equal(t, u.e, j.toDuration(u.s)) } } func TestJobToContainers(t *testing.T) { uu := []struct { s v1.PodSpec c, i string }{ { v1.PodSpec{ InitContainers: []v1.Container{ {Name: "i1", Image: "fred"}, }, Containers: []v1.Container{ {Name: "c1", Image: "blee"}, }, }, "i1,c1", "fred,blee", }, { v1.PodSpec{ InitContainers: []v1.Container{ {Name: "i1", Image: "fred"}, }, Containers: []v1.Container{ {Name: "c1", Image: "blee"}, {Name: "c2", Image: "duh"}, }, }, "i1,c1,(+1)...", "fred,blee,(+1)...", }, } var j *Job for _, u := range uu { c, i := j.toContainers(u.s) assert.Equal(t, u.c, c) assert.Equal(t, u.i, i) } }