You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by ts...@apache.org on 2012/10/30 12:09:22 UTC

git commit: Summary: secondary storage tests refactored

Updated Branches:
  refs/heads/master 843e14085 -> 07d555db3


Summary: secondary storage tests refactored

Detail: The secondary storage tests are now simplified. Since before
running tests we already ensure the health checks - template, builtin,
system vms are ready. there is no need to add additonal wait/sleep here.

Signed-off-by: Prasanna Santhanam <ts...@apache.org> 1351595163 +0530


Project: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/commit/07d555db
Tree: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/tree/07d555db
Diff: http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/diff/07d555db

Branch: refs/heads/master
Commit: 07d555db37e638012caabb92dac5d3012b4d0ae9
Parents: 843e140
Author: Prasanna Santhanam <ts...@apache.org>
Authored: Tue Oct 30 16:35:49 2012 +0530
Committer: Prasanna Santhanam <ts...@apache.org>
Committed: Tue Oct 30 16:37:28 2012 +0530

----------------------------------------------------------------------
 test/integration/smoke/test_secondary_storage.py |  298 ++++-------------
 1 files changed, 69 insertions(+), 229 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-cloudstack/blob/07d555db/test/integration/smoke/test_secondary_storage.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_secondary_storage.py b/test/integration/smoke/test_secondary_storage.py
index d345bcb..80b7bfb 100644
--- a/test/integration/smoke/test_secondary_storage.py
+++ b/test/integration/smoke/test_secondary_storage.py
@@ -5,9 +5,9 @@
 # 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
@@ -28,35 +28,14 @@ from nose.plugins.attrib import attr
 #Import System modules
 import time
 
-class Services:
-    """Test secondary storage Services
-    """
-
-    def __init__(self):
-        self.services = {
-                         "storage": {
-                                "url": "nfs://192.168.100.131/SecStorage"
-                                # Format: File_System_Type/Location/Path
-                            },
-                        "hypervisors": {
-                            0: {
-                                    "hypervisor": "XenServer",
-                                    "templatefilter": "self",
-                                },
-                            },
-                         "sleep": 60,
-                         "timeout": 5,
-                        }
-
 class TestSecStorageServices(cloudstackTestCase):
-    
+
     @classmethod
     def setUpClass(cls):
         cls.api_client = super(TestSecStorageServices, cls).getClsTestClient().getApiClient()
-        cls.services = Services().services
         cls._cleanup = []
         return
-    
+
     @classmethod
     def tearDownClass(cls):
         try:
@@ -65,16 +44,32 @@ class TestSecStorageServices(cloudstackTestCase):
         except Exception as e:
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
-    
-    def setUp(self):
 
+    def setUp(self):
         self.apiclient = self.testClient.getApiClient()
         self.cleanup = []
-        self.services = Services().services
         # Get Zone and pod
-        self.domain = get_domain(self.apiclient, self.services)
-        self.zone = get_zone(self.apiclient, self.services)
-        self.pod = get_pod(self.apiclient, self.zone.id)
+        self.zones = []
+        self.pods = []
+        for zone in self.config.zones:
+            cmd = listZones.listZonesCmd()
+            cmd.name = zone.name
+            z = self.apiclient.listZones(cmd)
+            if isinstance(z, list) and len(z) > 0:
+                self.zones.append(z[0].id)
+            for pod in zone.pods:
+                podcmd = listPods.listPodsCmd()
+                podcmd.zoneid = z[0].id
+                p = self.apiclient.listPods(podcmd)
+                if isinstance(p, list) and len(p) >0:
+                    self.pods.append(p[0].id)
+
+        self.domains = []
+        dcmd = listDomains.listDomainsCmd()
+        domains = self.apiclient.listDomains(dcmd)
+        assert isinstance(domains, list) and len(domains) > 0
+        for domain in domains:
+            self.domains.append(domain.id)
         return
 
     def tearDown(self):
@@ -85,62 +80,8 @@ class TestSecStorageServices(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @unittest.skip("skipped - do not add secondary storage")
-    def test_01_add_sec_storage(self):
-        """Test secondary storage
-        """
-
-        # Validate the following:
-        # 1. secondary storage should be added to the zone.
-        # 2. Verify with listHosts and type secondarystorage
-
-        cmd = addSecondaryStorage.addSecondaryStorageCmd()
-        cmd.zoneid = self.zone.id
-        cmd.url = self.services["storage"]["url"]
-        sec_storage = self.apiclient.addSecondaryStorage(cmd)
-        
-        self.debug("Added secondary storage to zone: %s" % self.zone.id)
-        # Cleanup at the end
-        self._cleanup.append(sec_storage)
-        
-        self.assertEqual(
-                            sec_storage.zoneid,
-                            self.zone.id,
-                            "Check zoneid where sec storage is added"
-                        )
-
-        list_hosts_response = list_hosts(
-                                         self.apiclient,
-                                         type='SecondaryStorage',
-                                         id=sec_storage.id
-                           )
-        self.assertEqual(
-                            isinstance(list_hosts_response, list),
-                            True,
-                            "Check list response returns a valid list"
-                        )
-        self.assertNotEqual(
-                        len(list_hosts_response),
-                        0,
-                        "Check list Hosts response"
-                        )
-
-        host_response = list_hosts_response[0]
-        #Check if host is Up and running
-        self.assertEqual(
-                        host_response.id,
-                        sec_storage.id,
-                        "Check ID of secondary storage"
-                        )
-        self.assertEqual(
-                        sec_storage.type,
-                        host_response.type,
-                        "Check type of host from list hosts response"
-                        )
-        return
-
     @attr(tags = ["advanced", "advancedns", "smoke", "basic", "eip", "sg"])
-    def test_02_sys_vm_start(self):
+    def test_01_sys_vm_start(self):
         """Test system VM start
         """
 
@@ -152,8 +93,6 @@ class TestSecStorageServices(cloudstackTestCase):
         list_hosts_response = list_hosts(
                            self.apiclient,
                            type='Routing',
-                           zoneid=self.zone.id,
-                           podid=self.pod.id
                            )
         self.assertEqual(
                             isinstance(list_hosts_response, list),
@@ -176,8 +115,6 @@ class TestSecStorageServices(cloudstackTestCase):
         # ListStoragePools shows all primary storage pools in UP state
         list_storage_response = list_storage_pools(
                                                    self.apiclient,
-                                                   zoneid=self.zone.id,
-                                                   podid=self.pod.id
                                                    )
         self.assertEqual(
                             isinstance(list_storage_response, list),
@@ -197,58 +134,11 @@ class TestSecStorageServices(cloudstackTestCase):
                         "Check state of primary storage pools is Up or not"
                         )
 
-        # Secondary storage is added successfully
-        timeout = self.services["timeout"]
-        while True:
-            list_hosts_response = list_hosts(
-                           self.apiclient,
-                           type='SecondaryStorageVM',
-                           zoneid=self.zone.id,
-                           )
-
-            if not isinstance(list_hosts_response, list):
-                # Sleep to ensure Secondary storage is Up
-                time.sleep(int(self.services["sleep"]))
-                timeout = timeout - 1
-            elif timeout == 0 or isinstance(list_hosts_response, list):
-                break
-        
-        self.assertEqual(
-                            isinstance(list_hosts_response, list),
-                            True,
-                            "Check list response returns a valid list"
-                        )
-        
-        self.assertNotEqual(
-                        len(list_hosts_response),
-                        0,
-                        "Check list Hosts response"
-                        )
-
-        host_response = list_hosts_response[0]
-        #Check if host is Up and running
-        self.assertEqual(
-                        host_response.state,
-                        'Up',
-                        "Check state of secondary storage"
-                        )
-        self.debug("Checking SSVM status in zone: %s" % self.zone.id)
-
-        timeout = self.services["timeout"]
+        list_ssvm_response = list_ssvms(
+                                    self.apiclient,
+                                    systemvmtype='secondarystoragevm',
+                                    )
 
-        while True:
-            list_ssvm_response = list_ssvms(
-                                        self.apiclient,
-                                        systemvmtype='secondarystoragevm',
-                                        zoneid=self.zone.id,
-                                        )
-            if not isinstance(list_ssvm_response, list):
-                # Sleep to ensure SSVMs are Up and Running
-                time.sleep(int(self.services["sleep"]))
-                timeout = timeout - 1
-            elif timeout == 0 or isinstance(list_ssvm_response, list):
-                break
-            
         self.assertEqual(
                             isinstance(list_ssvm_response, list),
                             True,
@@ -270,7 +160,7 @@ class TestSecStorageServices(cloudstackTestCase):
         return
 
     @attr(tags = ["advanced", "advancedns", "smoke", "basic", "eip", "sg"])
-    def test_03_sys_template_ready(self):
+    def test_02_sys_template_ready(self):
         """Test system templates are ready
         """
 
@@ -279,100 +169,50 @@ class TestSecStorageServices(cloudstackTestCase):
         # 1. wait for listTemplates to show all builtin templates downloaded and
         # in Ready state
 
-        for k, v in self.services["hypervisors"].items():
+        hypervisors = {}
+        for zone in self.config.zones:
+            for pod in zone.pods:
+                for cluster in pod.clusters:
+                    hypervisors[cluster.hypervisor] = "self"
 
-            self.debug("Downloading BUILTIN templates in zone: %s" % 
-                                                                self.zone.id)
-            
-            list_template_response = list_templates(
-                                    self.apiclient,
-                                    hypervisor=v["hypervisor"],
-                                    zoneid=self.zone.id,
-                                    templatefilter=v["templatefilter"],
-                                    listall=True,
-                                    account='system',
-                                    domainid=self.domain.id
-                                    )
+        for zid in self.zones:
+            for k, v in hypervisors.items():
+                self.debug("Checking BUILTIN templates in zone: %s" %zid)
+                list_template_response = list_templates(
+                                        self.apiclient,
+                                        hypervisor=k,
+                                        zoneid=zid,
+                                        templatefilter=v,
+                                        listall=True,
+                                        account='system'
+                                        )
 
-            # Ensure all BUILTIN templates are downloaded
-            templateid = None
-            for template in list_template_response:
-                if template.templatetype == "BUILTIN":
-                    templateid = template.id
+                # Ensure all BUILTIN templates are downloaded
+                templateid = None
+                for template in list_template_response:
+                    if template.templatetype == "BUILTIN":
+                        templateid = template.id
 
-            # Wait to start a downloading of template
-            time.sleep(self.services["sleep"])
-            
-            while True and (templateid != None):
-                
-                timeout = self.services["timeout"]
-                while True: 
                     template_response = list_templates(
                                     self.apiclient,
                                     id=templateid,
-                                    zoneid=self.zone.id,
-                                    templatefilter=v["templatefilter"],
+                                    zoneid=zid,
+                                    templatefilter=v,
                                     listall=True,
-                                    account='system',
-                                    domainid=self.domain.id
+                                    account='system'
                                     )
-                
                     if isinstance(template_response, list):
                         template = template_response[0]
-                        break
-                    
-                    elif timeout == 0:
-                        raise Exception("List template API call failed.")
-                    
-                    time.sleep(1)
-                    timeout = timeout - 1
-                     
-                # If template is ready,
-                # template.status = Download Complete
-                # Downloading - x% Downloaded
-                # Error - Any other string 
-                if template.status == 'Download Complete'  :
-                    break
-                elif 'Downloaded' not in template.status.split():
-                    raise Exception
-                elif 'Downloaded' in template.status.split():
-                    time.sleep(self.services["sleep"])
-
-            #Ensuring the template is in ready state
-            time.sleep(self.services["sleep"])
-            
-            timeout = self.services["timeout"]
-            while True: 
-                template_response = list_templates(
-                                    self.apiclient,
-                                    id=templateid,
-                                    zoneid=self.zone.id,
-                                    templatefilter=v["templatefilter"],
-                                    listall=True,
-                                    account='system',
-                                    domainid=self.domain.id
-                                    )
-                
-                if isinstance(template_response, list):
-                    template = template_response[0]
-                    break
-                    
-                elif timeout == 0:
-                    raise Exception("List template API call failed.")
-                
-                time.sleep(1)
-                timeout = timeout - 1
-            
-            self.assertEqual(
-                            isinstance(template_response, list),
-                            True,
-                            "Check list response returns a valid list"
-                        )
-            template = template_response[0]
-
-            self.assertEqual(
-                            template.isready,
-                            True,
-                            "Check whether state of template is ready or not"
-                        )
-        return
+                    else:
+                        raise Exception("ListTemplate API returned invalid list")
+
+                    if template.status == 'Download Complete':
+                        self.debug("Template %s is ready in zone %s"%(template.templatetype, zid))
+                    elif 'Downloaded' not in template.status.split():
+                        self.debug("templates status is %s"%template.status)
+
+                    self.assertEqual(
+                        template.isready,
+                        True,
+                        "Builtin template is not ready %s in zone %s"%(template.status, zid)
+                    )