@@ -42,7 +42,15 @@ const (
42
42
mb30 = 30 * MB
43
43
)
44
44
45
- func TestSelectDriveByTopology (t1 * testing.T ) {
45
+ func TestSelectDrivesByTopology (t1 * testing.T ) {
46
+
47
+ getDriveNameSet := func (drives []directcsi.DirectCSIDrive ) []string {
48
+ driveNames := []string {}
49
+ for _ , drive := range drives {
50
+ driveNames = append (driveNames , drive .Name )
51
+ }
52
+ return driveNames
53
+ }
46
54
47
55
testDriveSet := []directcsi.DirectCSIDrive {
48
56
{
@@ -53,6 +61,14 @@ func TestSelectDriveByTopology(t1 *testing.T) {
53
61
Topology : map [string ]string {"node" : "N1" , "rack" : "RK1" , "zone" : "Z1" , "region" : "R1" },
54
62
},
55
63
},
64
+ {
65
+ ObjectMeta : metav1.ObjectMeta {
66
+ Name : "drive11" ,
67
+ },
68
+ Status : directcsi.DirectCSIDriveStatus {
69
+ Topology : map [string ]string {"node" : "N1" , "rack" : "RK1" , "zone" : "Z1" , "region" : "R1" },
70
+ },
71
+ },
56
72
{
57
73
ObjectMeta : metav1.ObjectMeta {
58
74
Name : "drive2" ,
@@ -61,6 +77,14 @@ func TestSelectDriveByTopology(t1 *testing.T) {
61
77
Topology : map [string ]string {"node" : "N2" , "rack" : "RK2" , "zone" : "Z2" , "region" : "R2" },
62
78
},
63
79
},
80
+ {
81
+ ObjectMeta : metav1.ObjectMeta {
82
+ Name : "drive22" ,
83
+ },
84
+ Status : directcsi.DirectCSIDriveStatus {
85
+ Topology : map [string ]string {"node" : "N2" , "rack" : "RK2" , "zone" : "Z2" , "region" : "R2" },
86
+ },
87
+ },
64
88
{
65
89
ObjectMeta : metav1.ObjectMeta {
66
90
Name : "drive3" ,
@@ -72,56 +96,56 @@ func TestSelectDriveByTopology(t1 *testing.T) {
72
96
}
73
97
74
98
testCases := []struct {
75
- name string
76
- topologyRequest * csi.Topology
77
- errExpected bool
78
- selectedDriveName string
99
+ name string
100
+ topologyRequest * csi.Topology
101
+ errExpected bool
102
+ selectedDriveNames [] string
79
103
}{
80
104
{
81
- name : "test1" ,
82
- topologyRequest : & csi.Topology {Segments : map [string ]string {"node" : "N2" , "rack" : "RK2" , "zone" : "Z2" , "region" : "R2" }},
83
- errExpected : false ,
84
- selectedDriveName : "drive2" ,
105
+ name : "test1" ,
106
+ topologyRequest : & csi.Topology {Segments : map [string ]string {"node" : "N2" , "rack" : "RK2" , "zone" : "Z2" , "region" : "R2" }},
107
+ errExpected : false ,
108
+ selectedDriveNames : [] string { "drive2" , "drive22" } ,
85
109
},
86
110
{
87
- name : "test2" ,
88
- topologyRequest : & csi.Topology {Segments : map [string ]string {"node" : "N3" , "rack" : "RK3" , "zone" : "Z3" , "region" : "R3" }},
89
- errExpected : false ,
90
- selectedDriveName : "drive3" ,
111
+ name : "test2" ,
112
+ topologyRequest : & csi.Topology {Segments : map [string ]string {"node" : "N3" , "rack" : "RK3" , "zone" : "Z3" , "region" : "R3" }},
113
+ errExpected : false ,
114
+ selectedDriveNames : [] string { "drive3" } ,
91
115
},
92
116
{
93
- name : "test3" ,
94
- topologyRequest : & csi.Topology {Segments : map [string ]string {"node" : "N4" , "rack" : "RK2" , "zone" : "Z4" , "region" : "R2" }},
95
- errExpected : true ,
96
- selectedDriveName : "" ,
117
+ name : "test3" ,
118
+ topologyRequest : & csi.Topology {Segments : map [string ]string {"node" : "N4" , "rack" : "RK2" , "zone" : "Z4" , "region" : "R2" }},
119
+ errExpected : true ,
120
+ selectedDriveNames : [] string {} ,
97
121
},
98
122
{
99
- name : "test4" ,
100
- topologyRequest : & csi.Topology {Segments : map [string ]string {"node" : "N3" , "rack" : "RK3" }},
101
- errExpected : false ,
102
- selectedDriveName : "drive3" ,
123
+ name : "test4" ,
124
+ topologyRequest : & csi.Topology {Segments : map [string ]string {"node" : "N3" , "rack" : "RK3" }},
125
+ errExpected : false ,
126
+ selectedDriveNames : [] string { "drive3" } ,
103
127
},
104
128
{
105
- name : "test5" ,
106
- topologyRequest : & csi.Topology {Segments : map [string ]string {"node" : "N1" , "rack" : "RK5" }},
107
- errExpected : true ,
108
- selectedDriveName : "" ,
129
+ name : "test5" ,
130
+ topologyRequest : & csi.Topology {Segments : map [string ]string {"node" : "N1" , "rack" : "RK5" }},
131
+ errExpected : true ,
132
+ selectedDriveNames : [] string {} ,
109
133
},
110
134
{
111
- name : "test5" ,
112
- topologyRequest : & csi.Topology {Segments : map [string ]string {"node" : "N1" }},
113
- errExpected : false ,
114
- selectedDriveName : "drive1" ,
135
+ name : "test5" ,
136
+ topologyRequest : & csi.Topology {Segments : map [string ]string {"node" : "N1" }},
137
+ errExpected : false ,
138
+ selectedDriveNames : [] string { "drive1" , "drive11" } ,
115
139
},
116
140
}
117
141
118
142
for _ , tt := range testCases {
119
143
t1 .Run (tt .name , func (t1 * testing.T ) {
120
- selectedDrive , err := selectDriveByTopology (tt .topologyRequest , testDriveSet )
144
+ selectedDrives , err := selectDrivesByTopology (tt .topologyRequest , testDriveSet )
121
145
if tt .errExpected && err == nil {
122
146
t1 .Fatalf ("Test case name %s: Expected error but succeeded" , tt .name )
123
- } else if selectedDrive . Name != tt .selectedDriveName {
124
- t1 .Errorf ("Test case name %s: Expected drive name = %s, got %v" , tt .name , tt .selectedDriveName , selectedDrive . Name )
147
+ } else if ! reflect . DeepEqual ( getDriveNameSet ( selectedDrives ), tt .selectedDriveNames ) {
148
+ t1 .Errorf ("Test case name %s: Expected drive names = %s, got %v" , tt .name , tt .selectedDriveNames , getDriveNameSet ( selectedDrives ) )
125
149
}
126
150
})
127
151
}
@@ -916,3 +940,93 @@ func TestCreateVolume(t *testing.T) {
916
940
}
917
941
}
918
942
}
943
+
944
+ func TestSelectDriveByFreeCapacity (t1 * testing.T ) {
945
+ testCases := []struct {
946
+ name string
947
+ driveList []directcsi.DirectCSIDrive
948
+ expectedDriveNames []string
949
+ }{
950
+ {
951
+ name : "test1" ,
952
+ driveList : []directcsi.DirectCSIDrive {
953
+ {
954
+ ObjectMeta : metav1.ObjectMeta {
955
+ Name : "drive1" ,
956
+ },
957
+ Status : directcsi.DirectCSIDriveStatus {
958
+ FreeCapacity : 1000 ,
959
+ },
960
+ },
961
+ {
962
+ ObjectMeta : metav1.ObjectMeta {
963
+ Name : "drive2" ,
964
+ },
965
+ Status : directcsi.DirectCSIDriveStatus {
966
+ FreeCapacity : 2000 ,
967
+ },
968
+ },
969
+ {
970
+ ObjectMeta : metav1.ObjectMeta {
971
+ Name : "drive3" ,
972
+ },
973
+ Status : directcsi.DirectCSIDriveStatus {
974
+ FreeCapacity : 3000 ,
975
+ },
976
+ },
977
+ },
978
+ expectedDriveNames : []string {"drive3" },
979
+ },
980
+ {
981
+ name : "test2" ,
982
+ driveList : []directcsi.DirectCSIDrive {
983
+ {
984
+ ObjectMeta : metav1.ObjectMeta {
985
+ Name : "drive1" ,
986
+ },
987
+ Status : directcsi.DirectCSIDriveStatus {
988
+ FreeCapacity : 4000 ,
989
+ },
990
+ },
991
+ {
992
+ ObjectMeta : metav1.ObjectMeta {
993
+ Name : "drive2" ,
994
+ },
995
+ Status : directcsi.DirectCSIDriveStatus {
996
+ FreeCapacity : 4000 ,
997
+ },
998
+ },
999
+ {
1000
+ ObjectMeta : metav1.ObjectMeta {
1001
+ Name : "drive3" ,
1002
+ },
1003
+ Status : directcsi.DirectCSIDriveStatus {
1004
+ FreeCapacity : 3000 ,
1005
+ },
1006
+ },
1007
+ },
1008
+ expectedDriveNames : []string {"drive1" , "drive2" },
1009
+ },
1010
+ }
1011
+
1012
+ checkDriveName := func (expectedDriveNames []string , driveName string ) bool {
1013
+ for _ , edName := range expectedDriveNames {
1014
+ if edName == driveName {
1015
+ return true
1016
+ }
1017
+ }
1018
+ return false
1019
+ }
1020
+
1021
+ for _ , tt := range testCases {
1022
+ t1 .Run (tt .name , func (t1 * testing.T ) {
1023
+ selectedDrive , err := selectDriveByFreeCapacity (tt .driveList )
1024
+ if err != nil {
1025
+ t1 .Fatalf ("Text case name: %s: Error: %v" , tt .name , err )
1026
+ }
1027
+ if ! checkDriveName (tt .expectedDriveNames , selectedDrive .Name ) {
1028
+ t1 .Errorf ("Test case name %s: Unexpected drive selected. Expected one among %v but got %s" , tt .name , tt .expectedDriveNames , selectedDrive .Name )
1029
+ }
1030
+ })
1031
+ }
1032
+ }
0 commit comments