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  }