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)
+ )