This is an automated email from the ASF dual-hosted git repository.

shwstppr pushed a commit to branch 4.18
in repository https://gitbox.apache.org/repos/asf/cloudstack.git


The following commit(s) were added to refs/heads/4.18 by this push:
     new 540c7b802f4 test: add test for standalone snapshot (#8104)
540c7b802f4 is described below

commit 540c7b802f4455603832dde444b75b5ed34921fd
Author: Abhishek Kumar <[email protected]>
AuthorDate: Thu Oct 19 09:48:16 2023 +0530

    test: add test for standalone snapshot (#8104)
    
    Fixes #8034
    
    Adds the following test for a backed-up snapshot (original template and VM 
deleted beforehand):
    - Create volume from snapshot
    - Create a template from the snapshot and deploy a VM using it
    
    Signed-off-by: Abhishek Kumar <[email protected]>
---
 test/integration/smoke/test_snapshots.py | 156 +++++++++++++++++++++++++++++++
 1 file changed, 156 insertions(+)

diff --git a/test/integration/smoke/test_snapshots.py 
b/test/integration/smoke/test_snapshots.py
index f49534238b6..f8346093c64 100644
--- a/test/integration/smoke/test_snapshots.py
+++ b/test/integration/smoke/test_snapshots.py
@@ -374,3 +374,159 @@ class TestSnapshotRootDisk(cloudstackTestCase):
         )
 
         return
+
+
+class TestSnapshotStandaloneBackup(cloudstackTestCase):
+
+    @classmethod
+    def setUpClass(cls):
+        testClient = super(TestSnapshotStandaloneBackup, 
cls).getClsTestClient()
+        cls.apiclient = testClient.getApiClient()
+        cls.services = testClient.getParsedTestDataConfig()
+
+        # Get Zone, Domain and templates
+        cls.domain = get_domain(cls.apiclient)
+        cls.zone = get_zone(cls.apiclient, testClient.getZoneForTests())
+        cls.services['mode'] = cls.zone.networktype
+
+        cls.hypervisorNotSupported = False
+        cls.hypervisor = cls.testClient.getHypervisorInfo()
+        if cls.hypervisor.lower() in ['hyperv', 'lxc'] or 'kvm-centos6' in 
cls.testClient.getZoneForTests():
+            cls.hypervisorNotSupported = True
+
+        cls._cleanup = []
+        if not cls.hypervisorNotSupported:
+            cls.services["domainid"] = cls.domain.id
+            cls.services["small"]["zoneid"] = cls.zone.id
+            cls.services["zoneid"] = cls.zone.id
+
+            # Create VMs, NAT Rules etc
+            cls.account = Account.create(
+                cls.apiclient,
+                cls.services["account"],
+                domainid=cls.domain.id
+            )
+            cls._cleanup.append(cls.account)
+            cls.service_offering = ServiceOffering.create(
+                cls.apiclient,
+                cls.services["service_offerings"]["tiny"]
+            )
+            cls._cleanup.append(cls.service_offering)
+            cls.userapiclient = cls.testClient.getUserApiClient(
+                UserName=cls.account.name,
+                DomainName=cls.account.domain
+            )
+            cls.template = Template.register(
+                cls.userapiclient,
+                cls.services["test_templates"][cls.hypervisor.lower()],
+                zoneid=cls.zone.id,
+                hypervisor=cls.hypervisor
+            )
+            cls._cleanup.append(cls.template)
+            cls.template.download(cls.apiclient)
+            cls.ostypeid = cls.template.ostypeid
+            cls.virtual_machine = VirtualMachine.create(
+                cls.userapiclient,
+                cls.services["small"],
+                templateid=cls.template.id,
+                accountid=cls.account.name,
+                domainid=cls.account.domainid,
+                zoneid=cls.zone.id,
+                serviceofferingid=cls.service_offering.id,
+                mode=cls.services["mode"]
+            )
+            cls._cleanup.append(cls.virtual_machine)
+
+            volumes =Volume.list(
+                cls.userapiclient,
+                virtualmachineid=cls.virtual_machine.id,
+                type='ROOT',
+                listall=True
+            )
+            cls.snapshot = Snapshot.create(
+                cls.userapiclient,
+                volumes[0].id,
+                account=cls.account.name,
+                domainid=cls.account.domainid
+            )
+            cls._cleanup.append(cls.snapshot)
+
+            cls.virtual_machine.delete(cls.apiclient, expunge=True)
+            cls._cleanup.remove(cls.virtual_machine)
+            cls.template.delete(cls.userapiclient)
+            cls._cleanup.remove(cls.template)
+
+        return
+
+    @classmethod
+    def tearDownClass(cls):
+        super(TestSnapshotStandaloneBackup, cls).tearDownClass()
+
+    def setUp(self):
+        self.cleanup = []
+        return
+
+    def tearDown(self):
+        super(TestSnapshotStandaloneBackup, self).tearDown()
+
+    @skipTestIf("hypervisorNotSupported")
+    @attr(tags=["advanced", "advancedns", "smoke"], required_hardware="true")
+    def test_01_snapshot_to_volume(self):
+        """Test creating volume from snapshot
+        """
+        self.services['volume_from_snapshot']['zoneid'] = self.zone.id
+        self.volume_from_snap = Volume.create_from_snapshot(
+            self.userapiclient,
+            snapshot_id=self.snapshot.id,
+            services=self.services["volume_from_snapshot"],
+            account=self.account.name,
+            domainid=self.account.domainid
+        )
+        self.cleanup.append(self.volume_from_snap)
+
+        self.assertEqual(
+            self.volume_from_snap.state,
+            'Ready',
+            "Check state of the volume created from snapshot"
+        )
+
+    @skipTestIf("hypervisorNotSupported")
+    @attr(tags=["advanced", "advancedns", "smoke"], required_hardware="true")
+    def test_02_snapshot_to_template(self):
+        """Test creating volume from snapshot
+        """
+
+
+        services = {"displaytext": "Template-1", "name": "Template-1-name", 
"ostypeid": self.ostypeid, "ispublic": "true"}
+        self.template_from_snap = Template.create_from_snapshot(
+            self.userapiclient,
+            self.snapshot,
+            services
+        )
+        self.cleanup.append(self.template_from_snap)
+
+        self.assertEqual(
+            self.template_from_snap.isready,
+            True,
+            "Check state of the template created from snapshot"
+        )
+
+        self.virtual_machine1 = VirtualMachine.create(
+            self.userapiclient,
+            self.services["small"],
+            templateid=self.template_from_snap.id,
+            accountid=self.account.name,
+            domainid=self.account.domainid,
+            zoneid=self.zone.id,
+            serviceofferingid=self.service_offering.id,
+            mode=self.services["mode"]
+        )
+        self.cleanup.append(self.virtual_machine1)
+
+        self.assertEqual(
+            self.virtual_machine1.state,
+            'Running',
+            "Check state of the VM deployed using the template created from 
snapshot"
+        )
+
+        return

Reply via email to