github.com/kubeflow/training-operator@v1.7.0/pkg/util/status_test.go (about) 1 package util 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/assert" 7 corev1 "k8s.io/api/core/v1" 8 9 apiv1 "github.com/kubeflow/training-operator/pkg/apis/kubeflow.org/v1" 10 ) 11 12 func TestIsFinished(t *testing.T) { 13 cases := map[string]struct { 14 jobStatus apiv1.JobStatus 15 want bool 16 }{ 17 "Succeeded job": { 18 jobStatus: apiv1.JobStatus{ 19 Conditions: []apiv1.JobCondition{ 20 { 21 Type: apiv1.JobSucceeded, 22 Status: corev1.ConditionTrue, 23 }, 24 }, 25 }, 26 want: true, 27 }, 28 "Failed job": { 29 jobStatus: apiv1.JobStatus{ 30 Conditions: []apiv1.JobCondition{ 31 { 32 Type: apiv1.JobFailed, 33 Status: corev1.ConditionTrue, 34 }, 35 }, 36 }, 37 want: true, 38 }, 39 "Suspended job": { 40 jobStatus: apiv1.JobStatus{ 41 Conditions: []apiv1.JobCondition{ 42 { 43 Type: apiv1.JobSuspended, 44 Status: corev1.ConditionTrue, 45 }, 46 }, 47 }, 48 want: false, 49 }, 50 } 51 for name, tc := range cases { 52 t.Run(name, func(t *testing.T) { 53 got := IsFinished(tc.jobStatus) 54 if tc.want != got { 55 t.Errorf("Unexpected result from IsFinished() \nwant: %v, got: %v\n", tc.want, got) 56 } 57 }) 58 } 59 } 60 61 func TestIsSucceeded(t *testing.T) { 62 jobStatus := apiv1.JobStatus{ 63 Conditions: []apiv1.JobCondition{ 64 { 65 Type: apiv1.JobSucceeded, 66 Status: corev1.ConditionTrue, 67 }, 68 }, 69 } 70 assert.True(t, IsSucceeded(jobStatus)) 71 } 72 73 func TestIsFailed(t *testing.T) { 74 jobStatus := apiv1.JobStatus{ 75 Conditions: []apiv1.JobCondition{ 76 { 77 Type: apiv1.JobFailed, 78 Status: corev1.ConditionTrue, 79 }, 80 }, 81 } 82 assert.True(t, IsFailed(jobStatus)) 83 } 84 85 func TestIsRunning(t *testing.T) { 86 jobStatus := apiv1.JobStatus{ 87 Conditions: []apiv1.JobCondition{ 88 { 89 Type: apiv1.JobRunning, 90 Status: corev1.ConditionTrue, 91 }, 92 }, 93 } 94 assert.True(t, IsRunning(jobStatus)) 95 } 96 97 func TestIsSuspended(t *testing.T) { 98 jobStatus := apiv1.JobStatus{ 99 Conditions: []apiv1.JobCondition{ 100 { 101 Type: apiv1.JobSuspended, 102 Status: corev1.ConditionTrue, 103 }, 104 }, 105 } 106 assert.True(t, IsSuspended(jobStatus)) 107 } 108 109 func TestUpdateJobConditions(t *testing.T) { 110 jobStatus := apiv1.JobStatus{} 111 conditionType := apiv1.JobCreated 112 reason := "Job Created" 113 message := "Job Created" 114 115 UpdateJobConditions(&jobStatus, conditionType, corev1.ConditionTrue, reason, message) 116 // Check JobCreated condition is appended 117 conditionInStatus := jobStatus.Conditions[0] 118 assert.Equal(t, conditionInStatus.Type, conditionType) 119 assert.Equal(t, conditionInStatus.Reason, reason) 120 assert.Equal(t, conditionInStatus.Message, message) 121 122 conditionType = apiv1.JobRunning 123 reason = "Job Running" 124 message = "Job Running" 125 UpdateJobConditions(&jobStatus, conditionType, corev1.ConditionTrue, reason, message) 126 // Check JobRunning condition is appended 127 conditionInStatus = jobStatus.Conditions[1] 128 assert.Equal(t, conditionInStatus.Type, conditionType) 129 assert.Equal(t, conditionInStatus.Reason, reason) 130 assert.Equal(t, conditionInStatus.Message, message) 131 132 conditionType = apiv1.JobRestarting 133 reason = "Job Restarting" 134 message = "Job Restarting" 135 UpdateJobConditions(&jobStatus, conditionType, corev1.ConditionTrue, reason, message) 136 // Check JobRunning condition is filtered out and JobRestarting state is appended 137 conditionInStatus = jobStatus.Conditions[1] 138 assert.Equal(t, conditionInStatus.Type, conditionType) 139 assert.Equal(t, conditionInStatus.Reason, reason) 140 assert.Equal(t, conditionInStatus.Message, message) 141 142 conditionType = apiv1.JobRunning 143 reason = "Job Running" 144 message = "Job Running" 145 UpdateJobConditions(&jobStatus, conditionType, corev1.ConditionTrue, reason, message) 146 // Again, Check JobRestarting condition is filtered and JobRestarting is appended 147 conditionInStatus = jobStatus.Conditions[1] 148 assert.Equal(t, conditionInStatus.Type, conditionType) 149 assert.Equal(t, conditionInStatus.Reason, reason) 150 assert.Equal(t, conditionInStatus.Message, message) 151 152 conditionType = apiv1.JobFailed 153 reason = "Job Failed" 154 message = "Job Failed" 155 UpdateJobConditions(&jobStatus, conditionType, corev1.ConditionTrue, reason, message) 156 // Check JobRunning condition is set to false 157 jobRunningCondition := jobStatus.Conditions[1] 158 assert.Equal(t, jobRunningCondition.Type, apiv1.JobRunning) 159 assert.Equal(t, jobRunningCondition.Status, corev1.ConditionFalse) 160 // Check JobFailed state is appended 161 conditionInStatus = jobStatus.Conditions[2] 162 assert.Equal(t, conditionInStatus.Type, conditionType) 163 assert.Equal(t, conditionInStatus.Reason, reason) 164 assert.Equal(t, conditionInStatus.Message, message) 165 }