From 2c561dd3a8d125254fc3d707360a9a7f7789e64e Mon Sep 17 00:00:00 2001 From: Prasanna Santhanam Date: Thu, 29 Nov 2012 14:31:49 -0800 Subject: [PATCH] Summary: Removing ostypeid dependencies from tests Detail: The listOsTypes API will filter when given the ostype name as centOS 5.3. There is now no need to hardcode the uuids into the test Signed-off-by: Prasanna Santhanam 1354228309 -0800 --- test/integration/component/test_snapshots.py | 24 +++--- test/integration/smoke/test_iso.py | 31 +++++++- test/integration/smoke/test_network.py | 14 ++-- test/integration/smoke/test_routers.py | 4 +- test/integration/smoke/test_templates.py | 18 +++-- test/integration/smoke/test_vm_life_cycle.py | 12 +-- test/integration/smoke/test_volumes.py | 8 +- tools/marvin/marvin/integration/lib/base.py | 73 ++++++++++++++++++- tools/marvin/marvin/integration/lib/common.py | 44 ++++++++++- 9 files changed, 182 insertions(+), 46 deletions(-) diff --git a/test/integration/component/test_snapshots.py b/test/integration/component/test_snapshots.py index 27c960f1b16..8659f14309a 100644 --- a/test/integration/component/test_snapshots.py +++ b/test/integration/component/test_snapshots.py @@ -105,7 +105,7 @@ class Services: "templates": { "displaytext": 'Template', "name": 'Template', - "ostypeid": '01853327-513e-4508-9628-f1f55db1946f', + "ostype": "CentOS 5.3 (64-bit)", "templatefilter": 'self', }, "diskdevice": "/dev/xvda", @@ -117,8 +117,7 @@ class Services: "sub_lvl_dir1": "test1", "sub_lvl_dir2": "test2", "random_data": "random.data", - - "ostypeid": '01853327-513e-4508-9628-f1f55db1946f', + "ostype": "CentOS 5.3 (64-bit)", # Cent OS 5.3 (64 bit) "sleep": 60, "timeout": 10, @@ -139,11 +138,11 @@ class TestSnapshotRootDisk(cloudstackTestCase): template = get_template( cls.api_client, cls.zone.id, - cls.services["ostypeid"] + cls.services["ostype"] ) cls.services["domainid"] = cls.domain.id cls.services["server_without_disk"]["zoneid"] = cls.zone.id - cls.services["template"] = template.id + cls.services["templates"]["ostypeid"] = template.ostypeid cls.services["zoneid"] = cls.zone.id # Create VMs, NAT Rules etc @@ -364,7 +363,7 @@ class TestSnapshots(cloudstackTestCase): template = get_template( cls.api_client, cls.zone.id, - cls.services["ostypeid"] + cls.services["ostype"] ) cls.services["domainid"] = cls.domain.id @@ -373,7 +372,7 @@ class TestSnapshots(cloudstackTestCase): cls.services["server_without_disk"]["zoneid"] = cls.zone.id - cls.services["template"] = template.id + cls.services["templates"]["ostypeid"] = template.ostypeid cls.services["zoneid"] = cls.zone.id cls.services["diskoffering"] = cls.disk_offering.id @@ -1195,12 +1194,11 @@ class TestCreateVMsnapshotTemplate(cloudstackTestCase): cls.template = get_template( cls.api_client, cls.zone.id, - cls.services["ostypeid"] + cls.services["ostype"] ) cls.services["domainid"] = cls.domain.id cls.services["server"]["zoneid"] = cls.zone.id - cls.services["template"] = cls.template.id # Create VMs, NAT Rules etc cls.account = Account.create( @@ -1491,7 +1489,7 @@ class TestAccountSnapshotClean(cloudstackTestCase): template = get_template( cls.api_client, cls.zone.id, - cls.services["ostypeid"] + cls.services["ostype"] ) cls.services["server"]["zoneid"] = cls.zone.id @@ -1843,7 +1841,7 @@ class TestSnapshotDetachedDisk(cloudstackTestCase): template = get_template( cls.api_client, cls.zone.id, - cls.services["ostypeid"] + cls.services["ostype"] ) cls.services["server"]["zoneid"] = cls.zone.id cls.services["server"]["diskoffering"] = cls.disk_offering.id @@ -2126,7 +2124,7 @@ class TestSnapshotLimit(cloudstackTestCase): template = get_template( cls.api_client, cls.zone.id, - cls.services["ostypeid"] + cls.services["ostype"] ) cls.services["server"]["zoneid"] = cls.zone.id @@ -2384,7 +2382,7 @@ class TestSnapshotEvents(cloudstackTestCase): template = get_template( cls.api_client, cls.zone.id, - cls.services["ostypeid"] + cls.services["ostype"] ) cls.services["server"]["zoneid"] = cls.zone.id diff --git a/test/integration/smoke/test_iso.py b/test/integration/smoke/test_iso.py index 0215d892e5c..2c14ed9704a 100644 --- a/test/integration/smoke/test_iso.py +++ b/test/integration/smoke/test_iso.py @@ -55,7 +55,7 @@ class Services: "isextractable": True, "isfeatured": True, "ispublic": True, - "ostypeid": '01853327-513e-4508-9628-f1f55db1946f', + "ostype": "CentOS 5.3 (64-bit)", }, "iso_2": { @@ -66,7 +66,7 @@ class Services: "isextractable": True, "isfeatured": True, "ispublic": True, - "ostypeid": '01853327-513e-4508-9628-f1f55db1946f', + "ostype": "CentOS 5.3 (64-bit)", "mode": 'HTTP_DOWNLOAD', # Used in Extract template, value must be HTTP_DOWNLOAD }, @@ -79,7 +79,7 @@ class Services: "passwordenabled": True, "sleep": 60, "timeout": 10, - "ostypeid": '01853327-513e-4508-9628-f1f55db1946f', + "ostype": "CentOS 5.3 (64-bit)", # CentOS 5.3 (64 bit) "mode": 'advanced' # Networking mode: Basic or Advanced @@ -103,7 +103,18 @@ class TestCreateIso(cloudstackTestCase): self.services["account"], domainid=self.domain.id ) - + # Finding the OsTypeId from Ostype + ostypes = list_os_types( + self.apiclient, + description=self.services["ostype"] + ) + if not isinstance(ostypes, list): + raise unittest.SkipTest("OSTypeId for given description not found") + + self.services["iso_1"]["ostypeid"] = ostypes[0].id + self.services["iso_2"]["ostypeid"] = ostypes[0].id + self.services["ostypeid"] = ostypes[0].id + self.cleanup = [self.account] return @@ -200,6 +211,18 @@ class TestISO(cloudstackTestCase): domainid=cls.domain.id ) cls.services["account"] = cls.account.account.name + # Finding the OsTypeId from Ostype + ostypes = list_os_types( + self.apiclient, + description=self.services["ostype"] + ) + if not isinstance(ostypes, list): + raise unittest.SkipTest("OSTypeId for given description not found") + + self.services["iso_1"]["ostypeid"] = ostypes[0].id + self.services["iso_2"]["ostypeid"] = ostypes[0].id + self.services["ostypeid"] = ostypes[0].id + cls.iso_1 = Iso.create( cls.api_client, cls.services["iso_1"], diff --git a/test/integration/smoke/test_network.py b/test/integration/smoke/test_network.py index 0a3a3c3bd74..e78cc43fe33 100644 --- a/test/integration/smoke/test_network.py +++ b/test/integration/smoke/test_network.py @@ -36,7 +36,7 @@ class Services: def __init__(self): self.services = { - "ostypeid": '01853327-513e-4508-9628-f1f55db1946f', + "ostype": "CentOS 5.3 (64-bit)", # Cent OS 5.3 (64 bit) "mode": 'advanced', # Networking mode: Basic or advanced @@ -305,7 +305,7 @@ class TestPortForwarding(cloudstackTestCase): template = get_template( cls.api_client, cls.zone.id, - cls.services["ostypeid"] + cls.services["ostype"] ) #Create an account, network, VM and IP addresses cls.account = Account.create( @@ -604,7 +604,7 @@ class TestLoadBalancingRule(cloudstackTestCase): template = get_template( cls.api_client, cls.zone.id, - cls.services["ostypeid"] + cls.services["ostype"] ) cls.services["server"]["zoneid"] = cls.zone.id @@ -1076,7 +1076,7 @@ class TestRebootRouter(cloudstackTestCase): template = get_template( self.apiclient, self.zone.id, - self.services["ostypeid"] + self.services["ostype"] ) self.services["server"]["zoneid"] = self.zone.id @@ -1236,7 +1236,7 @@ class TestAssignRemoveLB(cloudstackTestCase): template = get_template( self.apiclient, self.zone.id, - self.services["ostypeid"] + self.services["ostype"] ) self.services["server"]["zoneid"] = self.zone.id @@ -1495,7 +1495,7 @@ class TestReleaseIP(cloudstackTestCase): template = get_template( self.apiclient, self.zone.id, - self.services["ostypeid"] + self.services["ostype"] ) self.services["server"]["zoneid"] = self.zone.id @@ -1635,7 +1635,7 @@ class TestDeleteAccount(cloudstackTestCase): template = get_template( self.apiclient, self.zone.id, - self.services["ostypeid"] + self.services["ostype"] ) self.services["server"]["zoneid"] = self.zone.id diff --git a/test/integration/smoke/test_routers.py b/test/integration/smoke/test_routers.py index 967533965ae..93dc7606ace 100644 --- a/test/integration/smoke/test_routers.py +++ b/test/integration/smoke/test_routers.py @@ -61,7 +61,7 @@ class Services: "username": "testuser", "password": "password", }, - "ostypeid":'01853327-513e-4508-9628-f1f55db1946f', + "ostype": "CentOS 5.3 (64-bit)", "sleep": 60, "timeout": 10, "mode": 'advanced', #Networking mode: Basic, Advanced @@ -84,7 +84,7 @@ class TestRouterServices(cloudstackTestCase): template = get_template( cls.api_client, cls.zone.id, - cls.services["ostypeid"] + cls.services["ostype"] ) cls.services["virtual_machine"]["zoneid"] = cls.zone.id diff --git a/test/integration/smoke/test_templates.py b/test/integration/smoke/test_templates.py index 9a7f6b1459c..26d59f70057 100644 --- a/test/integration/smoke/test_templates.py +++ b/test/integration/smoke/test_templates.py @@ -75,12 +75,12 @@ class Services: "template_1": { "displaytext": "Cent OS Template", "name": "Cent OS Template", - "ostypeid": '01853327-513e-4508-9628-f1f55db1946f', + "ostype": "CentOS 5.3 (64-bit)", }, "template_2": { "displaytext": "Public Template", "name": "Public template", - "ostypeid": '01853327-513e-4508-9628-f1f55db1946f', + "ostype": "CentOS 5.3 (64-bit)", "isfeatured": True, "ispublic": True, "isextractable": True, @@ -94,7 +94,7 @@ class Services: "isextractable": False, "bootable": True, "passwordenabled": True, - "ostypeid": '01853327-513e-4508-9628-f1f55db1946f', + "ostype": "CentOS 5.3 (64-bit)", "mode": 'advanced', # Networking mode: Advanced, basic "sleep": 30, @@ -135,8 +135,12 @@ class TestCreateTemplate(cloudstackTestCase): template = get_template( cls.api_client, cls.zone.id, - cls.services["ostypeid"] + cls.services["ostype"] ) + cls.services["template_1"]["ostypeid"] = template.ostypeid + cls.services["template_2"]["ostypeid"] = template.ostypeid + cls.services["ostypeid"] = template.ostypeid + cls.services["virtual_machine"]["zoneid"] = cls.zone.id cls.services["volume"]["diskoffering"] = cls.disk_offering.id cls.services["volume"]["zoneid"] = cls.zone.id @@ -298,7 +302,7 @@ class TestTemplates(cloudstackTestCase): template = get_template( cls.api_client, cls.zone.id, - cls.services["ostypeid"] + cls.services["ostype"] ) cls.services["virtual_machine"]["zoneid"] = cls.zone.id cls.services["volume"]["diskoffering"] = cls.disk_offering.id @@ -306,6 +310,10 @@ class TestTemplates(cloudstackTestCase): cls.services["template_2"]["zoneid"] = cls.zone.id cls.services["sourcezoneid"] = cls.zone.id + cls.services["template_1"]["ostypeid"] = template.ostypeid + cls.services["template_2"]["ostypeid"] = template.ostypeid + cls.services["ostypeid"] = template.ostypeid + cls.account = Account.create( cls.api_client, cls.services["account"], diff --git a/test/integration/smoke/test_vm_life_cycle.py b/test/integration/smoke/test_vm_life_cycle.py index a6d0c106526..50c75d109e9 100644 --- a/test/integration/smoke/test_vm_life_cycle.py +++ b/test/integration/smoke/test_vm_life_cycle.py @@ -109,7 +109,7 @@ class Services: "name": "testISO", "url": "http://iso.linuxquestions.org/download/504/1819/http/gd4.tuwien.ac.at/dsl-4.4.10.iso", # Source URL where ISO is located - "ostypeid": '01853327-513e-4508-9628-f1f55db1946f', + "ostype": 'CentOS 5.3 (64-bit)', "mode": 'HTTP_DOWNLOAD', # Downloading existing ISO }, "template": { @@ -123,7 +123,7 @@ class Services: "sleep": 60, "timeout": 10, #Migrate VM to hostid - "ostypeid": '01853327-513e-4508-9628-f1f55db1946f', + "ostype": 'CentOS 5.3 (64-bit)', # CentOS 5.3 (64-bit) "mode":'advanced', } @@ -143,7 +143,7 @@ class TestDeployVM(cloudstackTestCase): template = get_template( self.apiclient, zone.id, - self.services["ostypeid"] + self.services["ostype"] ) # Set Zones and disk offerings self.services["small"]["zoneid"] = zone.id @@ -245,7 +245,7 @@ class TestVMLifeCycle(cloudstackTestCase): template = get_template( cls.api_client, zone.id, - cls.services["ostypeid"] + cls.services["ostype"] ) # Set Zones and disk offerings cls.services["small"]["zoneid"] = zone.id @@ -999,7 +999,7 @@ class TestVMPasswordEnabled(cloudstackTestCase): template = get_template( cls.api_client, zone.id, - cls.services["ostypeid"] + cls.services["ostype"] ) # Set Zones and disk offerings cls.services["small"]["zoneid"] = zone.id @@ -1065,7 +1065,7 @@ class TestVMPasswordEnabled(cloudstackTestCase): "Exception: Unable to find root volume foe VM: %s" % cls.virtual_machine.id) - cls.services["template"]["ostypeid"] = cls.services["ostypeid"] + cls.services["template"]["ostype"] = cls.services["ostype"] #Create templates for Edit, Delete & update permissions testcases cls.pw_enabled_template = Template.create( cls.api_client, diff --git a/test/integration/smoke/test_volumes.py b/test/integration/smoke/test_volumes.py index f8128081d39..2d0cd491672 100644 --- a/test/integration/smoke/test_volumes.py +++ b/test/integration/smoke/test_volumes.py @@ -75,8 +75,8 @@ class Services: "publicport": 22, "protocol": 'TCP', "diskdevice": "/dev/xvdb", - "ostypeid": '01853327-513e-4508-9628-f1f55db1946f', - "mode": 'advanced', + "ostype": 'CentOS 5.3 (64-bit)', + "mode": 'basic', "sleep": 60, "timeout": 10, } @@ -104,7 +104,7 @@ class TestCreateVolume(cloudstackTestCase): template = get_template( cls.api_client, cls.zone.id, - cls.services["ostypeid"] + cls.services["ostype"] ) cls.services["domainid"] = cls.domain.id cls.services["zoneid"] = cls.zone.id @@ -286,7 +286,7 @@ class TestVolumes(cloudstackTestCase): template = get_template( cls.api_client, cls.zone.id, - cls.services["ostypeid"] + cls.services["ostype"] ) cls.services["domainid"] = cls.domain.id cls.services["zoneid"] = cls.zone.id diff --git a/tools/marvin/marvin/integration/lib/base.py b/tools/marvin/marvin/integration/lib/base.py index 5001dafb5ec..66754bd292f 100644 --- a/tools/marvin/marvin/integration/lib/base.py +++ b/tools/marvin/marvin/integration/lib/base.py @@ -547,7 +547,22 @@ class Template: cmd = createTemplate.createTemplateCmd() cmd.displaytext = services["displaytext"] cmd.name = "-".join([services["name"], random_gen()]) - cmd.ostypeid = services["ostypeid"] + if "ostypeid" in services: + cmd.ostypeid = services["ostypeid"] + elif "ostype" in services: + # Find OSTypeId from Os type + sub_cmd = listOsTypes.listOsTypesCmd() + sub_cmd.description = services["ostype"] + ostypes = apiclient.listOsTypes(sub_cmd) + + if not isinstance(ostypes, list): + raise Exception( + "Unable to find Ostype id with desc: %s" % + services["ostype"]) + cmd.ostypeid = ostypes[0].id + else: + raise Exception( + "Unable to find Ostype is required for creating template") cmd.isfeatured = services["isfeatured"] if "isfeatured" in services else False cmd.ispublic = services["ispublic"] if "ispublic" in services else False @@ -579,7 +594,24 @@ class Template: cmd.name = "-".join([services["name"], random_gen()]) cmd.format = services["format"] cmd.hypervisor = services["hypervisor"] - cmd.ostypeid = services["ostypeid"] + + if "ostypeid" in services: + cmd.ostypeid = services["ostypeid"] + elif "ostype" in services: + # Find OSTypeId from Os type + sub_cmd = listOsTypes.listOsTypesCmd() + sub_cmd.description = services["ostype"] + ostypes = apiclient.listOsTypes(sub_cmd) + + if not isinstance(ostypes, list): + raise Exception( + "Unable to find Ostype id with desc: %s" % + services["ostype"]) + cmd.ostypeid = ostypes[0].id + else: + raise Exception( + "Unable to find Ostype is required for registering template") + cmd.url = services["url"] if zoneid: @@ -615,7 +647,24 @@ class Template: services["name"], random_gen() ]) if random_name else services["name"] - cmd.ostypeid = services["ostypeid"] + + if "ostypeid" in services: + cmd.ostypeid = services["ostypeid"] + elif "ostype" in services: + # Find OSTypeId from Os type + sub_cmd = listOsTypes.listOsTypesCmd() + sub_cmd.description = services["ostype"] + ostypes = apiclient.listOsTypes(sub_cmd) + + if not isinstance(ostypes, list): + raise Exception( + "Unable to find Ostype id with desc: %s" % + services["ostype"]) + cmd.ostypeid = ostypes[0].id + else: + raise Exception( + "Unable to find Ostype is required for creating template") + cmd.snapshotid = snapshot.id return Template(apiclient.createTemplate(cmd).__dict__) @@ -695,7 +744,23 @@ class Iso: cmd = registerIso.registerIsoCmd() cmd.displaytext = services["displaytext"] cmd.name = services["name"] - cmd.ostypeid = services["ostypeid"] + if "ostypeid" in services: + cmd.ostypeid = services["ostypeid"] + elif "ostype" in services: + # Find OSTypeId from Os type + sub_cmd = listOsTypes.listOsTypesCmd() + sub_cmd.description = services["ostype"] + ostypes = apiclient.listOsTypes(sub_cmd) + + if not isinstance(ostypes, list): + raise Exception( + "Unable to find Ostype id with desc: %s" % + services["ostype"]) + cmd.ostypeid = ostypes[0].id + else: + raise Exception( + "Unable to find Ostype is required for creating ISO") + cmd.url = services["url"] cmd.zoneid = services["zoneid"] diff --git a/tools/marvin/marvin/integration/lib/common.py b/tools/marvin/marvin/integration/lib/common.py index b1c87bcf91d..de68178d0be 100644 --- a/tools/marvin/marvin/integration/lib/common.py +++ b/tools/marvin/marvin/integration/lib/common.py @@ -29,6 +29,30 @@ from base import * import time +def wait_for_cleanup(apiclient, configs=None): + """Sleeps till the cleanup configs passed""" + + # Configs list consists of the list of global configs + if not isinstance(configs, list): + return + for config in configs: + cmd = listConfigurations.listConfigurationsCmd() + cmd.name = config + cmd.listall = True + try: + config_descs = apiclient.listConfigurations(cmd) + except Exception as e: + raise Exception("Failed to fetch configurations: %s" % e) + + if not isinstance(config_descs, list): + raise Exception("List configs didn't returned a valid data") + + config_desc = config_descs[0] + # Sleep for the config_desc.value time + time.sleep(int(config_desc.value)) + return + + def get_domain(apiclient, services=None): "Returns a default domain" @@ -79,9 +103,19 @@ def get_pod(apiclient, zoneid, services=None): raise Exception("Exception: Failed to find specified pod.") -def get_template(apiclient, zoneid, ostypeid=12, services=None): +def get_template(apiclient, zoneid, ostype, services=None): "Returns a template" + cmd = listOsTypes.listOsTypesCmd() + cmd.description = ostype + ostypes = apiclient.listOsTypes(cmd) + + if isinstance(ostypes, list): + ostypeid = ostypes[0].id + else: + raise Exception( + "Failed to find OS type with description: %s" % ostype) + cmd = listTemplates.listTemplatesCmd() cmd.templatefilter = 'featured' cmd.zoneid = zoneid @@ -265,6 +299,14 @@ def update_resource_limit(apiclient, resourcetype, account=None, return +def list_os_types(apiclient, **kwargs): + """List all os types matching criteria""" + + cmd = listOsTypes.listOsTypesCmd() + [setattr(cmd, k, v) for k, v in kwargs.items()] + return(apiclient.listOsTypes(cmd)) + + def list_routers(apiclient, **kwargs): """List all Routers matching criteria"""