44from lib .common import Defer , vm_image , wait_for
55from lib .host import Host
66from lib .sr import SR
7- from lib .vdi import VDI , ImageFormat
7+ from lib .vdi import VDI
88from lib .vm import VM
99from tests .storage import (
1010 MAX_VDI_SIZE ,
11+ CBTTest ,
1112 CoalesceOperation ,
1213 ImageFormat ,
1314 XVACompression ,
15+ assert_cbt_log_does_not_exist_lvm_sr ,
16+ assert_cbt_log_exists_lvm_sr ,
1417 coalesce_integrity ,
1518 full_vdi_write ,
1619 vdi_export_import ,
2225# - one XCP-ng host >= 8.2
2326# - a valid lvmoiscsi config
2427
28+
2529class TestLVMOISCSISRCreateDestroy :
2630 """
2731 Tests that do not use fixtures that setup the SR or import VMs,
@@ -41,6 +45,7 @@ def test_create_and_destroy_sr(self, host: Host, lvmoiscsi_device_config: dict[s
4145 vm .destroy (verify = True )
4246 sr .destroy (verify = True )
4347
48+
4449@pytest .mark .usefixtures ('image_format' )
4550@pytest .mark .usefixtures ("lvmoiscsi_sr" )
4651@pytest .mark .thick_provisioned
@@ -114,3 +119,63 @@ def test_reboot(self, host: Host, lvmoiscsi_sr: SR, vm_on_lvmoiscsi_sr: VM) -> N
114119 vm .shutdown (verify = True )
115120
116121 # *** End of tests with reboots
122+
123+
124+ class TestLVMoISCSICBT (CBTTest ):
125+ """Test CBT functionality on LVMOISCSI SR"""
126+
127+ @staticmethod
128+ def assert_cbt_log_exists (host : Host , sr : SR , vdi : VDI ) -> None :
129+ assert_cbt_log_exists_lvm_sr (host , sr , vdi )
130+
131+ @staticmethod
132+ def assert_cbt_log_does_not_exist (host : Host , sr : SR , vdi : VDI ) -> None :
133+ assert_cbt_log_does_not_exist_lvm_sr (host , sr , vdi )
134+
135+ def test_enable_disable_cbt (self , host : Host , lvmoiscsi_sr : SR , vdi_on_lvmoiscsi_sr : VDI ) -> None :
136+ self ._test_enable_disable_cbt (host , lvmoiscsi_sr , vdi_on_lvmoiscsi_sr )
137+
138+ def test_cbt_log_creation (self , host : Host , lvmoiscsi_sr : SR , vdi_on_lvmoiscsi_sr : VDI ) -> None :
139+ self ._test_cbt_log_creation (host , lvmoiscsi_sr , vdi_on_lvmoiscsi_sr )
140+
141+ def test_snapshot_with_cbt (self , host : Host , lvmoiscsi_sr : SR , vdi_on_lvmoiscsi_sr : VDI ) -> None :
142+ self ._test_snapshot_with_cbt (host , lvmoiscsi_sr , vdi_on_lvmoiscsi_sr )
143+
144+ @pytest .mark .small_vm
145+ def test_changed_blocks_tracking (self , host : Host , lvmoiscsi_sr : SR , vdi_on_lvmoiscsi_sr : VDI ,
146+ vm_on_lvmoiscsi_sr : VM ) -> None :
147+ self ._test_changed_blocks_tracking (host , lvmoiscsi_sr , vdi_on_lvmoiscsi_sr , vm_on_lvmoiscsi_sr )
148+
149+ @pytest .mark .small_vm
150+ def test_cbt_after_coalesce (self , host : Host , lvmoiscsi_sr : SR , vdi_on_lvmoiscsi_sr : VDI ,
151+ vm_on_lvmoiscsi_sr : VM ) -> None :
152+ self ._test_cbt_after_coalesce (host , lvmoiscsi_sr , vdi_on_lvmoiscsi_sr , vm_on_lvmoiscsi_sr )
153+
154+ @pytest .mark .small_vm
155+ def test_incremental_snap_scenario (self , host : Host , lvmoiscsi_sr : SR , vdi_on_lvmoiscsi_sr : VDI ,
156+ vm_on_lvmoiscsi_sr : VM ) -> None :
157+ self ._test_incremental_snap_scenario (host , lvmoiscsi_sr , vdi_on_lvmoiscsi_sr , vm_on_lvmoiscsi_sr )
158+
159+ def test_disable_cbt_removes_log (self , host : Host , lvmoiscsi_sr : SR , vdi_on_lvmoiscsi_sr : VDI ) -> None :
160+ self ._test_disable_cbt_removes_log (host , lvmoiscsi_sr , vdi_on_lvmoiscsi_sr )
161+
162+ def test_destroy_vdi_removes_cbt_log (self , host : Host , lvmoiscsi_sr : SR , vdi_on_lvmoiscsi_sr : VDI ) -> None :
163+ self ._test_destroy_vdi_removes_cbt_log (host , lvmoiscsi_sr , vdi_on_lvmoiscsi_sr )
164+
165+ def test_cbt_persist_after_sr_reboot (self , host : Host , lvmoiscsi_sr : SR , vdi_on_lvmoiscsi_sr : VDI ) -> None :
166+ self ._test_cbt_persist_after_sr_reboot (host , lvmoiscsi_sr , vdi_on_lvmoiscsi_sr )
167+
168+ def test_cbt_on_snapshot_chain (self , host : Host , lvmoiscsi_sr : SR , vdi_on_lvmoiscsi_sr : VDI ) -> None :
169+ self ._test_cbt_on_snapshot_chain (host , lvmoiscsi_sr , vdi_on_lvmoiscsi_sr )
170+
171+ def test_cbt_parent_disable_does_not_affect_snapshot (self , host : Host , lvmoiscsi_sr : SR ,
172+ vdi_on_lvmoiscsi_sr : VDI ) -> None :
173+ self ._test_cbt_parent_disable_does_not_affect_snapshot (host , lvmoiscsi_sr , vdi_on_lvmoiscsi_sr )
174+
175+ @pytest .mark .small_vm
176+ def test_cbt_bitmap_non_zero_after_write (self , host : Host , lvmoiscsi_sr : SR , vdi_on_lvmoiscsi_sr : VDI ,
177+ vm_on_lvmoiscsi_sr : VM ) -> None :
178+ self ._test_cbt_bitmap_non_zero_after_write (host , lvmoiscsi_sr , vdi_on_lvmoiscsi_sr , vm_on_lvmoiscsi_sr )
179+
180+ def test_cbt_data_destroy (self , host : Host , lvmoiscsi_sr : SR , vdi_on_lvmoiscsi_sr : VDI ) -> None :
181+ self ._test_cbt_data_destroy (host , lvmoiscsi_sr , vdi_on_lvmoiscsi_sr )
0 commit comments