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

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


The following commit(s) were added to refs/heads/main by this push:
     new 5aa15187b66 Refactoring StorPool tests (#11107)
5aa15187b66 is described below

commit 5aa15187b66eee5eca9da8b6322ceecc4b18b3cc
Author: slavkap <51903378+slav...@users.noreply.github.com>
AuthorDate: Thu Jul 31 16:04:35 2025 +0300

    Refactoring StorPool tests (#11107)
    
    * Refactor StorPool  smoke tests
    
    * Marvin confing template for StorPool tests
---
 .../plugins/storpool/MigrateVolumeToStorPool.py    |  19 ++-
 .../plugins/storpool/TestEncryptedVolumes.py       | 135 +++++-------------
 .../plugins/storpool/TestStorPoolVolumes.py        | 155 ++++++++++-----------
 .../plugins/storpool/TestTagsOnStorPool.py         |  51 ++++---
 .../plugins/storpool/TestVmSnapshots.py            |  20 +--
 test/integration/plugins/storpool/sp_util.py       |  78 +++++++++++
 test/integration/plugins/storpool/storpool.cfg     | 154 ++++++++++++++++++++
 .../plugins/storpool/test_storpool_tiers.py        |  38 ++---
 8 files changed, 414 insertions(+), 236 deletions(-)

diff --git a/test/integration/plugins/storpool/MigrateVolumeToStorPool.py 
b/test/integration/plugins/storpool/MigrateVolumeToStorPool.py
index 5babdca094e..4fc94d24383 100644
--- a/test/integration/plugins/storpool/MigrateVolumeToStorPool.py
+++ b/test/integration/plugins/storpool/MigrateVolumeToStorPool.py
@@ -84,6 +84,12 @@ class TestMigrateVolumeToAnotherPool(cloudstackTestCase):
         zone = config.zones[0]
         assert zone is not None
 
+        td = TestData()
+        cls.testdata = td.testdata
+        cls.helper = StorPoolHelper()
+        sp_pools = cls.helper.get_pool(zone)
+        assert sp_pools is not None
+
         cls.spapi = spapi.Api(host=zone.spEndpoint, port=zone.spEndpointPort, 
auth=zone.spAuthToken, multiCluster=True)
         testClient = super(TestMigrateVolumeToAnotherPool, 
cls).getClsTestClient()
         cls.apiclient = testClient.getApiClient()
@@ -103,11 +109,8 @@ class TestMigrateVolumeToAnotherPool(cloudstackTestCase):
         # Get Zone, Domain and templates
         cls.domain = get_domain(cls.apiclient)
 
-        td = TestData()
-        cls.testdata = td.testdata
-        cls.helper = StorPoolHelper()
-        storpool_primary_storage = cls.testdata[TestData.primaryStorage]
-        cls.template_name = storpool_primary_storage.get("name")
+        storpool_primary_storage = sp_pools[0]
+        cls.template_name = storpool_primary_storage["name"]
         storpool_service_offerings = cls.testdata[TestData.serviceOffering]
 
         nfs_service_offerings = cls.testdata[TestData.serviceOfferingsPrimary]
@@ -283,12 +286,6 @@ class TestMigrateVolumeToAnotherPool(cloudstackTestCase):
     @classmethod
     def cleanUpCloudStack(cls):
         try:
-            if cls.nfs_storage_pool.state is not "Maintenance":
-                cls.nfs_storage_pool = 
StoragePool.enableMaintenance(cls.apiclient, cls.nfs_storage_pool.id)
-
-            if cls.ceph_storage_pool.state is not "Maintenance":
-                cls.ceph_storage_pool = 
StoragePool.enableMaintenance(cls.apiclient, cls.ceph_storage_pool.id)
-
             cls.storage_pool = StoragePool.update(cls.apiclient,
                                               id=cls.storage_pool.id,
                                               tags = ["ssd"])
diff --git a/test/integration/plugins/storpool/TestEncryptedVolumes.py 
b/test/integration/plugins/storpool/TestEncryptedVolumes.py
index eed64950ef5..ac049fb77a2 100644
--- a/test/integration/plugins/storpool/TestEncryptedVolumes.py
+++ b/test/integration/plugins/storpool/TestEncryptedVolumes.py
@@ -97,9 +97,18 @@ class TestEncryptedVolumes(cloudstackTestCase):
 
         zone = config.zones[0]
         assert zone is not None
-        cls.zone = list_zones(cls.apiclient, name=zone.name)[0]
 
-        cls.hostConfig = 
cls.config.__dict__["zones"][0].__dict__["pods"][0].__dict__["clusters"][0].__dict__["hosts"][0].__dict__
+        storage_pools = zone.primaryStorages
+        sp_pools = []
+        for storage in storage_pools:
+            if storage['provider'] and "StorPool" in storage['provider']:
+                sp_pools.append(storage)
+
+        if len(sp_pools) < 2:
+            cls.debug("Cannot perform the tests because there aren't the 
required count of StorPool storage pools %s" % sp_pools)
+            return
+
+        cls.zone = list_zones(cls.apiclient, name=zone.name)[0]
 
         cls.spapi = spapi.Api(host=zone.spEndpoint, port=zone.spEndpointPort, 
auth=zone.spAuthToken, multiCluster=True)
         cls.helper = StorPoolHelper()
@@ -118,124 +127,56 @@ class TestEncryptedVolumes(cloudstackTestCase):
         td = TestData()
         cls.testdata = td.testdata
 
-        cls.sp_template_1 = "ssd"
-        storpool_primary_storage = {
-            "name": cls.sp_template_1,
-            "zoneid": cls.zone.id,
-            "url": "SP_API_HTTP=%s:%s;SP_AUTH_TOKEN=%s;SP_TEMPLATE=%s" % 
(zone.spEndpoint, zone.spEndpointPort, zone.spAuthToken, cls.sp_template_1),
-            "scope": "zone",
-            "capacitybytes": 564325555333,
-            "capacityiops": 155466,
-            "hypervisor": "kvm",
-            "provider": "StorPool",
-            "tags": cls.sp_template_1
-        }
-
-        cls.storpool_primary_storage = storpool_primary_storage
+        storpool_primary_storage = sp_pools[0]
+        cls.template_name = storpool_primary_storage["name"]
 
         storage_pool = list_storage_pools(
             cls.apiclient,
-            name=storpool_primary_storage["name"]
-        )
-
+            name=cls.template_name
+            )
         if storage_pool is None:
-            newTemplate = 
sptypes.VolumeTemplateCreateDesc(name=storpool_primary_storage["name"], 
placeAll="virtual",
-                                                           
placeTail="virtual", placeHead="virtual", replication=1)
-            template_on_local = cls.spapi.volumeTemplateCreate(newTemplate)
-
             storage_pool = StoragePool.create(cls.apiclient, 
storpool_primary_storage)
         else:
             storage_pool = storage_pool[0]
-        cls.primary_storage = storage_pool
+        cls.storage_pool = storage_pool
+        cls.helper.updateStoragePoolTags(cls.apiclient, cls.storage_pool.id, 
cls.testdata[TestData.sp_template_1]["tags"])
 
-        storpool_service_offerings_ssd = {
-            "name": "ssd-encrypted",
-            "displaytext": "SP_CO_2 (Min IOPS = 10,000; Max IOPS = 15,000)",
-            "cpunumber": 1,
-            "cpuspeed": 500,
-            "memory": 512,
-            "storagetype": "shared",
-            "customizediops": False,
-            "hypervisorsnapshotreserve": 200,
-            "encryptroot": True,
-            "tags": cls.sp_template_1
-        }
+        cls.debug(pprint.pformat(storage_pool))
 
-        service_offerings_ssd = list_service_offering(
-            cls.apiclient,
-            name=storpool_service_offerings_ssd["name"]
-        )
+        cls.primary_storage = storage_pool
 
-        if service_offerings_ssd is None:
-            service_offerings_ssd = ServiceOffering.create(cls.apiclient, 
storpool_service_offerings_ssd, encryptroot=True)
-        else:
-            service_offerings_ssd = service_offerings_ssd[0]
+        storpool_primary_storage = sp_pools[1]
+        cls.template_name = storpool_primary_storage["name"]
 
-        cls.service_offering = service_offerings_ssd
-        cls.debug(pprint.pformat(cls.service_offering))
-
-        cls.sp_template_2 = "ssd2"
-
-        storpool_primary_storage2 = {
-            "name": cls.sp_template_2,
-            "zoneid": cls.zone.id,
-            "url": "SP_API_HTTP=%s:%s;SP_AUTH_TOKEN=%s;SP_TEMPLATE=%s" % 
(zone.spEndpoint, zone.spEndpointPort, zone.spAuthToken, cls.sp_template_2),
-            "scope": "zone",
-            "capacitybytes": 564325555333,
-            "capacityiops": 1554,
-            "hypervisor": "kvm",
-            "provider": "StorPool",
-            "tags": cls.sp_template_2
-        }
-
-        cls.storpool_primary_storage2 = storpool_primary_storage2
         storage_pool = list_storage_pools(
             cls.apiclient,
-            name=storpool_primary_storage2["name"]
-        )
-
+            name=cls.template_name
+            )
         if storage_pool is None:
-            newTemplate = 
sptypes.VolumeTemplateCreateDesc(name=storpool_primary_storage2["name"], 
placeAll="virtual",
-                                                           
placeTail="virtual", placeHead="virtual", replication=1)
-            template_on_local = cls.spapi.volumeTemplateCreate(newTemplate)
-            storage_pool = StoragePool.create(cls.apiclient, 
storpool_primary_storage2)
-
+            storage_pool = StoragePool.create(cls.apiclient, 
storpool_primary_storage)
         else:
             storage_pool = storage_pool[0]
-        cls.primary_storage2 = storage_pool
+        cls.storage_pool = storage_pool
+        cls.helper.updateStoragePoolTags(cls.apiclient, cls.storage_pool.id, 
cls.testdata[TestData.sp_template_2]["tags"])
 
-        storpool_service_offerings_ssd2 = {
-            "name": "ssd2-encrypted",
-            "displaytext": "SP_CO_2",
-            "cpunumber": 1,
-            "cpuspeed": 500,
-            "memory": 512,
-            "storagetype": "shared",
-            "customizediops": False,
-            "encryptroot": True,
-            "tags": cls.sp_template_2
-        }
-
-        service_offerings_ssd2 = list_service_offering(
-            cls.apiclient,
-            name=storpool_service_offerings_ssd2["name"]
-        )
+        cls.debug(pprint.pformat(storage_pool))
 
-        if service_offerings_ssd2 is None:
-            service_offerings_ssd2 = ServiceOffering.create(cls.apiclient, 
storpool_service_offerings_ssd2, encryptroot=True)
-        else:
-            service_offerings_ssd2 = service_offerings_ssd2[0]
+        cls.primary_storage2 = storage_pool
 
-        cls.service_offering2 = service_offerings_ssd2
+        storpool_service_offerings_ssd = 
cls.testdata[TestData.serviceOfferingEncrypted]
 
-        cls.disk_offerings_ssd2_encrypted = list_disk_offering(
+        service_offerings_ssd = list_service_offering(
             cls.apiclient,
-            name=cls.testdata[TestData.diskOfferingEncrypted2]["name"]
+            name=storpool_service_offerings_ssd["name"]
         )
-        if cls.disk_offerings_ssd2_encrypted is None:
-            cls.disk_offerings_ssd2_encrypted = 
DiskOffering.create(cls.apiclient, 
cls.testdata[TestData.diskOfferingEncrypted2], encrypt=True)
+
+        if service_offerings_ssd is None:
+            service_offerings_ssd = ServiceOffering.create(cls.apiclient, 
storpool_service_offerings_ssd, encryptroot=True)
         else:
-            cls.disk_offerings_ssd2_encrypted = 
cls.disk_offerings_ssd2_encrypted[0]
+            service_offerings_ssd = service_offerings_ssd[0]
+
+        cls.service_offering = service_offerings_ssd
+        cls.debug(pprint.pformat(cls.service_offering))
 
         cls.disk_offering_ssd_encrypted = list_disk_offering(
             cls.apiclient,
diff --git a/test/integration/plugins/storpool/TestStorPoolVolumes.py 
b/test/integration/plugins/storpool/TestStorPoolVolumes.py
index 70f8900df58..150fe830598 100644
--- a/test/integration/plugins/storpool/TestStorPoolVolumes.py
+++ b/test/integration/plugins/storpool/TestStorPoolVolumes.py
@@ -32,6 +32,7 @@ from marvin.lib.base import (Account,
                              Volume,
                              SecurityGroup,
                              Role,
+                             DiskOffering,
                              )
 from marvin.lib.common import (get_zone,
                                get_domain,
@@ -79,17 +80,24 @@ class TestStoragePool(cloudstackTestCase):
     def setUpCloudStack(cls):
         config = cls.getClsConfig()
         StorPoolHelper.logger = cls
+        cls.logger = StorPoolHelper.logger
 
         zone = config.zones[0]
         assert zone is not None
 
+        td = TestData()
+        cls.testdata = td.testdata
+        cls.helper = StorPoolHelper()
+
+        sp_pools = cls.helper.get_pool(zone)
+        assert sp_pools is not None
+
         cls.spapi = spapi.Api(host=zone.spEndpoint, port=zone.spEndpointPort, 
auth=zone.spAuthToken, multiCluster=True)
         testClient = super(TestStoragePool, cls).getClsTestClient()
 
         cls._cleanup = []
 
         cls.apiclient = testClient.getApiClient()
-        cls.helper = StorPoolHelper()
 
         cls.unsupportedHypervisor = False
         cls.hypervisor = testClient.getHypervisorInfo()
@@ -106,34 +114,11 @@ class TestStoragePool(cloudstackTestCase):
         cls.debug(list_zones(cls.apiclient, name=zone.name))
         assert cls.zone is not None
 
-        cls.sp_template_1 = "ssd"
-        storpool_primary_storage = {
-            "name" : cls.sp_template_1,
-            "zoneid": cls.zone.id,
-            "url": "SP_API_HTTP=%s:%s;SP_AUTH_TOKEN=%s;SP_TEMPLATE=%s" % 
(zone.spEndpoint, zone.spEndpointPort, zone.spAuthToken, cls.sp_template_1),
-            "scope": "zone",
-            "capacitybytes": 564325555333,
-            "capacityiops": 155466,
-            "hypervisor": "kvm",
-            "provider": "StorPool",
-            "tags": cls.sp_template_1
-            }
+        cls.sp_template_1 = cls.testdata[TestData.sp_template_1]["tags"]
+        storpool_primary_storage = sp_pools[0]
 
-        cls.storpool_primary_storage = storpool_primary_storage
-
-        storage_pool = list_storage_pools(
-            cls.apiclient,
-            name=storpool_primary_storage["name"]
-            )
-
-        if storage_pool is None:
-            newTemplate = sptypes.VolumeTemplateCreateDesc(name = 
storpool_primary_storage["name"],placeAll = "virtual", placeTail = "virtual", 
placeHead = "virtual", replication=1)
-            template_on_local = cls.spapi.volumeTemplateCreate(newTemplate)
-
-            storage_pool = StoragePool.create(cls.apiclient, 
storpool_primary_storage)
-        else:
-            storage_pool = storage_pool[0]
-        cls.primary_storage = storage_pool
+        cls.primary_storage = 
cls.create_pool_if_not_exists(storpool_primary_storage)
+        cls.helper.updateStoragePoolTags(cls.apiclient, 
cls.primary_storage.id, cls.sp_template_1)
 
 
         storpool_service_offerings_ssd = {
@@ -150,7 +135,7 @@ class TestStoragePool(cloudstackTestCase):
 
         service_offerings_ssd = list_service_offering(
             cls.apiclient,
-            name=storpool_service_offerings_ssd["name"]
+            name=cls.sp_template_1
             )
 
         if service_offerings_ssd is None:
@@ -162,36 +147,12 @@ class TestStoragePool(cloudstackTestCase):
         cls.debug(pprint.pformat(cls.service_offering))
 
 
-        cls.sp_template_2 = "ssd2"
-
-        storpool_primary_storage2 = {
-            "name" : cls.sp_template_2,
-            "zoneid": cls.zone.id,
-            "url": "SP_API_HTTP=%s:%s;SP_AUTH_TOKEN=%s;SP_TEMPLATE=%s" % 
(zone.spEndpoint, zone.spEndpointPort, zone.spAuthToken, cls.sp_template_2),
-            "scope": "zone",
-            "capacitybytes": 564325555333,
-            "capacityiops": 1554,
-            "hypervisor": "kvm",
-            "provider": "StorPool",
-            "tags": cls.sp_template_2
-            }
-
-        cls.storpool_primary_storage2 = storpool_primary_storage2
-        storage_pool = list_storage_pools(
-            cls.apiclient,
-            name=storpool_primary_storage2["name"]
-            )
-
-        if storage_pool is None:
-            newTemplate = sptypes.VolumeTemplateCreateDesc(name = 
storpool_primary_storage2["name"],placeAll = "virtual", placeTail = "virtual", 
placeHead = "virtual", replication=1)
-
-            template_on_local = cls.spapi.volumeTemplateCreate(newTemplate)
+        cls.sp_template_2 = cls.testdata[TestData.sp_template_2]["tags"]
 
-            storage_pool = StoragePool.create(cls.apiclient, 
storpool_primary_storage2)
+        storpool_primary_storage2 = sp_pools[1]
 
-        else:
-            storage_pool = storage_pool[0]
-        cls.primary_storage2 = storage_pool
+        cls.primary_storage2 = 
cls.create_pool_if_not_exists(storpool_primary_storage2)
+        cls.helper.updateStoragePoolTags(cls.apiclient, 
cls.primary_storage2.id, cls.sp_template_2)
 
         storpool_service_offerings_ssd2 = {
             "name": cls.sp_template_2,
@@ -216,25 +177,11 @@ class TestStoragePool(cloudstackTestCase):
 
         cls.service_offering2 = service_offerings_ssd2
 
-        disk_offerings = list_disk_offering(
-            cls.apiclient,
-            name="Small"
-            )
-
-        disk_offering_20 = list_disk_offering(
-            cls.apiclient,
-            name="Medium"
-            )
+        cls.disk_offerings  = 
cls.create_do_if_not_exists(cls.testdata[TestData.diskOfferingSmall])
 
-        disk_offering_100 = list_disk_offering(
-            cls.apiclient,
-            name="Large"
-            )
+        cls.disk_offering_20 = 
cls.create_do_if_not_exists(cls.testdata[TestData.diskOfferingMedium])
 
-
-        cls.disk_offerings = disk_offerings[0]
-        cls.disk_offering_20 = disk_offering_20[0]
-        cls.disk_offering_100 = disk_offering_100[0]
+        cls.disk_offering_100 = 
cls.create_do_if_not_exists(cls.testdata[TestData.diskOfferingLarge])
 
         #The version of CentOS has to be supported
         template = get_template(
@@ -253,14 +200,14 @@ class TestStoragePool(cloudstackTestCase):
         cls.services["zoneid"] = cls.zone.id
         cls.services["diskofferingid"] = cls.disk_offerings.id
 
-        role = Role.list(cls.apiclient, name='Admin')
+        role = Role.list(cls.apiclient, name='Root Admin')
 
         # Create VMs, VMs etc
         cls.account = Account.create(
                             cls.apiclient,
                             cls.services["account"],
                             domainid=cls.domain.id,
-                            roleid = role[0].id
+                            roleid = 1
                             )
 
         securitygroup = SecurityGroup.list(cls.apiclient, account = 
cls.account.name, domainid= cls.account.domainid)[0]
@@ -271,7 +218,7 @@ class TestStoragePool(cloudstackTestCase):
             cls.apiclient,
             {"diskname":"StorPoolDisk-1" },
             zoneid=cls.zone.id,
-            diskofferingid=disk_offerings[0].id,
+            diskofferingid=cls.disk_offerings.id,
             account=cls.account.name,
             domainid=cls.account.domainid,
         )
@@ -280,7 +227,7 @@ class TestStoragePool(cloudstackTestCase):
             cls.apiclient,
             {"diskname":"StorPoolDisk-2" },
             zoneid=cls.zone.id,
-            diskofferingid=disk_offerings[0].id,
+            diskofferingid=cls.disk_offerings.id,
             account=cls.account.name,
             domainid=cls.account.domainid,
         )
@@ -289,7 +236,7 @@ class TestStoragePool(cloudstackTestCase):
             cls.apiclient,
             {"diskname":"StorPoolDisk-3" },
             zoneid=cls.zone.id,
-            diskofferingid=disk_offerings[0].id,
+            diskofferingid=cls.disk_offerings.id,
             account=cls.account.name,
             domainid=cls.account.domainid,
         )
@@ -337,6 +284,34 @@ class TestStoragePool(cloudstackTestCase):
         cls.random_data = "random.data"
         return
 
+    @classmethod
+    def create_do_if_not_exists(cls, data):
+        disk_offerings = list_disk_offering(
+            cls.apiclient,
+            name=data["name"]
+        )
+        if disk_offerings is None:
+            disk_offerings = DiskOffering.create(cls.apiclient, data)
+        else:
+            disk_offerings = disk_offerings[0]
+        return disk_offerings
+
+    @classmethod
+    def create_pool_if_not_exists(cls, storpool_primary_storage):
+        storage_pool = list_storage_pools(
+            cls.apiclient,
+            name=storpool_primary_storage["name"]
+        )
+        if storage_pool is None:
+            newTemplate = 
sptypes.VolumeTemplateCreateDesc(name=storpool_primary_storage["name"], 
placeAll="virtual",
+                                                           
placeTail="virtual", placeHead="virtual", replication=1)
+            template_on_local = cls.spapi.volumeTemplateCreate(newTemplate)
+
+            storage_pool = StoragePool.create(cls.apiclient, 
storpool_primary_storage)
+        else:
+            storage_pool = storage_pool[0]
+        return storage_pool
+
     @classmethod
     def tearDownClass(cls):
         cls.cleanUpCloudStack()
@@ -406,6 +381,8 @@ class TestStoragePool(cloudstackTestCase):
         self.assertIsNotNone(template, "Template is None")
         self.assertIsInstance(template, Template, "Template is instance of 
template")
         self._cleanup.append(template)
+        virtual_machine.stop(self.apiclient, forced=True)
+        virtual_machine.delete(self.apiclient, expunge=True)
 
     @attr(tags=["advanced", "advancedns", "smoke"], required_hardware="true")
     def test_02_snapshot_to_template_bypass_secondary(self):
@@ -487,6 +464,8 @@ class TestStoragePool(cloudstackTestCase):
         self.assertIsNotNone(template, "Template is None")
         self.assertIsInstance(template, Template, "Template is instance of 
template")
         self._cleanup.append(template)
+        virtual_machine.stop(self.apiclient, forced=True)
+        virtual_machine.delete(self.apiclient, expunge=True)
 
     @attr(tags=["advanced", "advancedns", "smoke"], required_hardware="true")
     def test_03_snapshot_volume_with_secondary(self):
@@ -1016,6 +995,8 @@ class TestStoragePool(cloudstackTestCase):
             )
 
         ssh_client = vm.get_ssh_client(reconnect=True)
+        vm.stop(self.apiclient, forced=True)
+        vm.delete(self.apiclient, expunge=True)
 
 
     @attr(tags=["advanced", "advancedns", "smoke"], required_hardware="true")
@@ -1825,6 +1806,8 @@ class TestStoragePool(cloudstackTestCase):
         self.assertIsNotNone(snapshot, "Snapshot is None")
 
         self.assertEqual(list_volumes_of_vm[0].id, snapshot.volumeid, 
"Snapshot is not for the same volume")
+        vm.stop(self.apiclient, forced=True)
+        vm.delete(self.apiclient, expunge=True)
 
 
     @attr(tags=["advanced", "advancedns", "smoke"], required_hardware="true")
@@ -1860,6 +1843,8 @@ class TestStoragePool(cloudstackTestCase):
         self.assertIsNotNone(template, "Template is None")
         self.assertIsInstance(template, Template, "Template is instance of 
template")
         self._cleanup.append(template)
+        virtual_machine.stop(self.apiclient, forced=True)
+        virtual_machine.delete(self.apiclient, expunge=True)
 
     @attr(tags=["advanced", "advancedns", "smoke"], required_hardware="true")
     def test_24_migrate_vm_to_another_storage(self):
@@ -1892,6 +1877,8 @@ class TestStoragePool(cloudstackTestCase):
         self.assertFalse(hasattr(self.volume, 'virtualmachineid') , "Volume is 
not detached")
 
         self.assertFalse(hasattr(self.volume, 'storageid') , "Volume is not 
detached")
+
+        self.helper.updateStoragePoolTags(apiclient=self.apiclient, 
poolId=self.primary_storage2.id, 
tags=self.testdata[TestData.sp_template_1]["tags"])
         volume = Volume.migrate(
             self.apiclient,
             volumeid = self.volume.id,
@@ -1901,6 +1888,8 @@ class TestStoragePool(cloudstackTestCase):
         self.assertIsNotNone(volume, "Volume is None")
 
         self.assertEqual(volume.storageid, self.primary_storage2.id, "Storage 
is the same")
+        self.helper.updateStoragePoolTags(apiclient=self.apiclient, 
poolId=self.primary_storage2.id, 
tags=self.testdata[TestData.sp_template_2]["tags"])
+
 
     @attr(tags=["advanced", "advancedns", "smoke"], required_hardware="true")
     def test_26_create_vm_on_another_storpool_storage(self):
@@ -1916,6 +1905,8 @@ class TestStoragePool(cloudstackTestCase):
             rootdisksize=10
             )
         self.assertIsNotNone(virtual_machine, "Could not create virtual 
machine on another Storpool primary storage")
+        virtual_machine.stop(self.apiclient, forced=True)
+        virtual_machine.delete(self.apiclient, expunge=True)
 
 
     @attr(tags=["advanced", "advancedns", "smoke"], required_hardware="true")
@@ -1958,6 +1949,8 @@ class TestStoragePool(cloudstackTestCase):
 
         self.assertIsNotNone(volume, "Could not create volume from snapshot")
         self.assertIsInstance(volume, Volume, "Volume is not instance of 
Volume")
+        virtual_machine.stop(self.apiclient, forced=True)
+        virtual_machine.delete(self.apiclient, expunge=True)
 
     @attr(tags=["advanced", "advancedns", "smoke"], required_hardware="true")
     def test_28_download_volume(self):
@@ -2041,6 +2034,10 @@ class TestStoragePool(cloudstackTestCase):
         self.assertIsNotNone(template, "Template is None")
         self.assertIsInstance(template, Template, "Template is instance of 
template")
         self._cleanup.append(template)
+        virtual_machine.stop(self.apiclient, forced=True)
+        virtual_machine.delete(self.apiclient, expunge=True)
+        virtual_machine2.stop(self.apiclient, forced=True)
+        virtual_machine2.delete(self.apiclient, expunge=True)
 
     @classmethod
     def create_volume(self, apiclient, zoneid=None, snapshotid=None, 
account=None, domainid=None):
diff --git a/test/integration/plugins/storpool/TestTagsOnStorPool.py 
b/test/integration/plugins/storpool/TestTagsOnStorPool.py
index ea5c2a4cc78..b813cd320c4 100644
--- a/test/integration/plugins/storpool/TestTagsOnStorPool.py
+++ b/test/integration/plugins/storpool/TestTagsOnStorPool.py
@@ -44,6 +44,7 @@ from marvin.lib.base import (Account,
                              VmSnapshot,
                              Volume,
                              SecurityGroup,
+                             DiskOffering,
                              )
 from marvin.lib.common import (get_zone,
                                get_domain,
@@ -79,10 +80,16 @@ class TestStoragePool(cloudstackTestCase):
     def setUpCloudStack(cls):
         config = cls.getClsConfig()
         StorPoolHelper.logger = cls
+        td = TestData()
+        cls.testdata = td.testdata
+        cls.helper = StorPoolHelper()
 
         zone = config.zones[0]
         assert zone is not None
 
+        sp_pools = cls.helper.get_pool(zone)
+        assert sp_pools is not None
+
         cls.spapi = spapi.Api(host=zone.spEndpoint, port=zone.spEndpointPort, 
auth=zone.spAuthToken, multiCluster=True)
         testClient = super(TestStoragePool, cls).getClsTestClient()
         cls.apiclient = testClient.getApiClient()
@@ -98,16 +105,9 @@ class TestStoragePool(cloudstackTestCase):
         # Get Zone, Domain and templates
         cls.domain = get_domain(cls.apiclient)
         cls.zone = list_zones(cls.apiclient, name=zone.name)[0]
-        cls.debug(cls.zone)
-        cls.debug(list_zones(cls.apiclient, name=zone.name))
-        assert cls.zone is not None
 
         assert cls.zone is not None
 
-        td = TestData()
-        cls.testdata = td.testdata
-        cls.helper = StorPoolHelper()
-
         cls.account = cls.helper.create_account(
                             cls.apiclient,
                             cls.services["account"],
@@ -120,34 +120,39 @@ class TestStoragePool(cloudstackTestCase):
         securitygroup = SecurityGroup.list(cls.apiclient, account = 
cls.account.name, domainid= cls.account.domainid)[0]
         cls.helper.set_securityGroups(cls.apiclient, account = 
cls.account.name, domainid= cls.account.domainid, id = securitygroup.id)
 
-        storpool_primary_storage = cls.testdata[TestData.primaryStorage]
-
-        storpool_service_offerings = cls.testdata[TestData.serviceOffering]
-
-        cls.template_name = storpool_primary_storage.get("name")
-
+        storpool_primary_storage = sp_pools[0]
+        cls.template_name = storpool_primary_storage["name"]
         storage_pool = list_storage_pools(
             cls.apiclient,
             name=cls.template_name
             )
+        if storage_pool is None:
+            storage_pool = StoragePool.create(cls.apiclient, 
storpool_primary_storage)
+        else:
+            storage_pool = storage_pool[0]
+        cls.storage_pool = storage_pool
+        cls.helper.updateStoragePoolTags(cls.apiclient, cls.storage_pool.id, 
cls.testdata[TestData.sp_template_1]["tags"])
 
-        service_offerings = list_service_offering(
+        cls.debug(pprint.pformat(storage_pool))
+
+
+        disk_offerings = list_disk_offering(
             cls.apiclient,
             name=cls.template_name
             )
+        if disk_offerings is None:
+            offering = cls.testdata[TestData.diskOfferingCustom]
+            cls.disk_offerings = DiskOffering.create(cls.apiclient, 
services=offering, custom=True)
+        else:
+            cls.disk_offerings = disk_offerings[0]
 
-        disk_offerings = list_disk_offering(
+        storpool_service_offerings = cls.testdata[TestData.serviceOffering]
+
+        service_offerings = list_service_offering(
             cls.apiclient,
-            name="ssd"
+            name=cls.template_name
             )
 
-        cls.disk_offerings = disk_offerings[0]
-        if storage_pool is None:
-            storage_pool = StoragePool.create(cls.apiclient, 
storpool_primary_storage)
-        else:
-            storage_pool = storage_pool[0]
-        cls.storage_pool = storage_pool
-        cls.debug(pprint.pformat(storage_pool))
         if service_offerings is None:
             service_offerings = ServiceOffering.create(cls.apiclient, 
storpool_service_offerings)
         else:
diff --git a/test/integration/plugins/storpool/TestVmSnapshots.py 
b/test/integration/plugins/storpool/TestVmSnapshots.py
index ab35c076b4e..749e534f0da 100644
--- a/test/integration/plugins/storpool/TestVmSnapshots.py
+++ b/test/integration/plugins/storpool/TestVmSnapshots.py
@@ -29,6 +29,7 @@ from marvin.lib.base import (Account,
                              User,
                              Volume,
                              SecurityGroup,
+                             DiskOffering,
                              )
 from marvin.lib.common import (get_zone,
                                get_domain,
@@ -76,6 +77,8 @@ class TestVmSnapshot(cloudstackTestCase):
         cls.testdata = td.testdata
         cls.helper = StorPoolHelper()
 
+        sp_pools = cls.helper.get_pool(zone)
+        assert sp_pools is not None
 
         cls.services = testClient.getParsedTestDataConfig()
         # Get Zone, Domain and templates
@@ -114,26 +117,29 @@ class TestVmSnapshot(cloudstackTestCase):
         securitygroup = SecurityGroup.list(cls.apiclient, account = 
cls.account.name, domainid= cls.account.domainid)[0]
         cls.helper.set_securityGroups(cls.apiclient, account = 
cls.account.name, domainid= cls.account.domainid, id = securitygroup.id)
 
-        primarystorage = cls.testdata[TestData.primaryStorage]
+        primarystorage = sp_pools[0]
 
         serviceOffering = cls.testdata[TestData.serviceOffering]
         storage_pool = list_storage_pools(
             cls.apiclient,
-            name = primarystorage.get("name")
+            name = primarystorage["name"]
             )
         cls.primary_storage = storage_pool[0]
 
         disk_offering = list_disk_offering(
             cls.apiclient,
-            name="ssd"
+            name=primarystorage["name"]
             )
 
-        assert disk_offering is not None
-
+        if disk_offering is None:
+            offering = cls.testdata[TestData.diskOfferingCustom]
+            cls.disk_offering = DiskOffering.create(cls.apiclient, 
services=offering, custom=True)
+        else:
+            cls.disk_offering = disk_offering[0]
 
         service_offering_only = list_service_offering(
             cls.apiclient,
-            name="ssd"
+            name=primarystorage["name"]
             )
         if service_offering_only is not None:
             cls.service_offering_only = service_offering_only[0]
@@ -143,8 +149,6 @@ class TestVmSnapshot(cloudstackTestCase):
                 serviceOffering)
         assert cls.service_offering_only is not None
 
-        cls.disk_offering = disk_offering[0]
-
         # Create 1 data volume_1
         cls.volume = Volume.create(
             cls.apiclient,
diff --git a/test/integration/plugins/storpool/sp_util.py 
b/test/integration/plugins/storpool/sp_util.py
index 70f36609af5..633cba7915b 100644
--- a/test/integration/plugins/storpool/sp_util.py
+++ b/test/integration/plugins/storpool/sp_util.py
@@ -84,6 +84,10 @@ class TestData():
     diskOfferingTier1Template = "diskOfferingTier1Template"
     diskOfferingTier2Template = "diskOfferingTier2Template"
     diskOfferingWithTagsAndTempl = "diskOfferingWithTagsAndTempl"
+    diskOfferingSmall = "diskOfferingSmall"
+    diskOfferingMedium = "diskOfferingMedium"
+    diskOfferingLarge = "diskOfferingLarge"
+    diskOfferingCustom = "diskOfferingCustom"
     domainId = "domainId"
     hypervisor = "hypervisor"
     login = "login"
@@ -100,6 +104,7 @@ class TestData():
     serviceOfferingsPrimary = "serviceOfferingsPrimary"
     serviceOfferingsIops = "serviceOfferingsIops"
     serviceOfferingsCeph = "serviceOfferingsCeph"
+    serviceOfferingEncrypted = "serviceOfferingEncrypted"
     scope = "scope"
     StorPool = "StorPool"
     storageTag = ["ssd", "ssd2"]
@@ -114,6 +119,8 @@ class TestData():
     volume_6 = "volume_6"
     volume_7 = "volume_7"
     zoneId = "zoneId"
+    sp_template_1 = 'sp_template_1'
+    sp_template_2 = 'sp_template_2'
 
     def __init__(self):
         sp_template_1 = 'ssd'
@@ -221,6 +228,18 @@ class TestData():
                 "customizediops": True,
                 "tags": sp_template_1,
             },
+            TestData.serviceOfferingEncrypted: {
+                "name": "Test-encrypted",
+                "displaytext": "SP Encrypted",
+                "cpunumber": 1,
+                "cpuspeed": 500,
+                "memory": 512,
+                "storagetype": "shared",
+                "customizediops": False,
+                "hypervisorsnapshotreserve": 200,
+                "encryptroot": True,
+                "tags": sp_template_1
+            },
             TestData.diskOffering: {
                 "name": "SP_DO_1",
                 "displaytext": "SP_DO_1 (5GB Min IOPS = 300; Max IOPS = 500)",
@@ -323,6 +342,38 @@ class TestData():
                 TestData.tags: sp_template_1,
                 "storagetype": "shared"
             },
+            TestData.diskOfferingSmall: {
+                "name": "Test-Small",
+                "displaytext": "Small Disk Offering",
+                "disksize" : 5,
+                "hypervisorsnapshotreserve": 200,
+                TestData.tags: sp_template_1,
+                "storagetype": "shared"
+            },
+            TestData.diskOfferingMedium: {
+                "name": "Test-Medium",
+                "displaytext": "Medium Disk Offering",
+                "disksize": 20,
+                "hypervisorsnapshotreserve": 200,
+                TestData.tags: sp_template_1,
+                "storagetype": "shared"
+            },
+            TestData.diskOfferingLarge: {
+                "name": "Test-Large",
+                "displaytext": "Large Disk Offering",
+                "disksize": 100,
+                "hypervisorsnapshotreserve": 200,
+                TestData.tags: sp_template_1,
+                "storagetype": "shared"
+            },
+            TestData.diskOfferingCustom: {
+                "name": "Test-Custom",
+                "displaytext": "Custom Disk Offering",
+                "custom": True,
+                "hypervisorsnapshotreserve": 200,
+                TestData.tags: sp_template_1,
+                "storagetype": "shared"
+            },
             TestData.volume_1: {
                 TestData.diskName: "test-volume-1",
             },
@@ -344,6 +395,12 @@ class TestData():
             TestData.volume_7: {
                 TestData.diskName: "test-volume-7",
             },
+            TestData.sp_template_1: {
+              "tags": "ssd"
+            },
+            TestData.sp_template_2: {
+                "tags": "ssd2"
+            },
         }
 class StorPoolHelper():
     def setUpClass(cls):
@@ -847,3 +904,24 @@ class StorPoolHelper():
                 break
 
         return destinationHost
+
+    @classmethod
+    def updateStoragePoolTags(cls, apiclient, poolId, tags):
+        StoragePool.update(
+            apiclient,
+            id=poolId,
+            tags=tags
+        )
+
+    @classmethod
+    def get_pool(cls, zone):
+        storage_pools = zone.primaryStorages
+        sp_pools = []
+        for storage in storage_pools:
+            if storage['provider'] and "StorPool" in storage['provider']:
+                sp_pools.append(storage)
+
+        if len(sp_pools) < 2:
+            cls.debug("Cannot perform the tests because there aren't the 
required count of StorPool storage pools %s" % sp_pools)
+            return
+        return sp_pools
diff --git a/test/integration/plugins/storpool/storpool.cfg 
b/test/integration/plugins/storpool/storpool.cfg
new file mode 100644
index 00000000000..4eccc9d0f29
--- /dev/null
+++ b/test/integration/plugins/storpool/storpool.cfg
@@ -0,0 +1,154 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+{
+  "zones": [
+    {
+      "name": "Zone-A",
+      "enabled": "True",
+      "physical_networks": [
+        {
+          "broadcastdomainrange": "Zone",
+          "name": "physical_network",
+          "traffictypes": [
+            {
+              "typ": "Guest"
+            },
+            {
+              "typ": "Management"
+            }
+          ],
+          "providers": [
+            {
+              "broadcastdomainrange": "ZONE",
+              "name": "VirtualRouter"
+            },
+            {
+              "broadcastdomainrange": "Pod",
+              "name": "SecurityGroupProvider"
+            }
+          ]
+        }
+      ],
+      "primaryStorages": [
+        {
+          "url": 
"SP_API_HTTP=1.1.1.1:81;SP_AUTH_TOKEN=11111111;SP_TEMPLATE=ssd",
+          "name": "ssd",
+          "provider": "StorPool",
+          "hypervisor": "KVM",
+          "path": "/dev/storpool/",
+          "protocol": "SharedMountPoint",
+          "capacitybytes": 300000000000,
+          "tags": "ssd"
+        },
+        {
+          "url": 
"SP_API_HTTP=1.1.1.1:81;SP_AUTH_TOKEN=1111111;SP_TEMPLATE=ssd2",
+          "name": "",
+          "provider": "StorPool",
+          "hypervisor": "KVM",
+          "path": "/dev/storpool/",
+          "protocol": "SharedMountPoint",
+          "capacitybytes": 300000000000,
+          "tags": ""
+        },
+        {
+          "url": "nfs://1.1.1.1/export/primary",
+          "name": "primary",
+          "hypervisor": "KVM",
+          "tags": "nfs"
+        },
+        {
+          "url": "rbd://cloudstack:342343223==@1.1.1.1/cloudstack",
+          "hypervisor": "KVM",
+          "name": "ceph",
+          "tags": "ceph"
+        }
+      ],
+      "spEndpoint": [SP_API_HTTP_HOST],
+      "spEndpointPort": 81,
+      "spAuthToken": [SP_AUTH_TOKEN]
+    },
+    {
+      "name": "Zone-B",
+      "enabled": "True",
+      "physical_networks": [
+        {
+          "broadcastdomainrange": "Zone",
+          "name": "physical_network",
+          "traffictypes": [
+            {
+              "typ": "Guest"
+            },
+            {
+              "typ": "Management"
+            }
+          ],
+          "providers": [
+            {
+              "broadcastdomainrange": "ZONE",
+              "name": "VirtualRouter"
+            },
+            {
+              "broadcastdomainrange": "Pod",
+              "name": "SecurityGroupProvider"
+            }
+          ]
+        }
+      ],
+      "primaryStorages": [
+        {
+          "url": 
"SP_API_HTTP=1.1.1.1:81;SP_AUTH_TOKEN=111111;SP_TEMPLATE=default",
+          "name": "",
+          "provider": "StorPool",
+          "hypervisor": "KVM",
+          "path": "/dev/storpool/",
+          "protocol": "SharedMountPoint",
+          "capacitybytes": 300000000000,
+          "tags": ""
+        },
+        {
+          "url": "nfs://1.1.1.1/export/primary",
+          "name": "",
+          "hypervisor": "KVM",
+          "tags": ""
+        }
+      ],
+      "spEndpoint": [SP_API_HTTP_HOST],
+      "spEndpointPort": 81,
+      "spAuthToken": [SP_AUTH_TOKEN]
+    }
+  ],
+  "dbSvr": {
+    "dbSvr": "127.0.0.1",
+    "passwd": "cloud",
+    "db": "cloud",
+    "port": 3306,
+    "user": "cloud"
+  },
+  "logger": {
+    "LogFolderPath": "/tmp/"
+  },
+  "mgtSvr": [
+    {
+      "mgtSvrIp": "",
+      "port": 8096,
+      "user": "",
+      "passwd": "",
+      "hypervisor": "kvm"
+    }
+  ]
+}
diff --git a/test/integration/plugins/storpool/test_storpool_tiers.py 
b/test/integration/plugins/storpool/test_storpool_tiers.py
index f41059e9206..abea6941fb6 100644
--- a/test/integration/plugins/storpool/test_storpool_tiers.py
+++ b/test/integration/plugins/storpool/test_storpool_tiers.py
@@ -90,17 +90,17 @@ class TestStorPoolTiers(cloudstackTestCase):
         cls.qos = "SP_QOSCLASS"
         cls.spTemplate = "SP_TEMPLATE"
 
-        cls.disk_offerings_tier1_tags = 
cls.getDiskOffering(disk_offerings_tier1_tags, cls.qos, "ssd")
+        cls.disk_offerings_tier1_tags = 
cls.getDiskOffering(disk_offerings_tier1_tags, cls.qos, 
cls.testdata[TestData.sp_template_1]["tags"])
 
-        cls.disk_offerings_tier2_tags = 
cls.getDiskOffering(disk_offerings_tier2_tags, cls.qos, "virtual")
+        cls.disk_offerings_tier2_tags = 
cls.getDiskOffering(disk_offerings_tier2_tags, cls.qos, 
cls.testdata[TestData.sp_template_2]["tags"])
 
-        cls.disk_offerings_tier1_template = 
cls.getDiskOffering(disk_offerings_tier1_template, cls.spTemplate, "ssd")
+        cls.disk_offerings_tier1_template = 
cls.getDiskOffering(disk_offerings_tier1_template, cls.spTemplate, 
cls.testdata[TestData.sp_template_1]["tags"])
 
         cls.disk_offerings_tier2_template = 
cls.getDiskOffering(disk_offerings_tier2_template, cls.spTemplate,
-                                                                "virtual")
+                                                                
cls.testdata[TestData.sp_template_2]["tags"])
         cls.disk_offerings_tier2_tags_template = 
cls.getDiskOffering(disk_offerings_tier2_tags_template, cls.spTemplate,
-                                                                     "virtual")
-        cls.resourceDetails(cls.qos, 
cls.disk_offerings_tier2_tags_template.id, "virtual")
+                                                                     
cls.testdata[TestData.sp_template_2]["tags"])
+        cls.resourceDetails(cls.qos, 
cls.disk_offerings_tier2_tags_template.id, 
cls.testdata[TestData.sp_template_1]["tags"])
 
         cls.account = cls.helper.create_account(
             cls.apiclient,
@@ -115,33 +115,35 @@ class TestStorPoolTiers(cloudstackTestCase):
         cls.helper.set_securityGroups(cls.apiclient, account=cls.account.name, 
domainid=cls.account.domainid,
                                       id=securitygroup.id)
 
-        storpool_primary_storage = cls.testdata[TestData.primaryStorage]
+        sp_pools = cls.helper.get_pool(zone)
+        assert sp_pools is not None
+
+        storpool_primary_storage = sp_pools[0]
 
         storpool_service_offerings = cls.testdata[TestData.serviceOffering]
 
-        cls.template_name = storpool_primary_storage.get("name")
+        cls.template_name = storpool_primary_storage["name"]
 
         storage_pool = list_storage_pools(
             cls.apiclient,
             name=cls.template_name
         )
 
-        service_offerings = list_service_offering(
-            cls.apiclient,
-            name=cls.template_name
-        )
-
-        disk_offerings = list_disk_offering(
-            cls.apiclient,
-            name="ssd"
-        )
-
         if storage_pool is None:
             storage_pool = StoragePool.create(cls.apiclient, 
storpool_primary_storage)
         else:
             storage_pool = storage_pool[0]
         cls.storage_pool = storage_pool
+        cls.helper.updateStoragePoolTags(cls.apiclient, cls.storage_pool.id, 
cls.testdata[TestData.sp_template_1]["tags"])
+
         cls.debug(pprint.pformat(storage_pool))
+
+
+        service_offerings = list_service_offering(
+            cls.apiclient,
+            name=cls.template_name
+        )
+
         if service_offerings is None:
             service_offerings = ServiceOffering.create(cls.apiclient, 
storpool_service_offerings)
         else:


Reply via email to