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  }