-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathtest_lvmoiscsi_sr.py
More file actions
116 lines (100 loc) · 4.47 KB
/
Copy pathtest_lvmoiscsi_sr.py
File metadata and controls
116 lines (100 loc) · 4.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
import pytest
from lib.commands import SSHCommandFailed
from lib.common import Defer, vm_image, wait_for
from lib.host import Host
from lib.sr import SR
from lib.vdi import VDI, ImageFormat
from lib.vm import VM
from tests.storage import (
MAX_VDI_SIZE,
CoalesceOperation,
ImageFormat,
XVACompression,
coalesce_integrity,
full_vdi_write,
vdi_export_import,
vdi_is_open,
xva_export_import,
)
# Requirements:
# - one XCP-ng host >= 8.2
# - a valid lvmoiscsi config
class TestLVMOISCSISRCreateDestroy:
"""
Tests that do not use fixtures that setup the SR or import VMs,
because they precisely need to test SR creation and destruction,
and VM import.
"""
def test_create_and_destroy_sr(self, host: Host, lvmoiscsi_device_config: dict[str, str],
image_format: ImageFormat) -> None:
# Create and destroy tested in the same test to leave the host as unchanged as possible
sr = host.sr_create('lvmoiscsi', "lvmoiscsi-SR-test",
lvmoiscsi_device_config | {'preferred-image-formats': image_format},
shared=True, verify=True)
# import a VM in order to detect vm import issues here rather than in the vm_on_xfs_fixture used in
# the next tests, because errors in fixtures break teardown
vm = host.import_vm(vm_image('mini-linux-x86_64-bios'), sr_uuid=sr.uuid)
vm.destroy(verify=True)
sr.destroy(verify=True)
@pytest.mark.usefixtures('image_format')
@pytest.mark.usefixtures("lvmoiscsi_sr")
@pytest.mark.thick_provisioned
class TestLVMOISCSISR:
@pytest.mark.quicktest
def test_quicktest(self, lvmoiscsi_sr: SR) -> None:
lvmoiscsi_sr.run_quicktest()
def test_vdi_is_not_open(self, vdi_on_lvmoiscsi_sr: VDI) -> None:
assert not vdi_is_open(vdi_on_lvmoiscsi_sr)
@pytest.mark.small_vm # run with a small VM to test the features
@pytest.mark.big_vm # and ideally with a big VM to test it scales
def test_start_and_shutdown_VM(self, vm_on_lvmoiscsi_sr: VM) -> None:
vm = vm_on_lvmoiscsi_sr
vm.start()
vm.wait_for_os_booted()
vm.shutdown(verify=True)
@pytest.mark.small_vm
@pytest.mark.big_vm
def test_snapshot(self, vm_on_lvmoiscsi_sr: VM) -> None:
vm = vm_on_lvmoiscsi_sr
vm.start()
try:
vm.wait_for_os_booted()
vm.test_snapshot_on_running_vm()
finally:
vm.shutdown(verify=True)
@pytest.mark.small_vm
@pytest.mark.parametrize("vdi_op", ["snapshot", "clone"])
def test_coalesce(self, storage_test_vm: 'VM', vdi_on_lvmoiscsi_sr: 'VDI', vdi_op: CoalesceOperation,
defer: Defer) -> None:
coalesce_integrity(storage_test_vm, vdi_on_lvmoiscsi_sr, vdi_op, defer)
@pytest.mark.small_vm
@pytest.mark.disk_throughput_intensive
def test_full_vdi_write(self, storage_test_vm: VM, vdi_on_lvmoiscsi_sr: VDI, defer: Defer):
full_vdi_write(storage_test_vm, vdi_on_lvmoiscsi_sr, defer)
@pytest.mark.small_vm
def test_invalid_vdi_size(self, lvmoiscsi_sr: SR, image_format: ImageFormat):
with pytest.raises(SSHCommandFailed) as excinfo:
lvmoiscsi_sr.create_vdi(virtual_size=MAX_VDI_SIZE[image_format] + 1)
assert 'VDI Invalid size' in excinfo.value.stdout
@pytest.mark.small_vm
@pytest.mark.parametrize("compression", ["none", "gzip", "zstd"])
def test_xva_export_import(self, vm_on_lvmoiscsi_sr: VM, compression: XVACompression, temp_large_dir: str,
defer: Defer) -> None:
xva_export_import(vm_on_lvmoiscsi_sr, compression, temp_large_dir, defer)
@pytest.mark.small_vm
def test_vdi_export_import(self, storage_test_vm: VM, lvmoiscsi_sr: SR, image_format: ImageFormat,
temp_large_dir: str, defer: Defer) -> None:
vdi_export_import(storage_test_vm, lvmoiscsi_sr, image_format, temp_large_dir, defer)
# *** tests with reboots (longer tests).
@pytest.mark.reboot
@pytest.mark.small_vm
def test_reboot(self, host: Host, lvmoiscsi_sr: SR, vm_on_lvmoiscsi_sr: VM) -> None:
sr = lvmoiscsi_sr
vm = vm_on_lvmoiscsi_sr
host.reboot(verify=True)
wait_for(sr.all_pbds_attached, "Wait for PBD attached")
# start the VM as a way to check that the underlying SR is operational
vm.start(on=host.uuid)
vm.wait_for_os_booted()
vm.shutdown(verify=True)
# *** End of tests with reboots