Copilot commented on code in PR #11748:
URL: https://github.com/apache/cloudstack/pull/11748#discussion_r2735189363


##########
test/integration/plugins/storpool/test_snapshot_copy_on_primary_storage.py:
##########
@@ -244,12 +246,101 @@ def 
test_06_take_snapshot_multi_zone_create_template_additional_zone(self):
         """Test to take volume snapshot in multiple StorPool primary storages 
in diff zones and create a volume in one of the additional zones
         """
         snapshot = Snapshot.create(self.userapiclient, 
volume_id=self.volume.id, zoneids=[str(self.additional_zone.id)], 
usestoragereplication=True)
+        self._cleanup.append(snapshot)
         self.snapshot_id = snapshot.id
         self.helper.verify_snapshot_copies(self.userapiclient, 
self.snapshot_id, [self.zone.id, self.additional_zone.id])
         self.template = 
self.helper.create_snapshot_template(self.userapiclient, self.services, 
self.snapshot_id, self.additional_zone.id)
+        self.cleanup.append(self.template)
         if self.additional_zone.id != self.template.zoneid:
             self.fail("Template from snapshot not created in the additional 
zone")
+        return
+
+    @skipTestIf("testsNotSupported")
+    @attr(tags=["devcloud", "advanced", "advancedns", "smoke", "basic", "sg"], 
required_hardware="false")
+    def test_07_take_snapshot_multi_zone_deply_vm_additional_zone(self):

Review Comment:
   `test_07_take_snapshot_multi_zone_deply_vm_additional_zone` has a typo in 
the test name ("deply" -> "deploy"). This makes the test name harder to 
search/understand and is inconsistent with the other test names in this file.
   ```suggestion
       def test_07_take_snapshot_multi_zone_deploy_vm_additional_zone(self):
   ```



##########
test/integration/plugins/storpool/test_snapshot_copy_on_primary_storage.py:
##########
@@ -244,12 +246,101 @@ def 
test_06_take_snapshot_multi_zone_create_template_additional_zone(self):
         """Test to take volume snapshot in multiple StorPool primary storages 
in diff zones and create a volume in one of the additional zones
         """
         snapshot = Snapshot.create(self.userapiclient, 
volume_id=self.volume.id, zoneids=[str(self.additional_zone.id)], 
usestoragereplication=True)
+        self._cleanup.append(snapshot)
         self.snapshot_id = snapshot.id
         self.helper.verify_snapshot_copies(self.userapiclient, 
self.snapshot_id, [self.zone.id, self.additional_zone.id])
         self.template = 
self.helper.create_snapshot_template(self.userapiclient, self.services, 
self.snapshot_id, self.additional_zone.id)
+        self.cleanup.append(self.template)
         if self.additional_zone.id != self.template.zoneid:
             self.fail("Template from snapshot not created in the additional 
zone")
+        return
+
+    @skipTestIf("testsNotSupported")
+    @attr(tags=["devcloud", "advanced", "advancedns", "smoke", "basic", "sg"], 
required_hardware="false")
+    def test_07_take_snapshot_multi_zone_deply_vm_additional_zone(self):
+        """Test to take volume snapshot in multiple StorPool primary storages 
in diff zones and deploy a VM from snapshot in one of the additional zones
+        """
+        snapshot = Snapshot.create(self.userapiclient, 
volume_id=self.volume.id, zoneids=[str(self.additional_zone.id)], 
usestoragereplication=True)
+        self._cleanup.append(snapshot)
+        self.snapshot_id = snapshot.id
+        self.helper.verify_snapshot_copies(self.userapiclient, 
self.snapshot_id, [self.zone.id, self.additional_zone.id])
+        vm = self.deploy_vm_from_snapshot(snapshot, self.additional_zone.id)
+        if self.additional_zone.id != vm.zoneid:
+            self.fail("VM from snapshot not created in the additional zone")
+        return
+
+
+    @skipTestIf("testsNotSupported")
+    @attr(tags=["devcloud", "advanced", "advancedns", "smoke", "basic", "sg"], 
required_hardware="false")
+    def 
test_08_take_snapshot_multi_zone_create_volume_additional_zone_deploy_vm(self):
+        """Test to take volume snapshot in multiple StorPool primary storages 
in diff zones
+         create a volume from the snapshot in the additional zone
+         and deploy a VM from the volume in one of the additional zones
+        """
+        snapshot = Snapshot.create(self.userapiclient, 
volume_id=self.volume.id, zoneids=[str(self.additional_zone.id)], 
usestoragereplication=True)
+        self.cleanup.append(snapshot)
+        self.snapshot_id = snapshot.id
+        self.helper.verify_snapshot_copies(self.userapiclient, 
self.snapshot_id, [self.zone.id, self.additional_zone.id])
+        vm = 
self.create_volume_from_snapshot_deploy_vm(snapshotid=self.snapshot_id, 
zoneid=self.additional_zone.id)
         time.sleep(420)
-        Snapshot.delete(snapshot, self.userapiclient)
-        self.cleanup.append(self.template)
+        if self.additional_zone.id != vm.zoneid:
+            self.fail("VM from snapshot not created in the additional zone")
         return
+
+    def create_volume_from_snapshot_deploy_vm(self, snapshotid, zoneid=None):
+        volume = Volume.create_from_snapshot(
+            self.apiclient,
+            snapshot_id=snapshotid,
+            services=self.services,
+            disk_offering=self.disk_offerings.id,
+            size=8,
+            account=self.account.name,
+            domainid=self.account.domainid,
+            zoneid=zoneid,
+        )
+        virtual_machine = VirtualMachine.create(self.apiclient,
+                                                {"name": "Test-%s" % 
uuid.uuid4()},
+                                                accountid=self.account.name,
+                                                domainid=self.account.domainid,
+                                                zoneid=zoneid,
+                                                
serviceofferingid=self.service_offering.id,
+                                                volumeid=volume.id,
+                                                mode="basic",
+                                                )

Review Comment:
   In `create_volume_from_snapshot_deploy_vm`, the volume created from the 
snapshot is never added to any cleanup list. If VM creation or the SSH check 
fails, the test will exit early and the standalone volume will be left behind. 
Add the created volume to `self.cleanup`/`self._cleanup` immediately after 
creation (and consider cleaning it up on VM-create failures) so resources are 
reliably released.
   ```suggestion
           # Ensure the created volume is tracked for cleanup so it is not left 
behind
           self._cleanup.append(volume)
           try:
               virtual_machine = VirtualMachine.create(
                   self.apiclient,
                   {"name": "Test-%s" % uuid.uuid4()},
                   accountid=self.account.name,
                   domainid=self.account.domainid,
                   zoneid=zoneid,
                   serviceofferingid=self.service_offering.id,
                   volumeid=volume.id,
                   mode="basic",
               )
           except Exception as e:
               # If VM creation fails, attempt to delete the standalone volume
               try:
                   volume.delete(self.apiclient)
               except Exception as delete_exc:
                   logging.warning(
                       "Failed to delete volume %s after VM creation failure: 
%s",
                       getattr(volume, "id", None),
                       delete_exc,
                   )
               if volume in self._cleanup:
                   self._cleanup.remove(volume)
               self.fail("VM creation from volume %s failed: %s" %
                         (getattr(volume, "id", None), e))
   ```



##########
test/integration/plugins/storpool/test_snapshot_copy_on_primary_storage.py:
##########
@@ -244,12 +246,101 @@ def 
test_06_take_snapshot_multi_zone_create_template_additional_zone(self):
         """Test to take volume snapshot in multiple StorPool primary storages 
in diff zones and create a volume in one of the additional zones
         """
         snapshot = Snapshot.create(self.userapiclient, 
volume_id=self.volume.id, zoneids=[str(self.additional_zone.id)], 
usestoragereplication=True)
+        self._cleanup.append(snapshot)
         self.snapshot_id = snapshot.id
         self.helper.verify_snapshot_copies(self.userapiclient, 
self.snapshot_id, [self.zone.id, self.additional_zone.id])
         self.template = 
self.helper.create_snapshot_template(self.userapiclient, self.services, 
self.snapshot_id, self.additional_zone.id)
+        self.cleanup.append(self.template)
         if self.additional_zone.id != self.template.zoneid:
             self.fail("Template from snapshot not created in the additional 
zone")
+        return
+
+    @skipTestIf("testsNotSupported")
+    @attr(tags=["devcloud", "advanced", "advancedns", "smoke", "basic", "sg"], 
required_hardware="false")
+    def test_07_take_snapshot_multi_zone_deply_vm_additional_zone(self):
+        """Test to take volume snapshot in multiple StorPool primary storages 
in diff zones and deploy a VM from snapshot in one of the additional zones
+        """
+        snapshot = Snapshot.create(self.userapiclient, 
volume_id=self.volume.id, zoneids=[str(self.additional_zone.id)], 
usestoragereplication=True)
+        self._cleanup.append(snapshot)
+        self.snapshot_id = snapshot.id
+        self.helper.verify_snapshot_copies(self.userapiclient, 
self.snapshot_id, [self.zone.id, self.additional_zone.id])
+        vm = self.deploy_vm_from_snapshot(snapshot, self.additional_zone.id)
+        if self.additional_zone.id != vm.zoneid:
+            self.fail("VM from snapshot not created in the additional zone")
+        return
+
+
+    @skipTestIf("testsNotSupported")
+    @attr(tags=["devcloud", "advanced", "advancedns", "smoke", "basic", "sg"], 
required_hardware="false")
+    def 
test_08_take_snapshot_multi_zone_create_volume_additional_zone_deploy_vm(self):
+        """Test to take volume snapshot in multiple StorPool primary storages 
in diff zones
+         create a volume from the snapshot in the additional zone
+         and deploy a VM from the volume in one of the additional zones
+        """
+        snapshot = Snapshot.create(self.userapiclient, 
volume_id=self.volume.id, zoneids=[str(self.additional_zone.id)], 
usestoragereplication=True)
+        self.cleanup.append(snapshot)
+        self.snapshot_id = snapshot.id
+        self.helper.verify_snapshot_copies(self.userapiclient, 
self.snapshot_id, [self.zone.id, self.additional_zone.id])
+        vm = 
self.create_volume_from_snapshot_deploy_vm(snapshotid=self.snapshot_id, 
zoneid=self.additional_zone.id)
         time.sleep(420)
-        Snapshot.delete(snapshot, self.userapiclient)
-        self.cleanup.append(self.template)
+        if self.additional_zone.id != vm.zoneid:
+            self.fail("VM from snapshot not created in the additional zone")
         return
+
+    def create_volume_from_snapshot_deploy_vm(self, snapshotid, zoneid=None):
+        volume = Volume.create_from_snapshot(
+            self.apiclient,
+            snapshot_id=snapshotid,
+            services=self.services,
+            disk_offering=self.disk_offerings.id,
+            size=8,
+            account=self.account.name,
+            domainid=self.account.domainid,
+            zoneid=zoneid,
+        )
+        virtual_machine = VirtualMachine.create(self.apiclient,
+                                                {"name": "Test-%s" % 
uuid.uuid4()},
+                                                accountid=self.account.name,
+                                                domainid=self.account.domainid,
+                                                zoneid=zoneid,
+                                                
serviceofferingid=self.service_offering.id,
+                                                volumeid=volume.id,
+                                                mode="basic",
+                                                )
+        self._cleanup.append(virtual_machine)
+        try:
+            ssh_client = virtual_machine.get_ssh_client()
+        except Exception as e:
+            self.fail("SSH failed for virtual machine: %s - %s" %
+                      (virtual_machine.ipaddress, e))
+        return virtual_machine
+
+    def deploy_vm_from_snapshot(self, snapshot, zoneid=None):
+        virtual_machine = VirtualMachine.create(self.apiclient,
+                                                {"name": "Test-%s" % 
uuid.uuid4()},
+                                                accountid=self.account.name,
+                                                domainid=self.account.domainid,
+                                                zoneid=zoneid,
+                                                
serviceofferingid=self.service_offering.id,
+                                                snapshotid=snapshot.id,
+                                                mode="basic",
+                                                )
+        self._cleanup.append(virtual_machine)
+        try:
+            ssh_client = virtual_machine.get_ssh_client()

Review Comment:
   This helper adds the created VM to `self._cleanup` (class-level), which 
defers deletion until `tearDownClass`. Given this class already uses 
`self.cleanup` in `tearDown()` for test-scoped resources, consider using 
`self.cleanup` here too so each test cleans up its own VM and doesn't leave 
extra VMs around for subsequent tests in the same class.



##########
test/integration/plugins/storpool/test_snapshot_copy_on_primary_storage.py:
##########
@@ -244,12 +246,101 @@ def 
test_06_take_snapshot_multi_zone_create_template_additional_zone(self):
         """Test to take volume snapshot in multiple StorPool primary storages 
in diff zones and create a volume in one of the additional zones
         """
         snapshot = Snapshot.create(self.userapiclient, 
volume_id=self.volume.id, zoneids=[str(self.additional_zone.id)], 
usestoragereplication=True)
+        self._cleanup.append(snapshot)
         self.snapshot_id = snapshot.id
         self.helper.verify_snapshot_copies(self.userapiclient, 
self.snapshot_id, [self.zone.id, self.additional_zone.id])
         self.template = 
self.helper.create_snapshot_template(self.userapiclient, self.services, 
self.snapshot_id, self.additional_zone.id)
+        self.cleanup.append(self.template)
         if self.additional_zone.id != self.template.zoneid:
             self.fail("Template from snapshot not created in the additional 
zone")
+        return
+
+    @skipTestIf("testsNotSupported")
+    @attr(tags=["devcloud", "advanced", "advancedns", "smoke", "basic", "sg"], 
required_hardware="false")
+    def test_07_take_snapshot_multi_zone_deply_vm_additional_zone(self):
+        """Test to take volume snapshot in multiple StorPool primary storages 
in diff zones and deploy a VM from snapshot in one of the additional zones
+        """
+        snapshot = Snapshot.create(self.userapiclient, 
volume_id=self.volume.id, zoneids=[str(self.additional_zone.id)], 
usestoragereplication=True)
+        self._cleanup.append(snapshot)
+        self.snapshot_id = snapshot.id
+        self.helper.verify_snapshot_copies(self.userapiclient, 
self.snapshot_id, [self.zone.id, self.additional_zone.id])
+        vm = self.deploy_vm_from_snapshot(snapshot, self.additional_zone.id)
+        if self.additional_zone.id != vm.zoneid:
+            self.fail("VM from snapshot not created in the additional zone")
+        return
+
+
+    @skipTestIf("testsNotSupported")
+    @attr(tags=["devcloud", "advanced", "advancedns", "smoke", "basic", "sg"], 
required_hardware="false")
+    def 
test_08_take_snapshot_multi_zone_create_volume_additional_zone_deploy_vm(self):
+        """Test to take volume snapshot in multiple StorPool primary storages 
in diff zones
+         create a volume from the snapshot in the additional zone
+         and deploy a VM from the volume in one of the additional zones
+        """
+        snapshot = Snapshot.create(self.userapiclient, 
volume_id=self.volume.id, zoneids=[str(self.additional_zone.id)], 
usestoragereplication=True)
+        self.cleanup.append(snapshot)
+        self.snapshot_id = snapshot.id
+        self.helper.verify_snapshot_copies(self.userapiclient, 
self.snapshot_id, [self.zone.id, self.additional_zone.id])
+        vm = 
self.create_volume_from_snapshot_deploy_vm(snapshotid=self.snapshot_id, 
zoneid=self.additional_zone.id)
         time.sleep(420)
-        Snapshot.delete(snapshot, self.userapiclient)
-        self.cleanup.append(self.template)
+        if self.additional_zone.id != vm.zoneid:
+            self.fail("VM from snapshot not created in the additional zone")
         return
+
+    def create_volume_from_snapshot_deploy_vm(self, snapshotid, zoneid=None):
+        volume = Volume.create_from_snapshot(
+            self.apiclient,
+            snapshot_id=snapshotid,
+            services=self.services,
+            disk_offering=self.disk_offerings.id,
+            size=8,
+            account=self.account.name,
+            domainid=self.account.domainid,
+            zoneid=zoneid,
+        )
+        virtual_machine = VirtualMachine.create(self.apiclient,
+                                                {"name": "Test-%s" % 
uuid.uuid4()},
+                                                accountid=self.account.name,
+                                                domainid=self.account.domainid,
+                                                zoneid=zoneid,
+                                                
serviceofferingid=self.service_offering.id,
+                                                volumeid=volume.id,
+                                                mode="basic",
+                                                )
+        self._cleanup.append(virtual_machine)
+        try:
+            ssh_client = virtual_machine.get_ssh_client()

Review Comment:
   Variable ssh_client is not used.



##########
test/integration/plugins/storpool/test_snapshot_copy_on_primary_storage.py:
##########
@@ -244,12 +246,101 @@ def 
test_06_take_snapshot_multi_zone_create_template_additional_zone(self):
         """Test to take volume snapshot in multiple StorPool primary storages 
in diff zones and create a volume in one of the additional zones
         """
         snapshot = Snapshot.create(self.userapiclient, 
volume_id=self.volume.id, zoneids=[str(self.additional_zone.id)], 
usestoragereplication=True)
+        self._cleanup.append(snapshot)
         self.snapshot_id = snapshot.id
         self.helper.verify_snapshot_copies(self.userapiclient, 
self.snapshot_id, [self.zone.id, self.additional_zone.id])
         self.template = 
self.helper.create_snapshot_template(self.userapiclient, self.services, 
self.snapshot_id, self.additional_zone.id)
+        self.cleanup.append(self.template)
         if self.additional_zone.id != self.template.zoneid:
             self.fail("Template from snapshot not created in the additional 
zone")
+        return
+
+    @skipTestIf("testsNotSupported")
+    @attr(tags=["devcloud", "advanced", "advancedns", "smoke", "basic", "sg"], 
required_hardware="false")
+    def test_07_take_snapshot_multi_zone_deply_vm_additional_zone(self):
+        """Test to take volume snapshot in multiple StorPool primary storages 
in diff zones and deploy a VM from snapshot in one of the additional zones
+        """
+        snapshot = Snapshot.create(self.userapiclient, 
volume_id=self.volume.id, zoneids=[str(self.additional_zone.id)], 
usestoragereplication=True)
+        self._cleanup.append(snapshot)
+        self.snapshot_id = snapshot.id
+        self.helper.verify_snapshot_copies(self.userapiclient, 
self.snapshot_id, [self.zone.id, self.additional_zone.id])
+        vm = self.deploy_vm_from_snapshot(snapshot, self.additional_zone.id)
+        if self.additional_zone.id != vm.zoneid:
+            self.fail("VM from snapshot not created in the additional zone")
+        return
+
+
+    @skipTestIf("testsNotSupported")
+    @attr(tags=["devcloud", "advanced", "advancedns", "smoke", "basic", "sg"], 
required_hardware="false")
+    def 
test_08_take_snapshot_multi_zone_create_volume_additional_zone_deploy_vm(self):
+        """Test to take volume snapshot in multiple StorPool primary storages 
in diff zones
+         create a volume from the snapshot in the additional zone
+         and deploy a VM from the volume in one of the additional zones
+        """
+        snapshot = Snapshot.create(self.userapiclient, 
volume_id=self.volume.id, zoneids=[str(self.additional_zone.id)], 
usestoragereplication=True)
+        self.cleanup.append(snapshot)
+        self.snapshot_id = snapshot.id
+        self.helper.verify_snapshot_copies(self.userapiclient, 
self.snapshot_id, [self.zone.id, self.additional_zone.id])
+        vm = 
self.create_volume_from_snapshot_deploy_vm(snapshotid=self.snapshot_id, 
zoneid=self.additional_zone.id)
         time.sleep(420)
-        Snapshot.delete(snapshot, self.userapiclient)
-        self.cleanup.append(self.template)
+        if self.additional_zone.id != vm.zoneid:
+            self.fail("VM from snapshot not created in the additional zone")
         return
+
+    def create_volume_from_snapshot_deploy_vm(self, snapshotid, zoneid=None):
+        volume = Volume.create_from_snapshot(
+            self.apiclient,
+            snapshot_id=snapshotid,
+            services=self.services,
+            disk_offering=self.disk_offerings.id,
+            size=8,
+            account=self.account.name,
+            domainid=self.account.domainid,
+            zoneid=zoneid,
+        )
+        virtual_machine = VirtualMachine.create(self.apiclient,
+                                                {"name": "Test-%s" % 
uuid.uuid4()},
+                                                accountid=self.account.name,
+                                                domainid=self.account.domainid,
+                                                zoneid=zoneid,
+                                                
serviceofferingid=self.service_offering.id,
+                                                volumeid=volume.id,
+                                                mode="basic",
+                                                )
+        self._cleanup.append(virtual_machine)
+        try:
+            ssh_client = virtual_machine.get_ssh_client()
+        except Exception as e:
+            self.fail("SSH failed for virtual machine: %s - %s" %
+                      (virtual_machine.ipaddress, e))
+        return virtual_machine
+
+    def deploy_vm_from_snapshot(self, snapshot, zoneid=None):
+        virtual_machine = VirtualMachine.create(self.apiclient,
+                                                {"name": "Test-%s" % 
uuid.uuid4()},
+                                                accountid=self.account.name,
+                                                domainid=self.account.domainid,
+                                                zoneid=zoneid,
+                                                
serviceofferingid=self.service_offering.id,
+                                                snapshotid=snapshot.id,
+                                                mode="basic",
+                                                )
+        self._cleanup.append(virtual_machine)
+        try:
+            ssh_client = virtual_machine.get_ssh_client()

Review Comment:
   Variable ssh_client is not used.



##########
test/integration/smoke/test_vm_lifecycle_with_snapshot_or_volume.py:
##########
@@ -311,8 +309,9 @@ def create_volume_from_snapshot_deploy_vm(self, snapshotid):
                                                 volumeid=volume.id,
                                                 mode="basic",
                                                 )
+        self.cleanup.append(self.virtual_machine)
         try:
-            ssh_client = virtual_machine.get_ssh_client()
+            ssh_client = self.virtual_machine.get_ssh_client()

Review Comment:
   Variable ssh_client is not used.



##########
test/integration/plugins/storpool/test_snapshot_copy_on_primary_storage.py:
##########
@@ -244,12 +246,101 @@ def 
test_06_take_snapshot_multi_zone_create_template_additional_zone(self):
         """Test to take volume snapshot in multiple StorPool primary storages 
in diff zones and create a volume in one of the additional zones
         """
         snapshot = Snapshot.create(self.userapiclient, 
volume_id=self.volume.id, zoneids=[str(self.additional_zone.id)], 
usestoragereplication=True)
+        self._cleanup.append(snapshot)
         self.snapshot_id = snapshot.id
         self.helper.verify_snapshot_copies(self.userapiclient, 
self.snapshot_id, [self.zone.id, self.additional_zone.id])
         self.template = 
self.helper.create_snapshot_template(self.userapiclient, self.services, 
self.snapshot_id, self.additional_zone.id)
+        self.cleanup.append(self.template)
         if self.additional_zone.id != self.template.zoneid:
             self.fail("Template from snapshot not created in the additional 
zone")
+        return
+
+    @skipTestIf("testsNotSupported")
+    @attr(tags=["devcloud", "advanced", "advancedns", "smoke", "basic", "sg"], 
required_hardware="false")
+    def test_07_take_snapshot_multi_zone_deply_vm_additional_zone(self):
+        """Test to take volume snapshot in multiple StorPool primary storages 
in diff zones and deploy a VM from snapshot in one of the additional zones
+        """
+        snapshot = Snapshot.create(self.userapiclient, 
volume_id=self.volume.id, zoneids=[str(self.additional_zone.id)], 
usestoragereplication=True)
+        self._cleanup.append(snapshot)
+        self.snapshot_id = snapshot.id
+        self.helper.verify_snapshot_copies(self.userapiclient, 
self.snapshot_id, [self.zone.id, self.additional_zone.id])
+        vm = self.deploy_vm_from_snapshot(snapshot, self.additional_zone.id)
+        if self.additional_zone.id != vm.zoneid:
+            self.fail("VM from snapshot not created in the additional zone")
+        return
+
+
+    @skipTestIf("testsNotSupported")
+    @attr(tags=["devcloud", "advanced", "advancedns", "smoke", "basic", "sg"], 
required_hardware="false")
+    def 
test_08_take_snapshot_multi_zone_create_volume_additional_zone_deploy_vm(self):
+        """Test to take volume snapshot in multiple StorPool primary storages 
in diff zones
+         create a volume from the snapshot in the additional zone
+         and deploy a VM from the volume in one of the additional zones
+        """
+        snapshot = Snapshot.create(self.userapiclient, 
volume_id=self.volume.id, zoneids=[str(self.additional_zone.id)], 
usestoragereplication=True)
+        self.cleanup.append(snapshot)
+        self.snapshot_id = snapshot.id
+        self.helper.verify_snapshot_copies(self.userapiclient, 
self.snapshot_id, [self.zone.id, self.additional_zone.id])
+        vm = 
self.create_volume_from_snapshot_deploy_vm(snapshotid=self.snapshot_id, 
zoneid=self.additional_zone.id)
         time.sleep(420)
-        Snapshot.delete(snapshot, self.userapiclient)
-        self.cleanup.append(self.template)
+        if self.additional_zone.id != vm.zoneid:
+            self.fail("VM from snapshot not created in the additional zone")
         return
+
+    def create_volume_from_snapshot_deploy_vm(self, snapshotid, zoneid=None):
+        volume = Volume.create_from_snapshot(
+            self.apiclient,
+            snapshot_id=snapshotid,
+            services=self.services,
+            disk_offering=self.disk_offerings.id,
+            size=8,
+            account=self.account.name,
+            domainid=self.account.domainid,
+            zoneid=zoneid,
+        )
+        virtual_machine = VirtualMachine.create(self.apiclient,
+                                                {"name": "Test-%s" % 
uuid.uuid4()},
+                                                accountid=self.account.name,
+                                                domainid=self.account.domainid,
+                                                zoneid=zoneid,
+                                                
serviceofferingid=self.service_offering.id,
+                                                volumeid=volume.id,
+                                                mode="basic",
+                                                )
+        self._cleanup.append(virtual_machine)
+        try:
+            ssh_client = virtual_machine.get_ssh_client()

Review Comment:
   This helper appends the created VM to `self._cleanup` (class-level), so it 
won't be deleted until `tearDownClass`. Since this test class already uses 
`self.cleanup` + `tearDown()` for per-test cleanup, consider adding the VM to 
`self.cleanup` instead to avoid accumulating running VMs across tests (unless 
you intentionally need the VM to persist across multiple test cases).



##########
test/integration/smoke/test_vm_lifecycle_with_snapshot_or_volume.py:
##########
@@ -286,11 +283,12 @@ def deploy_vm_from_snapshot(self, snapshot):
                                                 snapshotid=snapshot.id,
                                                 mode="basic",
                                                 )
+        self.cleanup.append(self.virtual_machine)
         try:
-            ssh_client = virtual_machine.get_ssh_client()
+            ssh_client = self.virtual_machine.get_ssh_client()

Review Comment:
   Variable ssh_client is not used.



##########
test/integration/plugins/storpool/sp_util.py:
##########
@@ -970,14 +981,16 @@ def verify_snapshot_copies(cls, userapiclient, 
snapshot_id, zone_ids):
             if obj.zoneid not in snapshots:
                 new_list.append(obj)
                 snapshots.add(obj.zoneid)
-
+        logging.debug("new list %s" % new_list)
+        logging.debug("zone IDs %s" % zone_ids)
+        logging.debug("snapshot entries %s" % snapshot_entries)
         if len(new_list) != len(zone_ids):
-            cls.fail("Undesired list snapshot size for multiple zones")
+            raise Exception("Undesired list snapshot size for multiple zones")

Review Comment:
   `StorPoolHelper.verify_snapshot_copies` now raises exceptions for some 
failure cases, but it still calls `cls.fail(...)` earlier in the method when 
`Snapshot.list` doesn't return a list. Since `StorPoolHelper` is not a 
`unittest.TestCase`, `cls.fail` is not defined and that path will raise 
`AttributeError` instead of a clear test failure. Replace that remaining 
`cls.fail` usage with an exception/AssertionError for consistency and correct 
error reporting.



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to