Skip to content

Commit abf0772

Browse files
committed
storage: Avoid writing the whole device in coalesce tests
This is done by: * writing in only a small piece of data at the beginning, in the middle and at the end of the device * creating the snapshot/clone * writing for data in an already used location and a non used one * triggering the coalesce * finally verifying that the data we generated is accessible as expected Signed-off-by: Gaëtan Lehmann <gaetan.lehmann@vates.tech>
1 parent 24edbe5 commit abf0772

1 file changed

Lines changed: 36 additions & 9 deletions

File tree

tests/storage/storage.py

Lines changed: 36 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -197,25 +197,52 @@ def randstream(vm: VM, args: str) -> str:
197197

198198
def coalesce_integrity(vm: VM, vdi: VDI, vdi_op: CoalesceOperation, defer: Defer):
199199
vdi_size = vdi.get_virtual_size()
200-
# second stream is 1/8 of the full one, truncated to a multiple of 32KiB, in order to
201-
# be validable in a single command
202-
second_stream_size = (vdi_size // 8 // (32 * KiB)) * (32 * KiB)
200+
# second stream is 1/16 of the full one, truncated to a multiple of 32KiB
201+
stream_size = min((vdi_size // 16 // (32 * KiB)) * (32 * KiB), 2 * GiB)
203202
vbd = vm.connect_vdi(vdi)
204203
defer(lambda: vm.disconnect_vdi(vdi))
205204

206205
dev = f'/dev/{vbd.param_get("device")}'
207-
checksum = randstream(vm, f'generate {dev}')
208-
# default seed is 0
209-
randstream(vm, f'validate --expected-checksum {checksum} {dev}')
206+
# generate at the start, in the middle and the end of the disk
207+
checksum1 = randstream(vm, f'generate --size {stream_size} {dev}')
208+
checksum2 = randstream(vm, f'generate --position {vdi_size // 2} --size {stream_size} {dev}')
209+
checksum3 = randstream(vm, f'generate --position {vdi_size - stream_size} --size {stream_size} {dev}')
210+
# make sure we can read that exact data before the snapshot/clone
211+
randstream(vm, f'validate --expected-checksum {checksum1} --size {stream_size} {dev}')
212+
randstream(vm, f'validate --expected-checksum {checksum2} --position {vdi_size // 2} --size {stream_size} {dev}')
213+
randstream(
214+
vm, f'validate --expected-checksum {checksum3} --position {vdi_size - stream_size} --size {stream_size} {dev}'
215+
)
210216
match vdi_op:
211217
case 'clone': new_vdi = vdi.clone()
212218
case 'snapshot': new_vdi = vdi.snapshot()
213219
defer(lambda: new_vdi.destroy() if new_vdi is not None else None)
214220

215-
randstream(vm, f'generate --seed 1 --size {second_stream_size} {dev}')
216-
checksum = randstream(vm, f"validate {dev}")
221+
# add some data in a non-used place, and overwrite an already used one
222+
checksum2bis = randstream(vm, f'generate --seed 1 --position {vdi_size // 2} --size {stream_size} {dev}')
223+
checksum4 = randstream(vm, f'generate --position {stream_size} --size {stream_size} {dev}')
224+
# make sure we can write that data before the coalesce
225+
randstream(
226+
vm, f'validate --expected-checksum {checksum2bis} --position {vdi_size // 2} --size {stream_size} {dev}',
227+
)
228+
randstream(
229+
vm, f'validate --expected-checksum {checksum4} --position {stream_size} --size {stream_size} {dev}'
230+
)
231+
232+
# trigger the coalesce
217233
new_vdi = vdi.wait_for_coalesce(new_vdi.destroy)
218-
randstream(vm, f'validate --expected-checksum {checksum} {dev}')
234+
235+
# verify the data is still as expected
236+
randstream(vm, f'validate --expected-checksum {checksum1} --size {stream_size} {dev}')
237+
randstream(
238+
vm, f'validate --expected-checksum {checksum2bis} --position {vdi_size // 2} --size {stream_size} {dev}',
239+
)
240+
randstream(
241+
vm, f'validate --expected-checksum {checksum3} --position {vdi_size - stream_size} --size {stream_size} {dev}'
242+
)
243+
randstream(
244+
vm, f'validate --expected-checksum {checksum4} --position {stream_size} --size {stream_size} {dev}'
245+
)
219246

220247
XVACompression = Literal['none', 'gzip', 'zstd']
221248

0 commit comments

Comments
 (0)