|
13 | 13 | from lib.vm import VM |
14 | 14 | from tests.storage import ( |
15 | 15 | MAX_VDI_SIZE, |
| 16 | + CBTTest, |
16 | 17 | CoalesceOperation, |
17 | 18 | ImageFormat, |
18 | 19 | XVACompression, |
| 20 | + assert_cbt_log_does_not_exist_lvm_sr, |
| 21 | + assert_cbt_log_exists_lvm_sr, |
19 | 22 | coalesce_integrity, |
20 | 23 | full_vdi_write, |
21 | 24 | try_to_create_sr_with_missing_device, |
@@ -161,3 +164,59 @@ def test_reboot(self, host: Host, lvm_sr: SR, vm_on_lvm_sr: VM) -> None: |
161 | 164 | vm.shutdown(verify=True) |
162 | 165 |
|
163 | 166 | # *** End of tests with reboots |
| 167 | + |
| 168 | + |
| 169 | +class TestLVMCBT(CBTTest): |
| 170 | + """Test CBT functionality on LVM SR""" |
| 171 | + |
| 172 | + @staticmethod |
| 173 | + def assert_cbt_log_exists(host: Host, sr: SR, vdi: VDI) -> None: |
| 174 | + assert_cbt_log_exists_lvm_sr(host, sr, vdi) |
| 175 | + |
| 176 | + @staticmethod |
| 177 | + def assert_cbt_log_does_not_exist(host: Host, sr: SR, vdi: VDI) -> None: |
| 178 | + assert_cbt_log_does_not_exist_lvm_sr(host, sr, vdi) |
| 179 | + |
| 180 | + def test_enable_disable_cbt(self, host: Host, lvm_sr: SR, vdi_on_lvm_sr: VDI) -> None: |
| 181 | + self._test_enable_disable_cbt(host, lvm_sr, vdi_on_lvm_sr) |
| 182 | + |
| 183 | + def test_cbt_log_creation(self, host: Host, lvm_sr: SR, vdi_on_lvm_sr: VDI) -> None: |
| 184 | + self._test_cbt_log_creation(host, lvm_sr, vdi_on_lvm_sr) |
| 185 | + |
| 186 | + def test_snapshot_with_cbt(self, host: Host, lvm_sr: SR, vdi_on_lvm_sr: VDI) -> None: |
| 187 | + self._test_snapshot_with_cbt(host, lvm_sr, vdi_on_lvm_sr) |
| 188 | + |
| 189 | + @pytest.mark.small_vm |
| 190 | + def test_changed_blocks_tracking(self, host: Host, lvm_sr: SR, vdi_on_lvm_sr: VDI, vm_on_lvm_sr: VM) -> None: |
| 191 | + self._test_changed_blocks_tracking(host, lvm_sr, vdi_on_lvm_sr, vm_on_lvm_sr) |
| 192 | + |
| 193 | + @pytest.mark.small_vm |
| 194 | + def test_cbt_after_coalesce(self, host: Host, lvm_sr: SR, vdi_on_lvm_sr: VDI, vm_on_lvm_sr: VM) -> None: |
| 195 | + self._test_cbt_after_coalesce(host, lvm_sr, vdi_on_lvm_sr, vm_on_lvm_sr) |
| 196 | + |
| 197 | + @pytest.mark.small_vm |
| 198 | + def test_incremental_snap_scenario(self, host: Host, lvm_sr: SR, vdi_on_lvm_sr: VDI, vm_on_lvm_sr: VM) -> None: |
| 199 | + self._test_incremental_snap_scenario(host, lvm_sr, vdi_on_lvm_sr, vm_on_lvm_sr) |
| 200 | + |
| 201 | + def test_disable_cbt_removes_log(self, host: Host, lvm_sr: SR, vdi_on_lvm_sr: VDI) -> None: |
| 202 | + self._test_disable_cbt_removes_log(host, lvm_sr, vdi_on_lvm_sr) |
| 203 | + |
| 204 | + def test_destroy_vdi_removes_cbt_log(self, host: Host, lvm_sr: SR, vdi_on_lvm_sr: VDI) -> None: |
| 205 | + self._test_destroy_vdi_removes_cbt_log(host, lvm_sr, vdi_on_lvm_sr) |
| 206 | + |
| 207 | + def test_cbt_persist_after_sr_reboot(self, host: Host, lvm_sr: SR, vdi_on_lvm_sr: VDI) -> None: |
| 208 | + self._test_cbt_persist_after_sr_reboot(host, lvm_sr, vdi_on_lvm_sr) |
| 209 | + |
| 210 | + def test_cbt_on_snapshot_chain(self, host: Host, lvm_sr: SR, vdi_on_lvm_sr: VDI) -> None: |
| 211 | + self._test_cbt_on_snapshot_chain(host, lvm_sr, vdi_on_lvm_sr) |
| 212 | + |
| 213 | + def test_cbt_parent_disable_does_not_affect_snapshot(self, host: Host, lvm_sr: SR, vdi_on_lvm_sr: VDI) -> None: |
| 214 | + self._test_cbt_parent_disable_does_not_affect_snapshot(host, lvm_sr, vdi_on_lvm_sr) |
| 215 | + |
| 216 | + @pytest.mark.small_vm |
| 217 | + def test_cbt_bitmap_non_zero_after_write(self, host: Host, lvm_sr: SR, vdi_on_lvm_sr: VDI, |
| 218 | + vm_on_lvm_sr: VM) -> None: |
| 219 | + self._test_cbt_bitmap_non_zero_after_write(host, lvm_sr, vdi_on_lvm_sr, vm_on_lvm_sr) |
| 220 | + |
| 221 | + def test_cbt_data_destroy(self, host: Host, lvm_sr: SR, vdi_on_lvm_sr: VDI) -> None: |
| 222 | + self._test_cbt_data_destroy(host, lvm_sr, vdi_on_lvm_sr) |
0 commit comments