volcano.sh/volcano@v1.9.0/pkg/webhooks/admission/jobs/validate/util_test.go (about) 1 package validate 2 3 import ( 4 "reflect" 5 "testing" 6 7 "volcano.sh/apis/pkg/apis/batch/v1alpha1" 8 ) 9 10 func TestTopoSort(t *testing.T) { 11 testCases := []struct { 12 name string 13 job *v1alpha1.Job 14 sortedTasks []string 15 isDag bool 16 }{ 17 { 18 name: "test-1", 19 job: &v1alpha1.Job{ 20 Spec: v1alpha1.JobSpec{ 21 Tasks: []v1alpha1.TaskSpec{ 22 { 23 Name: "t1", 24 DependsOn: &v1alpha1.DependsOn{ 25 Name: []string{"t2", "t3"}, 26 }, 27 }, 28 { 29 Name: "t2", 30 DependsOn: &v1alpha1.DependsOn{ 31 Name: []string{"t3"}, 32 }, 33 }, 34 { 35 Name: "t3", 36 DependsOn: &v1alpha1.DependsOn{ 37 Name: []string{}, 38 }, 39 }, 40 }, 41 }, 42 }, 43 sortedTasks: []string{"t3", "t2", "t1"}, 44 isDag: true, 45 }, 46 { 47 name: "test-2", 48 job: &v1alpha1.Job{ 49 Spec: v1alpha1.JobSpec{ 50 Tasks: []v1alpha1.TaskSpec{ 51 { 52 Name: "t1", 53 DependsOn: &v1alpha1.DependsOn{ 54 Name: []string{"t2"}, 55 }, 56 }, 57 { 58 Name: "t2", 59 DependsOn: &v1alpha1.DependsOn{ 60 Name: []string{"t1"}, 61 }, 62 }, 63 { 64 Name: "t3", 65 DependsOn: nil, 66 }, 67 }, 68 }, 69 }, 70 sortedTasks: nil, 71 isDag: false, 72 }, 73 { 74 name: "test-3", 75 job: &v1alpha1.Job{ 76 Spec: v1alpha1.JobSpec{ 77 Tasks: []v1alpha1.TaskSpec{ 78 { 79 Name: "t1", 80 DependsOn: &v1alpha1.DependsOn{ 81 Name: []string{"t2", "t3"}, 82 }, 83 }, 84 { 85 Name: "t2", 86 DependsOn: &v1alpha1.DependsOn{ 87 Name: []string{"t2"}, 88 }, 89 }, 90 { 91 Name: "t3", 92 DependsOn: nil, 93 }, 94 }, 95 }, 96 }, 97 sortedTasks: nil, 98 isDag: false, 99 }, 100 { 101 name: "test-4", 102 job: &v1alpha1.Job{ 103 Spec: v1alpha1.JobSpec{ 104 Tasks: []v1alpha1.TaskSpec{ 105 { 106 Name: "t1", 107 DependsOn: &v1alpha1.DependsOn{ 108 Name: []string{"t2", "t3"}, 109 }, 110 }, 111 { 112 Name: "t2", 113 DependsOn: nil, 114 }, 115 { 116 Name: "t3", 117 DependsOn: &v1alpha1.DependsOn{ 118 Name: []string{"t2"}, 119 }, 120 }, 121 }, 122 }, 123 }, 124 sortedTasks: []string{"t2", "t3", "t1"}, 125 isDag: true, 126 }, 127 } 128 129 for _, testcase := range testCases { 130 tasks, isDag := topoSort(testcase.job) 131 if isDag != testcase.isDag || !reflect.DeepEqual(tasks, testcase.sortedTasks) { 132 t.Errorf("%s failed, expect sortedTasks: %v, got: %v, expected isDag: %v, got: %v", 133 testcase.name, testcase.sortedTasks, tasks, testcase.isDag, isDag) 134 } 135 } 136 }