@@ -113,6 +113,72 @@ func TestGetDiskSpec(t *testing.T) {
113113 additionalCloneDiskSizes : []int32 {defaultSizeGiB },
114114 err : "Error getting disk config spec for additional disk: can't resize template disk down, initial capacity is larger: 23068672KiB > 20971520KiB" ,
115115 },
116+ }
117+
118+ for _ , test := range testCases {
119+ tc := test
120+ t .Run (tc .name , func (t * testing.T ) {
121+ cloneSpec := infrav1.VirtualMachineCloneSpec {
122+ DiskGiB : tc .cloneDiskSize ,
123+ AdditionalDisksGiB : tc .additionalCloneDiskSizes ,
124+ DataDisks : tc .dataDisks ,
125+ }
126+ vsphereVM := & infrav1.VSphereVM {
127+ Spec : infrav1.VSphereVMSpec {
128+ VirtualMachineCloneSpec : cloneSpec ,
129+ },
130+ }
131+ vmContext := & capvcontext.VMContext {VSphereVM : vsphereVM }
132+ deviceResults , err := getDiskSpec (vmContext , tc .disks )
133+ if (tc .err != "" && err == nil ) || (tc .err == "" && err != nil ) || (err != nil && tc .err != err .Error ()) {
134+ t .Fatalf ("Expected to get '%v' error from getDiskSpec, got: '%v'" , tc .err , err )
135+ }
136+ if deviceFound := len (deviceResults ) != 0 ; tc .expectDevice != deviceFound {
137+ t .Fatalf ("Expected to get a device: %v, but got: '%#v'" , tc .expectDevice , deviceResults )
138+ }
139+ if tc .expectDevice {
140+ primaryDevice := deviceResults [0 ]
141+ validateDiskSpec (t , primaryDevice , tc .cloneDiskSize )
142+ if len (tc .additionalCloneDiskSizes ) != 0 {
143+ secondaryDevice := deviceResults [1 ]
144+ validateDiskSpec (t , secondaryDevice , tc .additionalCloneDiskSizes [0 ])
145+ }
146+
147+ // Check number of disks present
148+ if len (deviceResults ) != tc .expectedDiskCount {
149+ t .Fatalf ("Expected device count to be %v, but found %v" , tc .expectedDiskCount , len (deviceResults ))
150+ }
151+ }
152+ })
153+ }
154+ }
155+
156+ func TestCreateDiskSpec (t * testing.T ) {
157+ model , session , server := initSimulator (t )
158+ t .Cleanup (model .Remove )
159+ t .Cleanup (server .Close )
160+ vm := simulator .Map .Any ("VirtualMachine" ).(* simulator.VirtualMachine )
161+ machine := object .NewVirtualMachine (session .Client .Client , vm .Reference ())
162+
163+ devices , err := machine .Device (ctx .TODO ())
164+ if err != nil {
165+ t .Fatalf ("Failed to obtain vm devices: %v" , err )
166+ }
167+ defaultDisks := devices .SelectByType ((* types .VirtualDisk )(nil ))
168+ if len (defaultDisks ) < 1 {
169+ t .Fatal ("Unable to find attached disk for data disk testing" )
170+ }
171+
172+ testCases := []struct {
173+ expectDevice bool
174+ cloneDiskSize int32
175+ additionalCloneDiskSizes []int32
176+ name string
177+ disks object.VirtualDeviceList
178+ dataDisks []infrav1.VSphereDisk
179+ expectedDiskCount int
180+ err string
181+ }{
116182 {
117183 name : "Successfully add data disk" ,
118184 disks : devices ,
@@ -121,8 +187,7 @@ func TestGetDiskSpec(t *testing.T) {
121187 SizeGiB : 10 ,
122188 },
123189 },
124- expectDevice : true ,
125- expectedDiskCount : 2 ,
190+ expectDevice : true ,
126191 },
127192 {
128193 name : "Successfully add multiple data disks" ,
@@ -135,8 +200,7 @@ func TestGetDiskSpec(t *testing.T) {
135200 SizeGiB : 20 ,
136201 },
137202 },
138- expectDevice : true ,
139- expectedDiskCount : 3 ,
203+ expectDevice : true ,
140204 },
141205 {
142206 name : "Successfully add multiple data disks when template has multiple disks" ,
@@ -149,42 +213,23 @@ func TestGetDiskSpec(t *testing.T) {
149213 SizeGiB : 20 ,
150214 },
151215 },
152- expectDevice : true ,
153- expectedDiskCount : 4 ,
216+ expectDevice : true ,
154217 },
155218 }
156219
157220 for _ , test := range testCases {
158221 tc := test
159222 t .Run (tc .name , func (t * testing.T ) {
160- cloneSpec := infrav1.VirtualMachineCloneSpec {
161- DiskGiB : tc .cloneDiskSize ,
162- AdditionalDisksGiB : tc .additionalCloneDiskSizes ,
163- DataDisks : tc .dataDisks ,
164- }
165- vsphereVM := & infrav1.VSphereVM {
166- Spec : infrav1.VSphereVMSpec {
167- VirtualMachineCloneSpec : cloneSpec ,
168- },
169- }
170- vmContext := & capvcontext.VMContext {VSphereVM : vsphereVM }
171- deviceResults , err := getDiskSpec (ctx .TODO (), vmContext , tc .disks )
223+ deviceResults , err := createDataDisks (ctx .TODO (), tc .dataDisks , tc .disks )
172224 if (tc .err != "" && err == nil ) || (tc .err == "" && err != nil ) || (err != nil && tc .err != err .Error ()) {
173- t .Fatalf ("Expected to get '%v' error from getDiskSpec , got: '%v'" , tc .err , err )
225+ t .Fatalf ("Expected to get '%v' error from createDataDisks , got: '%v'" , tc .err , err )
174226 }
175227 if deviceFound := len (deviceResults ) != 0 ; tc .expectDevice != deviceFound {
176228 t .Fatalf ("Expected to get a device: %v, but got: '%#v'" , tc .expectDevice , deviceResults )
177229 }
178230 if tc .expectDevice {
179- primaryDevice := deviceResults [0 ]
180- validateDiskSpec (t , primaryDevice , tc .cloneDiskSize )
181- if len (tc .additionalCloneDiskSizes ) != 0 {
182- secondaryDevice := deviceResults [1 ]
183- validateDiskSpec (t , secondaryDevice , tc .additionalCloneDiskSizes [0 ])
184- }
185-
186231 // Check number of disks present
187- if len (deviceResults ) != tc .expectedDiskCount {
232+ if len (deviceResults ) != len ( tc .dataDisks ) {
188233 t .Fatalf ("Expected device count to be %v, but found %v" , tc .expectedDiskCount , len (deviceResults ))
189234 }
190235 }
@@ -248,21 +293,21 @@ func TestAssignUnitNumber(t *testing.T) {
248293 controller : controller ,
249294 dataDisks : createDataDiskDefinitions (1 ),
250295 startingOffset : 50 ,
251- err : "unable to assign unit number due to offset 50 exceeding max allowed of 30" ,
296+ err : "50 exceeds maximum number of units 30" ,
252297 },
253298 {
254299 name : "Add data disk with no ova disk" ,
255300 devices : nil ,
256301 controller : nil ,
257302 dataDisks : createDataDiskDefinitions (1 ),
258- err : "unable to assign unit number due to controller parameter being nil" ,
303+ err : "controller parameter cannot be nil" ,
259304 },
260305 {
261306 name : "Add too many data disks with 1 ova disk" ,
262307 devices : deviceList ,
263308 controller : controller ,
264309 dataDisks : createDataDiskDefinitions (40 ),
265- err : "unable to find available unit number " ,
310+ err : "all unit numbers are already in-use " ,
266311 },
267312 }
268313
0 commit comments