From 12a17334aaa0f8eff7ddf1394fba8a2f477e0471 Mon Sep 17 00:00:00 2001 From: hamistao Date: Tue, 11 Jun 2024 18:42:58 -0300 Subject: [PATCH] integration/test_storage: Add tests for `StorageVolumeSnapshot` Signed-off-by: hamistao --- integration/test_storage.py | 86 ++++++++++++++++++++++++++++++++++++- 1 file changed, 85 insertions(+), 1 deletion(-) diff --git a/integration/test_storage.py b/integration/test_storage.py index 7fc258b9..cf9549b5 100644 --- a/integration/test_storage.py +++ b/integration/test_storage.py @@ -23,7 +23,7 @@ def setUp(self): super().setUp() if not self.client.has_api_extension("storage"): - self.skipTest("Required \'storage\' LXD API extension not available!") + self.skipTest("Required 'storage' LXD API extension not available!") class TestStoragePools(StorageTestCase): @@ -128,3 +128,87 @@ def test_patch(self): # as we're not using ZFS (and can't in these integration tests) we # can't really patch anything on a dir volume. pass + + +class TestStorageVolumeSnapshot(StorageTestCase): + """Tests for :py:class:`pylxd.models.storage_pool.StorageVolumeSnapshot""" + + def setUp(self): + super().setUp() + + if not self.client.has_api_extension("storage_api_volume_snapshots"): + self.skipTest( + "Required 'storage_api_volume_snapshots' LXD API extension not available!" + ) + + def test_create_get_restore_delete_volume_snapshot(self): + # Create pool and volume + pool = self.create_storage_pool() + self.addCleanup(self.delete_storage_volume, pool) + + volume = self.create_storage_volume(pool) + self.addCleanup(self.delete_storage_volume, pool, volume.name) + + # Create a few snapshots + first_snapshot = volume.snapshots.create() + self.assertEqual(first_snapshot.name, "snap0") + + second_snapshot = volume.snapshots.create() + self.assertEqual(second_snapshot.name, "snap1") + + # Try restoring the volume from one of the snapshots + first_snapshot.restore() + volume.restore("snap0") + + # Create new snapshot with defined name and expiration date + custom_snapshot_name = "custom-snapshot" + custom_snapshot_expiry_date = "1983-06-16T00:00:00-00:00" + + custom_snapshot = volume.snapshots.create( + name=custom_snapshot_name, expires_at=custom_snapshot_expiry_date + ) + self.assertTrue(custom_snapshot.is_expired()) + self.assertEqual(custom_snapshot.name, custom_snapshot_name) + self.assertEqual(custom_snapshot.expires_at, custom_snapshot_expiry_date) + + # Try getting a snapshot + custom_snapshot_copy = volume.snapshots.get(custom_snapshot_name) + self.assertEqual(custom_snapshot, custom_snapshot_copy) + + # Get all snapshots from the volume + all_snapshots = volume.snapshots.all() + self.assertEqual(len(all_snapshots), 3) + + all_names = [snapshot.name for snapshot in all_snapshots] + for snapshot_name in ["snap0", "snap1", custom_snapshot_name]: + self.assertIn(snapshot_name, all_names) + + # Delete a snapshot + second_snapshot.delete() + + self.assertFalse(volume.snapshots.exists(second_snapshot.name)) + + self.assertRaises( + exceptions.NotFound, volume.snapshots.get, custom_snapshot_name + ) + + all_snapshots = volume.snapshots.all() + self.assertEqual(len(all_snapshots), 2) + + all_names = [snapshot.name for snapshot in all_snapshots] + for snapshot_name in ["snap0", custom_snapshot_name]: + self.assertIn(snapshot_name, all_names) + + self.assertFalse("snap1", all_names) + + @unittest.skip("Can't test PUT on volume snapshots yet") + def test_put(self): + pass + + @unittest.skip("Can't test .save() on volume snapshots yet") + def test_save(self): + pass + + @unittest.skip("Can't test PATCH on volume snapshots yet") + def test_patch(self): + pass