Skip to content

Commit 34f0081

Browse files
committed
quicktests: Force VDI format on creation
Sort of a follow-up to #6908, which filtered out SRs that only offer QCOW2 backing files. This commit allows running delta tests on SRs that offer both QCOW2 and VHD backing files (with QCOW2 as the default). Not specifying the format on SRs with default image format=qcow2 breaks delta tests for VHD (since they require two vhd images to calculate differences between). Force the format in VDI.create through sm-config instead. The sm-config parameter is ignored if it's not supported (i.e. on XenServer VHD-only SMAPIv1 SRs). Force format=vhd for max_vdi_size tests as well, since they're only exporting to vhd (and testing its max size), this speeds up the tests. Signed-off-by: Andrii Sultanov <andriy.sultanov@vates.tech>
1 parent b43eb5b commit 34f0081

4 files changed

Lines changed: 56 additions & 39 deletions

File tree

ocaml/quicktest/qt.ml

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -192,20 +192,23 @@ module VDI = struct
192192

193193
let test_vdi_name_description = "VDI for storage quicktest"
194194

195-
let make rpc session_id ?(virtual_size = 4194304L) sR =
195+
let make rpc session_id ?(virtual_size = 4194304L) ?backing_format sR =
196+
let sm_config =
197+
match backing_format with Some x -> [("image-format", x)] | None -> []
198+
in
196199
Client.Client.VDI.create ~sR ~session_id ~rpc
197200
~name_label:test_vdi_name_label
198201
~name_description:test_vdi_name_description ~_type:`user ~sharable:false
199202
~read_only:false ~virtual_size ~xenstore_data:[] ~other_config:[] ~tags:[]
200-
~sm_config:[]
203+
~sm_config
201204

202205
let with_destroyed rpc session_id self f =
203206
Xapi_stdext_pervasives.Pervasiveext.finally f (fun () ->
204207
Client.Client.VDI.destroy ~rpc ~session_id ~self
205208
)
206209

207-
let with_new rpc session_id ?(virtual_size = 4194304L) sr f =
208-
let self = make rpc session_id ~virtual_size sr in
210+
let with_new rpc session_id ?(virtual_size = 4194304L) ?backing_format sr f =
211+
let self = make rpc session_id ~virtual_size ?backing_format sr in
209212
with_destroyed rpc session_id self (fun () -> f self)
210213

211214
let with_any rpc session_id sr_info f =

ocaml/quicktest/qt.mli

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ module VDI : sig
7575
rpc
7676
-> API.ref_session
7777
-> ?virtual_size:int64
78+
-> ?backing_format:string
7879
-> API.ref_SR
7980
-> (API.ref_VDI -> 'a)
8081
-> 'a

ocaml/quicktest/quicktest_max_vdi_size.ml

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
let with_max_vdi rpc session_id sr f =
22
Qt.VDI.with_new rpc session_id ~virtual_size:Constants.max_vhd_size sr
3-
(fun vdi ->
3+
~backing_format:"vhd" (fun vdi ->
44
(* We write some data to the very end of the VDI to ensure the IO code
55
gets tested with large offsets *)
66
Qt.VDI.with_open rpc session_id vdi `RW (fun fd ->
@@ -43,7 +43,8 @@ let test_export_import rpc session_id sr_info () =
4343
|> ignore ;
4444
Xapi_stdext_pervasives.Pervasiveext.finally
4545
(fun () ->
46-
Qt.VDI.with_new rpc session_id ~virtual_size sR (fun new_vdi ->
46+
Qt.VDI.with_new rpc session_id ~virtual_size sR ~backing_format:format
47+
(fun new_vdi ->
4748
let new_vdi_uuid =
4849
Client.Client.VDI.get_uuid ~rpc ~session_id ~self:new_vdi
4950
in

ocaml/quicktest/quicktest_vdi_ops_data_integrity.ml

Lines changed: 45 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -57,13 +57,14 @@ let checksum rpc session_id vdi =
5757
Digest.to_hex (Digest.file path)
5858
)
5959

60-
let check_vdi_unchanged rpc session_id ~vdi_size ~prepare_vdi ~vdi_op sr_info ()
61-
=
60+
let check_vdi_unchanged rpc session_id ~vdi_size ~prepare_vdi ~vdi_op
61+
~backing_format sr_info () =
6262
let sR = sr_info.Qt.sr in
63-
Qt.VDI.with_new ~virtual_size:vdi_size rpc session_id sR (fun vdi ->
63+
Qt.VDI.with_new ~virtual_size:vdi_size ~backing_format rpc session_id sR
64+
(fun vdi ->
6465
prepare_vdi rpc session_id vdi ;
6566
let checksum_original = checksum rpc session_id vdi in
66-
let new_vdi = vdi_op rpc session_id sR vdi in
67+
let new_vdi = vdi_op rpc session_id sR vdi backing_format in
6768
Qt.VDI.with_destroyed rpc session_id new_vdi (fun () ->
6869
let checksum_copy = checksum rpc session_id new_vdi in
6970
if checksum_copy <> checksum_original then
@@ -77,11 +78,12 @@ let check_vdi_unchanged rpc session_id ~vdi_size ~prepare_vdi ~vdi_op sr_info ()
7778
)
7879

7980
let check_vdi_delta rpc session_id ~vdi_size ~prepare_vdi ~prepare_vdi_base
80-
~vdi_op sr_info () =
81+
~vdi_op ~backing_format sr_info () =
8182
let sR = sr_info.Qt.sr in
82-
Qt.VDI.with_new ~virtual_size:vdi_size rpc session_id sR
83+
Qt.VDI.with_new ~virtual_size:vdi_size ~backing_format rpc session_id sR
8384
@@ fun vdi_original ->
84-
Qt.VDI.with_new ~virtual_size:vdi_size rpc session_id sR @@ fun base_vdi ->
85+
Qt.VDI.with_new ~virtual_size:vdi_size ~backing_format rpc session_id sR
86+
@@ fun base_vdi ->
8587
prepare_vdi rpc session_id vdi_original ;
8688
let checksum_original = checksum rpc session_id vdi_original in
8789
prepare_vdi_base rpc session_id base_vdi ;
@@ -96,7 +98,7 @@ let check_vdi_delta rpc session_id ~vdi_size ~prepare_vdi ~prepare_vdi_base
9698
checksum_copy checksum_original
9799
)
98100

99-
let copy_vdi rpc session_id sr vdi =
101+
let copy_vdi rpc session_id sr vdi _ =
100102
Client.Client.VDI.copy ~rpc ~session_id ~vdi ~base_vdi:API.Ref.null
101103
~into_vdi:API.Ref.null ~sr
102104

@@ -117,14 +119,15 @@ let export_vdi_to_file ~rpc ~session_id ~exportformat ?base_vdi ~vdi () =
117119
|> ignore ;
118120
file
119121

120-
let create_new_vdi ~rpc ~session_id ~sR ~vdi =
122+
let create_new_vdi ~rpc ~session_id ~sR ~vdi ~backing_format =
121123
let virtual_size =
122124
Client.Client.VDI.get_virtual_size ~rpc ~session_id ~self:vdi
123125
in
126+
let sm_config = [("image-format", backing_format)] in
124127
let new_vdi =
125128
Client.Client.VDI.create ~rpc ~session_id ~name_label:""
126129
~name_description:"" ~sR ~virtual_size ~_type:`user ~sharable:false
127-
~read_only:false ~other_config:[] ~xenstore_data:[] ~sm_config:[] ~tags:[]
130+
~read_only:false ~other_config:[] ~xenstore_data:[] ~sm_config ~tags:[]
128131
in
129132
let new_vdi_uuid =
130133
Client.Client.VDI.get_uuid ~rpc ~session_id ~self:new_vdi
@@ -141,11 +144,13 @@ let import_file_into_vdi ~file ~vdi_uuid ~exportformat =
141144
]
142145
|> ignore
143146

144-
let export_import_vdi rpc session_id ~exportformat sR vdi =
147+
let export_import_vdi rpc session_id ~exportformat sR vdi backing_format =
145148
let file = export_vdi_to_file ~rpc ~session_id ~exportformat ~vdi () in
146149
Xapi_stdext_pervasives.Pervasiveext.finally
147150
(fun () ->
148-
let new_vdi_uuid, new_vdi = create_new_vdi ~rpc ~session_id ~sR ~vdi in
151+
let new_vdi_uuid, new_vdi =
152+
create_new_vdi ~rpc ~session_id ~sR ~vdi ~backing_format
153+
in
149154
import_file_into_vdi ~file ~vdi_uuid:new_vdi_uuid ~exportformat ;
150155
new_vdi
151156
)
@@ -177,79 +182,83 @@ let delta_export_import_vhd = export_delta_import_vdi ~exportformat:"vhd"
177182

178183
let delta_export_import_qcow = export_delta_import_vdi ~exportformat:"qcow2"
179184

180-
let data_integrity_tests vdi_op op_name =
185+
let data_integrity_tests vdi_op op_name backing_format =
181186
[
182187
( op_name ^ ": small empty VDI"
183188
, `Slow
184-
, check_vdi_unchanged ~vdi_size:Sizes.(4L ** mib) ~prepare_vdi:noop ~vdi_op
189+
, check_vdi_unchanged
190+
~vdi_size:Sizes.(4L ** mib)
191+
~prepare_vdi:noop ~vdi_op ~backing_format
185192
)
186193
; ( op_name ^ ": small random VDI"
187194
, `Slow
188195
, check_vdi_unchanged
189196
~vdi_size:Sizes.(4L ** mib)
190-
~prepare_vdi:write_random_data ~vdi_op
197+
~prepare_vdi:write_random_data ~vdi_op ~backing_format
191198
)
192199
; ( op_name ^ ": small full VDI"
193200
, `Slow
194-
, check_vdi_unchanged ~vdi_size:Sizes.(4L ** mib) ~prepare_vdi:fill ~vdi_op
201+
, check_vdi_unchanged
202+
~vdi_size:Sizes.(4L ** mib)
203+
~prepare_vdi:fill ~vdi_op ~backing_format
195204
)
196205
]
197206

198-
let delta_data_integrity_tests vdi_op op_name =
207+
let delta_data_integrity_tests vdi_op op_name backing_format =
199208
[
200209
( op_name ^ ": delta between empty & empty VDI"
201210
, `Slow
202-
, check_vdi_delta
211+
, check_vdi_delta ~backing_format
203212
~vdi_size:Sizes.(4L ** mib)
204213
~prepare_vdi:noop ~prepare_vdi_base:noop ~vdi_op
205214
)
206215
; ( op_name ^ ": delta between random & empty VDI"
207216
, `Slow
208-
, check_vdi_delta
217+
, check_vdi_delta ~backing_format
209218
~vdi_size:Sizes.(4L ** mib)
210219
~prepare_vdi:write_random_data ~prepare_vdi_base:noop ~vdi_op
211220
)
212221
; ( op_name ^ ": delta between random & random VDI"
213222
, `Slow
214-
, check_vdi_delta
223+
, check_vdi_delta ~backing_format
215224
~vdi_size:Sizes.(4L ** mib)
216225
~prepare_vdi:write_random_data ~prepare_vdi_base:write_random_data
217226
~vdi_op
218227
)
219228
; ( op_name ^ ": delta between full and empty VDI"
220229
, `Slow
221-
, check_vdi_delta
230+
, check_vdi_delta ~backing_format
222231
~vdi_size:Sizes.(4L ** mib)
223232
~prepare_vdi:fill ~prepare_vdi_base:noop ~vdi_op
224233
)
225234
; ( op_name ^ ": delta between full and random VDI"
226235
, `Slow
227-
, check_vdi_delta
236+
, check_vdi_delta ~backing_format
228237
~vdi_size:Sizes.(4L ** mib)
229238
~prepare_vdi:fill ~prepare_vdi_base:write_random_data ~vdi_op
230239
)
231240
; ( op_name ^ ": delta between full and full VDI"
232241
, `Slow
233-
, check_vdi_delta
242+
, check_vdi_delta ~backing_format
234243
~vdi_size:Sizes.(4L ** mib)
235244
~prepare_vdi:fill ~prepare_vdi_base:fill ~vdi_op
236245
)
237246
]
238247

239-
let large_data_integrity_tests vdi_op op_name =
248+
let large_data_integrity_tests vdi_op op_name backing_format =
240249
let b = Random.int64 16L in
241250
[
242251
( op_name ^ ": ~2GiB empty VDI"
243252
, `Slow
244253
, check_vdi_unchanged
245254
~vdi_size:Sizes.((2L ** gib) +* b)
246-
~prepare_vdi:noop ~vdi_op
255+
~prepare_vdi:noop ~vdi_op ~backing_format
247256
)
248257
; ( op_name ^ ": ~2GiB random VDI"
249258
, `Slow
250259
, check_vdi_unchanged
251260
~vdi_size:Sizes.((2L ** gib) +* b)
252-
~prepare_vdi:write_random_data ~vdi_op
261+
~prepare_vdi:write_random_data ~vdi_op ~backing_format
253262
)
254263
]
255264

@@ -266,30 +275,33 @@ let supported_gfs2_srs test_case =
266275
test_case |> conn |> sr (sr_with_vdi_create_destroy |> SR.has_type "gfs2")
267276

268277
let tests () =
269-
(data_integrity_tests copy_vdi "VDI.copy" |> supported_srs)
270-
@ (large_data_integrity_tests copy_vdi "VDI.copy" |> supported_srs)
278+
(data_integrity_tests copy_vdi "VDI.copy" "vhd" |> supported_srs)
279+
@ (large_data_integrity_tests copy_vdi "VDI.copy" "vhd" |> supported_srs)
271280
@ (data_integrity_tests export_import_raw "VDI export/import to/from raw file"
281+
"vhd"
272282
|> supported_srs
273283
)
274284
@ (data_integrity_tests export_import_vhd "VDI export/import to/from VHD file"
285+
"vhd"
275286
|> supported_srs
276287
)
277288
@ (delta_data_integrity_tests delta_export_import_vhd
278-
"VDI delta export/import to/from VHD file"
289+
"VDI delta export/import to/from VHD file" "vhd"
279290
|> supported_srs ~f:Qt_filter.SR.smapiv1
280291
)
281-
@ (data_integrity_tests export_import_tar "VDI export/import to/from TAR file"
292+
@ (data_integrity_tests export_import_tar
293+
"VDI export/import to/from TAR file" "vhd"
282294
|> supported_srs
283295
)
284296
@ (data_integrity_tests export_import_qcow
285-
"VDI export/import to/from QCOW file"
297+
"VDI export/import to/from QCOW file" "qcow2"
286298
|> supported_srs
287299
)
288300
@ (delta_data_integrity_tests delta_export_import_qcow
289-
"VDI delta export/import to/from QCOW file"
301+
"VDI delta export/import to/from QCOW file" "qcow2"
290302
|> supported_srs
291303
)
292304
@ (large_data_integrity_tests export_import_tar
293-
"VDI export/import to/from TAR file"
305+
"VDI export/import to/from TAR file" "vhd"
294306
|> supported_gfs2_srs
295307
)

0 commit comments

Comments
 (0)