cloudstack/test/integration/component/test_escalations.py
2014-04-24 17:37:31 +05:30

8230 lines
387 KiB
Python

# 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.
#Import Local Modules
from marvin.cloudstackTestCase import *
from marvin.cloudstackException import *
from marvin.cloudstackAPI import *
from marvin.sshClient import SshClient
from marvin.lib.utils import *
from marvin.lib.base import *
from marvin.lib.common import *
from marvin.lib.utils import checkVolumeSize
from marvin.codes import SUCCESS
from nose.plugins.attrib import attr
from time import sleep
class TestVolumes(cloudstackTestCase):
@classmethod
def setUpClass(cls):
cls.testClient = super(TestVolumes, cls).getClsTestClient()
cls.api_client = cls.testClient.getApiClient()
cls.services = cls.testClient.getParsedTestDataConfig()
# Get Domain, Zone, Template
cls.domain = get_domain(cls.api_client)
cls.zone = get_zone(cls.api_client)
cls.template = get_template(
cls.api_client,
cls.zone.id,
cls.services["ostype"]
)
if cls.zone.localstorageenabled:
cls.storagetype = 'local'
cls.services["service_offerings"]["tiny"]["storagetype"] = 'local'
cls.services["disk_offering"]["storagetype"] = 'local'
else:
cls.storagetype = 'shared'
cls.services["service_offerings"]["tiny"]["storagetype"] = 'shared'
cls.services["disk_offering"]["storagetype"] = 'shared'
cls.services['mode'] = cls.zone.networktype
cls.services["virtual_machine"]["hypervisor"] = 'XenServer'
cls.services["virtual_machine"]["zoneid"] = cls.zone.id
cls.services["virtual_machine"]["template"] = cls.template.id
cls.services["custom_volume"]["zoneid"] = cls.zone.id
# Creating Disk offering, Service Offering and Account
cls.disk_offering = DiskOffering.create(
cls.api_client,
cls.services["disk_offering"]
)
cls.service_offering = ServiceOffering.create(
cls.api_client,
cls.services["service_offerings"]["tiny"]
)
cls.account = Account.create(
cls.api_client,
cls.services["account"],
domainid=cls.domain.id
)
# Getting authentication for user in newly created Account
cls.user = cls.account.user[0]
cls.userapiclient = cls.testClient.getUserApiClient(cls.user.username, cls.domain.name)
# Creating Virtual Machine
cls.virtual_machine = VirtualMachine.create(
cls.userapiclient,
cls.services["virtual_machine"],
accountid=cls.account.name,
domainid=cls.account.domainid,
serviceofferingid=cls.service_offering.id,
)
cls._cleanup = [
cls.virtual_machine,
cls.disk_offering,
cls.service_offering,
cls.account
]
def setUp(self):
self.apiClient = self.testClient.getApiClient()
self.cleanup = []
def tearDown(self):
#Clean up, terminate the created volumes
cleanup_resources(self.apiClient, self.cleanup)
return
@classmethod
def tearDownClass(cls):
try:
cls.apiclient = super(TestVolumes, cls).getClsTestClient().getApiClient()
cleanup_resources(cls.apiclient, cls._cleanup)
except Exception as e:
raise Exception("Warning: Exception during cleanup : %s" % e)
def __verify_values(self, expected_vals, actual_vals):
"""
@summary: Function to verify expected and actual values
Step1: Initializing return flag to True
Step1: Verifying length of expected and actual dictionaries is matching.
If not matching returning false
Step2: Listing all the keys from expected dictionary
Step3: Looping through each key from step2 and verifying expected and actual dictionaries have same value
If not making return flag to False
Step4: returning the return flag after all the values are verified
"""
return_flag = True
if len(expected_vals) != len(actual_vals):
return False
keys = expected_vals.keys()
for i in range(0, len(expected_vals)):
exp_val = expected_vals[keys[i]]
act_val = actual_vals[keys[i]]
if exp_val == act_val:
return_flag = return_flag and True
else:
return_flag = return_flag and False
self.debug("expected Value: %s, is not matching with actual value: %s" % (
exp_val,
act_val
))
return return_flag
@attr(tags=["advanced", "basic", "provisioning"])
def test_01_list_volumes_pagination(self):
"""
@summary: Test List Volumes pagination
Step1: Listing all the volumes for a user
Step2: Verifying listed volumes for account created at class level
Step3: If number of volumes is less than (page size + 1), then creating them
Step4: Listing all the volumes again after creation of volumes
Step5: Verifying the length of the volumes is (page size + 1)
Step6: Listing all the volumes in page1
Step7: Verifying that the length of the volumes in page 1 is (page size)
Step8: Listing all the volumes in page2
Step9: Verifying that the length of the volumes in page 2 is 1
Step10: Deleting the volume present in page 2
Step11: Listing for the volumes on page 2
Step12: Verifying that there are no volumes present in page 2
"""
# Listing all the volumes for a user
list_volumes_before = Volume.list(self.userapiclient, listall=self.services["listall"])
# Verifying listed volumes for account created at class level
self.assertIsNotNone(
list_volumes_before,
"create volume from VM failed at class setup method"
)
self.assertEqual(
len(list_volumes_before),
1,
"more than 1 volume created from VM at class level"
)
# If number of volumes is less than (pagesize + 1), then creating them
for i in range(0, (self.services["pagesize"])):
volume_created = Volume.create(
self.userapiclient,
self.services["volume"],
zoneid=self.zone.id,
diskofferingid=self.disk_offering.id
)
self.assertIsNotNone(
volume_created,
"Volume is not created"
)
if(i < (self.services["pagesize"] - 1)):
self.cleanup.append(volume_created)
self.assertEqual(
self.services["volume"]["diskname"],
volume_created.name,
"Newly created volume name and the test data volume name are not matching"
)
# Listing all the volumes again after creation of volumes
list_volumes_after = Volume.list(self.userapiclient, listall=self.services["listall"])
# Verifying the length of the volumes is (page size + 1)
self.assertEqual(
len(list_volumes_after),
(self.services["pagesize"] + 1),
"Number of volumes created is not matching expected"
)
# Listing all the volumes in page1
list_volumes_page1 = Volume.list(
self.userapiclient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"]
)
self.assertIsNotNone(
list_volumes_page1,
"No volumes found in Page 1"
)
# Verifying that the length of the volumes in page 1 is (page size)
self.assertEqual(
len(list_volumes_page1),
self.services["pagesize"],
"List Volume response is not matching with the page size length for page 1"
)
# Listing all the volumes in page2
list_volumes_page2 = Volume.list(
self.userapiclient,
listall=self.services["listall"],
page=2,
pagesize=self.services["pagesize"]
)
self.assertIsNotNone(
list_volumes_page2,
"No volumes found in Page 2"
)
# Verifying that the length of the volumes in page 2 is 1
self.assertEqual(
len(list_volumes_page2),
1,
"List Volume response is not matching with the page size length for page 2"
)
volume_page2 = list_volumes_page2[0]
# Verifying that the volume on page 2 is not present in page1
for i in range(0, len(list_volumes_page1)):
volume_page1 = list_volumes_page1[i]
self.assertNotEquals(
volume_page2.id,
volume_page1.id,
"Volume listed in page 2 is also listed in page 1"
)
# Deleting a single volume
Volume.delete(volume_created, self.userapiclient)
# Listing the volumes in page 2
list_volume_response = Volume.list(
self.userapiclient,
listall=self.services["listall"],
page=2,
pagesize=self.services["pagesize"]
)
# verifying that volume does not exists on page 2
self.assertEqual(
list_volume_response,
None,
"Volume was not deleted"
)
return
@attr(tags=["advanced", "basic", "provisioning"])
def test_02_list_volume_byid(self):
"""
@summary: Test List Volumes with Id
Step1: Listing all the volumes for a user before creating a data volume
Step2: Verifying the length of the list as 1
Step3: Creating a data volume
Step4: Listing all the volumes for a user after creating a data volume
Step5: Verifying the list volume size is increased by 1
Step6: List the volumes by specifying root volume Id
Step7: Verifying the details of the root volume
Step8: List the volumes by specifying data volume Id
Step9: Verifying the details of the data volume
"""
# Listing all the volumes for a user before creating a data volume
list_volumes_before = Volume.list(
self.userapiclient,
listall=self.services["listall"]
)
self.assertIsNotNone(
list_volumes_before,
"create volume from VM failed at class setup method")
# Verifying the length of the list as 1
self.assertEqual(
len(list_volumes_before),
1,
"more than 1 volume created at class level"
)
root_volume = list_volumes_before[0]
# Creating a data volume
volume_created = Volume.create(
self.userapiclient,
self.services["volume"],
zoneid=self.zone.id,
diskofferingid=self.disk_offering.id
)
self.assertIsNotNone(
volume_created,
"Volume is not created"
)
self.cleanup.append(volume_created)
self.assertEqual(
self.services["volume"]["diskname"],
volume_created.name,
"Newly created volume name and the test data volume name are not matching"
)
# Listing all the volumes for a user after creating a data volume
list_volumes_after = Volume.list(
self.userapiclient,
listall=self.services["listall"]
)
self.assertIsNotNone(
list_volumes_after,
"Volume creation failed"
)
# Verifying the list volume size is increased by 1
self.assertEqual(
len(list_volumes_before) + 1,
len(list_volumes_after),
"list volume is not matching with Number of volumes created"
)
# Listing a Root Volume by Id and verifying the volume details
list_volumes_by_id = Volume.list(
self.userapiclient,
listall=self.services["listall"],
id=root_volume.id
)
self.assertIsNotNone(
list_volumes_by_id,
"Root volume is not listed"
)
self.assertEqual(
1,
len(list_volumes_by_id),
"list volume is not matching with Number of volumes created"
)
obtained_volume = list_volumes_by_id[0]
#Creating expected and actual values dictionaries
expected_dict = {
"id":root_volume.id,
"name":root_volume.name,
"vmname":self.virtual_machine.name,
"state":"Ready",
"type":"ROOT",
"zoneid":self.zone.id,
"account":self.account.name,
"storagetype":self.storagetype,
"size":self.template.size
}
actual_dict = {
"id":obtained_volume.id,
"name":obtained_volume.name,
"vmname":obtained_volume.vmname,
"state":obtained_volume.state,
"type":obtained_volume.type,
"zoneid":obtained_volume.zoneid,
"account":obtained_volume.account,
"storagetype":obtained_volume.storagetype,
"size":obtained_volume.size,
}
root_volume_status = self.__verify_values(
expected_dict,
actual_dict
)
self.assertEqual(
True,
root_volume_status,
"Listed Root Volume details are not as expected"
)
# Listing a Data Volume by Id and verifying the volume details
list_volumes_by_id = Volume.list(
self.userapiclient,
listall=self.services["listall"],
id=volume_created.id
)
self.assertIsNotNone(
list_volumes_by_id,
"Data volume is not listed"
)
self.assertEqual(
len(list_volumes_by_id),
1,
"list volume is not matching with Number of volumes created"
)
obtained_volume = list_volumes_by_id[0]
#Creating expected and actual values dictionaries
expected_dict = {
"id":volume_created.id,
"name":volume_created.name,
"state":"Allocated",
"type":"DATADISK",
"zoneid":self.zone.id,
"account":self.account.name,
"storagetype":self.storagetype,
"size":self.disk_offering.disksize
}
actual_dict = {
"id":obtained_volume.id,
"name":obtained_volume.name,
"state":obtained_volume.state,
"type":obtained_volume.type,
"zoneid":obtained_volume.zoneid,
"account":obtained_volume.account,
"storagetype":obtained_volume.storagetype,
"size":obtained_volume.size/(1024*1024*1024),
}
root_volume_status = self.__verify_values(
expected_dict,
actual_dict
)
self.assertEqual(
True,
root_volume_status,
"Listed Data Volume details are not as expected"
)
return
@attr(tags=["advanced", "basic", "provisioning"])
def test_03_data_volume_resize(self):
"""
@summary: Test to verify creation and resize of data volume
Step1: Listing the volumes for a user before creating data volume
Step2: Creating a data volume
Step3: Listing the volumes for a user after creating data volume
Step4: Attaching and Detaching data volume created to Virtual Machine
Step5: Verifying if there exists a disk offering with higher size
If not present creating it
Step6: Resizing data volume
"""
# Listing volumes for a user before creating a volume
list_volumes_before = Volume.list(self.userapiclient, listall=self.services["listall"])
# Creating a data volume
volume_created = Volume.create(
self.userapiclient,
self.services["volume"],
zoneid=self.zone.id,
diskofferingid=self.disk_offering.id
)
self.assertIsNotNone(volume_created, "Data volume creation failed")
self.cleanup.append(volume_created)
# Listing volumes for a user after creating data volume
list_volumes_after = Volume.list(self.userapiclient, listall=self.services["listall"])
self.assertEquals(
len(list_volumes_before) + 1,
len(list_volumes_after),
"Data volume creation failed"
)
# Attaching data volume created to Virtual Machine
self.virtual_machine.attach_volume(
self.userapiclient,
volume_created
)
list_volumes = Volume.list(
self.userapiclient,
listall=self.services["listall"],
id=volume_created.id
)
attached_volume = list_volumes[0]
self.assertIsNotNone(
attached_volume.vmname,
"VM is not attached to Volume"
)
self.assertEquals(
self.virtual_machine.name,
attached_volume.vmname,
"VM Name is not matching with attached vm"
)
# Detaching data volume from Virtual Machine
self.virtual_machine.detach_volume(
self.userapiclient,
volume_created
)
list_volumes = Volume.list(
self.userapiclient,
listall=self.services["listall"],
id=volume_created.id
)
detached_volume = list_volumes[0]
self.assertIsNone(
detached_volume.vmname,
"VM is not detached from volume"
)
# Verifying if there exists a disk offering with higher size. If not present creating it
list_disk_offerings = DiskOffering.list(self.apiClient)
large_disk_offering_exists = False
# Converting disk_size in bytes to GB
current_disk_size = volume_created.size/(1024*1024*1024)
for disk_offering in list_disk_offerings:
if ((disk_offering.disksize > current_disk_size) and (not disk_offering.iscustomized) and disk_offering.storagetype == self.storagetype):
new_disk_offering = disk_offering
large_disk_offering_exists = True
break
if large_disk_offering_exists == False:
new_size = (volume_created.size/(1024*1024*1024)) + 1
self.services["disk_offering"]["disksize"] = new_size
new_disk_offering = DiskOffering.create(
self.apiClient,
self.services["disk_offering"]
)
if new_disk_offering is not None:
self.cleanup.append(new_disk_offering)
else:
new_size = new_disk_offering.disksize
# Resizing data volume
resized_volume = volume_created.resize(
self.userapiclient,
diskofferingid=new_disk_offering.id,
shrinkok='false',
)
self.assertIsNotNone(resized_volume, "Resize Volume failed")
# Verifying data volume size is increased
self.assertEquals(
new_size,
(resized_volume.size/(1024*1024*1024)),
"volume not resized to expected value"
)
return
@attr(tags=["advanced", "basic", "provisioning"])
def test_04_custom_volume_resize(self):
"""
@summary: Test to verify creation and resize of custom volume
Step1: Checking if Custom disk offering already exists.
If not present then creating custom Disk Offering
Step2: Listing the volumes for a user before creating custom volume
Step3: Creating a custom volume
Step4: Listing the volumes for a user after creating custom volume
Step5: Attaching and Detaching custom volume created to Virtual Machine
Step6: Resizing custom volume
"""
# Listing all the disk offerings
list_disk_offerings = DiskOffering.list(self.apiClient)
custom_disk_offering_exists = False
# Verifying if a custom disk offering already exists
if list_disk_offerings is not None:
for disk_offering in list_disk_offerings:
if (disk_offering.iscustomized and disk_offering.storagetype == self.storagetype):
custom_disk_offering = disk_offering
custom_disk_offering_exists = True
break
# If a custom disk offering does not exists, then creating a custom disk offering
if custom_disk_offering_exists == False:
custom_disk_offering = DiskOffering.create(
self.apiClient,
self.services["disk_offering"],
custom=True
)
if custom_disk_offering is not None:
self.cleanup.append(custom_disk_offering)
# Listing the volumes for a user before creating custom volume
list_volumes_before = Volume.list(self.userapiclient, listall=self.services["listall"])
# Creating a custom volume
volume_created = Volume.create_custom_disk(
self.userapiclient,
self.services["custom_volume"],
account=self.account.name,
domainid=self.account.domainid,
diskofferingid=custom_disk_offering.id
)
self.assertIsNotNone(
volume_created,
"Custom volume did not get created"
)
self.cleanup.append(volume_created)
# Listing the volumes for a user after creating custom volume
list_volumes_after = Volume.list(self.userapiclient, listall=self.services["listall"])
# Verifyign that volume list is increased by 1 after creation of custion volume
self.assertEquals(
len(list_volumes_before) + 1,
len(list_volumes_after),
"Custom volume did not get created"
)
# Attaching custom volume created to Virtual Machine
self.virtual_machine.attach_volume(
self.userapiclient,
volume_created
)
list_volumes = Volume.list(
self.userapiclient,
listall=self.services["listall"],
id=volume_created.id
)
attached_volume = list_volumes[0]
self.assertIsNotNone(
attached_volume.vmname,
"VM is not attached to Volume"
)
self.assertEquals(
self.virtual_machine.name,
attached_volume.vmname,
"VM Name is not matching with attached vm"
)
# Detaching custom volume from Virtual Machine
self.virtual_machine.detach_volume(
self.userapiclient,
volume_created
)
list_volumes = Volume.list(
self.userapiclient,
listall=self.services["listall"],
id=volume_created.id
)
detached_volume = list_volumes[0]
self.assertIsNone(
detached_volume.vmname,
"VM is not detached from volume"
)
# Resizing custom volume
# Increasing custom disk size by 1
new_size = self.services["custom_volume"]["customdisksize"] + 1
resized_volume = volume_created.resize(
self.userapiclient,
diskofferingid=custom_disk_offering.id,
shrinkok='false',
size=new_size)
self.assertIsNotNone(resized_volume, "Resize Volume failed")
# Verifying that custom disk size is increased
self.assertEquals(
new_size,
(resized_volume.size/(1024*1024*1024)),
"volume not resized to expected value"
)
return
@attr(tags=["advanced", "basic", "provisioning"])
def test_05_volume_snapshot(self):
"""
@summary: Test to verify creation of snapshot from volume and creation of template, volume from snapshot
Step1: Creating a volume
Step2: Attaching and Detaching custom volume created to Virtual Machine
Step3: Creating Snapshot from volume
Step4: Creating Volume from snapshot
Step5: Creating Template from Snapshot
"""
list_volumes_before = Volume.list(self.userapiclient, listall=self.services["listall"])
volume_created = Volume.create(
self.userapiclient,
self.services["volume"],
zoneid=self.zone.id,
diskofferingid=self.disk_offering.id
)
self.assertIsNotNone(volume_created, "Volume not created")
if volume_created is not None:
self.cleanup.append(volume_created)
list_volumes_after = Volume.list(self.userapiclient, listall=self.services["listall"])
self.assertEquals(
len(list_volumes_before) + 1,
len(list_volumes_after),
"Volume not created"
)
# Attaching and Detaching custom volume created to Virtual Machine
self.virtual_machine.attach_volume(
self.userapiclient,
volume_created
)
list_volumes = Volume.list(
self.userapiclient,
listall=self.services["listall"],
id=volume_created.id
)
attached_volume = list_volumes[0]
self.assertIsNotNone(
attached_volume.vmname,
"VM is not attached to Volume"
)
self.assertEquals(
self.virtual_machine.name,
attached_volume.vmname,
"VM Name is not matching with attached vm"
)
self.virtual_machine.detach_volume(
self.userapiclient,
volume_created
)
list_volumes = Volume.list(
self.userapiclient,
listall=self.services["listall"],
id=volume_created.id
)
detached_volume = list_volumes[0]
self.assertIsNone(
detached_volume.vmname,
"VM is not detached from volume"
)
# Creating Snapshot from volume
snapshot_created = Snapshot.create(
self.userapiclient,
volume_created.id,
)
self.assertIsNotNone(snapshot_created, "Snapshot not created")
self.cleanup.append(snapshot_created)
#Creating expected and actual values dictionaries
expected_dict = {
"id":volume_created.id,
"intervaltype":"MANUAL",
"snapshottype":"MANUAL",
"volumetype":volume_created.type,
"domain":self.domain.id
}
actual_dict = {
"id":snapshot_created.volumeid,
"intervaltype":snapshot_created.intervaltype,
"snapshottype":snapshot_created.snapshottype,
"volumetype":snapshot_created.volumetype,
"domain":snapshot_created.domainid,
}
status = self.__verify_values(
expected_dict,
actual_dict
)
self.assertEqual(
True,
status,
"Snapshot created from Volume details are not as expected"
)
# Creating Volume from snapshot
cmd = createVolume.createVolumeCmd()
cmd.name = "-".join([self.services["volume"]["diskname"], random_gen()])
cmd.snapshotid = snapshot_created.id
volume_from_snapshot = Volume(self.userapiclient.createVolume(cmd).__dict__)
self.assertIsNotNone(
volume_from_snapshot,
"Volume creation failed from snapshot"
)
self.cleanup.append(volume_from_snapshot)
#Creating expected and actual values dictionaries
expected_dict = {
"snapshotid":snapshot_created.id,
"volumetype":snapshot_created.volumetype,
"size":self.disk_offering.disksize,
"accounr":self.account.name,
"domain":self.domain.id,
"storagetype":self.storagetype,
"zone":self.zone.id
}
actual_dict = {
"snapshotid":volume_from_snapshot.snapshotid,
"volumetype":volume_from_snapshot.type,
"size":volume_from_snapshot.size/(1024*1024*1024),
"accounr":volume_from_snapshot.account,
"domain":volume_from_snapshot.domainid,
"storagetype":volume_from_snapshot.storagetype,
"zone":volume_from_snapshot.zoneid,
}
status = self.__verify_values(
expected_dict,
actual_dict
)
self.assertEqual(
True,
status,
"Volume created from Snapshot details are not as expected"
)
# Creating Template from Snapshot
list_templates_before = Template.list(self.userapiclient, templatefilter='self')
if list_templates_before is None:
templates_before_size = 0
else:
templates_before_size = len(list_templates_before)
cmd = createTemplate.createTemplateCmd()
cmd.name = self.services["ostype"]
cmd.displaytext = self.services["ostype"]
cmd.ostypeid = self.template.ostypeid
cmd.snapshotid = snapshot_created.id
cmd.ispublic = False
cmd.passwordenabled = False
template_from_snapshot = Template(self.userapiclient.createTemplate(cmd).__dict__)
self.assertIsNotNone(
template_from_snapshot,
"Template creation failed from snapshot"
)
self.cleanup.append(template_from_snapshot)
#Creating expected and actual values dictionaries
expected_dict = {
"name":self.services["ostype"],
"ostypeid":self.template.ostypeid,
"type":"USER",
"zone":self.zone.id,
"domain":self.domain.id,
"account":self.account.name,
"passwordenabled":False,
"ispublic":False,
"size":self.disk_offering.disksize
}
actual_dict = {
"name":template_from_snapshot.name,
"ostypeid":template_from_snapshot.ostypeid,
"type":template_from_snapshot.templatetype,
"zone":template_from_snapshot.zoneid,
"domain":template_from_snapshot.domainid,
"account":template_from_snapshot.account,
"passwordenabled":template_from_snapshot.passwordenabled,
"ispublic":template_from_snapshot.ispublic,
"size":template_from_snapshot.size/(1024*1024*1024)
}
status = self.__verify_values(
expected_dict,
actual_dict
)
self.assertEqual(
True,
status,
"Template created from Snapshot details are not as expected"
)
list_templates_after = Template.list(self.userapiclient, templatefilter='self')
self.assertEquals(
templates_before_size + 1,
len(list_templates_after),
"Template creation failed from snapshot"
)
return
@attr(tags=["advanced", "basic", "provisioning"])
def test_06_volume_snapshot_policy_hourly(self):
"""
@summary: Test to verify creation of Hourly Snapshot policies from volume
Step1: Creating a Volume.
Step2: Attaching volume created in Step2 to virtual machine
Step3: Detaching the volume created in step2 from virtual machine
Step4: Listing snapshot policies for a volume created in step1
Step5: Creating Hourly snapshot policy
Step6: Listing snapshot policies for a volume created in step1 again
Step7: Verifyign that the list snapshot policy length is increased by 1
"""
list_volumes_before = Volume.list(self.userapiclient, listall=self.services["listall"])
volume_created = Volume.create(
self.userapiclient,
self.services["volume"],
zoneid=self.zone.id,
diskofferingid=self.disk_offering.id
)
self.assertIsNotNone(volume_created, "Volume not created")
self.cleanup.append(volume_created)
list_volumes_after = Volume.list(self.userapiclient, listall=self.services["listall"])
self.assertEquals(
len(list_volumes_before) + 1,
len(list_volumes_after),
"Volume not created"
)
# Attaching volume created to Virtual Machine
self.virtual_machine.attach_volume(
self.userapiclient,
volume_created
)
list_volumes = Volume.list(
self.userapiclient,
listall=self.services["listall"],
id=volume_created.id
)
attached_volume = list_volumes[0]
self.assertIsNotNone(
attached_volume.vmname,
"VM is not attached to Volume"
)
self.assertEquals(
self.virtual_machine.name,
attached_volume.vmname,
"VM Name is not matching with attached vm"
)
# Detaching volume created from Virtual Machine
self.virtual_machine.detach_volume(
self.userapiclient,
volume_created
)
list_volumes = Volume.list(
self.userapiclient,
listall=self.services["listall"],
id=volume_created.id
)
detached_volume = list_volumes[0]
self.assertIsNone(
detached_volume.vmname,
"VM is not detached from volume"
)
# Creating Hourly Snapshot Policy from volume
self.services["recurring_snapshot"]["intervaltype"] = 'hourly'
self.services["recurring_snapshot"]["schedule"] = '1'
list_snapshot_policy_before = SnapshotPolicy.list(self.userapiclient, volumeid=volume_created.id)
snapshot_policy_before_size = 0
if list_snapshot_policy_before is not None:
snapshot_policy_before_size = len(list_snapshot_policy_before)
snapshot_policy_hourly = SnapshotPolicy.create(
self.userapiclient,
volume_created.id,
self.services["recurring_snapshot"]
)
self.assertIsNotNone(
snapshot_policy_hourly,
"Hourly Snapshot policy creation failed"
)
#Creating expected and actual values dictionaries
expected_dict = {
"schedule":self.services["recurring_snapshot"]["schedule"],
"intervaltype":0,
"volumeid":volume_created.id
}
actual_dict = {
"schedule":snapshot_policy_hourly.schedule,
"intervaltype":snapshot_policy_hourly.intervaltype,
"volumeid":snapshot_policy_hourly.volumeid
}
status = self.__verify_values(
expected_dict,
actual_dict
)
self.assertEqual(
True,
status,
"Hourly Snapshot Policy details are not as expected"
)
list_snapshot_policy_after = SnapshotPolicy.list(self.userapiclient, volumeid=volume_created.id)
self.assertIsNotNone(
list_snapshot_policy_after,
"Hourly Snapshot policy creation failed"
)
self.assertEquals(
snapshot_policy_before_size + 1,
len(list_snapshot_policy_after),
"Hourly Snapshot policy creation failed"
)
return
@attr(tags=["advanced", "basic", "provisioning"])
def test_07_volume_snapshot_policy_daily(self):
"""
@summary: Test to verify creation of Daily Snapshot policies from volume
Step1: Creating a Volume.
Step2: Attaching volume created in Step2 to virtual machine
Step3: Detaching the volume created in step2 from virtual machine
Step4: Listing snapshot policies for a volume created in step1
Step5: Creating Daily snapshot policy
Step6: Listing snapshot policies for a volume created in step1 again
Step7: Verifyign that the list snapshot policy length is increased by 1
"""
list_volumes_before = Volume.list(self.userapiclient, listall=self.services["listall"])
volume_created = Volume.create(
self.userapiclient,
self.services["volume"],
zoneid=self.zone.id,
diskofferingid=self.disk_offering.id
)
self.assertIsNotNone(volume_created, "Volume not created")
self.cleanup.append(volume_created)
list_volumes_after = Volume.list(self.userapiclient, listall=self.services["listall"])
self.assertEquals(
len(list_volumes_before) + 1,
len(list_volumes_after),
"Volume not created"
)
# Attaching volume created to Virtual Machine
self.virtual_machine.attach_volume(
self.userapiclient,
volume_created
)
list_volumes = Volume.list(
self.userapiclient,
listall=self.services["listall"],
id=volume_created.id
)
attached_volume = list_volumes[0]
self.assertIsNotNone(
attached_volume.vmname,
"VM is not attached to Volume"
)
self.assertEquals(
self.virtual_machine.name,
attached_volume.vmname,
"VM Name is not matching with attached vm"
)
# Detaching volume created from Virtual Machine
self.virtual_machine.detach_volume(
self.userapiclient,
volume_created
)
list_volumes = Volume.list(
self.userapiclient,
listall=self.services["listall"],
id=volume_created.id
)
detached_volume = list_volumes[0]
self.assertIsNone(
detached_volume.vmname,
"VM is not detached from volume"
)
# Creating Daily Snapshot Policy from volume
self.services["recurring_snapshot"]["intervaltype"] = 'daily'
self.services["recurring_snapshot"]["schedule"] = '00:00'
list_snapshot_policy_before = SnapshotPolicy.list(self.userapiclient, volumeid=volume_created.id)
snapshot_policy_before_size = 0
if list_snapshot_policy_before is not None:
snapshot_policy_before_size = len(list_snapshot_policy_before)
snapshot_policy_daily = SnapshotPolicy.create(
self.userapiclient,
volume_created.id,
self.services["recurring_snapshot"]
)
self.assertIsNotNone(
snapshot_policy_daily,
"Daily Snapshot policy creation failed"
)
#Creating expected and actual values dictionaries
expected_dict = {
"schedule":self.services["recurring_snapshot"]["schedule"],
"intervaltype":1,
"volumeid":volume_created.id
}
actual_dict = {
"schedule":snapshot_policy_daily.schedule,
"intervaltype":snapshot_policy_daily.intervaltype,
"volumeid":snapshot_policy_daily.volumeid
}
status = self.__verify_values(
expected_dict,
actual_dict
)
self.assertEqual(
True,
status,
"Daily Snapshot Policy details are not as expected"
)
list_snapshot_policy_after = SnapshotPolicy.list(self.userapiclient, volumeid=volume_created.id)
self.assertIsNotNone(
list_snapshot_policy_after,
"Daily Snapshot policy creation failed"
)
self.assertEquals(
snapshot_policy_before_size + 1,
len(list_snapshot_policy_after),
"Daily Snapshot policy creation failed"
)
return
@attr(tags=["advanced", "basic", "provisioning"])
def test_08_volume_snapshot_policy_weekly(self):
"""
@summary: Test to verify creation of Weekly Snapshot policies from volume
Step1: Creating a Volume.
Step2: Attaching volume created in Step2 to virtual machine
Step3: Detaching the volume created in step2 from virtual machine
Step4: Listing snapshot policies for a volume created in step1
Step5: Creating Weekly snapshot policy
Step6: Listing snapshot policies for a volume created in step1 again
Step7: Verifyign that the list snapshot policy length is increased by 1
"""
list_volumes_before = Volume.list(self.userapiclient, listall=self.services["listall"])
volume_created = Volume.create(
self.userapiclient,
self.services["volume"],
zoneid=self.zone.id,
diskofferingid=self.disk_offering.id
)
self.assertIsNotNone(volume_created, "Volume not created")
self.cleanup.append(volume_created)
list_volumes_after = Volume.list(self.userapiclient, listall=self.services["listall"])
self.assertEquals(
len(list_volumes_before) + 1,
len(list_volumes_after),
"Volume not created"
)
# Attaching volume created to Virtual Machine
self.virtual_machine.attach_volume(
self.userapiclient,
volume_created
)
list_volumes = Volume.list(
self.userapiclient,
listall=self.services["listall"],
id=volume_created.id
)
attached_volume = list_volumes[0]
self.assertIsNotNone(
attached_volume.vmname,
"VM is not attached to Volume"
)
self.assertEquals(
self.virtual_machine.name,
attached_volume.vmname,
"VM Name is not matching with attached vm"
)
# Detaching volume created to Virtual Machine
self.virtual_machine.detach_volume(
self.userapiclient,
volume_created
)
list_volumes = Volume.list(
self.userapiclient,
listall=self.services["listall"],
id=volume_created.id
)
detached_volume = list_volumes[0]
self.assertIsNone(
detached_volume.vmname,
"VM is not detached from volume"
)
# Creating Weekly Snapshot Policy from volume
self.services["recurring_snapshot"]["intervaltype"] = 'weekly'
self.services["recurring_snapshot"]["schedule"] = '00:00:1'
list_snapshot_policy_before = SnapshotPolicy.list(self.userapiclient, volumeid=volume_created.id)
snapshot_policy_before_size = 0
if list_snapshot_policy_before is not None:
snapshot_policy_before_size = len(list_snapshot_policy_before)
snapshot_policy_weekly = SnapshotPolicy.create(
self.userapiclient,
volume_created.id,
self.services["recurring_snapshot"]
)
self.assertIsNotNone(
snapshot_policy_weekly,
"Weekly Snapshot policy creation failed"
)
#Creating expected and actual values dictionaries
expected_dict = {
"schedule":self.services["recurring_snapshot"]["schedule"],
"intervaltype":2,
"volumeid":volume_created.id
}
actual_dict = {
"schedule":snapshot_policy_weekly.schedule,
"intervaltype":snapshot_policy_weekly.intervaltype,
"volumeid":snapshot_policy_weekly.volumeid
}
status = self.__verify_values(
expected_dict,
actual_dict
)
self.assertEqual(
True,
status,
"Weekly Snapshot Policy details are not as expected"
)
list_snapshot_policy_after = SnapshotPolicy.list(self.userapiclient, volumeid=volume_created.id)
self.assertIsNotNone(
list_snapshot_policy_after,
"Weekly Snapshot policy creation failed"
)
self.assertEquals(
snapshot_policy_before_size + 1,
len(list_snapshot_policy_after),
"Weekly Snapshot policy creation failed"
)
return
@attr(tags=["advanced", "basic", "provisioning"])
def test_09_volume_snapshot_policy_monthly(self):
"""
@summary: Test to verify creation of Monthly Snapshot policies from volume
Step1: Creating a Volume.
Step2: Attaching volume created in Step2 to virtual machine
Step3: Detaching the volume created in step2 from virtual machine
Step4: Listing snapshot policies for a volume created in step1
Step5: Creating Monthly snapshot policy
Step6: Listing snapshot policies for a volume created in step1 again
Step7: Verifyign that the list snapshot policy length is increased by 1
Step8: Deleting monthly snapshot policy created in step5
Step9: List snapshot policies for a volume again
Step10: Verifying that the list snapshot policy length is decreased by 1
"""
list_volumes_before = Volume.list(self.userapiclient, listall=self.services["listall"])
volume_created = Volume.create(
self.userapiclient,
self.services["volume"],
zoneid=self.zone.id,
diskofferingid=self.disk_offering.id
)
self.assertIsNotNone(volume_created, "Volume not created")
self.cleanup.append(volume_created)
list_volumes_after = Volume.list(self.userapiclient, listall=self.services["listall"])
self.assertEquals(
len(list_volumes_before) + 1,
len(list_volumes_after),
"Volume not created"
)
# Attaching and Detaching custom volume created to Virtual Machine
self.virtual_machine.attach_volume(
self.userapiclient,
volume_created
)
list_volumes = Volume.list(
self.userapiclient,
listall=self.services["listall"],
id=volume_created.id
)
attached_volume = list_volumes[0]
self.assertIsNotNone(
attached_volume.vmname,
"VM is not attached to Volume"
)
self.assertEquals(
self.virtual_machine.name,
attached_volume.vmname,
"VM Name is not matching with attached vm"
)
self.virtual_machine.detach_volume(
self.userapiclient,
volume_created
)
list_volumes = Volume.list(
self.userapiclient,
listall=self.services["listall"],
id=volume_created.id
)
detached_volume = list_volumes[0]
self.assertIsNone(
detached_volume.vmname,
"VM is not detached from volume"
)
# Creating Monthly Snapshot Policy from volume
self.services["recurring_snapshot"]["intervaltype"] = 'monthly'
self.services["recurring_snapshot"]["schedule"] = '00:00:1'
list_snapshot_policy_before = SnapshotPolicy.list(self.userapiclient, volumeid=volume_created.id)
snapshot_policy_before_size = 0
if list_snapshot_policy_before is not None:
snapshot_policy_before_size = len(list_snapshot_policy_before)
snapshot_policy_monthly = SnapshotPolicy.create(
self.userapiclient,
volume_created.id,
self.services["recurring_snapshot"])
self.assertIsNotNone(
snapshot_policy_monthly,
"Monthly Snapshot policy creation failed"
)
#Creating expected and actual values dictionaries
expected_dict = {
"schedule":self.services["recurring_snapshot"]["schedule"],
"intervaltype":3,
"volumeid":volume_created.id
}
actual_dict = {
"schedule":snapshot_policy_monthly.schedule,
"intervaltype":snapshot_policy_monthly.intervaltype,
"volumeid":snapshot_policy_monthly.volumeid
}
status = self.__verify_values(
expected_dict,
actual_dict
)
self.assertEqual(
True,
status,
"Monthly Snapshot Policy details are not as expected"
)
list_snapshot_policy_after = SnapshotPolicy.list(self.userapiclient, volumeid=volume_created.id)
self.assertIsNotNone(
list_snapshot_policy_after,
"Monthly Snapshot policy creation failed"
)
self.assertEquals(
snapshot_policy_before_size + 1,
len(list_snapshot_policy_after),
"Monthly Snapshot policy creation failed"
)
# Deleting monthly snapshot policy
SnapshotPolicy.delete(snapshot_policy_monthly, self.userapiclient)
list_snapshot_policies = SnapshotPolicy.list(self.userapiclient, volumeid=volume_created.id)
self.assertIsNone(
list_snapshot_policies,
"Deletion of Monthly Snapshot policy failed"
)
return
@attr(tags=["advanced", "basic", "provisioning"])
def test_10_volume_snapshots_pagination(self):
"""
@summary: Test to verify pagination of snapshots for Volume
Step1: Creating a Volume.
Step2: Attaching volume created in Step2 to virtual machine
Step3: Detaching the volume created in step2 from virtual machine
Step4: Listing all the snapshots for a volume
Step5: Creating Pagesize + 1 number of snapshots for a volume
Step6: Listing all the snapshots for a volume
Step7: Verifying that there are pagesize + 1 number of snapshots listsed
Step8: Listing all the snapshots in page 1
Step9: Listing all the snapshots in page 2
Step10: Deleting the snapshot present in page 2
Step11: Listign the snapshots from page 2 again and verifyign that list returns none
"""
list_volumes_before = Volume.list(self.userapiclient, listall=self.services["listall"])
# Creating a Volume
volume_created = Volume.create(
self.userapiclient,
self.services["volume"],
zoneid=self.zone.id,
diskofferingid=self.disk_offering.id
)
self.assertIsNotNone(volume_created, "Volume not created")
self.cleanup.append(volume_created)
list_volumes_after = Volume.list(self.userapiclient, listall=self.services["listall"])
self.assertEquals(
len(list_volumes_before) + 1,
len(list_volumes_after),
"Volume not created"
)
#Attaching volume to virtual machine
self.virtual_machine.attach_volume(
self.userapiclient,
volume_created
)
list_volumes = Volume.list(
self.userapiclient,
listall=self.services["listall"],
id=volume_created.id
)
attached_volume = list_volumes[0]
self.assertIsNotNone(
attached_volume.vmname,
"VM is not attached to Volume"
)
self.assertEquals(
self.virtual_machine.name,
attached_volume.vmname,
"VM Name is not matching with attached vm"
)
#Detaching volume from virtual machine
self.virtual_machine.detach_volume(
self.userapiclient,
volume_created
)
list_volumes = Volume.list(
self.userapiclient,
listall=self.services["listall"],
id=volume_created.id
)
detached_volume = list_volumes[0]
self.assertIsNone(
detached_volume.vmname,
"VM is not detached from volume"
)
#Creating 3 Snapshots from volume
list_snapshot_before = Snapshot.list(
self.userapiclient,
volumeid=volume_created.id,
listall=self.services["listall"]
)
self.assertIsNone(
list_snapshot_before,
"Newly created volume is already having snapshots"
)
list_snapshot_before_size = 0
for i in range(0, 3):
snapshot_created = Snapshot.create(
self.userapiclient,
volume_created.id,
)
self.assertIsNotNone(snapshot_created, "Snapshot not created")
self.cleanup.append(snapshot_created)
self.assertEquals(
volume_created.id,
snapshot_created.volumeid,
"Snapshot not created for given volume"
)
list_snapshot_after = Snapshot.list(
self.userapiclient,
volumeid=volume_created.id,
listall=self.services["listall"]
)
self.assertEqual(
list_snapshot_before_size+3,
len(list_snapshot_after),
"Number of snapshots created is not matching expected"
)
#Listing all the snapshots in page1
list_snapshots_page1 = Snapshot.list(
self.userapiclient,
volumeid=volume_created.id,
listall=self.services["listall"],
page=1,
pagesize=2
)
self.assertEqual(
2,
len(list_snapshots_page1),
"List snapshots response is not matching with the page size length for page 1"
)
#Listing all the snapshots in page2 and ensuring only 1 snapshot is present
list_snapshots_page2 = Snapshot.list(
self.userapiclient,
volumeid=volume_created.id,
listall=self.services["listall"],
page=2,
pagesize=2
)
self.assertEqual(
len(list_snapshots_page2),
1,
"List snapshots response is not matching with the page size length for page 2"
)
snapshot_page2 = list_snapshots_page2[0]
# Verifying that the snapshot on page 2 is not present in page1
for i in range(0, len(list_snapshots_page1)):
snapshot_page1 = list_snapshots_page1[i]
self.assertNotEquals(
snapshot_page2.id,
snapshot_page1.id,
"Snapshot listed in page 2 is also listed in page 1"
)
# Deleting a single snapshot and verifying that snapshot does not exists on page 2
Snapshot.delete(snapshot_created, self.userapiclient)
list_snapshot_page2 = Snapshot.list(
self.userapiclient,
volumeid=volume_created.id,
listall=self.services["listall"],
page=2,
pagesize=2
)
self.assertEqual(
None,
list_snapshot_page2,
"Snapshot was not deleted"
)
list_snapshot_page1 = Snapshot.list(
self.userapiclient,
volumeid=volume_created.id,
listall=self.services["listall"],
page=1,
pagesize=2
)
self.assertEqual(
2,
len(list_snapshot_page1),
"Snapshots on page 1 are not matching"
)
return
@attr(tags=["advanced", "basic", "provisioning"])
def test_11_volume_extract(self):
"""
@summary: Test to verify extract/download a Volume
Step1: Listing Volumes before creating a Volume
Step2: Creating a Volume.
Step3: Verifying that created volume is not none and adding to clean up
Step4: Listing the volumes after creation
Step5: Verifying that the list volume size is increased by 1
Step6: Attaching volume created in Step2 to virtual machine
Step7: Detaching the volume created in step2 from virtual machine
Step8: Extracting/Downloadign the volume
Step9: Verifyign that a download URL is created for volume download
"""
list_volumes_before = Volume.list(self.userapiclient, listall=self.services["listall"])
self.assertIsNotNone(
list_volumes_before,
"volume not created for the vm launched at class level"
)
volume_created = Volume.create(
self.userapiclient,
self.services["volume"],
zoneid=self.zone.id,
diskofferingid=self.disk_offering.id
)
self.assertIsNotNone(volume_created, "Volume not created")
self.cleanup.append(volume_created)
list_volumes_after = Volume.list(self.userapiclient, listall=self.services["listall"])
self.assertIsNotNone(
list_volumes_after,
"volume creation failed"
)
self.assertEquals(
len(list_volumes_before) + 1,
len(list_volumes_after),
"Volume not created"
)
#Attaching and Detaching volume created to Virtual Machine
self.virtual_machine.attach_volume(
self.userapiclient,
volume_created
)
list_volumes = Volume.list(
self.userapiclient,
listall=self.services["listall"],
id=volume_created.id
)
attached_volume = list_volumes[0]
self.assertIsNotNone(
attached_volume.vmname,
"VM is not attached to Volume"
)
self.assertEquals(
self.virtual_machine.name,
attached_volume.vmname,
"VM Name is not matching with attached vm"
)
self.virtual_machine.detach_volume(
self.userapiclient,
volume_created
)
list_volumes = Volume.list(
self.userapiclient,
listall=self.services["listall"],
id=volume_created.id
)
detached_volume = list_volumes[0]
self.assertIsNone(
detached_volume.vmname,
"VM is not detached from volume"
)
#Extract/Download the volume
self.services["mode"] = "HTTP_DOWNLOAD"
extract_volume_response = Volume.extract(
self.userapiclient,
volume_created.id,
self.zone.id,
self.services["mode"]
)
self.assertIsNotNone(extract_volume_response, "Extract/Download volume failed")
self.assertEquals(
"DOWNLOAD_URL_CREATED",
extract_volume_response.state,
"Failed to create Download URL"
)
self.assertIsNotNone(
extract_volume_response.url,
"Extract/Download volume URL is NULL"
)
self.assertTrue(
(extract_volume_response.url.find("https://")!=-1),
"Extract/Download volume URL doesnot contain https://"
)
self.assertEquals(
volume_created.id,
extract_volume_response.id,
"Extracted/Downloaded volume is not matching with original volume"
)
return
@attr(tags=["advanced", "basic", "provisioning"])
def test_12_volume_upload(self):
"""
@summary: Test to verify upload volume
Step1: Listing the volumes for a user before uploading volume
Step2: Uploading a volume
Step3: Listing the volumes for a user after uploading data volume
Step4: Verifying that the list volume length after upload is increased by 1
"""
list_volumes_before = Volume.list(self.userapiclient, listall=self.services["listall"])
self.assertIsNotNone(
list_volumes_before,
"volume not created for the vm launched at class level"
)
#Uploading a Volume
volume_uploaded = Volume.upload(
self.userapiclient,
self.services["upload_volume"],
self.zone.id
)
self.assertIsNotNone(volume_uploaded, "volume uploading failed")
self.assertEquals(
self.services["upload_volume"]["diskname"],
volume_uploaded.name,
"Uploaded volume name is not matching with name provided while uploading")
#Listing the volumes for a user after uploading data volume
list_volumes_after = Volume.list(self.userapiclient, listall=self.services["listall"])
self.assertIsNotNone(
list_volumes_after,
"volume not created for the vm launched at class level"
)
#Asserting that the list volume length after upload is increased by 1
self.assertEquals(
len(list_volumes_before) + 1,
len(list_volumes_after),
"upload volume failed"
)
return
class TestListInstances(cloudstackTestCase):
@classmethod
def setUpClass(cls):
try:
cls._cleanup = []
cls.testClient = super(TestListInstances, cls).getClsTestClient()
cls.api_client = cls.testClient.getApiClient()
cls.services = cls.testClient.getParsedTestDataConfig()
# Get Domain, Zone, Template
cls.domain = get_domain(cls.api_client)
cls.zone = get_zone(cls.api_client)
cls.template = get_template(
cls.api_client,
cls.zone.id,
cls.services["ostype"]
)
if cls.zone.localstorageenabled:
cls.storagetype = 'local'
cls.services["service_offerings"]["tiny"]["storagetype"] = 'local'
cls.services["disk_offering"]["storagetype"] = 'local'
else:
cls.storagetype = 'shared'
cls.services["service_offerings"]["tiny"]["storagetype"] = 'shared'
cls.services["disk_offering"]["storagetype"] = 'shared'
cls.services['mode'] = cls.zone.networktype
cls.services["virtual_machine"]["hypervisor"] = cls.testClient.getHypervisorInfo()
cls.services["virtual_machine"]["zoneid"] = cls.zone.id
cls.services["virtual_machine"]["template"] = cls.template.id
cls.services["custom_volume"]["zoneid"] = cls.zone.id
# Creating Disk offering, Service Offering and Account
cls.disk_offering = DiskOffering.create(
cls.api_client,
cls.services["disk_offering"]
)
cls._cleanup.append(cls.disk_offering)
cls.service_offering = ServiceOffering.create(
cls.api_client,
cls.services["service_offerings"]["tiny"]
)
cls._cleanup.append(cls.service_offering)
cls.account = Account.create(
cls.api_client,
cls.services["account"],
domainid=cls.domain.id
)
# Getting authentication for user in newly created Account
cls.user = cls.account.user[0]
cls.userapiclient = cls.testClient.getUserApiClient(cls.user.username, cls.domain.name)
# Updating resource Limits
for i in range(0,12):
Resources.updateLimit(
cls.api_client,
account=cls.account.name,
domainid=cls.domain.id,
max=-1,
resourcetype=i
)
cls._cleanup.append(cls.account)
except Exception as e:
cls.tearDownClass()
raise Exception("Warning: Exception in setup : %s" % e)
return
def setUp(self):
self.apiClient = self.testClient.getApiClient()
self.cleanup = []
def tearDown(self):
#Clean up, terminate the created resources
cleanup_resources(self.apiClient, self.cleanup)
return
@classmethod
def tearDownClass(cls):
try:
cleanup_resources(cls.api_client, cls._cleanup)
except Exception as e:
raise Exception("Warning: Exception during cleanup : %s" % e)
return
def __verify_values(self, expected_vals, actual_vals):
"""
@Desc: Function to verify expected and actual values
@Steps:
Step1: Initializing return flag to True
Step1: Verifying length of expected and actual dictionaries is matching.
If not matching returning false
Step2: Listing all the keys from expected dictionary
Step3: Looping through each key from step2 and verifying expected and actual dictionaries have same value
If not making return flag to False
Step4: returning the return flag after all the values are verified
"""
return_flag = True
if len(expected_vals) != len(actual_vals):
return False
keys = expected_vals.keys()
for i in range(0, len(expected_vals)):
exp_val = expected_vals[keys[i]]
act_val = actual_vals[keys[i]]
if exp_val == act_val:
return_flag = return_flag and True
else:
return_flag = return_flag and False
self.debug("expected Value: %s, is not matching with actual value: %s" % (
exp_val,
act_val
))
return return_flag
@attr(tags=["advanced", "basic", "selfservice"])
def test_01_list_instances_pagination(self):
"""
@Desc: Test List Instances pagination
@Steps:
Step1: Listing all the Instances for a user
Step2: Verifying listed Instances for account created at class level
Step3: If number of volumes is less than (page size + 1), then creating them
Step4: Listing all the volumes again after creation of volumes
Step5: Verifying the length of the volumes is (page size + 1)
Step6: Listing all the volumes in page1
Step7: Verifying that the length of the volumes in page 1 is (page size)
Step8: Listing all the volumes in page2
Step9: Verifying that the length of the volumes in page 2 is 1
Step10: Deleting the volume present in page 2
Step11: Listing for the volumes on page 2
Step12: Verifying that there are no volumes present in page 2
"""
# Listing all the instances for a user
list_instances_before = VirtualMachine.list(self.userapiclient, listall=self.services["listall"])
# Verifying listed instances for account created at class level
self.assertIsNone(
list_instances_before,
"Virtual Machine already exists for newly created user"
)
# If number of instances are less than (pagesize + 1), then creating them
for i in range(0, (self.services["pagesize"] + 1)):
vm_created = VirtualMachine.create(
self.userapiclient,
self.services["virtual_machine"],
accountid=self.account.name,
domainid=self.account.domainid,
serviceofferingid=self.service_offering.id,
)
self.assertIsNotNone(
vm_created,
"VM creation failed"
)
if(i < (self.services["pagesize"])):
self.cleanup.append(vm_created)
self.assertEqual(
self.services["virtual_machine"]["displayname"],
vm_created.displayname,
"Newly created VM name and the test data VM name are not matching"
)
# Listing all the instances again after creating VM's
list_instances_after = VirtualMachine.list(self.userapiclient, listall=self.services["listall"])
status = validateList(list_instances_after)
self.assertEquals(
PASS,
status[0],
"Listing of instances after creation failed"
)
# Verifying the length of the instances is (page size + 1)
self.assertEqual(
len(list_instances_after),
(self.services["pagesize"] + 1),
"Number of instances created is not matching as expected"
)
# Listing all the volumes in page1
list_instances_page1 = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"],
domainid=self.account.domainid
)
status = validateList(list_instances_page1)
self.assertEquals(
PASS,
status[0],
"Listing of instances in page1 failed"
)
# Verifying that the length of the instances in page 1 is (page size)
self.assertEqual(
self.services["pagesize"],
len(list_instances_page1),
"List VM response is not matching with the page size length for page 1"
)
# Listing all the VM's in page2
list_instances_page2 = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
page=2,
pagesize=self.services["pagesize"],
domainid=self.account.domainid
)
status = validateList(list_instances_page2)
self.assertEquals(
PASS,
status[0],
"Listing of instances in page2 failed"
)
# Verifying that the length of the VM's in page 2 is 1
self.assertEqual(
1,
len(list_instances_page2),
"List VM response is not matching with the page size length for page 2"
)
instance_page2 = list_instances_page2[0]
# Verifying that the VM on page 2 is not present in page1
for i in range(0, len(list_instances_page1)):
instance_page1 = list_instances_page1[i]
self.assertNotEquals(
instance_page2.id,
instance_page1.id,
"VM listed in page 2 is also listed in page 1"
)
# Deleting a single VM
VirtualMachine.delete(vm_created, self.userapiclient)
# Listing the VM's in page 2
list_instance_response = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
page=2,
pagesize=self.services["pagesize"],
domainid=self.account.domainid
)
# verifying that VM does not exists on page 2
self.assertEqual(
list_instance_response,
None,
"VM was not deleted"
)
return
@attr(tags=["advanced", "basic", "selfservice"])
def test_02_list_Running_vm(self):
"""
@Desc: Test List Running VM's
@Steps:
Step1: Listing all the Running VMs for a user
Step2: Verifying that the size of the list is 0
Step3: Deploying a VM
Step4: Listing all the Running VMs for a user again
Step5: Verifying that the size of the list is increased by 1
Step6: Verifying that the details of the Running VM listed are same as the VM deployed in Step3
"""
# Listing all the Running VM's for a User
list_running_vms_before = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"],
domainid=self.account.domainid,
state="Running"
)
self.assertIsNone(
list_running_vms_before,
"Virtual Machine already exists for newly created user"
)
# Deploying a VM
vm_created = VirtualMachine.create(
self.userapiclient,
self.services["virtual_machine"],
accountid=self.account.name,
domainid=self.account.domainid,
serviceofferingid=self.service_offering.id,
)
self.assertIsNotNone(
vm_created,
"VM creation failed"
)
self.cleanup.append(vm_created)
# Listing all the Running VM's for a User
list_running_vms_after = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"],
domainid=self.account.domainid,
state="Running"
)
status = validateList(list_running_vms_after)
self.assertEquals(
PASS,
status[0],
"Newly created VM is not in Running state"
)
# Verifying list size is 1
self.assertEquals(
1,
len(list_running_vms_after),
"Running VM list count is not matching"
)
running_vm = list_running_vms_after[0]
#Creating expected and actual values dictionaries
expected_dict = {
"id":vm_created.id,
"name":vm_created.name,
"displayname":vm_created.displayname,
"state":"Running",
"zoneid":vm_created.zoneid,
"account":vm_created.account,
"template":vm_created.templateid
}
actual_dict = {
"id":running_vm.id,
"name":running_vm.name,
"displayname":running_vm.displayname,
"state":running_vm.state,
"zoneid":running_vm.zoneid,
"account":running_vm.account,
"template":running_vm.templateid
}
running_vm_status = self.__verify_values(
expected_dict,
actual_dict
)
self.assertEqual(
True,
running_vm_status,
"Listed Running VM details are not as expected"
)
return
@attr(tags=["advanced", "basic", "selfservice"])
def test_03_list_Stopped_vm(self):
"""
@Desc: Test List Stopped VM's
@Steps:
Step1: Listing all the Stopped VMs for a user
Step2: Verifying that the size of the list is 0
Step3: Deploying a VM
Step4: Stopping the VM deployed in step3
Step5: Listing all the Stopped VMs for a user again
Step6: Verifying that the size of the list is increased by 1
Step7: Verifying that the details of the Stopped VM listed are same as the VM stopped in Step4
"""
# Listing all the Stopped VM's for a User
list_stopped_vms_before = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"],
domainid=self.account.domainid,
state="Stopped"
)
self.assertIsNone(
list_stopped_vms_before,
"Virtual Machine already exists for newly created user"
)
# Deploying a VM
vm_created = VirtualMachine.create(
self.userapiclient,
self.services["virtual_machine"],
accountid=self.account.name,
domainid=self.account.domainid,
serviceofferingid=self.service_offering.id,
)
self.assertIsNotNone(
vm_created,
"VM creation failed"
)
self.cleanup.append(vm_created)
# Stopping the VM
VirtualMachine.stop(vm_created, self.userapiclient)
# Listing all the Stopped VM's for a User
list_stopped_vms_after = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"],
domainid=self.account.domainid,
state="Stopped"
)
status = validateList(list_stopped_vms_after)
self.assertEquals(
PASS,
status[0],
"Stopped VM is not in Stopped state"
)
# Verifying list size is 1
self.assertEquals(
1,
len(list_stopped_vms_after),
"Stopped VM list count is not matching"
)
stopped_vm = list_stopped_vms_after[0]
#Creating expected and actual values dictionaries
expected_dict = {
"id":vm_created.id,
"name":vm_created.name,
"displayname":vm_created.displayname,
"state":"Stopped",
"zoneid":vm_created.zoneid,
"account":vm_created.account,
"template":vm_created.templateid
}
actual_dict = {
"id":stopped_vm.id,
"name":stopped_vm.name,
"displayname":stopped_vm.displayname,
"state":stopped_vm.state,
"zoneid":stopped_vm.zoneid,
"account":stopped_vm.account,
"template":stopped_vm.templateid
}
stopped_vm_status = self.__verify_values(
expected_dict,
actual_dict
)
self.assertEqual(
True,
stopped_vm_status,
"Listed Stopped VM details are not as expected"
)
return
@attr(tags=["advanced", "basic", "selfservice"])
def test_04_list_Destroyed_vm(self):
"""
@Desc: Test List Destroyed VM's
@Steps:
Step1: Listing all the Destroyed VMs for a user
Step2: Verifying that the size of the list is 0
Step3: Deploying a VM
Step4: Destroyed the VM deployed in step3
Step5: Listing all the Destroyed VMs for a user again
Step6: Verifying that destroyed VM is not listed for User
Step7: Listing all the destroyed VMs as admin
Step8: Verifying that the size of the list is 1
Step9: Verifying that the details of the Destroyed VM listed are same as the VM destroyed in Step4
"""
# Listing all the Destroyed VM's for a User
list_destroyed_vms_before = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"],
domainid=self.account.domainid,
state="Destroyed"
)
self.assertIsNone(
list_destroyed_vms_before,
"Virtual Machine in Destroyed state already exists for newly created user"
)
# Deploying a VM
vm_created = VirtualMachine.create(
self.userapiclient,
self.services["virtual_machine"],
accountid=self.account.name,
domainid=self.account.domainid,
serviceofferingid=self.service_offering.id,
)
self.assertIsNotNone(
vm_created,
"VM creation failed"
)
# Destroying the VM
VirtualMachine.delete(vm_created, self.userapiclient)
# Listing all the Destroyed VM's for a User
list_destroyed_vms_after = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"],
domainid=self.account.domainid,
state="Destroyed"
)
self.assertIsNone(
list_destroyed_vms_after,
"Destroyed VM is not in destroyed state"
)
# Listing destroyed VMs as admin user
list_destroyed_vms_admin = VirtualMachine.list(
self.apiClient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"],
domainid=self.account.domainid,
state="Destroyed",
id=vm_created.id
)
status = validateList(list_destroyed_vms_admin)
self.assertEquals(
PASS,
status[0],
"Destroyed VM is not in Destroyed state"
)
# Verifying that the length of the destroyed VMs list should be 1
self.assertEquals(
1,
len(list_destroyed_vms_admin),
"Destroyed VM list count is not matching"
)
destroyed_vm = list_destroyed_vms_admin[0]
#Creating expected and actual values dictionaries
expected_dict = {
"id":vm_created.id,
"name":vm_created.name,
"displayname":vm_created.displayname,
"state":"Destroyed",
"zoneid":vm_created.zoneid,
"account":vm_created.account,
"template":vm_created.templateid
}
actual_dict = {
"id":destroyed_vm.id,
"name":destroyed_vm.name,
"displayname":destroyed_vm.displayname,
"state":destroyed_vm.state,
"zoneid":destroyed_vm.zoneid,
"account":destroyed_vm.account,
"template":destroyed_vm.templateid
}
destroyed_vm_status = self.__verify_values(
expected_dict,
actual_dict
)
self.assertEqual(
True,
destroyed_vm_status,
"Listed Destroyed VM details are not as expected"
)
return
@attr(tags=["advanced", "basic", "selfservice"])
def test_05_list_vm_by_id(self):
"""
@Desc: Test List VM by Id
@Steps:
Step1: Listing all the VMs for a user
Step2: Verifying that the size of the list is 0
Step3: Deploying a VM
Step4: Listing all the VMs for a user again
Step5: Verifying that the size of the list is increased by 1
Step6: List a VM by specifying the Id if the VM deployed in Step3
Step7: Verifying that the details of the Listed VM are same as the VM deployed in Step3
"""
# Listing all the VM's for a User
list_vms_before = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"],
domainid=self.account.domainid,
account=self.account.name
)
self.assertIsNone(
list_vms_before,
"Virtual Machine already exists for newly created user"
)
# Deploying a VM
vm_created = VirtualMachine.create(
self.userapiclient,
self.services["virtual_machine"],
accountid=self.account.name,
domainid=self.account.domainid,
serviceofferingid=self.service_offering.id,
)
self.assertIsNotNone(
vm_created,
"VM creation failed"
)
self.cleanup.append(vm_created)
# Listing all the VM's for a User
list_vms_after = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"],
domainid=self.account.domainid,
account=self.account.name
)
status = validateList(list_vms_after)
self.assertEquals(
PASS,
status[0],
"Listing of VM after creation failed"
)
self.assertEquals(
1,
len(list_vms_after),
"VM list count is not matching"
)
# Listing a VM by Id
list_vm_byid = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
id=vm_created.id
)
status = validateList(list_vm_byid)
self.assertEquals(
PASS,
status[0],
"Listing of VM by Id failed"
)
listed_vm = list_vm_byid[0]
#Creating expected and actual values dictionaries
expected_dict = {
"id":vm_created.id,
"name":vm_created.name,
"displayname":vm_created.displayname,
"state":vm_created.state,
"zoneid":vm_created.zoneid,
"account":vm_created.account,
"template":vm_created.templateid
}
actual_dict = {
"id":listed_vm.id,
"name":listed_vm.name,
"displayname":listed_vm.displayname,
"state":listed_vm.state,
"zoneid":listed_vm.zoneid,
"account":listed_vm.account,
"template":listed_vm.templateid
}
list_vm_status = self.__verify_values(
expected_dict,
actual_dict
)
self.assertEqual(
True,
list_vm_status,
"Listed VM by Id details are not as expected"
)
return
@attr(tags=["advanced", "basic", "selfservice"])
def test_06_list_vm_by_name(self):
"""
@Desc: Test List VM's by Name
@Steps:
Step1: Listing all the VMs for a user
Step2: Verifying that the size of the list is 0
Step3: Deploying a 2 VM's
Step4: Listing all the VMs for a user again
Step5: Verifying that list size is increased by 2
Step6: Listing the VM by specifying complete name of VM-1 created in step3
Step7: Verifying that the size of the list is 1
Step8: Verifying that the details of the listed VM are same as the VM-1 created in step3
Step9: Listing the VM by specifying the partial name of VM
Step10: Verifying that the size of the list is 2
"""
# Listing all the VM's for a User
list_vms_before = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"],
domainid=self.account.domainid,
)
self.assertIsNone(
list_vms_before,
"Virtual Machine already exists for newly created user"
)
vms = {}
for i in range(0, 2):
# Deploying a VM
vm_created = VirtualMachine.create(
self.userapiclient,
self.services["virtual_machine"],
accountid=self.account.name,
domainid=self.account.domainid,
serviceofferingid=self.service_offering.id,
)
self.assertIsNotNone(
vm_created,
"VM creation failed"
)
self.cleanup.append(vm_created)
vms.update({i: vm_created})
# Listing all the VM's for a User
list_vms_after = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"],
domainid=self.account.domainid,
)
status = validateList(list_vms_after)
self.assertEquals(
PASS,
status[0],
"VM's creation failed"
)
self.assertEquals(
2,
len(list_vms_after),
"VM's list count is not matching"
)
# Listing the VM by complete name
list_vm_byfullname = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"],
domainid=self.account.domainid,
name=vms[0].name
)
status = validateList(list_vm_byfullname)
self.assertEquals(
PASS,
status[0],
"Failed to list VM by Name"
)
# Verifying that the size of the list is 1
self.assertEquals(
1,
len(list_vm_byfullname),
"VM list by full name count is not matching"
)
# Verifying that the details of the listed VM are same as the VM created above
#Creating expected and actual values dictionaries
expected_dict = {
"id":vms[0].id,
"name":vms[0].name,
"displayname":vms[0].displayname,
"state":vms[0].state,
"zoneid":vms[0].zoneid,
"account":vms[0].account,
"template":vms[0].templateid
}
actual_dict = {
"id":list_vm_byfullname[0].id,
"name":list_vm_byfullname[0].name,
"displayname":list_vm_byfullname[0].displayname,
"state":list_vm_byfullname[0].state,
"zoneid":list_vm_byfullname[0].zoneid,
"account":list_vm_byfullname[0].account,
"template":list_vm_byfullname[0].templateid
}
list_vm_status = self.__verify_values(
expected_dict,
actual_dict
)
self.assertEqual(
True,
list_vm_status,
"Listed VM details are not as expected"
)
# Listing the VM by partial name
list_vm_bypartialname = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
domainid=self.account.domainid,
name=vms[0].name[:1]
)
status = validateList(list_vm_bypartialname)
self.assertEquals(
PASS,
status[0],
"Failed to list VM by Name"
)
# Verifying that the size of the list is 2
self.assertEquals(
2,
len(list_vm_bypartialname),
"VM list by full name count is not matching"
)
return
@attr(tags=["advanced", "basic", "selfservice"])
def test_07_list_vm_by_name_state(self):
"""
@Desc: Test List VM's by Name and State
@Steps:
Step1: Listing all the VMs for a user
Step2: Verifying that the size of the list is 0
Step3: Deploying a VM
Step4: Listing all the VMs for a user again
Step5: Verifying that list size is increased by 1
Step6: Listing the VM by specifying name of VM created in step3 and state as Running (matching name and state)
Step7: Verifying that the size of the list is 1
Step8: Verifying that the details of the listed VM are same as the VM created in step3
Step9: Listing the VM by specifying name of VM created in step3 and state as Stopped (non matching state)
Step10: Verifying that the size of the list is 0
Step11: Listing the VM by specifying non matching name and state as Running (non matching name)
Step12: Verifying that the size of the list is 0
"""
# Listing all the VM's for a User
list_vms_before = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"],
domainid=self.account.domainid,
)
self.assertIsNone(
list_vms_before,
"Virtual Machine already exists for newly created user"
)
# Deploying a VM
vm_created = VirtualMachine.create(
self.userapiclient,
self.services["virtual_machine"],
accountid=self.account.name,
domainid=self.account.domainid,
serviceofferingid=self.service_offering.id,
)
self.assertIsNotNone(
vm_created,
"VM creation failed"
)
self.cleanup.append(vm_created)
# Listing all the VM's for a User
list_vms_after = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"],
domainid=self.account.domainid,
)
status = validateList(list_vms_after)
self.assertEquals(
PASS,
status[0],
"VM's creation failed"
)
self.assertEquals(
1,
len(list_vms_after),
"VM's list count is not matching"
)
# Listing the VM by matching Name and State
list_running_vm = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"],
domainid=self.account.domainid,
name=vm_created.name,
state="Running"
)
status = validateList(list_running_vm)
self.assertEquals(
PASS,
status[0],
"List VM by name and state failed"
)
# Verifying that the size of the list is 1
self.assertEquals(
1,
len(list_running_vm),
"Count of VM list by name and state is not matching"
)
# Verifying that the details of the listed VM are same as the VM created above
#Creating expected and actual values dictionaries
expected_dict = {
"id":vm_created.id,
"name":vm_created.name,
"displayname":vm_created.displayname,
"state":"Running",
"zoneid":vm_created.zoneid,
"account":vm_created.account,
"template":vm_created.templateid
}
actual_dict = {
"id":list_running_vm[0].id,
"name":list_running_vm[0].name,
"displayname":list_running_vm[0].displayname,
"state":list_running_vm[0].state,
"zoneid":list_running_vm[0].zoneid,
"account":list_running_vm[0].account,
"template":list_running_vm[0].templateid
}
list_vm_status = self.__verify_values(
expected_dict,
actual_dict
)
self.assertEqual(
True,
list_vm_status,
"Listed VM details are not as expected"
)
# Listing the VM by matching name and non matching state
list_running_vm = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"],
domainid=self.account.domainid,
name=vm_created.name,
state="Stopped"
)
self.assertIsNone(
list_running_vm,
"Listed VM with non matching state"
)
# Listing the VM by non matching name and matching state
list_running_vm = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"],
domainid=self.account.domainid,
name="name",
state="Running"
)
self.assertIsNone(
list_running_vm,
"Listed VM with non matching name"
)
return
@attr(tags=["advanced", "basic", "selfservice"])
def test_08_list_vm_by_zone(self):
"""
@Desc: Test List VM by Zone.
This test case is applicable for a setup having multiple zones.
@Steps:
Step1: Listing all the zones
Step2: Checking if there are multiple zones in the setup.
Continuing below steps only if there are multiple zones
Step3: Listing template for zone
Step4: Listing all the VMs for a user
Step5: Verifying that the size of the list is 0
Step6: Deploying a VM
Step7: Listing all the VMs for a user again for matching zone
Step8: Verifying that the size of the list is 1
Step9: Verifying that the details of the Listed VM are same as the VM deployed in Step6
Step10: Listing all the VMs for a user again for non-matching zone
Step11: Verifying that the size of the list is 0
"""
# Listing all the zones available
zones_list = Zone.list(self.apiClient)
status = validateList(zones_list)
self.assertEquals(
PASS,
status[0],
"zones not available in the given setup"
)
current_zone = self.services["virtual_machine"]["zoneid"]
current_template = self.services["virtual_machine"]["template"]
# Checking if there are multiple zones in the setup.
if not len(zones_list) > 1:
self.debug("Setup is not having multiple zones")
else:
# Getting the template available under the zone
template = get_template(
self.apiClient,
zones_list[0].id,
self.services["ostype"]
)
self.assertIsNotNone(
template,
"Template not found for zone"
)
self.services["virtual_machine"]["zoneid"] = zones_list[0].id
self.services["virtual_machine"]["template"] = template.id
# Listing all the VM's for a User
list_vms_before = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"],
domainid=self.account.domainid,
zoneid=zones_list[0].id
)
self.assertIsNone(
list_vms_before,
"Virtual Machine already exists for newly created user"
)
# Deploying a VM
vm_created = VirtualMachine.create(
self.userapiclient,
self.services["virtual_machine"],
accountid=self.account.name,
domainid=self.account.domainid,
serviceofferingid=self.service_offering.id,
)
self.assertIsNotNone(
vm_created,
"VM creation failed"
)
self.cleanup.append(vm_created)
# Listing all the VMs for a user again for matching zone
list_vms_after = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"],
domainid=self.account.domainid,
zoneid=zones_list[0].id
)
status = validateList(list_vms_after)
self.assertEquals(
PASS,
status[0],
"VM creation failed"
)
# Verifying that the size of the list is 1
self.assertEquals(
1,
len(list_vms_after),
"VM list count is not matching"
)
listed_vm = list_vms_after[0]
# Verifying that the details of the Listed VM are same as the VM deployed above
#Creating expected and actual values dictionaries
expected_dict = {
"id":vm_created.id,
"name":vm_created.name,
"displayname":vm_created.displayname,
"state":vm_created.state,
"zoneid":vm_created.zoneid,
"account":vm_created.account,
"template":vm_created.templateid
}
actual_dict = {
"id":listed_vm.id,
"name":listed_vm.name,
"displayname":listed_vm.displayname,
"state":listed_vm.state,
"zoneid":listed_vm.zoneid,
"account":listed_vm.account,
"template":listed_vm.templateid
}
list_vm_status = self.__verify_values(
expected_dict,
actual_dict
)
self.assertEqual(
True,
list_vm_status,
"Listed VM by Id details are not as expected"
)
# Listing all the VMs for a user again for non-matching zone
list_vms = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"],
domainid=self.account.domainid,
zoneid=zones_list[1].id
)
self.assertIsNone(
list_vms,
"VM's listed for non matching zone"
)
self.services["virtual_machine"]["zoneid"] = current_zone
self.services["virtual_machine"]["template"] = current_template
return
@attr(tags=["advanced", "basic", "selfservice"])
def test_09_list_vm_by_zone_name(self):
"""
@Desc: Test List VM by Zone.
This test case is applicable for a setup having multiple zones.
@Steps:
Step1: Listing all the zones
Step2: Checking if there are multiple zones in the setup.
Continuing below steps only if there are multiple zones
Step3: Listing template for zone
Step4: Listing all the VMs for a user
Step5: Verifying that the size of the list is 0
Step6: Deploying a VM
Step7: Listing all the VMs for a user again
Step8: Verifying that list size is increased by 1
Step9: Listing the VM by specifying name of VM created in step6 and matching zone (matching name and zone)
Step10: Verifying that the size of the list is 1
Step11: Verifying that the details of the listed VM are same as the VM created in step3
Step12: Listing the VM by specifying name of VM created in step6 and non matching zone (non matching zone)
Step13: Verifying that the size of the list is 0
Step14: Listing the VM by specifying non matching name and matching zone (non matching name)
Step15: Verifying that the size of the list is 0
"""
# Listing all the zones available
zones_list = Zone.list(self.apiClient)
status = validateList(zones_list)
self.assertEquals(
PASS,
status[0],
"zones not available in the given setup"
)
current_zone = self.services["virtual_machine"]["zoneid"]
current_template = self.services["virtual_machine"]["template"]
# Checking if there are multiple zones in the setup.
if not len(zones_list) > 1:
self.debug("Setup is not having multiple Zones")
else:
# Getting the template available under the zone
template = get_template(
self.apiClient,
zones_list[0].id,
self.services["ostype"]
)
self.assertIsNotNone(
template,
"Template not found for zone"
)
self.services["virtual_machine"]["zoneid"] = zones_list[0].id
self.services["virtual_machine"]["template"] = template.id
# Listing all the VM's for a User
list_vms_before = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"],
domainid=self.account.domainid,
zoneid=zones_list[0].id,
account=self.account.name
)
self.assertIsNone(
list_vms_before,
"Virtual Machine already exists for newly created user"
)
# Deploying a VM
vm_created = VirtualMachine.create(
self.userapiclient,
self.services["virtual_machine"],
accountid=self.account.name,
domainid=self.account.domainid,
serviceofferingid=self.service_offering.id,
)
self.assertIsNotNone(
vm_created,
"VM creation failed"
)
self.cleanup.append(vm_created)
# Listing all the VMs for a user again for matching zone
list_vms_after = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"],
domainid=self.account.domainid,
zoneid=zones_list[0].id,
account=self.account.name
)
status = validateList(list_vms_after)
self.assertEquals(
PASS,
status[0],
"VM creation failed"
)
# Verifying that the size of the list is 1
self.assertEquals(
1,
len(list_vms_after),
"VM list count is not matching"
)
# Listing the VM by specifying name of VM created in above and matching zone
list_vms = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"],
domainid=self.account.domainid,
zoneid=zones_list[0].id,
name=vm_created.name
)
status = validateList(list_vms)
self.assertEquals(
PASS,
status[0],
"Listing VM's by name and zone failed"
)
# Verifying Verifying that the size of the list is 1
self.assertEquals(
1,
len(list_vms),
"Count of listed VM's by name and zone is not as expected"
)
listed_vm = list_vms[0]
# Verifying that the details of the Listed VM are same as the VM deployed above
#Creating expected and actual values dictionaries
expected_dict = {
"id":vm_created.id,
"name":vm_created.name,
"displayname":vm_created.displayname,
"state":vm_created.state,
"zoneid":vm_created.zoneid,
"account":vm_created.account,
"template":vm_created.templateid
}
actual_dict = {
"id":listed_vm.id,
"name":listed_vm.name,
"displayname":listed_vm.displayname,
"state":listed_vm.state,
"zoneid":listed_vm.zoneid,
"account":listed_vm.account,
"template":listed_vm.templateid
}
list_vm_status = self.__verify_values(
expected_dict,
actual_dict
)
self.assertEqual(
True,
list_vm_status,
"Listed VM by Id details are not as expected"
)
# Listing the VM by specifying name of VM created in step3 and non matching zone
list_vms = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"],
domainid=self.account.domainid,
zoneid=zones_list[1].id,
name=vm_created.name
)
self.assertIsNone(
list_vms,
"VM's listed for non matching zone"
)
# Listing the VM by specifying non matching name of VM and matching zone
list_vms = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"],
domainid=self.account.domainid,
zoneid=zones_list[0].id,
name="name"
)
self.assertIsNone(
list_vms,
"VM's listed for non matching zone"
)
self.services["virtual_machine"]["zoneid"] = current_zone
self.services["virtual_machine"]["template"] = current_template
return
@attr(tags=["advanced", "basic", "selfservice"])
def test_10_list_vm_by_zone_name_state(self):
"""
@Desc: Test List VM by Zone.
@Steps:
Step1: Listing all the VMs for a user
Step2: Verifying that the size of the list is 0
Step3: Deploying a VM
Step4: Listing all the VMs for a user again
Step5: Verifying that list size is increased by 1
Step6: Listing the VM by specifying name of VM created in step3 and matching zone and state as Running
Step7: Verifying that the size of the list is 1
Step8: Verifying that the details of the listed VM are same as the VM created in step3
Step9: Listing the VM by specifying name of VM created in step3 and matching zone and state as Stopped
Step10: Verifying that the size of the list is 0
Step11: Listing the VM by name, Zone and account
Step12: Verifying that the size of the list is 1
Step13: Verifying that the details of the listed VM are same as the VM created in step3
"""
# Listing all the VM's for a User
list_vms_before = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"],
domainid=self.account.domainid,
zoneid=self.zone.id,
account=self.account.name
)
self.assertIsNone(
list_vms_before,
"Virtual Machine already exists for newly created user"
)
# Deploying a VM
vm_created = VirtualMachine.create(
self.userapiclient,
self.services["virtual_machine"],
accountid=self.account.name,
domainid=self.account.domainid,
serviceofferingid=self.service_offering.id,
)
self.assertIsNotNone(
vm_created,
"VM creation failed"
)
self.cleanup.append(vm_created)
# Listing all the VMs for a user again for matching zone
list_vms_after = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"],
domainid=self.account.domainid,
zoneid=self.zone.id,
account=self.account.name
)
status = validateList(list_vms_after)
self.assertEquals(
PASS,
status[0],
"VM creation failed"
)
# Verifying that the size of the list is 1
self.assertEquals(
1,
len(list_vms_after),
"VM list count is not matching"
)
# Listing the VM by specifying name of VM created in step3 and matching zone and state as Running
list_vms = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"],
domainid=self.account.domainid,
zoneid=self.zone.id,
name=vm_created.name,
state="Running"
)
status = validateList(list_vms)
self.assertEquals(
PASS,
status[0],
"Listing VM's by name and zone failed"
)
# Verifying Verifying that the size of the list is 1
self.assertEquals(
1,
len(list_vms),
"Count of listed VM's by name, zone and state is not as expected"
)
listed_vm = list_vms[0]
# Verifying that the details of the Listed VM are same as the VM deployed above
#Creating expected and actual values dictionaries
expected_dict = {
"id":vm_created.id,
"name":vm_created.name,
"displayname":vm_created.displayname,
"state":vm_created.state,
"zoneid":vm_created.zoneid,
"account":vm_created.account,
"template":vm_created.templateid
}
actual_dict = {
"id":listed_vm.id,
"name":listed_vm.name,
"displayname":listed_vm.displayname,
"state":listed_vm.state,
"zoneid":listed_vm.zoneid,
"account":listed_vm.account,
"template":listed_vm.templateid
}
list_vm_status = self.__verify_values(
expected_dict,
actual_dict
)
self.assertEqual(
True,
list_vm_status,
"Listed VM by Id details are not as expected"
)
# Listing the VM by specifying name of VM created in step3, zone and State as Stopped
list_vms = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"],
domainid=self.account.domainid,
zoneid=self.zone.id,
name=vm_created.name,
state="Stopped"
)
self.assertIsNone(
list_vms,
"VM's listed for non matching zone"
)
# Listing the VM by name, zone and account
list_vms = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"],
domainid=self.account.domainid,
zoneid=self.zone.id,
name=vm_created.name,
account=self.account.name
)
status = validateList(list_vms)
self.assertEquals(
PASS,
status[0],
"Listing VM's by name, account and zone failed"
)
# Verifying Verifying that the size of the list is 1
self.assertEquals(
1,
len(list_vms),
"Count of listed VM's by name, zone and account is not as expected"
)
listed_vm = list_vms[0]
# Verifying that the details of the Listed VM are same as the VM deployed above
#Creating expected and actual values dictionaries
expected_dict = {
"id":vm_created.id,
"name":vm_created.name,
"displayname":vm_created.displayname,
"state":vm_created.state,
"zoneid":vm_created.zoneid,
"account":vm_created.account,
"template":vm_created.templateid
}
actual_dict = {
"id":listed_vm.id,
"name":listed_vm.name,
"displayname":listed_vm.displayname,
"state":listed_vm.state,
"zoneid":listed_vm.zoneid,
"account":listed_vm.account,
"template":listed_vm.templateid
}
list_vm_status = self.__verify_values(
expected_dict,
actual_dict
)
self.assertEqual(
True,
list_vm_status,
"Listed VM by Id details are not as expected"
)
return
@attr(tags=["advanced", "basic", "provisioning"])
def test_11_register_reset_vm_sshkey(self):
"""
@Desc: Test to verify registering and reset of SSH Key for VM
@Steps:
Step1: Deploying a VM
Step2: Stopping the VM deployed in step1
Step3: Listing all the SSH Key pairs
Step4: Registering a SSH Key pair
Step5: Listing all the SSh Key pairs again
Step6: Verifying that the key pairs list is increased by 1
Step7: Resetting the VM SSH Key to the key pair registered in step4
Step8: Verifying that the registered SSH Key pair is set to the VM
"""
# Listing all the VM's for a User
list_vms_before = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
)
self.assertIsNone(
list_vms_before,
"Virtual Machine already exists for newly created user"
)
# Deploying a VM
vm_created = VirtualMachine.create(
self.userapiclient,
self.services["virtual_machine"],
accountid=self.account.name,
domainid=self.account.domainid,
serviceofferingid=self.service_offering.id,
)
self.assertIsNotNone(
vm_created,
"VM creation failed"
)
self.cleanup.append(vm_created)
# Listing all the VMs for a user again
list_vms_after = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
)
status = validateList(list_vms_after)
self.assertEquals(
PASS,
status[0],
"VM creation failed"
)
# Verifying that the size of the list is 1
self.assertEquals(
1,
len(list_vms_after),
"VM list count is not matching"
)
# Stopping the VM deployed above
vm_created.stop(
self.userapiclient,
forced=True
)
# Listing VM details
list_vm = VirtualMachine.list(
self.userapiclient,
id=vm_created.id
)
status = validateList(list_vm)
self.assertEquals(
PASS,
status[0],
"Listing of VM failed"
)
self.assertEquals(
"Stopped",
list_vm[0].state,
"Stopped VM is not in stopped state"
)
# Listing all the SSH Key pairs
list_keypairs_before = SSHKeyPair.list(
self.userapiclient
)
list_keypairs_before_size = 0
if list_keypairs_before is not None:
list_keypairs_before_size = len(list_keypairs_before)
# Registering new Key pair
new_keypair = SSHKeyPair.register(
self.userapiclient,
name="keypair1",
publickey="ssh-rsa: e6:9a:1e:b5:98:75:88:5d:56:bc:92:7b:43:48:05:b2"
)
self.assertIsNotNone(
new_keypair,
"New Key pair generation failed"
)
self.assertEquals(
"keypair1",
new_keypair.name,
"Key Pair not created with given name"
)
# Listing all the SSH Key pairs again
list_keypairs_after = SSHKeyPair.list(
self.userapiclient
)
status = validateList(list_keypairs_after)
self.assertEquals(
PASS,
status[0],
"Listing of Key pairs failed"
)
# Verifying that list size is increased by 1
self.assertEquals(
list_keypairs_before_size + 1,
len(list_keypairs_after),
"List count is not matching"
)
# Resetting the VM SSH key to the Key pair created above
vm_created.resetSshKey(
self.userapiclient,
keypair=new_keypair.name
)
# Listing VM details again
list_vm = VirtualMachine.list(
self.userapiclient,
id=vm_created.id
)
status = validateList(list_vm)
self.assertEquals(
PASS,
status[0],
"Listing of VM failed"
)
self.assertEquals(
1,
len(list_vm),
"VMs list is not as expected"
)
# Verifying that VM's SSH keypair is set to newly created keypair
self.assertEquals(
new_keypair.name,
list_vm[0].keypair,
"VM is not set to newly created SSH Key pair"
)
return
@attr(tags=["advanced", "provisioning"])
def test_12_vm_nics(self):
"""
@Desc: Test to verify Nics for a VM
@Steps:
Step1: Deploying a VM
Step2: Listing all the Networks
Step3: Verifying that the list size is 1
Step4: Creating 1 network
Step5: Listing all the networks again
Step6: Verifying that the list size is 2
Step7: Verifying that VM deployed in step1 has only 1 nic
and it is same as network listed in step3
Step8: Adding the networks created in step4 to VM deployed in step1
Step9: Verifying that VM deployed in step1 has 2 nics
Step10: Verifying that isdefault is set to true for only 1 nic
Step11: Verifying that isdefault is set to true for the Network created when deployed a VM
Step12: Making the nic created in step4 as default nic
Step13: Verifying that isdefault is set to true for only 1 nic
Step14: Verifying that the isdefault is set to true for the nic created in step4
Step15: Removing the non-default nic from VM
Step16: Verifying that VM deployed in step1 has only 1 nic
"""
# Listing all the VM's for a User
list_vms_before = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
)
self.assertIsNone(
list_vms_before,
"Virtual Machine already exists for newly created user"
)
# Deploying a VM
vm_created = VirtualMachine.create(
self.userapiclient,
self.services["virtual_machine"],
accountid=self.account.name,
domainid=self.account.domainid,
serviceofferingid=self.service_offering.id,
)
self.assertIsNotNone(
vm_created,
"VM creation failed"
)
self.cleanup.append(vm_created)
# Listing all the VMs for a user again
list_vms_after = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
)
status = validateList(list_vms_after)
self.assertEquals(
PASS,
status[0],
"VM creation failed"
)
# Verifying that the size of the list is 1
self.assertEquals(
1,
len(list_vms_after),
"VM list count is not matching"
)
# Listing all the networks before
list_network_before = Network.list(
self.userapiclient,
isdefault="true",
zoneid=self.zone.id,
account=self.account.name,
domainid=self.domain.id
)
status = validateList(list_network_before)
self.assertEquals(
PASS,
status[0],
"Default Network not created when deploying a VM"
)
# Verifying that only 1 network is created while deploying a VM
self.assertEquals(
1,
len(list_network_before),
"More than 1 default network exists"
)
network1 = list_network_before[0]
# Listing Network Offerings
network_offerings_list = NetworkOffering.list(
self.apiClient,
forvpc="false",
guestiptype="Isolated",
state="Enabled",
supportedservices="SourceNat",
zoneid=self.zone.id
)
self.assertIsNotNone(
network_offerings_list,
"Isolated Network Offerings with sourceNat enabled are not found"
)
# Creating one more network
network2 = Network.create(
self.userapiclient,
self.services["network"],
accountid=self.account.name,
domainid=self.domain.id,
networkofferingid=network_offerings_list[0].id,
zoneid=self.zone.id
)
self.assertIsNotNone(
network2,
"Network creation failed"
)
self.cleanup.append(network2)
# Listing all the networks again
list_network_after = Network.list(
self.userapiclient,
zoneid=self.zone.id,
account=self.account.name,
domainid=self.domain.id
)
status = validateList(list_network_after)
self.assertEquals(
PASS,
status[0],
"List of Networks failed"
)
# Verifying that list size is 2
self.assertEquals(
2,
len(list_network_after),
"More than 1 default network exists"
)
# Verifying that VM created is having only 1 nic
vm_nics_before = vm_created.nic
self.assertIsNotNone(
vm_nics_before,
"Nic not found for the VM deployed"
)
self.assertEquals(
1,
len(vm_nics_before),
"VM Nic count is not matching"
)
# Verifying that the nic is same as the default network listed above
self.assertEquals(
network1.id,
vm_nics_before[0].networkid,
"Default NIC for VM is not as expected"
)
# Adding network2 created above to VM
VirtualMachine.add_nic(
vm_created,
self.userapiclient,
network2.id
)
# Listing the Vm details again
list_vms_after = VirtualMachine.list(
self.userapiclient,
id=vm_created.id
)
status = validateList(list_vms_after)
self.assertEquals(
PASS,
status[0],
"Listing of VM failed"
)
vm = list_vms_after[0]
# Verifying that VM nics size is 2 now
vm_nics_after = vm.nic
self.assertIsNotNone(
vm_nics_after,
"Nic not found for the deployed VM"
)
self.assertEquals(
2,
len(vm_nics_after),
"VM NIC's count is not matching"
)
# Verifying that isdefault is set to true for only 1 nic
default_count = 0
for i in range(0, len(vm_nics_after)):
if vm_nics_after[i].isdefault is True:
default_count = default_count + 1
default_nic = vm_nics_after[i]
else:
non_default_nic = vm_nics_after[i]
self.assertEquals(
1,
default_count,
"Default NIC count is not matching"
)
# Verifying that default NIC is same the network created when VM is deployed
self.assertEquals(
network1.id,
default_nic.networkid,
"Default NIC is not matching for VM"
)
# Updating network 2 as default NIC
vm_created.update_default_nic(
self.userapiclient,
non_default_nic.id
)
# Listing the Vm details again
list_vms_after = VirtualMachine.list(
self.userapiclient,
id=vm_created.id
)
status = validateList(list_vms_after)
self.assertEquals(
PASS,
status[0],
"Listing of VM failed"
)
vm = list_vms_after[0]
# Verifying that VM nics size is 2 now
vm_nics_after = vm.nic
self.assertIsNotNone(
vm_nics_after,
"Nic not found for the deployed VM"
)
self.assertEquals(
2,
len(vm_nics_after),
"VM NIC's count is not matching"
)
# Verifying that isdefault is set to true for only 1 nic
default_count = 0
for i in range(0, len(vm_nics_after)):
if vm_nics_after[i].isdefault is True:
default_count = default_count + 1
default_nic = vm_nics_after[i]
else:
non_default_nic = vm_nics_after[i]
self.assertEquals(
1,
default_count,
"Default NIC count is not matching"
)
# Verifying that default NIC is same the newly updated network (network 2)
self.assertEquals(
network2.id,
default_nic.networkid,
"Default NIC is not matching for VM"
)
# Deleting non default NIC
vm_created.remove_nic(
self.userapiclient,
non_default_nic.id
)
# Listing the Vm details again
list_vms_after = VirtualMachine.list(
self.userapiclient,
id=vm_created.id
)
status = validateList(list_vms_after)
self.assertEquals(
PASS,
status[0],
"Listing of VM failed"
)
vm = list_vms_after[0]
# Verifying that VM nics size is 1 now
vm_nics_after = vm.nic
self.assertIsNotNone(
vm_nics_after,
"Nic not found for the deployed VM"
)
self.assertEquals(
1,
len(vm_nics_after),
"VM NIC's count is not matching"
)
# Verifying the nic network is same as the default nic network
self.assertEquals(
network2.id,
vm_nics_after[0].networkid,
"VM NIC is not same as expected"
)
return
class TestInstances(cloudstackTestCase):
@classmethod
def setUpClass(cls):
try:
cls._cleanup = []
cls.testClient = super(TestInstances, cls).getClsTestClient()
cls.api_client = cls.testClient.getApiClient()
cls.services = cls.testClient.getParsedTestDataConfig()
# Get Domain, Zone, Template
cls.domain = get_domain(cls.api_client)
cls.zone = get_zone(cls.api_client)
cls.template = get_template(
cls.api_client,
cls.zone.id,
cls.services["ostype"]
)
if cls.zone.localstorageenabled:
cls.storagetype = 'local'
cls.services["service_offerings"]["tiny"]["storagetype"] = 'local'
cls.services["disk_offering"]["storagetype"] = 'local'
else:
cls.storagetype = 'shared'
cls.services["service_offerings"]["tiny"]["storagetype"] = 'shared'
cls.services["disk_offering"]["storagetype"] = 'shared'
cls.services['mode'] = cls.zone.networktype
cls.services["virtual_machine"]["hypervisor"] = cls.testClient.getHypervisorInfo()
cls.services["virtual_machine"]["zoneid"] = cls.zone.id
cls.services["virtual_machine"]["template"] = cls.template.id
cls.services["custom_volume"]["zoneid"] = cls.zone.id
# Creating Disk offering, Service Offering and Account
cls.disk_offering = DiskOffering.create(
cls.api_client,
cls.services["disk_offering"]
)
cls._cleanup.append(cls.disk_offering)
cls.service_offering = ServiceOffering.create(
cls.api_client,
cls.services["service_offerings"]["tiny"]
)
cls._cleanup.append(cls.service_offering)
cls.account = Account.create(
cls.api_client,
cls.services["account"],
domainid=cls.domain.id
)
# Getting authentication for user in newly created Account
cls.user = cls.account.user[0]
cls.userapiclient = cls.testClient.getUserApiClient(cls.user.username, cls.domain.name)
# Updating resource Limits
for i in range(0,12):
Resources.updateLimit(
cls.api_client,
account=cls.account.name,
domainid=cls.domain.id,
max=-1,
resourcetype=i
)
cls._cleanup.append(cls.account)
except Exception as e:
cls.tearDownClass()
raise Exception("Warning: Exception in setup : %s" % e)
return
def setUp(self):
self.apiClient = self.testClient.getApiClient()
self.cleanup = []
def tearDown(self):
#Clean up, terminate the created resources
cleanup_resources(self.apiClient, self.cleanup)
return
@classmethod
def tearDownClass(cls):
try:
cleanup_resources(cls.api_client, cls._cleanup)
except Exception as e:
raise Exception("Warning: Exception during cleanup : %s" % e)
return
def __verify_values(self, expected_vals, actual_vals):
"""
@Desc: Function to verify expected and actual values
@Steps:
Step1: Initializing return flag to True
Step1: Verifying length of expected and actual dictionaries is matching.
If not matching returning false
Step2: Listing all the keys from expected dictionary
Step3: Looping through each key from step2 and verifying expected and actual dictionaries have same value
If not making return flag to False
Step4: returning the return flag after all the values are verified
"""
return_flag = True
if len(expected_vals) != len(actual_vals):
return False
keys = expected_vals.keys()
for i in range(0, len(expected_vals)):
exp_val = expected_vals[keys[i]]
act_val = actual_vals[keys[i]]
if exp_val == act_val:
return_flag = return_flag and True
else:
return_flag = return_flag and False
self.debug("expected Value: %s, is not matching with actual value: %s" % (
exp_val,
act_val
))
return return_flag
@attr(tags=["advanced", "basic", "provisioning"])
def test_13_attach_detach_iso(self):
"""
@Desc: Test Attach ISO to VM and Detach ISO from VM.
@Steps:
Step1: Listing all the VMs for a user
Step2: Verifying that the size of the list is 0
Step3: Deploying a VM
Step4: Listing all the VMs for a user again
Step5: Verifying that list size is increased by 1
Step6: Listing all the ready ISO's
Step7: If size of the list is >= 1 continuing to next steps
Step8: Attaching the ISO listed to VM deployed in Step3
Step9: Verifying that the attached ISO details are associated with VM
Step10: Detaching the ISO attached in step8
Step11: Verifying that detached ISO details are not associated with VM
"""
# Listing all the VM's for a User
list_vms_before = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"],
domainid=self.account.domainid,
zoneid=self.zone.id,
account=self.account.name
)
self.assertIsNone(
list_vms_before,
"Virtual Machine already exists for newly created user"
)
# Deploying a VM
vm_created = VirtualMachine.create(
self.userapiclient,
self.services["virtual_machine"],
accountid=self.account.name,
domainid=self.account.domainid,
serviceofferingid=self.service_offering.id,
)
self.assertIsNotNone(
vm_created,
"VM creation failed"
)
self.cleanup.append(vm_created)
# Listing all the VMs for a user again for matching zone
list_vms_after = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"],
domainid=self.account.domainid,
zoneid=self.zone.id,
account=self.account.name
)
status = validateList(list_vms_after)
self.assertEquals(
PASS,
status[0],
"VM creation failed"
)
# Verifying that the size of the list is 1
self.assertEquals(
1,
len(list_vms_after),
"VM list count is not matching"
)
# Listing the ISO's in ready state
isos_list = Iso.list(
self.userapiclient,
isready="true",
isofilter="executable",
zoneid=self.zone.id
)
# Verifying if size of the list is >= 1
if isos_list is not None:
iso_toattach = isos_list[0]
# Attaching ISO listed to VM deployed
VirtualMachine.attach_iso(
vm_created,
self.userapiclient,
iso_toattach
)
list_vm = VirtualMachine.list(
self.userapiclient,
id=vm_created.id
)
status = validateList(list_vm)
self.assertEquals(
PASS,
status[0],
"VM listing by Id failed"
)
# Verifying that attached ISO details are present in VM
self.assertEquals(
iso_toattach.name,
list_vm[0].isoname,
"Attached ISO name is not matching"
)
self.assertEquals(
iso_toattach.displaytext,
list_vm[0].isodisplaytext,
"Attached ISO display is not matching"
)
# Detaching ISO from VM
VirtualMachine.detach_iso(
vm_created,
self.userapiclient
)
list_vm = VirtualMachine.list(
self.userapiclient,
id=vm_created.id
)
status = validateList(list_vm)
self.assertEquals(
PASS,
status[0],
"VM listing by Id failed"
)
# Verifying that ISO details are NOT present in VM
self.assertIsNone(
list_vm[0].isoname,
"ISO not detached from VM"
)
else:
self.fail("Executable ISO in Ready is not found in the given setup")
return
@attr(tags=["advanced", "basic", "provisioning"])
def test_14_vm_snapshot_pagination(self):
"""
@Desc: Test VM Snapshots pagination.
@Steps:
Step1: Deploying a VM
Step2: Listing all the Snapshots of the VM deployed in Step 1
Step3: Verifying that the list size is 0
Step4: Creating (pagesize + 1) number of Snapshots for the VM
Step5: Listing all the Snapshots of the VM deployed in Step 1
Step6: Verifying that the list size is (pagesize + 1)
Step7: Listing all the VM snapshots in Page 1 with page size
Step8: Verifying that size of the list is same as page size
Step9: Listing all the VM snapshots in Page 2 with page size
Step10: Verifying that size of the list is 1
Step11: Deleting VM snapshot in page 2
Step12: Listing all the VM snapshots in Page 2 with page size
Step13: Verifying that size of the list is 0
"""
# Listing all the VM's for a User
list_vms_before = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
)
self.assertIsNone(
list_vms_before,
"Virtual Machine already exists for newly created user"
)
# Deploying a VM
vm_created = VirtualMachine.create(
self.userapiclient,
self.services["virtual_machine"],
accountid=self.account.name,
domainid=self.account.domainid,
serviceofferingid=self.service_offering.id,
)
self.assertIsNotNone(
vm_created,
"VM creation failed"
)
self.cleanup.append(vm_created)
# Listing all the VMs for a user again
list_vms_after = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
)
status = validateList(list_vms_after)
self.assertEquals(
PASS,
status[0],
"VM creation failed"
)
# Verifying that the size of the list is 1
self.assertEquals(
1,
len(list_vms_after),
"VM list count is not matching"
)
# Listing all the VM snapshots for VM deployed above
list_snapshots_before = VmSnapshot.list(
self.userapiclient,
listall=self.services["listall"],
virtualmachineid=vm_created.id
)
# Verifying that the VM snapshot list is None
self.assertIsNone(
list_snapshots_before,
"Snapshots already exists for newly created VM"
)
# Creating pagesize + 1 number of VM snapshots
for i in range(0, (self.services["pagesize"] + 1)):
snapshot_created = VmSnapshot.create(
self.userapiclient,
vm_created.id,
)
self.assertIsNotNone(
snapshot_created,
"Snapshot creation failed"
)
# Listing all the VM snapshots for VM again
list_snapshots_after = VmSnapshot.list(
self.userapiclient,
listall=self.services["listall"],
virtualmachineid=vm_created.id
)
status = validateList(list_snapshots_after)
self.assertEquals(
PASS,
status[0],
"VM Snapshots creation failed"
)
self.assertEquals(
self.services["pagesize"] + 1,
len(list_snapshots_after),
"Count of VM Snapshots is not matching"
)
# Listing all the VM snapshots in Page 1 with page size
list_snapshots_page1 = VmSnapshot.list(
self.userapiclient,
listall=self.services["listall"],
virtualmachineid=vm_created.id,
page=1,
pagesize=self.services["pagesize"],
)
status = validateList(list_snapshots_page1)
self.assertEquals(
PASS,
status[0],
"Listing of VM Snapshots failed in page 1"
)
# Verifying the list size is equal to pagesize
self.assertEquals(
self.services["pagesize"],
len(list_snapshots_page1),
"List VM Snapshot count is not matching in page 1"
)
# Listing all the VM Snapshots in page 2
list_snapshots_page2 = VmSnapshot.list(
self.userapiclient,
listall=self.services["listall"],
virtualmachineid=vm_created.id,
page=2,
pagesize=self.services["pagesize"],
)
status = validateList(list_snapshots_page2)
self.assertEquals(
PASS,
status[0],
"Listing of VM Snapshots failed in page 2"
)
# Verifying the list size is equal to 1
self.assertEquals(
1,
len(list_snapshots_page2),
"List VM Snapshot count is not matching in page 2"
)
# Deleting VM Snapshot in page 2
VmSnapshot.deleteVMSnapshot(
self.userapiclient,
snapshot_created.id
)
# Listing all the VM Snapshots in page 2 again
list_snapshots_page2 = VmSnapshot.list(
self.userapiclient,
listall=self.services["listall"],
virtualmachineid=vm_created.id,
page=2,
pagesize=self.services["pagesize"],
)
# Verifying the list size is equal to 0
self.assertIsNone(
list_snapshots_page2,
"VM Snapshots exists in page 2"
)
return
@attr(tags=["advanced", "basic", "provisioning"])
def test_15_revert_vm_to_snapshot(self):
"""
@Desc: Test Revert VM to Snapshot functionality.
@Steps:
Step1: Deploying a VM
Step2: Listing all the Snapshots of the VM deployed in Step 1
Step3: Verifying that the list size is 0
Step4: Creating 2 Snapshots for the VM
Step5: Listing all the Snapshots of the VM deployed in Step 1
Step6: Verifying that the list size is 2
Step7: Verifying that only 1 snapshot is have current flag set to True
Step8: Verifying that the VM snapshot with current flag set as true is the latest snapshot created
Step9: Reverting VM to snapshot having current flag as false (non current snapshot)
Step10: Verifying that only 1 VM snapshot is having current flag set as true.
Step11: Verifying that the VM Snapshot with current flag set to true is the reverted snapshot in Step 8
"""
# Listing all the VM's for a User
list_vms_before = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
)
self.assertIsNone(
list_vms_before,
"Virtual Machine already exists for newly created user"
)
# Deploying a VM
vm_created = VirtualMachine.create(
self.userapiclient,
self.services["virtual_machine"],
accountid=self.account.name,
domainid=self.account.domainid,
serviceofferingid=self.service_offering.id,
)
self.assertIsNotNone(
vm_created,
"VM creation failed"
)
self.cleanup.append(vm_created)
# Listing all the VMs for a user again
list_vms_after = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
)
status = validateList(list_vms_after)
self.assertEquals(
PASS,
status[0],
"VM creation failed"
)
# Verifying that the size of the list is 1
self.assertEquals(
1,
len(list_vms_after),
"VM list count is not matching"
)
# Listing all the VM snapshots for VM deployed above
list_snapshots_before = VmSnapshot.list(
self.userapiclient,
listall=self.services["listall"],
virtualmachineid=vm_created.id
)
# Verifying that the VM snapshot list is None
self.assertIsNone(
list_snapshots_before,
"Snapshots already exists for newly created VM"
)
# Creating 2 of VM snapshots
snapshot1 = VmSnapshot.create(
self.userapiclient,
vm_created.id,
)
self.assertIsNotNone(
snapshot1,
"Snapshot creation failed"
)
snapshot2 = VmSnapshot.create(
self.userapiclient,
vm_created.id,
)
self.assertIsNotNone(
snapshot2,
"Snapshot creation failed"
)
# Listing all the VM snapshots for VM again
list_snapshots_after = VmSnapshot.list(
self.userapiclient,
listall=self.services["listall"],
virtualmachineid=vm_created.id
)
status = validateList(list_snapshots_after)
self.assertEquals(
PASS,
status[0],
"VM Snapshots creation failed"
)
self.assertEquals(
2,
len(list_snapshots_after),
"Count of VM Snapshots is not matching"
)
# Verifying that only 1 snapshot is having current flag set to true
# and that snapshot is the latest snapshot created (snapshot2)
current_count = 0
for i in range(0, len(list_snapshots_after)):
if(list_snapshots_after[i].current is True):
current_count = current_count + 1
current_snapshot = list_snapshots_after[i]
self.assertEquals(
1,
current_count,
"count of VM Snapshot with current flag as true is not matching"
)
self.assertEquals(
snapshot2.id,
current_snapshot.id,
"Latest snapshot taken is not marked as current"
)
# Reverting the VM to Snapshot 1
VmSnapshot.revertToSnapshot(
self.userapiclient,
snapshot1.id
)
# Listing the VM snapshots again
list_snapshots_after = VmSnapshot.list(
self.userapiclient,
listall=self.services["listall"],
virtualmachineid=vm_created.id
)
status = validateList(list_snapshots_after)
self.assertEquals(
PASS,
status[0],
"VM Snapshots creation failed"
)
self.assertEquals(
2,
len(list_snapshots_after),
"Count of VM Snapshots is not matching"
)
# Verifying that only 1 snapshot is having current flag set to true
# and that snapshot is snapshot1
current_count = 0
for i in range(0, len(list_snapshots_after)):
if(list_snapshots_after[i].current is True):
current_count = current_count + 1
current_snapshot = list_snapshots_after[i]
self.assertEquals(
1,
current_count,
"count of VM Snapshot with current flag as true is not matching"
)
self.assertEquals(
snapshot1.id,
current_snapshot.id,
"Current flag was set properly after reverting the VM to snapshot"
)
return
@attr(tags=["advanced", "basic", "selfservice"])
def test_16_list_vm_volumes_pagination(self):
"""
@Desc: Test to verify pagination of Volumes for a VM
@Steps:
Step1: Deploying a VM
Step2: Listing all the Volumes of the VM deployed in Step 1
Step3: Verifying that the list size is 1
Step4: Creating page size number of volumes
Step5: Attaching all the volumes created in step4 to VM deployed in Step1
Step6: Listing all the Volumes for the VM in step1
Step7: Verifying that the list size is equal to page size + 1
Step8: Listing all the volumes of VM in page 1
Step9: Verifying that the list size is equal to page size
Step10: Listing all the Volumes in Page 2
Step11: Verifying that the list size is 1
Step12: Detaching the volume from the VM
Step13: Listing all the Volumes in Page 2
Step14: Verifying that list size is 0
"""
# Listing all the VM's for a User
list_vms_before = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
)
self.assertIsNone(
list_vms_before,
"Virtual Machine already exists for newly created user"
)
# Deploying a VM
vm_created = VirtualMachine.create(
self.userapiclient,
self.services["virtual_machine"],
accountid=self.account.name,
domainid=self.account.domainid,
serviceofferingid=self.service_offering.id,
)
self.assertIsNotNone(
vm_created,
"VM creation failed"
)
self.cleanup.append(vm_created)
# Listing all the VMs for a user again
list_vms_after = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
)
status = validateList(list_vms_after)
self.assertEquals(
PASS,
status[0],
"VM creation failed"
)
# Verifying that the size of the list is 1
self.assertEquals(
1,
len(list_vms_after),
"VM list count is not matching"
)
# Listing all the Volumes for the VM deployed
list_volumes_before = Volume.list(
self.userapiclient,
listall=self.services["listall"],
virtualmachineid=vm_created.id
)
status = validateList(list_volumes_before)
self.assertEquals(
PASS,
status[0],
"Root volume is not created for VM deployed"
)
# Verifying the size of the list is 1
self.assertEquals(
1,
len(list_volumes_before),
"Volumes count is not matching"
)
# Creating Page size number of volumes
for i in range(0, self.services["pagesize"]):
volume_created = Volume.create(
self.userapiclient,
self.services["volume"],
zoneid=self.zone.id,
diskofferingid=self.disk_offering.id
)
self.assertIsNotNone(
volume_created,
"Volume is not created"
)
self.cleanup.append(volume_created)
# Attaching all the volumes created to VM
vm_created.attach_volume(
self.userapiclient,
volume_created
)
# List all the volumes for the VM again
list_volumes_after = Volume.list(
self.userapiclient,
listall=self.services["listall"],
virtualmachineid=vm_created.id
)
status = validateList(list_volumes_after)
self.assertEquals(
PASS,
status[0],
"Volumes are not listed"
)
# Verifying that size of the list is equal to page size + 1
self.assertEquals(
self.services["pagesize"] + 1,
len(list_volumes_after),
"VM's volume count is not matching"
)
# Listing all the volumes for a VM in page 1
list_volumes_page1 = Volume.list(
self.userapiclient,
listall=self.services["listall"],
virtualmachineid=vm_created.id,
page=1,
pagesize=self.services["pagesize"]
)
status = validateList(list_volumes_page1)
self.assertEquals(
PASS,
status[0],
"Volumes not listed in page1"
)
# Verifying that list size is equal to page size
self.assertEquals(
self.services["pagesize"],
len(list_volumes_page1),
"VM's volume count is not matching in page 1"
)
# Listing all the volumes for a VM in page 2
list_volumes_page2 = Volume.list(
self.userapiclient,
listall=self.services["listall"],
virtualmachineid=vm_created.id,
page=2,
pagesize=self.services["pagesize"]
)
status = validateList(list_volumes_page2)
self.assertEquals(
PASS,
status[0],
"Volumes not listed in page2"
)
# Verifying that list size is equal to 1
self.assertEquals(
1,
len(list_volumes_page2),
"VM's volume count is not matching in page 1"
)
# Detaching 1 volume from VM
vm_created.detach_volume(
self.userapiclient,
volume_created
)
# Listing all the volumes for a VM in page 2 again
list_volumes_page2 = Volume.list(
self.userapiclient,
listall=self.services["listall"],
virtualmachineid=vm_created.id,
page=2,
pagesize=self.services["pagesize"]
)
# Verifying that there are no volumes present in page 2
self.assertIsNone(
list_volumes_page2,
"Volumes listed in page 2"
)
return
@attr(tags=["advanced", "basic", "provisioning"])
def test_17_running_vm_scaleup(self):
"""
@Desc: Test to verify change service for Running VM
@Steps:
Step1: Checking if dynamic scaling of virtual machines is enabled in zone and template.
If yes then continuing.
If not then printing message that scale up is not possible for Running VM
Step2: Deploying a VM
Step3: Listing all the existing service offerings
Step4: If there is a matching Service Offering for scale-up of running VM
use that service offering. If not create one service offering for scale up.
Step5: Perform change service (scale up) the Running VM deployed in step1
Step6: Verifying that VM's service offerings is changed
"""
# Checking if Dynamic scaling of VM is supported or not
list_config = Configurations.list(
self.apiClient,
zoneid=self.zone.id,
name="enable.dynamic.scale.vm"
)
status = validateList(list_config)
self.assertEquals(
PASS,
status[0],
"Listing of configuration failed"
)
# Checking if dynamic scaling is allowed in Zone and Template
if not ((list_config[0].value is True) and (self.template.isdynamicallyscalable)):
self.debug("Scale up of Running VM is not possible as Zone/Template does not support")
else:
# Listing all the VM's for a User
list_vms_before = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
)
self.assertIsNone(
list_vms_before,
"Virtual Machine already exists for newly created user"
)
# Deploying a VM
vm_created = VirtualMachine.create(
self.userapiclient,
self.services["virtual_machine"],
accountid=self.account.name,
domainid=self.account.domainid,
serviceofferingid=self.service_offering.id,
)
self.assertIsNotNone(
vm_created,
"VM creation failed"
)
self.cleanup.append(vm_created)
# Listing details of current Service Offering
vm_so_list = ServiceOffering.list(
self.userapiclient,
id=vm_created.serviceofferingid
)
status = validateList(vm_so_list)
self.assertEquals(
PASS,
status[0],
"Listing of VM Service offering failed"
)
current_so = vm_so_list[0]
# Listing all the VMs for a user again
list_vms_after = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
)
status = validateList(list_vms_after)
self.assertEquals(
PASS,
status[0],
"VM creation failed"
)
# Verifying that the size of the list is 1
self.assertEquals(
1,
len(list_vms_after),
"VM list count is not matching"
)
# Listing all the existing service offerings
service_offerings_list = ServiceOffering.list(
self.userapiclient,
virtualmachineid=vm_created.id
)
# Verifying if any Service offering available for scale up of VM
so_exists = False
if service_offerings_list is not None:
for i in range(0, len(service_offerings_list)):
if not ((current_so.cpunumber > service_offerings_list[i].cpunumber or\
current_so.cpuspeed > service_offerings_list[i].cpuspeed or\
current_so.memory > service_offerings_list[i].memory) or\
(current_so.cpunumber == service_offerings_list[i].cpunumber and\
current_so.cpuspeed == service_offerings_list[i].cpuspeed and\
current_so.memory == service_offerings_list[i].memory)):
if(current_so.storagetype == service_offerings_list[i].storagetype):
so_exists = True
new_so = service_offerings_list[i]
break
# If service offering does not exists, then creating one service offering for scale up
if not so_exists:
self.services["service_offerings"]["small"]["storagetype"] = current_so.storagetype
new_so = ServiceOffering.create(
self.apiClient,
self.services["service_offerings"]["small"]
)
self.cleanup.append(new_so)
# Scaling up the VM
vm_created.scale_virtualmachine(
self.userapiclient,
new_so.id
)
# Listing VM details again
list_vms_after = VirtualMachine.list(
self.userapiclient,
id=vm_created.id
)
status = validateList(list_vms_after)
self.assertEquals(
PASS,
status[0],
"Listing of VM failed"
)
self.assertEquals(
1,
len(list_vms_after),
"VMs list is not as expected"
)
# Verifying that VM's service offerings is changed
self.assertEquals(
new_so.id,
list_vms_after[0].serviceofferingid,
"VM is not containing New Service Offering"
)
return
@attr(tags=["advanced", "basic", "provisioning"])
def test_18_stopped_vm_change_service(self):
"""
@Desc: Test to verify change service for Stopped VM
@Steps:
Step1: Deploying a VM
Step2: Stopping the VM deployed in step1
Step3: Listing all the existing service offerings
Step4: If there is a matching Service Offering for change service of stopped VM
use that service offering. If not create one service offering for change service.
Step5: Perform change service for the Stopped VM
Step6: Verifying that VM's service offerings is changed
"""
# Listing all the VM's for a User
list_vms_before = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
)
self.assertIsNone(
list_vms_before,
"Virtual Machine already exists for newly created user"
)
# Deploying a VM
vm_created = VirtualMachine.create(
self.userapiclient,
self.services["virtual_machine"],
accountid=self.account.name,
domainid=self.account.domainid,
serviceofferingid=self.service_offering.id,
)
self.assertIsNotNone(
vm_created,
"VM creation failed"
)
self.cleanup.append(vm_created)
# Listing details of current Service Offering
vm_so_list = ServiceOffering.list(
self.userapiclient,
id=vm_created.serviceofferingid
)
status = validateList(vm_so_list)
self.assertEquals(
PASS,
status[0],
"Listing of VM Service offering failed"
)
current_so = vm_so_list[0]
# Listing all the VMs for a user again
list_vms_after = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
)
status = validateList(list_vms_after)
self.assertEquals(
PASS,
status[0],
"VM creation failed"
)
# Verifying that the size of the list is 1
self.assertEquals(
1,
len(list_vms_after),
"VM list count is not matching"
)
# Stopping the VM deployed above
vm_created.stop(
self.userapiclient,
forced=True
)
# Listing VM details
list_vm = VirtualMachine.list(
self.userapiclient,
id=vm_created.id
)
status = validateList(list_vms_after)
self.assertEquals(
PASS,
status[0],
"Listing of VM failed"
)
self.assertEquals(
"Stopped",
list_vm[0].state,
"Stopped VM is not in stopped state"
)
# Listing all the service offerings
service_offerings_list = ServiceOffering.list(
self.userapiclient,
virtualmachineid=vm_created.id
)
# Verifying if any Service offering available for change service of VM
so_exists = False
if service_offerings_list is not None:
for i in range(0, len(service_offerings_list)):
if ((current_so.id != service_offerings_list[i].id) and\
(current_so.storagetype == service_offerings_list[i].storagetype)):
so_exists = True
new_so = service_offerings_list[i]
break
# If service offering does not exists, then creating one service offering for scale up
if not so_exists:
self.services["service_offerings"]["small"]["storagetype"] = current_so.storagetype
new_so = ServiceOffering.create(
self.apiClient,
self.services["service_offerings"]["small"]
)
self.cleanup.append(new_so)
# Changing service for the VM
vm_created.scale_virtualmachine(
self.userapiclient,
new_so.id
)
# Listing VM details again
list_vm = VirtualMachine.list(
self.userapiclient,
id=vm_created.id
)
status = validateList(list_vm)
self.assertEquals(
PASS,
status[0],
"Listing of VM failed"
)
self.assertEquals(
1,
len(list_vm),
"VMs list is not as expected"
)
# Verifying that VM's service offerings is changed
self.assertEquals(
new_so.id,
list_vm[0].serviceofferingid,
"VM is not containing New Service Offering"
)
return
@attr(tags=["advanced", "basic", "provisioning"])
def test_19_create_reset_vm_sshkey(self):
"""
@Desc: Test to verify creation and reset of SSH Key for VM
@Steps:
Step1: Deploying a VM
Step2: Stopping the VM deployed in step1
Step3: Listing all the SSH Key pairs
Step4: Creating a new SSH Key pair
Step5: Listing all the SSh Key pairs again
Step6: Verifying that the key pairs list is increased by 1
Step7: Resetting the VM SSH Key to the key pair created in step4
Step8: Verifying that the new SSH Key pair is set to the VM
"""
# Listing all the VM's for a User
list_vms_before = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
)
self.assertIsNone(
list_vms_before,
"Virtual Machine already exists for newly created user"
)
# Deploying a VM
vm_created = VirtualMachine.create(
self.userapiclient,
self.services["virtual_machine"],
accountid=self.account.name,
domainid=self.account.domainid,
serviceofferingid=self.service_offering.id,
)
self.assertIsNotNone(
vm_created,
"VM creation failed"
)
self.cleanup.append(vm_created)
# Listing all the VMs for a user again
list_vms_after = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
)
status = validateList(list_vms_after)
self.assertEquals(
PASS,
status[0],
"VM creation failed"
)
# Verifying that the size of the list is 1
self.assertEquals(
1,
len(list_vms_after),
"VM list count is not matching"
)
# Stopping the VM deployed above
vm_created.stop(
self.userapiclient,
forced=True
)
# Listing VM details
list_vm = VirtualMachine.list(
self.userapiclient,
id=vm_created.id
)
status = validateList(list_vm)
self.assertEquals(
PASS,
status[0],
"Listing of VM failed"
)
self.assertEquals(
"Stopped",
list_vm[0].state,
"Stopped VM is not in stopped state"
)
# Listing all the SSH Key pairs
list_keypairs_before = SSHKeyPair.list(
self.userapiclient
)
list_keypairs_before_size = 0
if list_keypairs_before is not None:
list_keypairs_before_size = len(list_keypairs_before)
# Creating a new Key pair
new_keypair = SSHKeyPair.create(
self.userapiclient,
name="keypair1",
account=self.account.name,
domainid=self.domain.id
)
self.assertIsNotNone(
new_keypair,
"New Key pair generation failed"
)
self.assertEquals(
"keypair1",
new_keypair.name,
"Key Pair not created with given name"
)
# Listing all the SSH Key pairs again
list_keypairs_after = SSHKeyPair.list(
self.userapiclient
)
status = validateList(list_keypairs_after)
self.assertEquals(
PASS,
status[0],
"Listing of Key pairs failed"
)
# Verifying that list size is increased by 1
self.assertEquals(
list_keypairs_before_size + 1,
len(list_keypairs_after),
"List count is not matching"
)
# Resetting the VM SSH key to the Key pair created above
vm_created.resetSshKey(
self.userapiclient,
keypair=new_keypair.name
)
# Listing VM details again
list_vm = VirtualMachine.list(
self.userapiclient,
id=vm_created.id
)
status = validateList(list_vm)
self.assertEquals(
PASS,
status[0],
"Listing of VM failed"
)
self.assertEquals(
1,
len(list_vm),
"VMs list is not as expected"
)
# Verifying that VM's SSH keypair is set to newly created keypair
self.assertEquals(
new_keypair.name,
list_vm[0].keypair,
"VM is not set to newly created SSH Key pair"
)
return
@attr(tags=["advanced", "basic", "selfservice"])
def test_20_update_vm_displayname_group(self):
"""
@Desc: Test to verify Update VM details
@Steps:
Step1: List all the VM's for a user
Step2: Deploy a VM with all parameters
Step3: Listing all the VM's again for the user
Step4: Verifying that list size is increased by 1
Step5: Updating VM details - displayname, group
Step6: Listing the VM deployed in step 2 by ID
Step7: Verifying that displayname, group details of the VM are updated
"""
# Listing all the VM's for a User
list_vms_before = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
)
self.assertIsNone(
list_vms_before,
"Virtual Machine already exists for newly created user"
)
self.services["virtual_machine"]["keyboard"] = "us"
# Deploying a VM
vm_created = VirtualMachine.create(
self.userapiclient,
self.services["virtual_machine"],
accountid=self.account.name,
domainid=self.account.domainid,
serviceofferingid=self.service_offering.id,
group="groupName"
)
self.assertIsNotNone(
vm_created,
"VM creation failed"
)
self.cleanup.append(vm_created)
# Verifying the displayname and group details for deployed VM
self.assertEquals(
self.services["virtual_machine"]["displayname"],
vm_created.displayname,
"Display name of VM is not as expected"
)
self.assertEquals(
"groupName",
vm_created.group,
"Group of VM is not as expected"
)
# Listing all the VMs for a user again
list_vms_after = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
)
status = validateList(list_vms_after)
self.assertEquals(
PASS,
status[0],
"VM creation failed"
)
# Verifying that the size of the list is 1
self.assertEquals(
1,
len(list_vms_after),
"VM list count is not matching"
)
# Updating the VM details - displayname and group
vm_created.update(
self.userapiclient,
displayname="DisplayName",
group="Group",
haenable=False
)
# Listing VM details again
list_vm = VirtualMachine.list(
self.userapiclient,
id=vm_created.id,
)
status = validateList(list_vm)
self.assertEquals(
PASS,
status[0],
"Listing of VM by Id failed"
)
self.assertEquals(
1,
len(list_vm),
"Count of List VM by Id is not matching"
)
# Verifying that displayname and group details are updated
self.assertEquals(
"DisplayName",
list_vm[0].displayname,
"Displayname of VM is not updated"
)
self.assertEquals(
"Group",
list_vm[0].group,
"Group of VM is not updated"
)
return
@attr(tags=["advanced", "basic", "provisioning"])
def test_21_restore_vm(self):
"""
@Desc: Test to verify Restore VM
@Steps:
Step1: List all the VM's for a user
Step2: Deploy a VM with all parameters
Step3: Listing all the VM's again for the user
Step4: Verifying that list size is increased by 1
Step5: Restoring the VM deployed in step2
Step6: Verifying that restored VM details are same as the VM deployed in step2
"""
# Listing all the VM's for a User
list_vms_before = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
)
self.assertIsNone(
list_vms_before,
"Virtual Machine already exists for newly created user"
)
# Deploying a VM
vm_created = VirtualMachine.create(
self.userapiclient,
self.services["virtual_machine"],
accountid=self.account.name,
domainid=self.account.domainid,
serviceofferingid=self.service_offering.id,
)
self.assertIsNotNone(
vm_created,
"VM creation failed"
)
self.cleanup.append(vm_created)
# Listing all the VMs for a user again
list_vms_after = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
)
status = validateList(list_vms_after)
self.assertEquals(
PASS,
status[0],
"VM creation failed"
)
# Verifying that the size of the list is 1
self.assertEquals(
1,
len(list_vms_after),
"VM list count is not matching"
)
# Restoring the VM
restored_vm = vm_created.restore(self.userapiclient)
self.assertIsNotNone(
restored_vm,
"VM restore failed"
)
# Verifying the restored VM details
expected_dict = {
"id":vm_created.id,
"name":vm_created.name,
"displayname":vm_created.displayname,
"state":vm_created.state,
"zoneid":vm_created.zoneid,
"account":vm_created.account,
"template":vm_created.templateid
}
actual_dict = {
"id":restored_vm.id,
"name":restored_vm.name,
"displayname":restored_vm.displayname,
"state":restored_vm.state,
"zoneid":restored_vm.zoneid,
"account":restored_vm.account,
"template":restored_vm.templateid
}
restored_vm_status = self.__verify_values(
expected_dict,
actual_dict
)
self.assertEqual(
True,
restored_vm_status,
"Restored VM details are not as expected"
)
return
@attr(tags=["advanced", "selfservice"])
def test_22_deploy_vm_multiple_networks(self):
"""
@Desc: Test to verify deploy VM with multiple networks
@Steps:
Step1: List all the networks for user
Step2: If size of list networks is greater than 2 then get all the networks id's
Else create 2 networks and get network id's
Step3: List all the VM's for a user
Step4: Deploy a VM with multiple network id's
Step5: Listing all the VM's again for the user
Step6: Verifying that list size is increased by 1
Step7: Verify that VM is associated with multiple networks
"""
# Listing all the networks available
networks_list_before = Network.list(
self.userapiclient,
listall=self.services["listall"]
)
networks_list_size = 0
if networks_list_before is not None:
networks_list_size = len(networks_list_before)
# Listing Network Offerings
network_offerings_list = NetworkOffering.list(
self.apiClient,
forvpc="false",
guestiptype="Isolated",
state="Enabled",
supportedservices="SourceNat",
zoneid=self.zone.id
)
status = validateList(network_offerings_list)
self.assertEquals(
PASS,
status[0],
"Isolated Network Offerings with sourceNat enabled are not found"
)
while networks_list_size < 2:
# Creating a network
network = Network.create(
self.userapiclient,
self.services["network"],
accountid=self.account.name,
domainid=self.domain.id,
networkofferingid=network_offerings_list[0].id,
zoneid=self.zone.id
)
self.assertIsNotNone(
network,
"Network creation failed"
)
self.cleanup.append(network)
networks_list_size = networks_list_size + 1
# Listing the networks again
networks_list_after = Network.list(
self.userapiclient,
listall=self.services["listall"]
)
status = validateList(network_offerings_list)
self.assertEquals(
PASS,
status[0],
"Listing networks failed"
)
# populating network id's
networkids = networks_list_after[0].id + "," + networks_list_after[1].id
# Listing all the VM's for a User
list_vms_before = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
)
self.assertIsNone(
list_vms_before,
"Virtual Machine already exists for newly created user"
)
# Deploying a VM
vm_created = VirtualMachine.create(
self.userapiclient,
self.services["virtual_machine"],
accountid=self.account.name,
domainid=self.account.domainid,
networkids=networkids,
serviceofferingid=self.service_offering.id,
)
self.assertIsNotNone(
vm_created,
"VM creation failed"
)
self.cleanup.append(vm_created)
# Listing all the VMs for a user again
list_vms_after = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
)
status = validateList(list_vms_after)
self.assertEquals(
PASS,
status[0],
"VM creation failed"
)
# Verifying that the size of the list is 1
self.assertEquals(
1,
len(list_vms_after),
"VM list count is not matching"
)
# Verifying that the NIC's in VM created are same as provided
vm_nics = vm_created.nic
# Verifying that the size of nics is 2
self.assertEquals(
2,
len(vm_nics),
"NIC's count in VM created is not matching"
)
# Verifying that NIC network ID's are as expected
for i in range(0, len(vm_nics)):
if vm_nics[i].isdefault is True:
self.assertEquals(
networks_list_after[0].id,
vm_nics[i].networkid,
"Default NIC is not as expected"
)
else:
self.assertEquals(
networks_list_after[1].id,
vm_nics[i].networkid,
"Non Default NIC is not as expected"
)
return
@attr(tags=["basic", "provisioning"])
def test_23_deploy_vm_multiple_securitygroups(self):
"""
@Desc: Test to verify deploy VM with multiple Security Groups
@Steps:
Step1: List all the security groups for user
Step2: If size of list security groups is greater than 2 then get all the security groups id's
Else creating 2 security groups and get security groups id's
Step3: List all the VM's for a user
Step4: Deploy a VM with multiple security groups id's
Step5: Listing all the VM's again for the user
Step6: Verifying that list size is increased by 1
Step7: Verify that VM is associated with multiple security groups
"""
# Listing all the security groups available
security_groups_list = SecurityGroup.list(
self.userapiclient,
listall=self.services["listall"],
domainid=self.domain.id
)
security_groups_list_size = 0
if security_groups_list is not None:
security_groups_list_size = len(security_groups_list)
while security_groups_list_size < 2:
# Creating a security group
security_group = SecurityGroup.create(
self.userapiclient,
self.services["security_group"],
account=self.account.name,
domainid=self.domain.id
)
self.assertIsNotNone(
security_group,
"Security Group creation failed"
)
self.cleanup.append(security_group)
security_groups_list_size = security_groups_list_size + 1
# Listing the networks again
security_groups_list = SecurityGroup.list(
self.userapiclient,
listall=self.services["listall"],
domainid=self.domain.id
)
status = validateList(security_groups_list)
self.assertEquals(
PASS,
status[0],
"Listing Security Groups failed"
)
# populating Security Groups id's
securitygroupids = {security_groups_list[0].id , security_groups_list[1].id}
# Listing all the VM's for a User
list_vms_before = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
)
self.assertIsNone(
list_vms_before,
"Virtual Machine already exists for newly created user"
)
# Deploying a VM
vm_created = VirtualMachine.create(
self.userapiclient,
self.services["virtual_machine"],
accountid=self.account.name,
domainid=self.account.domainid,
serviceofferingid=self.service_offering.id,
securitygroupids=securitygroupids,
)
self.assertIsNotNone(
vm_created,
"VM creation failed"
)
self.cleanup.append(vm_created)
# Listing all the VMs for a user again
list_vms_after = VirtualMachine.list(
self.userapiclient,
listall=self.services["listall"],
)
status = validateList(list_vms_after)
self.assertEquals(
PASS,
status[0],
"VM creation failed"
)
# Verifying that the size of the list is 1
self.assertEquals(
1,
len(list_vms_after),
"VM list count is not matching"
)
# Verifying that the Security Groups's in VM created are same as provided
vm_securitygroups = vm_created.securitygroup
# Verifying that the size of security groups is 2
self.assertEquals(
2,
len(vm_securitygroups),
"Security Groups count in VM created is not matching"
)
# Verifying that Security Group network ID's are as expected
vm_securitygroups_flag = True
for i in range(0, len(vm_securitygroups)):
if ((vm_securitygroups[i].id != security_groups_list[0].id) and\
(vm_securitygroups[i].id != security_groups_list[1].id)):
vm_securitygroups_flag = False
break
self.assertEquals(
True,
vm_securitygroups_flag,
"Security Groups in VM are not same as created"
)
return
class TestSnapshots(cloudstackTestCase):
@classmethod
def setUpClass(cls):
try:
cls._cleanup = []
cls.testClient = super(TestSnapshots, cls).getClsTestClient()
cls.api_client = cls.testClient.getApiClient()
cls.services = cls.testClient.getParsedTestDataConfig()
# Get Domain, Zone, Template
cls.domain = get_domain(cls.api_client)
cls.zone = get_zone(cls.api_client)
cls.template = get_template(
cls.api_client,
cls.zone.id,
cls.services["ostype"]
)
if cls.zone.localstorageenabled:
cls.storagetype = 'local'
cls.services["service_offerings"]["tiny"]["storagetype"] = 'local'
cls.services["disk_offering"]["storagetype"] = 'local'
else:
cls.storagetype = 'shared'
cls.services["service_offerings"]["tiny"]["storagetype"] = 'shared'
cls.services["disk_offering"]["storagetype"] = 'shared'
cls.services['mode'] = cls.zone.networktype
cls.services["virtual_machine"]["hypervisor"] = cls.testClient.getHypervisorInfo()
cls.services["virtual_machine"]["zoneid"] = cls.zone.id
cls.services["virtual_machine"]["template"] = cls.template.id
cls.services["custom_volume"]["zoneid"] = cls.zone.id
# Creating Disk offering, Service Offering and Account
cls.disk_offering = DiskOffering.create(
cls.api_client,
cls.services["disk_offering"]
)
cls._cleanup.append(cls.disk_offering)
cls.service_offering = ServiceOffering.create(
cls.api_client,
cls.services["service_offerings"]["tiny"]
)
cls._cleanup.append(cls.service_offering)
cls.account = Account.create(
cls.api_client,
cls.services["account"],
domainid=cls.domain.id
)
# Getting authentication for user in newly created Account
cls.user = cls.account.user[0]
cls.userapiclient = cls.testClient.getUserApiClient(cls.user.username, cls.domain.name)
cls._cleanup.append(cls.account)
# Creating Virtual Machine
cls.virtual_machine = VirtualMachine.create(
cls.userapiclient,
cls.services["virtual_machine"],
accountid=cls.account.name,
domainid=cls.account.domainid,
serviceofferingid=cls.service_offering.id,
)
cls._cleanup.append(cls.virtual_machine)
except Exception as e:
cls.tearDownClass()
raise Exception("Warning: Exception in setup : %s" % e)
return
def setUp(self):
self.apiClient = self.testClient.getApiClient()
self.cleanup = []
def tearDown(self):
#Clean up, terminate the created resources
cleanup_resources(self.apiClient, self.cleanup)
return
@classmethod
def tearDownClass(cls):
try:
cleanup_resources(cls.api_client, cls._cleanup)
except Exception as e:
raise Exception("Warning: Exception during cleanup : %s" % e)
return
def __verify_values(self, expected_vals, actual_vals):
"""
@Desc: Function to verify expected and actual values
@Steps:
Step1: Initializing return flag to True
Step1: Verifying length of expected and actual dictionaries is matching.
If not matching returning false
Step2: Listing all the keys from expected dictionary
Step3: Looping through each key from step2 and verifying expected and actual dictionaries have same value
If not making return flag to False
Step4: returning the return flag after all the values are verified
"""
return_flag = True
if len(expected_vals) != len(actual_vals):
return False
keys = expected_vals.keys()
for i in range(0, len(expected_vals)):
exp_val = expected_vals[keys[i]]
act_val = actual_vals[keys[i]]
if exp_val == act_val:
return_flag = return_flag and True
else:
return_flag = return_flag and False
self.debug("expected Value: %s, is not matching with actual value: %s" % (
exp_val,
act_val
))
return return_flag
@attr(tags=["advanced", "basic", "provisioning"])
def test_01_list_volume_snapshots_pagination(self):
"""
@Desc: Test to List Volume Snapshots pagination
@steps:
Step1: Listing all the volume snapshots for a user
Step2: Verifying that list size is 0
Step3: Creating (page size + 1) number of volume snapshots
Step4: Listing all the volume snapshots again for a user
Step5: Verifying that list size is (page size + 1)
Step6: Listing all the volume snapshots in page1
Step7: Verifying that list size is (page size)
Step8: Listing all the volume snapshots in page2
Step9: Verifying that list size is 1
Step10: Deleting the volume snapshot present in page 2
Step11: Listing all the volume snapshots in page2
Step12: Verifying that list size is 0
"""
# Listing all the volume snapshots for a User
list_vol_snaps_before = Snapshot.list(
self.userapiclient,
listall=self.services["listall"]
)
# Verifying list size is 0
self.assertIsNone(
list_vol_snaps_before,
"Volume snapshots exists for newly created user"
)
# Listing the root volumes available for the user
volumes_list = Volume.list(
self.userapiclient,
listall=self.services["listall"]
)
status = validateList(volumes_list)
self.assertEquals(
PASS,
status[0],
"Root volume did not get created while deploying a VM"
)
# Verifying list size to be 1
self.assertEquals(
1,
len(volumes_list),
"More than 1 root volume created for deployed VM"
)
root_volume = volumes_list[0]
# Creating pagesize + 1 number of volume snapshots
for i in range(0, (self.services["pagesize"] + 1)):
snapshot_created = Snapshot.create(
self.userapiclient,
root_volume.id,
)
self.assertIsNotNone(
snapshot_created,
"Snapshot creation failed"
)
self.cleanup.append(snapshot_created)
# Listing all the volume snapshots for user again
list_vol_snaps_after = Snapshot.list(
self.userapiclient,
listall=self.services["listall"]
)
status = validateList(list_vol_snaps_after)
self.assertEquals(
PASS,
status[0],
"Volume snapshot creation failed"
)
# Verifying that list size is pagesize + 1
self.assertEquals(
self.services["pagesize"] + 1,
len(list_vol_snaps_after),
"Failed to create pagesize + 1 number of Volume snapshots"
)
# Listing all the volume snapshots in page 1
list_vol_snaps_page1 = Snapshot.list(
self.userapiclient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"]
)
status = validateList(list_vol_snaps_page1)
self.assertEquals(
PASS,
status[0],
"Failed to list volume snapshots in page 1"
)
# Verifying the list size to be equal to pagesize
self.assertEquals(
self.services["pagesize"],
len(list_vol_snaps_page1),
"Size of volume snapshots in page 1 is not matching"
)
# Listing all the volume snapshots in page 2
list_vol_snaps_page2 = Snapshot.list(
self.userapiclient,
listall=self.services["listall"],
page=2,
pagesize=self.services["pagesize"]
)
status = validateList(list_vol_snaps_page2)
self.assertEquals(
PASS,
status[0],
"Failed to list volume snapshots in page 2"
)
# Verifying the list size to be equal to pagesize
self.assertEquals(
1,
len(list_vol_snaps_page2),
"Size of volume snapshots in page 2 is not matching"
)
# Deleting the volume snapshot present in page 2
Snapshot.delete(
snapshot_created,
self.userapiclient
)
# Listing all the snapshots in page 2 again
list_vol_snaps_page2 = Snapshot.list(
self.userapiclient,
listall=self.services["listall"],
page=2,
pagesize=self.services["pagesize"]
)
# Verifying that list size is 0
self.assertIsNone(
list_vol_snaps_page2,
"Volume snapshot not deleted from page 2"
)
return
@attr(tags=["advanced", "basic", "provisioning"])
def test_02_list_volume_snapshots_byid(self):
"""
@Desc: Test to List Volume Snapshots by Id
@Steps:
Step1: Listing all the volume snapshots for a user
Step2: Verifying that list size is 0
Step3: Creating a volume snapshot
Step4: Listing all the volume snapshots again for a user
Step5: Verifying that list size is 1
Step6: Listing all the volume snapshots by specifying snapshot id
Step7: Verifying that list size is 1
Step8: Verifying details of the listed volume snapshot
"""
# Listing all the volume snapshots for a User
list_vol_snaps_before = Snapshot.list(
self.userapiclient,
listall=self.services["listall"]
)
# Verifying list size is 0
self.assertIsNone(
list_vol_snaps_before,
"Volume snapshots exists for newly created user"
)
# Listing the root volumes available for the user
volumes_list = Volume.list(
self.userapiclient,
listall=self.services["listall"]
)
status = validateList(volumes_list)
self.assertEquals(
PASS,
status[0],
"Root volume did not get created while deploying a VM"
)
# Verifying list size to be 1
self.assertEquals(
1,
len(volumes_list),
"More than 1 root volume created for deployed VM"
)
root_volume = volumes_list[0]
# Creating a volume snapshot
snapshot_created = Snapshot.create(
self.userapiclient,
root_volume.id,
)
self.assertIsNotNone(
snapshot_created,
"Snapshot creation failed"
)
self.cleanup.append(snapshot_created)
# Listing all the volume snapshots for user again
list_vol_snaps_after = Snapshot.list(
self.userapiclient,
listall=self.services["listall"]
)
status = validateList(list_vol_snaps_after)
self.assertEquals(
PASS,
status[0],
"Volume snapshot creation failed"
)
# Verifying that list size is 1
self.assertEquals(
1,
len(list_vol_snaps_after),
"Failed to create Volume snapshot"
)
# Listing volume snapshot by id
list_vol_snapshot = Snapshot.list(
self.userapiclient,
listall=self.services["listall"],
id=snapshot_created.id
)
status = validateList(list_vol_snapshot)
self.assertEquals(
PASS,
status[0],
"Failed to list Volume snapshot by Id"
)
# Verifying that list size is 1
self.assertEquals(
1,
len(list_vol_snapshot),
"Size of the list volume snapshot by Id is not matching"
)
# Verifying details of the listed snapshot to be same as snapshot created above
#Creating expected and actual values dictionaries
expected_dict = {
"id":snapshot_created.id,
"name":snapshot_created.name,
"state":snapshot_created.state,
"intervaltype":snapshot_created.intervaltype,
"account":snapshot_created.account,
"domain":snapshot_created.domainid,
"volume":snapshot_created.volumeid
}
actual_dict = {
"id":list_vol_snapshot[0].id,
"name":list_vol_snapshot[0].name,
"state":list_vol_snapshot[0].state,
"intervaltype":list_vol_snapshot[0].intervaltype,
"account":list_vol_snapshot[0].account,
"domain":list_vol_snapshot[0].domainid,
"volume":list_vol_snapshot[0].volumeid
}
vol_snapshot_status = self.__verify_values(
expected_dict,
actual_dict
)
self.assertEqual(
True,
vol_snapshot_status,
"Listed Volume Snapshot details are not as expected"
)
return
@attr(tags=["advanced", "basic", "provisioning"])
def test_03_list_vm_snapshots_pagination(self):
"""
@Desc: Test to List VM Snapshots pagination
@Steps:
Step1: Listing all the VM snapshots for a user
Step2: Verifying that list size is 0
Step3: Creating (page size + 1) number of VM snapshots
Step4: Listing all the VM snapshots again for a user
Step5: Verifying that list size is (page size + 1)
Step6: Listing all the VM snapshots in page1
Step7: Verifying that list size is (page size)
Step8: Listing all the VM snapshots in page2
Step9: Verifying that list size is 1
Step10: Deleting the VM snapshot present in page 2
Step11: Listing all the volume snapshots in page2
Step12: Verifying that list size is 0
"""
# Listing all the VM snapshots for a User
list_vm_snaps_before = VmSnapshot.list(
self.userapiclient,
listall=self.services["listall"]
)
# Verifying list size is 0
self.assertIsNone(
list_vm_snaps_before,
"VM snapshots exists for newly created user"
)
# Creating pagesize + 1 number of VM snapshots
for i in range(0, (self.services["pagesize"] + 1)):
snapshot_created = VmSnapshot.create(
self.userapiclient,
self.virtual_machine.id,
)
self.assertIsNotNone(
snapshot_created,
"Snapshot creation failed"
)
# Listing all the VM snapshots for user again
list_vm_snaps_after = VmSnapshot.list(
self.userapiclient,
listall=self.services["listall"]
)
status = validateList(list_vm_snaps_after)
self.assertEquals(
PASS,
status[0],
"VM snapshot creation failed"
)
# Verifying that list size is pagesize + 1
self.assertEquals(
self.services["pagesize"] + 1,
len(list_vm_snaps_after),
"Failed to create pagesize + 1 number of VM snapshots"
)
# Listing all the VM snapshots in page 1
list_vm_snaps_page1 = VmSnapshot.list(
self.userapiclient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"]
)
status = validateList(list_vm_snaps_page1)
self.assertEquals(
PASS,
status[0],
"Failed to list vm snapshots in page 1"
)
# Verifying the list size to be equal to pagesize
self.assertEquals(
self.services["pagesize"],
len(list_vm_snaps_page1),
"Size of vm snapshots in page 1 is not matching"
)
# Listing all the vm snapshots in page 2
list_vm_snaps_page2 = VmSnapshot.list(
self.userapiclient,
listall=self.services["listall"],
page=2,
pagesize=self.services["pagesize"]
)
status = validateList(list_vm_snaps_page2)
self.assertEquals(
PASS,
status[0],
"Failed to list vm snapshots in page 2"
)
# Verifying the list size to be equal to pagesize
self.assertEquals(
1,
len(list_vm_snaps_page2),
"Size of vm snapshots in page 2 is not matching"
)
# Deleting the vm snapshot present in page 2
VmSnapshot.deleteVMSnapshot(
self.userapiclient,
snapshot_created.id
)
# Listing all the snapshots in page 2 again
list_vm_snaps_page2 = VmSnapshot.list(
self.userapiclient,
listall=self.services["listall"],
page=2,
pagesize=self.services["pagesize"]
)
# Verifying that list size is 0
self.assertIsNone(
list_vm_snaps_page2,
"VM snapshot not deleted from page 2"
)
# Deleting all the existing VM snapshots
list_vm_snaps = VmSnapshot.list(
self.userapiclient,
listall=self.services["listall"],
)
status = validateList(list_vm_snaps)
self.assertEquals(
PASS,
status[0],
"All VM snapshots deleted"
)
# Verifying that list size is equal to page size
self.assertEquals(
self.services["pagesize"],
len(list_vm_snaps),
"VM Snapshots count is not matching"
)
# Deleting all the existing VM snapshots
for i in range(0, len(list_vm_snaps)):
VmSnapshot.deleteVMSnapshot(
self.userapiclient,
list_vm_snaps[i].id
)
return
@attr(tags=["advanced", "basic", "provisioning"])
def test_04_list_vm_snapshots_byid(self):
"""
@summary: Test to List VM Snapshots by Id
Step1: Listing all the VM snapshots for a user
Step2: Verifying that list size is 0
Step3: Creating a VM snapshot
Step4: Listing all the VM snapshots again for a user
Step5: Verifying that list size is 1
Step6: Listing all the VM snapshots by specifying snapshot id
Step7: Verifying that list size is 1
Step8: Verifying details of the listed VM snapshot
"""
# Listing all the VM snapshots for a User
list_vm_snaps_before = VmSnapshot.list(
self.userapiclient,
listall=self.services["listall"]
)
# Verifying list size is 0
self.assertIsNone(
list_vm_snaps_before,
"VM snapshots exists for newly created user"
)
# Creating a VM snapshot
snapshot_created = VmSnapshot.create(
self.userapiclient,
self.virtual_machine.id,
)
self.assertIsNotNone(
snapshot_created,
"Snapshot creation failed"
)
# Listing all the VM snapshots for user again
list_vm_snaps_after = VmSnapshot.list(
self.userapiclient,
listall=self.services["listall"]
)
status = validateList(list_vm_snaps_after)
self.assertEquals(
PASS,
status[0],
"VM snapshot creation failed"
)
# Verifying that list size is 1
self.assertEquals(
1,
len(list_vm_snaps_after),
"Failed to create VM snapshot"
)
# Listing vm snapshot by id
list_vm_snapshot = VmSnapshot.list(
self.userapiclient,
listall=self.services["listall"],
vmsnapshotid=snapshot_created.id
)
status = validateList(list_vm_snapshot)
self.assertEquals(
PASS,
status[0],
"Failed to list VM snapshot by Id"
)
# Verifying that list size is 1
self.assertEquals(
1,
len(list_vm_snapshot),
"Size of the list vm snapshot by Id is not matching"
)
# Verifying details of the listed snapshot to be same as snapshot created above
#Creating expected and actual values dictionaries
expected_dict = {
"id":snapshot_created.id,
"name":snapshot_created.name,
"state":snapshot_created.state,
"vmid":snapshot_created.virtualmachineid,
}
actual_dict = {
"id":list_vm_snapshot[0].id,
"name":list_vm_snapshot[0].name,
"state":list_vm_snapshot[0].state,
"vmid":list_vm_snapshot[0].virtualmachineid,
}
vm_snapshot_status = self.__verify_values(
expected_dict,
actual_dict
)
self.assertEqual(
True,
vm_snapshot_status,
"Listed VM Snapshot details are not as expected"
)
return
class TestSecurityGroups(cloudstackTestCase):
@classmethod
def setUpClass(cls):
try:
cls._cleanup = []
cls.testClient = super(TestSecurityGroups, cls).getClsTestClient()
cls.api_client = cls.testClient.getApiClient()
cls.services = cls.testClient.getParsedTestDataConfig()
# Get Domain, Zone, Template
cls.domain = get_domain(cls.api_client)
cls.zone = get_zone(cls.api_client)
cls.template = get_template(
cls.api_client,
cls.zone.id,
cls.services["ostype"]
)
cls.services['mode'] = cls.zone.networktype
cls.account = Account.create(
cls.api_client,
cls.services["account"],
domainid=cls.domain.id
)
# Getting authentication for user in newly created Account
cls.user = cls.account.user[0]
cls.userapiclient = cls.testClient.getUserApiClient(cls.user.username, cls.domain.name)
cls._cleanup.append(cls.account)
except Exception as e:
cls.tearDownClass()
raise Exception("Warning: Exception in setup : %s" % e)
return
def setUp(self):
self.apiClient = self.testClient.getApiClient()
self.cleanup = []
def tearDown(self):
#Clean up, terminate the created resources
cleanup_resources(self.apiClient, self.cleanup)
return
@classmethod
def tearDownClass(cls):
try:
cleanup_resources(cls.api_client, cls._cleanup)
except Exception as e:
raise Exception("Warning: Exception during cleanup : %s" % e)
return
def __verify_values(self, expected_vals, actual_vals):
"""
@Desc: Function to verify expected and actual values
@Steps:
Step1: Initializing return flag to True
Step1: Verifying length of expected and actual dictionaries is matching.
If not matching returning false
Step2: Listing all the keys from expected dictionary
Step3: Looping through each key from step2 and verifying expected and actual dictionaries have same value
If not making return flag to False
Step4: returning the return flag after all the values are verified
"""
return_flag = True
if len(expected_vals) != len(actual_vals):
return False
keys = expected_vals.keys()
for i in range(0, len(expected_vals)):
exp_val = expected_vals[keys[i]]
act_val = actual_vals[keys[i]]
if exp_val == act_val:
return_flag = return_flag and True
else:
return_flag = return_flag and False
self.debug("expected Value: %s, is not matching with actual value: %s" % (
exp_val,
act_val
))
return return_flag
@attr(tags=["basic", "provisioning"])
def test_01_list_securitygroups_pagination(self):
"""
@Desc: Test to List Security Groups pagination
@steps:
Step1: Listing all the Security Groups for a user
Step2: Verifying that list size is 1
Step3: Creating (page size) number of Security Groups
Step4: Listing all the Security Groups again for a user
Step5: Verifying that list size is (page size + 1)
Step6: Listing all the Security Groups in page1
Step7: Verifying that list size is (page size)
Step8: Listing all the Security Groups in page2
Step9: Verifying that list size is 1
Step10: Deleting the Security Group present in page 2
Step11: Listing all the Security Groups in page2
Step12: Verifying that no security groups are listed
"""
# Listing all the Security Groups for a User
list_securitygroups_before = SecurityGroup.list(
self.userapiclient,
listall=self.services["listall"]
)
# Verifying that default security group is created
status = validateList(list_securitygroups_before)
self.assertEquals(
PASS,
status[0],
"Default Security Groups creation failed"
)
# Verifying the size of the list is 1
self.assertEquals(
1,
len(list_securitygroups_before),
"Count of Security Groups list is not matching"
)
# Creating pagesize number of security groups
for i in range(0, (self.services["pagesize"])):
securitygroup_created = SecurityGroup.create(
self.userapiclient,
self.services["security_group"],
account=self.account.name,
domainid=self.domain.id,
description=self.services["security_group"]["name"]
)
self.assertIsNotNone(
securitygroup_created,
"Security Group creation failed"
)
if (i < self.services["pagesize"]):
self.cleanup.append(securitygroup_created)
# Listing all the security groups for user again
list_securitygroups_after = SecurityGroup.list(
self.userapiclient,
listall=self.services["listall"]
)
status = validateList(list_securitygroups_after)
self.assertEquals(
PASS,
status[0],
"Security Groups creation failed"
)
# Verifying that list size is pagesize + 1
self.assertEquals(
self.services["pagesize"] + 1,
len(list_securitygroups_after),
"Failed to create pagesize + 1 number of Security Groups"
)
# Listing all the security groups in page 1
list_securitygroups_page1 = SecurityGroup.list(
self.userapiclient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"]
)
status = validateList(list_securitygroups_page1)
self.assertEquals(
PASS,
status[0],
"Failed to list security groups in page 1"
)
# Verifying the list size to be equal to pagesize
self.assertEquals(
self.services["pagesize"],
len(list_securitygroups_page1),
"Size of security groups in page 1 is not matching"
)
# Listing all the security groups in page 2
list_securitygroups_page2 = SecurityGroup.list(
self.userapiclient,
listall=self.services["listall"],
page=2,
pagesize=self.services["pagesize"]
)
status = validateList(list_securitygroups_page2)
self.assertEquals(
PASS,
status[0],
"Failed to list security groups in page 2"
)
# Verifying the list size to be equal to pagesize
self.assertEquals(
1,
len(list_securitygroups_page2),
"Size of security groups in page 2 is not matching"
)
# Deleting the security group present in page 2
SecurityGroup.delete(
securitygroup_created,
self.userapiclient)
# Listing all the security groups in page 2 again
list_securitygroups_page2 = SecurityGroup.list(
self.userapiclient,
listall=self.services["listall"],
page=2,
pagesize=self.services["pagesize"]
)
# Verifying that there are no security groups listed
self.assertIsNone(
list_securitygroups_page2,
"Security Groups not deleted from page 2"
)
return
@attr(tags=["basic", "provisioning"])
def test_02_securitygroups_authorize_revoke_ingress(self):
"""
@Desc: Test to Authorize and Revoke Ingress for Security Group
@steps:
Step1: Listing all the Security Groups for a user
Step2: Verifying that list size is 1
Step3: Creating a Security Groups
Step4: Listing all the Security Groups again for a user
Step5: Verifying that list size is 2
Step6: Authorizing Ingress for the security group created in step3
Step7: Listing the security groups by passing id of security group created in step3
Step8: Verifying that list size is 1
Step9: Verifying that Ingress is authorized to the security group
Step10: Verifying the details of the Ingress rule are as expected
Step11: Revoking Ingress for the security group created in step3
Step12: Listing the security groups by passing id of security group created in step3
Step13: Verifying that list size is 1
Step14: Verifying that Ingress is revoked from the security group
"""
# Listing all the Security Groups for a User
list_securitygroups_before = SecurityGroup.list(
self.userapiclient,
listall=self.services["listall"]
)
# Verifying that default security group is created
status = validateList(list_securitygroups_before)
self.assertEquals(
PASS,
status[0],
"Default Security Groups creation failed"
)
# Verifying the size of the list is 1
self.assertEquals(
1,
len(list_securitygroups_before),
"Count of Security Groups list is not matching"
)
# Creating a security group
securitygroup_created = SecurityGroup.create(
self.userapiclient,
self.services["security_group"],
account=self.account.name,
domainid=self.domain.id,
description=self.services["security_group"]["name"]
)
self.assertIsNotNone(
securitygroup_created,
"Security Group creation failed"
)
self.cleanup.append(securitygroup_created)
# Listing all the security groups for user again
list_securitygroups_after = SecurityGroup.list(
self.userapiclient,
listall=self.services["listall"]
)
status = validateList(list_securitygroups_after)
self.assertEquals(
PASS,
status[0],
"Security Groups creation failed"
)
# Verifying that list size is 2
self.assertEquals(
2,
len(list_securitygroups_after),
"Failed to create Security Group"
)
# Authorizing Ingress for the security group created in step3
securitygroup_created.authorize(
self.userapiclient,
self.services["ingress_rule"],
self.account.name,
self.domain.id,
)
# Listing the security group by Id
list_securitygroups_byid = SecurityGroup.list(
self.userapiclient,
listall=self.services["listall"],
id=securitygroup_created.id,
domainid=self.domain.id
)
# Verifying that security group is listed
status = validateList(list_securitygroups_byid)
self.assertEquals(
PASS,
status[0],
"Listing of Security Groups by id failed"
)
# Verifying size of the list is 1
self.assertEquals(
1,
len(list_securitygroups_byid),
"Count of the listing security group by id is not matching"
)
securitygroup_ingress = list_securitygroups_byid[0].ingressrule
# Validating the Ingress rule
status = validateList(securitygroup_ingress)
self.assertEquals(
PASS,
status[0],
"Security Groups Ingress rule authorization failed"
)
self.assertEquals(
1,
len(securitygroup_ingress),
"Security Group Ingress rules count is not matching"
)
# Verifying the details of the Ingress rule are as expected
#Creating expected and actual values dictionaries
expected_dict = {
"cidr":self.services["ingress_rule"]["cidrlist"],
"protocol":self.services["ingress_rule"]["protocol"],
"startport":self.services["ingress_rule"]["startport"],
"endport":self.services["ingress_rule"]["endport"],
}
actual_dict = {
"cidr":str(securitygroup_ingress[0].cidr),
"protocol":str(securitygroup_ingress[0].protocol.upper()),
"startport":str(securitygroup_ingress[0].startport),
"endport":str(securitygroup_ingress[0].endport),
}
ingress_status = self.__verify_values(
expected_dict,
actual_dict
)
self.assertEqual(
True,
ingress_status,
"Listed Security group Ingress rule details are not as expected"
)
# Revoking the Ingress rule from Security Group
securitygroup_created.revoke(self.userapiclient, securitygroup_ingress[0].ruleid)
# Listing the security group by Id
list_securitygroups_byid = SecurityGroup.list(
self.userapiclient,
listall=self.services["listall"],
id=securitygroup_created.id,
domainid=self.domain.id
)
# Verifying that security group is listed
status = validateList(list_securitygroups_byid)
self.assertEquals(
PASS,
status[0],
"Listing of Security Groups by id failed"
)
# Verifying size of the list is 1
self.assertEquals(
1,
len(list_securitygroups_byid),
"Count of the listing security group by id is not matching"
)
securitygroup_ingress = list_securitygroups_byid[0].ingressrule
# Verifying that Ingress rule is empty(revoked)
status = validateList(securitygroup_ingress)
self.assertEquals(
EMPTY_LIST,
status[2],
"Security Groups Ingress rule is not revoked"
)
return
@attr(tags=["basic", "provisioning"])
def test_03_securitygroups_authorize_revoke_egress(self):
"""
@Desc: Test to Authorize and Revoke Egress for Security Group
@steps:
Step1: Listing all the Security Groups for a user
Step2: Verifying that list size is 1
Step3: Creating a Security Groups
Step4: Listing all the Security Groups again for a user
Step5: Verifying that list size is 2
Step6: Authorizing Egress for the security group created in step3
Step7: Listing the security groups by passing id of security group created in step3
Step8: Verifying that list size is 1
Step9: Verifying that Egress is authorized to the security group
Step10: Verifying the details of the Egress rule are as expected
Step11: Revoking Egress for the security group created in step3
Step12: Listing the security groups by passing id of security group created in step3
Step13: Verifying that list size is 1
Step14: Verifying that Egress is revoked from the security group
"""
# Listing all the Security Groups for a User
list_securitygroups_before = SecurityGroup.list(
self.userapiclient,
listall=self.services["listall"]
)
# Verifying that default security group is created
status = validateList(list_securitygroups_before)
self.assertEquals(
PASS,
status[0],
"Default Security Groups creation failed"
)
# Verifying the size of the list is 1
self.assertEquals(
1,
len(list_securitygroups_before),
"Count of Security Groups list is not matching"
)
# Creating a security group
securitygroup_created = SecurityGroup.create(
self.userapiclient,
self.services["security_group"],
account=self.account.name,
domainid=self.domain.id,
description=self.services["security_group"]["name"]
)
self.assertIsNotNone(
securitygroup_created,
"Security Group creation failed"
)
self.cleanup.append(securitygroup_created)
# Listing all the security groups for user again
list_securitygroups_after = SecurityGroup.list(
self.userapiclient,
listall=self.services["listall"]
)
status = validateList(list_securitygroups_after)
self.assertEquals(
PASS,
status[0],
"Security Groups creation failed"
)
# Verifying that list size is 2
self.assertEquals(
2,
len(list_securitygroups_after),
"Failed to create Security Group"
)
# Authorizing Egress for the security group created in step3
securitygroup_created.authorizeEgress(
self.userapiclient,
self.services["ingress_rule"],
self.account.name,
self.domain.id,
)
# Listing the security group by Id
list_securitygroups_byid = SecurityGroup.list(
self.userapiclient,
listall=self.services["listall"],
id=securitygroup_created.id,
domainid=self.domain.id
)
# Verifying that security group is listed
status = validateList(list_securitygroups_byid)
self.assertEquals(
PASS,
status[0],
"Listing of Security Groups by id failed"
)
# Verifying size of the list is 1
self.assertEquals(
1,
len(list_securitygroups_byid),
"Count of the listing security group by id is not matching"
)
securitygroup_egress = list_securitygroups_byid[0].egressrule
# Validating the Ingress rule
status = validateList(securitygroup_egress)
self.assertEquals(
PASS,
status[0],
"Security Groups Egress rule authorization failed"
)
self.assertEquals(
1,
len(securitygroup_egress),
"Security Group Egress rules count is not matching"
)
# Verifying the details of the Egress rule are as expected
#Creating expected and actual values dictionaries
expected_dict = {
"cidr":self.services["ingress_rule"]["cidrlist"],
"protocol":self.services["ingress_rule"]["protocol"],
"startport":self.services["ingress_rule"]["startport"],
"endport":self.services["ingress_rule"]["endport"],
}
actual_dict = {
"cidr":str(securitygroup_egress[0].cidr),
"protocol":str(securitygroup_egress[0].protocol.upper()),
"startport":str(securitygroup_egress[0].startport),
"endport":str(securitygroup_egress[0].endport),
}
ingress_status = self.__verify_values(
expected_dict,
actual_dict
)
self.assertEqual(
True,
ingress_status,
"Listed Security group Egress rule details are not as expected"
)
# Revoking the Egress rule from Security Group
securitygroup_created.revokeEgress(self.userapiclient, securitygroup_egress[0].ruleid)
# Listing the security group by Id
list_securitygroups_byid = SecurityGroup.list(
self.userapiclient,
listall=self.services["listall"],
id=securitygroup_created.id,
domainid=self.domain.id
)
# Verifying that security group is listed
status = validateList(list_securitygroups_byid)
self.assertEquals(
PASS,
status[0],
"Listing of Security Groups by id failed"
)
# Verifying size of the list is 1
self.assertEquals(
1,
len(list_securitygroups_byid),
"Count of the listing security group by id is not matching"
)
securitygroup_egress = list_securitygroups_byid[0].egressrule
# Verifying that Ingress rule is empty(revoked)
status = validateList(securitygroup_egress)
self.assertEquals(
EMPTY_LIST,
status[2],
"Security Groups Egress rule is not revoked"
)
return
class TestVpnCustomerGateways(cloudstackTestCase):
@classmethod
def setUpClass(cls):
try:
cls._cleanup = []
cls.testClient = super(TestVpnCustomerGateways, cls).getClsTestClient()
cls.api_client = cls.testClient.getApiClient()
cls.services = cls.testClient.getParsedTestDataConfig()
# Get Domain, Zone, Template
cls.domain = get_domain(cls.api_client)
cls.zone = get_zone(cls.api_client)
cls.template = get_template(
cls.api_client,
cls.zone.id,
cls.services["ostype"]
)
cls.services['mode'] = cls.zone.networktype
cls.account = Account.create(
cls.api_client,
cls.services["account"],
domainid=cls.domain.id
)
# Getting authentication for user in newly created Account
cls.user = cls.account.user[0]
cls.userapiclient = cls.testClient.getUserApiClient(cls.user.username, cls.domain.name)
cls._cleanup.append(cls.account)
except Exception as e:
cls.tearDownClass()
raise Exception("Warning: Exception in setup : %s" % e)
return
def setUp(self):
self.apiClient = self.testClient.getApiClient()
self.cleanup = []
def tearDown(self):
#Clean up, terminate the created resources
cleanup_resources(self.apiClient, self.cleanup)
return
@classmethod
def tearDownClass(cls):
try:
cleanup_resources(cls.api_client, cls._cleanup)
except Exception as e:
raise Exception("Warning: Exception during cleanup : %s" % e)
return
def __verify_values(self, expected_vals, actual_vals):
"""
@Desc: Function to verify expected and actual values
@Steps:
Step1: Initializing return flag to True
Step1: Verifying length of expected and actual dictionaries is matching.
If not matching returning false
Step2: Listing all the keys from expected dictionary
Step3: Looping through each key from step2 and verifying expected and actual dictionaries have same value
If not making return flag to False
Step4: returning the return flag after all the values are verified
"""
return_flag = True
if len(expected_vals) != len(actual_vals):
return False
keys = expected_vals.keys()
for i in range(0, len(expected_vals)):
exp_val = expected_vals[keys[i]]
act_val = actual_vals[keys[i]]
if exp_val == act_val:
return_flag = return_flag and True
else:
return_flag = return_flag and False
self.debug("expected Value: %s, is not matching with actual value: %s" % (
exp_val,
act_val
))
return return_flag
@attr(tags=["advanced", "basic", "provisioning"])
def test_01_list_vpncustomergateways_pagination(self):
"""
@Desc: Test to List VPN Customer Gateways pagination
@steps:
Step1: Listing all the VPN Customer Gateways for a user
Step2: Verifying that no VPN Customer Gateways are listed
Step3: Creating (page size + 1) number of VPN Customer Gateways
Step4: Listing all the VPN Customer Gateways again for a user
Step5: Verifying that list size is (page size + 1)
Step6: Listing all the VPN Customer Gateways in page1
Step7: Verifying that list size is (page size)
Step8: Listing all the VPN Customer Gateways in page2
Step9: Verifying that list size is 1
Step10: Deleting the VPN Customer Gateways present in page 2
Step11: Listing all the VPN Customer Gateways in page2
Step12: Verifying that no VPN Customer Gateways are listed
"""
# Listing all the VPN Customer Gateways for a User
list_vpncustomergateways_before = VpnCustomerGateway.list(
self.userapiclient,
listall=self.services["listall"]
)
# Verifying that no VPN Customer Gateways are listed
self.assertIsNone(
list_vpncustomergateways_before,
"VPN Customer Gateways listed for newly created User"
)
# Creating pagesize + 1 number of VPN Customer Gateways
for i in range(0, (self.services["pagesize"] + 1)):
vpncustomergateway_created = VpnCustomerGateway.create(
self.userapiclient,
self.services["vpncustomergateway"],
name="VPNCustGateway"+str(i+1),
gateway="10.102.153." + str(i+1),
cidrlist="10.0.0.0/24",
account=self.account.name,
domainid=self.domain.id
)
self.assertIsNotNone(
vpncustomergateway_created,
"VPN Customer Gateway creation failed"
)
if (i < self.services["pagesize"] + 1):
self.cleanup.append(vpncustomergateway_created)
# Listing all the VPN Customer Gateways for a User
list_vpncustomergateways_after = VpnCustomerGateway.list(
self.userapiclient,
listall=self.services["listall"]
)
status = validateList(list_vpncustomergateways_after)
self.assertEquals(
PASS,
status[0],
"VPN Customer Gateway creation failed"
)
# Verifying that list size is pagesize + 1
self.assertEquals(
self.services["pagesize"] + 1,
len(list_vpncustomergateways_after),
"Failed to create pagesize + 1 number of VPN Customer Gateways"
)
# Listing all the VPN Customer Gateways in page 1
list_vpncustomergateways_page1 = VpnCustomerGateway.list(
self.userapiclient,
listall=self.services["listall"],
page=1,
pagesize=self.services["pagesize"]
)
status = validateList(list_vpncustomergateways_page1)
self.assertEquals(
PASS,
status[0],
"Failed to list VPN Customer Gateways in page 1"
)
# Verifying the list size to be equal to pagesize
self.assertEquals(
self.services["pagesize"],
len(list_vpncustomergateways_page1),
"Size of VPN Customer Gateways in page 1 is not matching"
)
# Listing all the VPN Customer Gateways in page 2
list_vpncustomergateways_page2 = VpnCustomerGateway.list(
self.userapiclient,
listall=self.services["listall"],
page=2,
pagesize=self.services["pagesize"]
)
status = validateList(list_vpncustomergateways_page2)
self.assertEquals(
PASS,
status[0],
"Failed to list VPN Customer Gateways in page 2"
)
# Verifying the list size to be equal to 1
self.assertEquals(
1,
len(list_vpncustomergateways_page2),
"Size of VPN Customer Gateways in page 2 is not matching"
)
# Deleting the VPM Customer Gateway present in page 2
VpnCustomerGateway.delete(
vpncustomergateway_created,
self.userapiclient
)
# Listing all the VPN Customer Gateways in page 2 again
list_vpncustomergateways_page2 = VpnCustomerGateway.list(
self.userapiclient,
listall=self.services["listall"],
page=2,
pagesize=self.services["pagesize"]
)
# Verifying that there are no VPN Customer Gateways listed
self.assertIsNone(
list_vpncustomergateways_page2,
"VPN Customer Gateways not deleted from page 2"
)
return
@attr(tags=["advanced", "basic", "provisioning"])
def test_02_update_vpncustomergateways(self):
"""
@Desc: Test to update VPN Customer Gateways pagination
@steps:
Step1: Listing all the VPN Customer Gateways for a user
Step2: Verifying that no VPN Customer Gateways are listed
Step3: Creating a VPN Customer Gateways
Step4: Listing all the VPN Customer Gateways again for a user
Step5: Verifying that list size is 1
Step6: Updating the VPN Customer Gateways created in step3
Step7: Listing the VPN customer gateway by id
Step8: Verifying that list size is 1
Step9: Verifying the details of the listed VPN customer gateway are same as updated in step6
"""
# Listing all the VPN Customer Gateways for a User
list_vpncustomergateways_before = VpnCustomerGateway.list(
self.userapiclient,
listall=self.services["listall"]
)
# Verifying that no VPN Customer Gateways are listed
self.assertIsNone(
list_vpncustomergateways_before,
"VPN Customer Gateways listed for newly created User"
)
# Creating A VPN Customer Gateways
vpncustomergateway_created = VpnCustomerGateway.create(
self.userapiclient,
self.services["vpncustomergateway"],
name="VPNCustGateway",
gateway="10.102.153.90",
cidrlist="10.0.0.0/24",
account=self.account.name,
domainid=self.domain.id
)
self.assertIsNotNone(
vpncustomergateway_created,
"VPN Customer Gateway creation failed"
)
self.cleanup.append(vpncustomergateway_created)
# Listing all the VPN Customer Gateways for a User
list_vpncustomergateways_after = VpnCustomerGateway.list(
self.userapiclient,
listall=self.services["listall"]
)
status = validateList(list_vpncustomergateways_after)
self.assertEquals(
PASS,
status[0],
"VPN Customer Gateway creation failed"
)
# Verifying that list size is 1
self.assertEquals(
1,
len(list_vpncustomergateways_after),
"Failed to create VPN Customer Gateways"
)
# Updating the VPN Customer gateway
vpncustomergateway_updated = VpnCustomerGateway.update(
vpncustomergateway_created,
self.userapiclient,
self.services["vpncustomergateway"],
name="NewVPNCustGateway",
gateway="10.102.153.90",
cidrlist="10.0.0.0/24",
)
self.assertIsNotNone(
vpncustomergateway_updated,
"Updation of VPN Customer Gateway failed"
)
# Listing the VPN Customer Gateways by Id
list_vpncustomergateway = VpnCustomerGateway.list(
self.userapiclient,
listall=self.services["listall"],
id=vpncustomergateway_created.id
)
status = validateList(list_vpncustomergateway)
self.assertEquals(
PASS,
status[0],
"Failed to list VPN Customer Gateways by Id"
)
# Verifying the list size to be equal to 1
self.assertEquals(
1,
len(list_vpncustomergateway),
"Size of VPN Customer Gateways by id is not matching"
)
# Verifying the details of the listed VPN Customer Gateway are same as updated
#Creating expected and actual values dictionaries
expected_dict = {
"name":vpncustomergateway_updated.name,
"id":vpncustomergateway_updated.id,
"account":vpncustomergateway_updated.account,
"domainid":vpncustomergateway_updated.domainid,
"gateway":vpncustomergateway_updated.gateway,
"cidrlist":vpncustomergateway_updated.cidrlist,
"seckey":vpncustomergateway_updated.ipsecpsk,
"ikepolicy":vpncustomergateway_updated.ikepolicy,
"ikelifetime":vpncustomergateway_updated.ikelifetime,
"esppolicy":vpncustomergateway_updated.esppolicy,
"esplifetime":vpncustomergateway_updated.esplifetime,
}
actual_dict = {
"name":list_vpncustomergateway[0].name,
"id":list_vpncustomergateway[0].id,
"account":list_vpncustomergateway[0].account,
"domainid":list_vpncustomergateway[0].domainid,
"gateway":list_vpncustomergateway[0].gateway,
"cidrlist":list_vpncustomergateway[0].cidrlist,
"seckey":list_vpncustomergateway[0].ipsecpsk,
"ikepolicy":list_vpncustomergateway[0].ikepolicy,
"ikelifetime":list_vpncustomergateway[0].ikelifetime,
"esppolicy":list_vpncustomergateway[0].esppolicy,
"esplifetime":list_vpncustomergateway[0].esplifetime,
}
vpncustomergateway_status = self.__verify_values(
expected_dict,
actual_dict
)
self.assertEqual(
True,
vpncustomergateway_status,
"Listed VPN Customer Gateway details are not as Updated"
)
return
class TestTemplates(cloudstackTestCase):
@classmethod
def setUpClass(cls):
try:
cls._cleanup = []
cls.testClient = super(TestTemplates, cls).getClsTestClient()
cls.api_client = cls.testClient.getApiClient()
cls.services = cls.testClient.getParsedTestDataConfig()
# Get Domain, Zone, Template
cls.domain = get_domain(cls.api_client)
cls.zone = get_zone(cls.api_client)
cls.template = get_template(
cls.api_client,
cls.zone.id,
cls.services["ostype"]
)
cls.hypervisor = cls.testClient.getHypervisorInfo()
cls.services['mode'] = cls.zone.networktype
cls.account = Account.create(
cls.api_client,
cls.services["account"],
domainid=cls.domain.id
)
# Getting authentication for user in newly created Account
cls.user = cls.account.user[0]
cls.userapiclient = cls.testClient.getUserApiClient(cls.user.username, cls.domain.name)
cls._cleanup.append(cls.account)
except Exception as e:
cls.tearDownClass()
raise Exception("Warning: Exception in setup : %s" % e)
return
def setUp(self):
self.apiClient = self.testClient.getApiClient()
self.cleanup = []
def tearDown(self):
#Clean up, terminate the created resources
cleanup_resources(self.apiClient, self.cleanup)
return
@classmethod
def tearDownClass(cls):
try:
cleanup_resources(cls.api_client, cls._cleanup)
except Exception as e:
raise Exception("Warning: Exception during cleanup : %s" % e)
return
def __verify_values(self, expected_vals, actual_vals):
"""
@Desc: Function to verify expected and actual values
@Steps:
Step1: Initializing return flag to True
Step1: Verifying length of expected and actual dictionaries is matching.
If not matching returning false
Step2: Listing all the keys from expected dictionary
Step3: Looping through each key from step2 and verifying expected and actual dictionaries have same value
If not making return flag to False
Step4: returning the return flag after all the values are verified
"""
return_flag = True
if len(expected_vals) != len(actual_vals):
return False
keys = expected_vals.keys()
for i in range(0, len(expected_vals)):
exp_val = expected_vals[keys[i]]
act_val = actual_vals[keys[i]]
if exp_val == act_val:
return_flag = return_flag and True
else:
return_flag = return_flag and False
self.debug("expected Value: %s, is not matching with actual value: %s" % (
exp_val,
act_val
))
return return_flag
@attr(tags=["advanced", "basic", "provisioning"])
def test_01_list_templates_pagination(self):
"""
@Desc: Test to List Templates pagination
@steps:
Step1: Listing all the Templates for a user
Step2: Verifying that no Templates are listed
Step3: Creating (page size + 1) number of Templates
Step4: Listing all the Templates again for a user
Step5: Verifying that list size is (page size + 1)
Step6: Listing all the Templates in page1
Step7: Verifying that list size is (page size)
Step8: Listing all the Templates in page2
Step9: Verifying that list size is 1
Step10: Listing the template by Id
Step11: Verifying if the template is downloaded and ready.
If yes the continuing
If not waiting and checking for template to be ready till timeout
Step12: Deleting the Template present in page 2
Step13: Listing all the Templates in page2
Step14: Verifying that no Templates are listed
"""
# Listing all the Templates for a User
list_templates_before = Template.list(
self.userapiclient,
listall=self.services["listall"],
templatefilter=self.services["templatefilter"]
)
# Verifying that no Templates are listed
self.assertIsNone(
list_templates_before,
"Templates listed for newly created User"
)
self.services["template"]["url"] = "http://10.147.28.7/templates/ttylinux_pv.vhd"
self.services["template"]["format"] = "VHD"
self.services["template"]["ostype"] = self.services["ostype"]
# Creating pagesize + 1 number of Templates
for i in range(0, (self.services["pagesize"] + 1)):
template_created = Template.register(
self.userapiclient,
self.services["template"],
self.zone.id,
hypervisor=self.hypervisor
)
self.assertIsNotNone(
template_created,
"Template creation failed"
)
if(i < self.services["pagesize"]):
self.cleanup.append(template_created)
# Listing all the Templates for a User
list_templates_after = Template.list(
self.userapiclient,
listall=self.services["listall"],
templatefilter=self.services["templatefilter"]
)
status = validateList(list_templates_after)
self.assertEquals(
PASS,
status[0],
"Templates creation failed"
)
# Verifying that list size is pagesize + 1
self.assertEquals(
self.services["pagesize"] + 1,
len(list_templates_after),
"Failed to create pagesize + 1 number of Templates"
)
# Listing all the Templates in page 1
list_templates_page1 = Template.list(
self.userapiclient,
listall=self.services["listall"],
templatefilter=self.services["templatefilter"],
page=1,
pagesize=self.services["pagesize"]
)
status = validateList(list_templates_page1)
self.assertEquals(
PASS,
status[0],
"Failed to list Templates in page 1"
)
# Verifying the list size to be equal to pagesize
self.assertEquals(
self.services["pagesize"],
len(list_templates_page1),
"Size of Templates in page 1 is not matching"
)
# Listing all the Templates in page 2
list_templates_page2 = Template.list(
self.userapiclient,
listall=self.services["listall"],
templatefilter=self.services["templatefilter"],
page=2,
pagesize=self.services["pagesize"]
)
status = validateList(list_templates_page2)
self.assertEquals(
PASS,
status[0],
"Failed to list Templates in page 2"
)
# Verifying the list size to be equal to 1
self.assertEquals(
1,
len(list_templates_page2),
"Size of Templates in page 2 is not matching"
)
# Verifying the state of the template to be ready. If not waiting for state to become ready
template_ready = False
count = 0
while template_ready is False:
list_template = Template.list(
self.userapiclient,
id=template_created.id,
listall=self.services["listall"],
templatefilter=self.services["templatefilter"],
)
status = validateList(list_template)
self.assertEquals(
PASS,
status[0],
"Failed to list Templates by Id"
)
if list_template[0].isready is True:
template_ready = True
elif (str(list_template[0].status) == "Error"):
self.fail("Created Template is in Errored state")
break
elif count > 10:
self.fail("Timed out before Template came into ready state")
break
else:
time.sleep(self.services["sleep"])
count = count + 1
# Deleting the Template present in page 2
Template.delete(
template_created,
self.userapiclient
)
# Listing all the Templates in page 2 again
list_templates_page2 = Template.list(
self.userapiclient,
listall=self.services["listall"],
templatefilter=self.services["templatefilter"],
page=2,
pagesize=self.services["pagesize"]
)
# Verifying that there are no Templates listed
self.assertIsNone(
list_templates_page2,
"Templates not deleted from page 2"
)
del self.services["template"]["url"]
del self.services["template"]["format"]
del self.services["template"]["ostype"]
return
@attr(tags=["advanced", "basic", "provisioning"])
def test_02_download_template(self):
"""
@Desc: Test to Download Template
@steps:
Step1: Listing all the Templates for a user
Step2: Verifying that no Templates are listed
Step3: Creating a Templates
Step4: Listing all the Templates again for a user
Step5: Verifying that list size is 1
Step6: Verifying if the template is in ready state.
If yes the continuing
If not waiting and checking for template to be ready till timeout
Step7: Downloading the template (Extract)
Step8: Verifying that Template is downloaded
"""
# Listing all the Templates for a User
list_templates_before = Template.list(
self.userapiclient,
listall=self.services["listall"],
templatefilter=self.services["templatefilter"]
)
# Verifying that no Templates are listed
self.assertIsNone(
list_templates_before,
"Templates listed for newly created User"
)
self.services["template"]["url"] = "http://10.147.28.7/templates/ttylinux_pv.vhd"
self.services["template"]["format"] = "VHD"
self.services["template"]["ostype"] = self.services["ostype"]
self.services["template"]["isextractable"] = True
# Creating aTemplate
template_created = Template.register(
self.userapiclient,
self.services["template"],
self.zone.id,
hypervisor=self.hypervisor
)
self.assertIsNotNone(
template_created,
"Template creation failed"
)
self.cleanup.append(template_created)
# Listing all the Templates for a User
list_templates_after = Template.list(
self.userapiclient,
listall=self.services["listall"],
templatefilter=self.services["templatefilter"]
)
status = validateList(list_templates_after)
self.assertEquals(
PASS,
status[0],
"Templates creation failed"
)
# Verifying that list size is 1
self.assertEquals(
1,
len(list_templates_after),
"Failed to create a Template"
)
# Verifying the state of the template to be ready. If not waiting for state to become ready till time out
template_ready = False
count = 0
while template_ready is False:
list_template = Template.list(
self.userapiclient,
id=template_created.id,
listall=self.services["listall"],
templatefilter=self.services["templatefilter"],
)
status = validateList(list_template)
self.assertEquals(
PASS,
status[0],
"Failed to list Templates by Id"
)
if list_template[0].isready is True:
template_ready = True
elif (str(list_template[0].status) == "Error"):
self.fail("Created Template is in Errored state")
break
elif count > 10:
self.fail("Timed out before Template came into ready state")
break
else:
time.sleep(self.services["sleep"])
count = count + 1
# Downloading the Template name
download_template = Template.extract(
self.userapiclient,
template_created.id,
mode="HTTP_DOWNLOAD",
zoneid=self.zone.id
)
self.assertIsNotNone(
download_template,
"Download Template failed"
)
# Verifying the details of downloaded template
self.assertEquals(
"DOWNLOAD_URL_CREATED",
download_template.state,
"Download URL not created for Template"
)
self.assertIsNotNone(
download_template.url,
"Download URL not created for Template"
)
self.assertEquals(
template_created.id,
download_template.id,
"Download Template details are not same as Template created"
)
del self.services["template"]["url"]
del self.services["template"]["format"]
del self.services["template"]["ostype"]
del self.services["template"]["isextractable"]
return
@attr(tags=["advanced", "basic", "provisioning"])
def test_03_edit_template_details(self):
"""
@Desc: Test to Edit Template name, displaytext, OSType
@steps:
Step1: Listing all the Templates for a user
Step2: Verifying that no Templates are listed
Step3: Creating a Templates
Step4: Listing all the Templates again for a user
Step5: Verifying that list size is 1
Step6: Verifying if the template is in ready state.
If yes the continuing
If not waiting and checking for template to be ready till timeout
Step7: Editing the template name
Step8: Verifying that Template name is edited
Step9: Editing the template displaytext
Step10: Verifying that Template displaytext is edited
Step11: Editing the template ostypeid
Step12: Verifying that Template ostypeid is edited
Step13: Editing the template name, displaytext
Step14: Verifying that Template name, displaytext are edited
Step15: Editing the template name, displaytext, ostypeid
Step16: Verifying that Template name, displaytext and ostypeid are edited
"""
# Listing all the Templates for a User
list_templates_before = Template.list(
self.userapiclient,
listall=self.services["listall"],
templatefilter=self.services["templatefilter"]
)
# Verifying that no Templates are listed
self.assertIsNone(
list_templates_before,
"Templates listed for newly created User"
)
self.services["template"]["url"] = "http://10.147.28.7/templates/ttylinux_pv.vhd"
self.services["template"]["format"] = "VHD"
self.services["template"]["ostype"] = self.services["ostype"]
# Creating aTemplate
template_created = Template.register(
self.userapiclient,
self.services["template"],
self.zone.id,
hypervisor=self.hypervisor
)
self.assertIsNotNone(
template_created,
"Template creation failed"
)
self.cleanup.append(template_created)
# Listing all the Templates for a User
list_templates_after = Template.list(
self.userapiclient,
listall=self.services["listall"],
templatefilter=self.services["templatefilter"]
)
status = validateList(list_templates_after)
self.assertEquals(
PASS,
status[0],
"Templates creation failed"
)
# Verifying that list size is 1
self.assertEquals(
1,
len(list_templates_after),
"Failed to create a Template"
)
# Verifying the state of the template to be ready. If not waiting for state to become ready till time out
template_ready = False
count = 0
while template_ready is False:
list_template = Template.list(
self.userapiclient,
id=template_created.id,
listall=self.services["listall"],
templatefilter=self.services["templatefilter"],
)
status = validateList(list_template)
self.assertEquals(
PASS,
status[0],
"Failed to list Templates by Id"
)
if list_template[0].isready is True:
template_ready = True
elif (str(list_template[0].status) == "Error"):
self.fail("Created Template is in Errored state")
break
elif count > 10:
self.fail("Timed out before Template came into ready state")
break
else:
time.sleep(self.services["sleep"])
count = count + 1
# Editing the Template name
edited_template = Template.update(
template_created,
self.userapiclient,
name="NewTemplateName"
)
self.assertIsNotNone(
edited_template,
"Editing Template failed"
)
# Verifying the details of edited template
expected_dict = {
"id":template_created.id,
"name":"NewTemplateName",
"displaytest":template_created.displaytext,
"account":template_created.account,
"domainid":template_created.domainid,
"format":template_created.format,
"ostypeid":template_created.ostypeid,
"templatetype":template_created.templatetype,
}
actual_dict = {
"id":edited_template.id,
"name":edited_template.name,
"displaytest":edited_template.displaytext,
"account":edited_template.account,
"domainid":edited_template.domainid,
"format":edited_template.format,
"ostypeid":edited_template.ostypeid,
"templatetype":edited_template.templatetype,
}
edit_template_status = self.__verify_values(
expected_dict,
actual_dict
)
self.assertEqual(
True,
edit_template_status,
"Edited Template details are not as expected"
)
# Editing the Template displaytext
edited_template = Template.update(
template_created,
self.userapiclient,
displaytext="TemplateDisplaytext"
)
self.assertIsNotNone(
edited_template,
"Editing Template failed"
)
# Verifying the details of edited template
expected_dict = {
"id":template_created.id,
"name":"NewTemplateName",
"displaytest":"TemplateDisplaytext",
"account":template_created.account,
"domainid":template_created.domainid,
"format":template_created.format,
"ostypeid":template_created.ostypeid,
"templatetype":template_created.templatetype,
}
actual_dict = {
"id":edited_template.id,
"name":edited_template.name,
"displaytest":edited_template.displaytext,
"account":edited_template.account,
"domainid":edited_template.domainid,
"format":edited_template.format,
"ostypeid":edited_template.ostypeid,
"templatetype":edited_template.templatetype,
}
edit_template_status = self.__verify_values(
expected_dict,
actual_dict
)
self.assertEqual(
True,
edit_template_status,
"Edited Template details are not as expected"
)
# Editing the Template ostypeid
ostype_list = list_os_types(self.userapiclient)
status = validateList(ostype_list)
self.assertEquals(
PASS,
status[0],
"Failed to list OS Types"
)
for i in range(0, len(ostype_list)):
if ostype_list[i].id != template_created.ostypeid:
newostypeid = ostype_list[i].id
break
edited_template = Template.update(
template_created,
self.userapiclient,
ostypeid=newostypeid
)
self.assertIsNotNone(
edited_template,
"Editing Template failed"
)
# Verifying the details of edited template
expected_dict = {
"id":template_created.id,
"name":"NewTemplateName",
"displaytest":"TemplateDisplaytext",
"account":template_created.account,
"domainid":template_created.domainid,
"format":template_created.format,
"ostypeid":newostypeid,
"templatetype":template_created.templatetype,
}
actual_dict = {
"id":edited_template.id,
"name":edited_template.name,
"displaytest":edited_template.displaytext,
"account":edited_template.account,
"domainid":edited_template.domainid,
"format":edited_template.format,
"ostypeid":edited_template.ostypeid,
"templatetype":edited_template.templatetype,
}
edit_template_status = self.__verify_values(
expected_dict,
actual_dict
)
self.assertEqual(
True,
edit_template_status,
"Edited Template details are not as expected"
)
# Editing the Template name, displaytext
edited_template = Template.update(
template_created,
self.userapiclient,
name=template_created.name,
displaytext=template_created.displaytext
)
self.assertIsNotNone(
edited_template,
"Editing Template failed"
)
# Verifying the details of edited template
expected_dict = {
"id":template_created.id,
"name":template_created.name,
"displaytest":template_created.displaytext,
"account":template_created.account,
"domainid":template_created.domainid,
"format":template_created.format,
"ostypeid":newostypeid,
"templatetype":template_created.templatetype,
}
actual_dict = {
"id":edited_template.id,
"name":edited_template.name,
"displaytest":edited_template.displaytext,
"account":edited_template.account,
"domainid":edited_template.domainid,
"format":edited_template.format,
"ostypeid":edited_template.ostypeid,
"templatetype":edited_template.templatetype,
}
edit_template_status = self.__verify_values(
expected_dict,
actual_dict
)
self.assertEqual(
True,
edit_template_status,
"Edited Template details are not as expected"
)
# Editing the Template name, displaytext, ostypeid
edited_template = Template.update(
template_created,
self.userapiclient,
name="NewTemplateName",
displaytext="TemplateDisplaytext",
ostypeid=template_created.ostypeid
)
self.assertIsNotNone(
edited_template,
"Editing Template failed"
)
# Verifying the details of edited template
expected_dict = {
"id":template_created.id,
"name":"NewTemplateName",
"displaytest":"TemplateDisplaytext",
"account":template_created.account,
"domainid":template_created.domainid,
"format":template_created.format,
"ostypeid":template_created.ostypeid,
"templatetype":template_created.templatetype,
}
actual_dict = {
"id":edited_template.id,
"name":edited_template.name,
"displaytest":edited_template.displaytext,
"account":edited_template.account,
"domainid":edited_template.domainid,
"format":edited_template.format,
"ostypeid":edited_template.ostypeid,
"templatetype":edited_template.templatetype,
}
edit_template_status = self.__verify_values(
expected_dict,
actual_dict
)
self.assertEqual(
True,
edit_template_status,
"Edited Template details are not as expected"
)
del self.services["template"]["url"]
del self.services["template"]["format"]
del self.services["template"]["ostype"]
return
@attr(tags=["advanced", "basic", "provisioning"])
def test_04_copy_template(self):
"""
@Desc: Test to copy Template from one zone to another
@steps:
Step1: Listing Zones available for a user
Step2: Verifying if the zones listed are greater than 1.
If Yes continuing.
If not halting the test.
Step3: Listing all the templates for a user in zone1
Step4: Verifying that no templates are listed
Step5: Listing all the templates for a user in zone2
Step6: Verifying that no templates are listed
Step7: Creating a Template in zone 1
Step8: Listing all the Templates again for a user in zone1
Step9: Verifying that list size is 1
Step10: Listing all the templates for a user in zone2
Step11: Verifying that no templates are listed
Step12: Copying the template created in step7 from zone1 to zone2
Step13: Listing all the templates for a user in zone2
Step14: Verifying that list size is 1
Step15: Listing all the Templates for a user in zone1
Step16: Verifying that list size is 1
"""
# Listing Zones available for a user
zones_list = Zone.list(
self.userapiclient,
available=True
)
status = validateList(zones_list)
self.assertEquals(
PASS,
status[0],
"Failed to list Zones"
)
if not len(zones_list) > 1:
self.fail("Enough zones doesnot exists to copy template")
else:
# Listing all the Templates for a User in Zone 1
list_templates_zone1 = Template.list(
self.userapiclient,
listall=self.services["listall"],
templatefilter=self.services["templatefilter"],
zoneid=zones_list[0].id
)
# Verifying that no Templates are listed
self.assertIsNone(
list_templates_zone1,
"Templates listed for newly created User in Zone1"
)
# Listing all the Templates for a User in Zone 2
list_templates_zone2 = Template.list(
self.userapiclient,
listall=self.services["listall"],
templatefilter=self.services["templatefilter"],
zoneid=zones_list[1].id
)
# Verifying that no Templates are listed
self.assertIsNone(
list_templates_zone2,
"Templates listed for newly created User in Zone2"
)
self.services["template"]["url"] = "http://10.147.28.7/templates/ttylinux_pv.vhd"
self.services["template"]["format"] = "VHD"
self.services["template"]["ostype"] = self.services["ostype"]
#Listing Hypervisors in Zone 1
hypervisor_list = Hypervisor.list(
self.apiClient,
zoneid=zones_list[0].id
)
status = validateList(zones_list)
self.assertEquals(
PASS,
status[0],
"Failed to list Hypervisors in Zone 1"
)
# Creating aTemplate in Zone 1
template_created = Template.register(
self.userapiclient,
self.services["template"],
zones_list[0].id,
hypervisor=hypervisor_list[0].name
)
self.assertIsNotNone(
template_created,
"Template creation failed"
)
self.cleanup.append(template_created)
# Listing all the Templates for a User in Zone 1
list_templates_zone1 = Template.list(
self.userapiclient,
listall=self.services["listall"],
templatefilter=self.services["templatefilter"],
zoneid=zones_list[0].id
)
status = validateList(list_templates_zone1)
self.assertEquals(
PASS,
status[0],
"Templates creation failed in Zone1"
)
# Verifying that list size is 1
self.assertEquals(
1,
len(list_templates_zone1),
"Failed to create a Template"
)
# Listing all the Templates for a User in Zone 2
list_templates_zone2 = Template.list(
self.userapiclient,
listall=self.services["listall"],
templatefilter=self.services["templatefilter"],
zoneid=zones_list[1].id
)
# Verifying that no Templates are listed
self.assertIsNone(
list_templates_zone2,
"Templates listed for newly created User in Zone2"
)
# Verifying the state of the template to be ready. If not waiting for state to become ready till time out
template_ready = False
count = 0
while template_ready is False:
list_template = Template.list(
self.userapiclient,
id=template_created.id,
listall=self.services["listall"],
templatefilter=self.services["templatefilter"],
)
status = validateList(list_template)
self.assertEquals(
PASS,
status[0],
"Failed to list Templates by Id"
)
if list_template[0].isready is True:
template_ready = True
elif (str(list_template[0].status) == "Error"):
self.fail("Created Template is in Errored state")
break
elif count > 10:
self.fail("Timed out before Template came into ready state")
break
else:
time.sleep(self.services["sleep"])
count = count + 1
# Copying the Template from Zone1 to Zone2
copied_template = Template.copy(
self.userapiclient,
template_created.id,
sourcezoneid=template_created.zoneid,
destzoneid=zones_list[1].id
)
self.assertIsNotNone(
copied_template,
"Copying Template from Zone1 to Zone2 failed"
)
# Listing all the Templates for a User in Zone 1
list_templates_zone1 = Template.list(
self.userapiclient,
listall=self.services["listall"],
templatefilter=self.services["templatefilter"],
zoneid=zones_list[0].id
)
status = validateList(list_templates_zone1)
self.assertEquals(
PASS,
status[0],
"Templates creation failed in Zone1"
)
# Verifying that list size is 1
self.assertEquals(
1,
len(list_templates_zone1),
"Failed to create a Template"
)
# Listing all the Templates for a User in Zone 2
list_templates_zone2 = Template.list(
self.userapiclient,
listall=self.services["listall"],
templatefilter=self.services["templatefilter"],
zoneid=zones_list[1].id
)
status = validateList(list_templates_zone2)
self.assertEquals(
PASS,
status[0],
"Template failed to copy into Zone2"
)
# Verifying that list size is 1
self.assertEquals(
1,
len(list_templates_zone2),
"Template failed to copy into Zone2"
)
self.assertNotEquals(
"Connection refused",
list_templates_zone2[0].status,
"Failed to copy Template"
)
self.assertEquals(
True,
list_templates_zone2[0].isready,
"Failed to copy Template"
)
del self.services["template"]["url"]
del self.services["template"]["format"]
del self.services["template"]["ostype"]
return
class TestIsos(cloudstackTestCase):
@classmethod
def setUpClass(cls):
try:
cls._cleanup = []
cls.testClient = super(TestIsos, cls).getClsTestClient()
cls.api_client = cls.testClient.getApiClient()
cls.services = cls.testClient.getParsedTestDataConfig()
# Get Domain, Zone, Template
cls.domain = get_domain(cls.api_client)
cls.zone = get_zone(cls.api_client)
cls.template = get_template(
cls.api_client,
cls.zone.id,
cls.services["ostype"]
)
cls.hypervisor = cls.testClient.getHypervisorInfo()
cls.services['mode'] = cls.zone.networktype
cls.account = Account.create(
cls.api_client,
cls.services["account"],
domainid=cls.domain.id
)
# Getting authentication for user in newly created Account
cls.user = cls.account.user[0]
cls.userapiclient = cls.testClient.getUserApiClient(cls.user.username, cls.domain.name)
cls._cleanup.append(cls.account)
except Exception as e:
cls.tearDownClass()
raise Exception("Warning: Exception in setup : %s" % e)
return
def setUp(self):
self.apiClient = self.testClient.getApiClient()
self.cleanup = []
def tearDown(self):
#Clean up, terminate the created resources
cleanup_resources(self.apiClient, self.cleanup)
return
@classmethod
def tearDownClass(cls):
try:
cleanup_resources(cls.api_client, cls._cleanup)
except Exception as e:
raise Exception("Warning: Exception during cleanup : %s" % e)
return
def __verify_values(self, expected_vals, actual_vals):
"""
@Desc: Function to verify expected and actual values
@Steps:
Step1: Initializing return flag to True
Step1: Verifying length of expected and actual dictionaries is matching.
If not matching returning false
Step2: Listing all the keys from expected dictionary
Step3: Looping through each key from step2 and verifying expected and actual dictionaries have same value
If not making return flag to False
Step4: returning the return flag after all the values are verified
"""
return_flag = True
if len(expected_vals) != len(actual_vals):
return False
keys = expected_vals.keys()
for i in range(0, len(expected_vals)):
exp_val = expected_vals[keys[i]]
act_val = actual_vals[keys[i]]
if exp_val == act_val:
return_flag = return_flag and True
else:
return_flag = return_flag and False
self.debug("expected Value: %s, is not matching with actual value: %s" % (
exp_val,
act_val
))
return return_flag
@attr(tags=["advanced", "basic", "provisioning"])
def test_01_list_isos_pagination(self):
"""
@Desc: Test to List ISO's pagination
@steps:
Step1: Listing all the ISO's for a user
Step2: Verifying that no ISO's are listed
Step3: Creating (page size + 1) number of ISO's
Step4: Listing all the ISO's again for a user
Step5: Verifying that list size is (page size + 1)
Step6: Listing all the ISO's in page1
Step7: Verifying that list size is (page size)
Step8: Listing all the ISO's in page2
Step9: Verifying that list size is 1
Step10: Listing the ISO's by Id
Step11: Verifying if the ISO is downloaded and ready.
If yes the continuing
If not waiting and checking for iso to be ready till timeout
Step12: Deleting the ISO present in page 2
Step13: Listing all the ISO's in page2
Step14: Verifying that no ISO's are listed
"""
# Listing all the ISO's for a User
list_iso_before = Iso.list(
self.userapiclient,
listall=self.services["listall"],
isofilter=self.services["templatefilter"]
)
# Verifying that no ISOs are listed
self.assertIsNone(
list_iso_before,
"ISOs listed for newly created User"
)
self.services["iso"]["zoneid"] = self.zone.id
# Creating pagesize + 1 number of ISO's
for i in range(0, (self.services["pagesize"] + 1)):
iso_created = Iso.create(
self.userapiclient,
self.services["iso"]
)
self.assertIsNotNone(
iso_created,
"ISO creation failed"
)
if(i < self.services["pagesize"]):
self.cleanup.append(iso_created)
# Listing all the ISO's for a User
list_iso_after = Iso.list(
self.userapiclient,
listall=self.services["listall"],
isofilter=self.services["templatefilter"]
)
status = validateList(list_iso_after)
self.assertEquals(
PASS,
status[0],
"ISO's creation failed"
)
# Verifying that list size is pagesize + 1
self.assertEquals(
self.services["pagesize"] + 1,
len(list_iso_after),
"Failed to create pagesize + 1 number of ISO's"
)
# Listing all the ISO's in page 1
list_iso_page1 = Iso.list(
self.userapiclient,
listall=self.services["listall"],
isofilter=self.services["templatefilter"],
page=1,
pagesize=self.services["pagesize"]
)
status = validateList(list_iso_page1)
self.assertEquals(
PASS,
status[0],
"Failed to list ISO's in page 1"
)
# Verifying the list size to be equal to pagesize
self.assertEquals(
self.services["pagesize"],
len(list_iso_page1),
"Size of ISO's in page 1 is not matching"
)
# Listing all the Templates in page 2
list_iso_page2 = Iso.list(
self.userapiclient,
listall=self.services["listall"],
isofilter=self.services["templatefilter"],
page=2,
pagesize=self.services["pagesize"]
)
status = validateList(list_iso_page2)
self.assertEquals(
PASS,
status[0],
"Failed to list ISo's in page 2"
)
# Verifying the list size to be equal to 1
self.assertEquals(
1,
len(list_iso_page2),
"Size of ISO's in page 2 is not matching"
)
# Verifying the state of the ISO to be ready. If not waiting for state to become ready
iso_ready = False
count = 0
while iso_ready is False:
list_iso = Iso.list(
self.userapiclient,
listall=self.services["listall"],
isofilter=self.services["templatefilter"],
id=iso_created.id
)
status = validateList(list_iso)
self.assertEquals(
PASS,
status[0],
"Failed to list ISO by Id"
)
if list_iso[0].isready is True:
iso_ready = True
elif (str(list_iso[0].status) == "Error"):
self.fail("Created ISO is in Errored state")
break
elif count > 10:
self.fail("Timed out before ISO came into ready state")
break
else:
time.sleep(self.services["sleep"])
count = count + 1
# Deleting the ISO present in page 2
Iso.delete(
iso_created,
self.userapiclient
)
# Listing all the ISO's in page 2 again
list_iso_page2 = Iso.list(
self.userapiclient,
listall=self.services["listall"],
isofilter=self.services["templatefilter"],
page=2,
pagesize=self.services["pagesize"]
)
# Verifying that there are no ISO's listed
self.assertIsNone(
list_iso_page2,
"ISO's not deleted from page 2"
)
del self.services["iso"]["zoneid"]
return
@attr(tags=["advanced", "basic", "provisioning"])
def test_02_download_iso(self):
"""
@Desc: Test to Download ISO
@steps:
Step1: Listing all the ISO's for a user
Step2: Verifying that no ISO's are listed
Step3: Creating an ISO
Step4: Listing all the ISO's again for a user
Step5: Verifying that list size is 1
Step6: Verifying if the ISO is in ready state.
If yes the continuing
If not waiting and checking for template to be ready till timeout
Step7: Downloading the ISO (Extract)
Step8: Verifying the details of downloaded ISO
"""
# Listing all the ISO's for a User
list_iso_before = Iso.list(
self.userapiclient,
listall=self.services["listall"],
isofilter=self.services["templatefilter"]
)
# Verifying that no ISOs are listed
self.assertIsNone(
list_iso_before,
"ISOs listed for newly created User"
)
self.services["iso"]["zoneid"] = self.zone.id
self.services["iso"]["isextractable"] = True
# Creating an ISO's
iso_created = Iso.create(
self.userapiclient,
self.services["iso"]
)
self.assertIsNotNone(
iso_created,
"ISO creation failed"
)
self.cleanup.append(iso_created)
# Listing all the ISO's for a User
list_iso_after = Iso.list(
self.userapiclient,
listall=self.services["listall"],
isofilter=self.services["templatefilter"]
)
status = validateList(list_iso_after)
self.assertEquals(
PASS,
status[0],
"ISO's creation failed"
)
# Verifying that list size is 1
self.assertEquals(
1,
len(list_iso_after),
"Failed to create an ISO's"
)
# Verifying the state of the ISO to be ready. If not waiting for state to become ready
iso_ready = False
count = 0
while iso_ready is False:
list_iso = Iso.list(
self.userapiclient,
listall=self.services["listall"],
isofilter=self.services["templatefilter"],
id=iso_created.id
)
status = validateList(list_iso)
self.assertEquals(
PASS,
status[0],
"Failed to list ISO by Id"
)
if list_iso[0].isready is True:
iso_ready = True
elif (str(list_iso[0].status) == "Error"):
self.fail("Created ISO is in Errored state")
break
elif count > 10:
self.fail("Timed out before ISO came into ready state")
break
else:
time.sleep(self.services["sleep"])
count = count + 1
# Downloading the ISO
download_iso = Iso.extract(
self.userapiclient,
iso_created.id,
mode="HTTP_DOWNLOAD",
zoneid=self.zone.id
)
self.assertIsNotNone(
download_iso,
"Download ISO failed"
)
# Verifying the details of downloaded ISO
self.assertEquals(
"DOWNLOAD_URL_CREATED",
download_iso.state,
"Download URL not created for ISO"
)
self.assertIsNotNone(
download_iso.url,
"Download URL not created for ISO"
)
self.assertEquals(
iso_created.id,
download_iso.id,
"Download ISO details are not same as ISO created"
)
del self.services["iso"]["zoneid"]
del self.services["iso"]["isextractable"]
return
@attr(tags=["advanced", "basic", "provisioning"])
def test_03_edit_iso_details(self):
"""
@Desc: Test to Edit ISO name, displaytext, OSType
@steps:
Step1: Listing all the ISO's for a user
Step2: Verifying that no ISO's are listed
Step3: Creating an ISO
Step4: Listing all the ISO's again for a user
Step5: Verifying that list size is 1
Step6: Verifying if the ISO is in ready state.
If yes the continuing
If not waiting and checking for template to be ready till timeout
Step7: Editing the ISO's name, displaytext
Step8: Verifying that ISO name and displaytext are edited
Step9: Editing the ISO name, displaytext, ostypeid
Step10: Verifying that ISO name, displaytext and ostypeid are edited
"""
# Listing all the ISO's for a User
list_iso_before = Iso.list(
self.userapiclient,
listall=self.services["listall"],
isofilter=self.services["templatefilter"]
)
# Verifying that no ISOs are listed
self.assertIsNone(
list_iso_before,
"ISOs listed for newly created User"
)
self.services["iso"]["zoneid"] = self.zone.id
# Creating an ISO's
iso_created = Iso.create(
self.userapiclient,
self.services["iso"]
)
self.assertIsNotNone(
iso_created,
"ISO creation failed"
)
self.cleanup.append(iso_created)
# Listing all the ISO's for a User
list_iso_after = Iso.list(
self.userapiclient,
listall=self.services["listall"],
isofilter=self.services["templatefilter"]
)
status = validateList(list_iso_after)
self.assertEquals(
PASS,
status[0],
"ISO's creation failed"
)
# Verifying that list size is 1
self.assertEquals(
1,
len(list_iso_after),
"Failed to create an ISO's"
)
# Verifying the state of the ISO to be ready. If not waiting for state to become ready
iso_ready = False
count = 0
while iso_ready is False:
list_iso = Iso.list(
self.userapiclient,
listall=self.services["listall"],
isofilter=self.services["templatefilter"],
id=iso_created.id
)
status = validateList(list_iso)
self.assertEquals(
PASS,
status[0],
"Failed to list ISO by Id"
)
if list_iso[0].isready is True:
iso_ready = True
elif (str(list_iso[0].status) == "Error"):
self.fail("Created ISO is in Errored state")
break
elif count > 10:
self.fail("Timed out before ISO came into ready state")
break
else:
time.sleep(self.services["sleep"])
count = count + 1
# Editing the ISO name, displaytext
edited_iso = Iso.update(
iso_created,
self.userapiclient,
name="NewISOName",
displaytext="NewISODisplayText"
)
self.assertIsNotNone(
edited_iso,
"Editing ISO failed"
)
# Verifying the details of edited template
expected_dict = {
"id":iso_created.id,
"name":"NewISOName",
"displaytest":"NewISODisplayText",
"account":iso_created.account,
"domainid":iso_created.domainid,
"isfeatured":iso_created.isfeatured,
"ostypeid":iso_created.ostypeid,
"ispublic":iso_created.ispublic,
}
actual_dict = {
"id":edited_iso.id,
"name":edited_iso.name,
"displaytest":edited_iso.displaytext,
"account":edited_iso.account,
"domainid":edited_iso.domainid,
"isfeatured":edited_iso.isfeatured,
"ostypeid":edited_iso.ostypeid,
"ispublic":edited_iso.ispublic,
}
edit_iso_status = self.__verify_values(
expected_dict,
actual_dict
)
self.assertEqual(
True,
edit_iso_status,
"Edited ISO details are not as expected"
)
# Editing the ISO name, displaytext, ostypeid
ostype_list = list_os_types(self.userapiclient)
status = validateList(ostype_list)
self.assertEquals(
PASS,
status[0],
"Failed to list OS Types"
)
for i in range(0, len(ostype_list)):
if ostype_list[i].id != iso_created.ostypeid:
newostypeid = ostype_list[i].id
break
edited_iso = Iso.update(
iso_created,
self.userapiclient,
name=iso_created.name,
displaytext=iso_created.displaytext,
ostypeid=newostypeid
)
self.assertIsNotNone(
edited_iso,
"Editing ISO failed"
)
# Verifying the details of edited template
expected_dict = {
"id":iso_created.id,
"name":iso_created.name,
"displaytest":iso_created.displaytext,
"account":iso_created.account,
"domainid":iso_created.domainid,
"isfeatured":iso_created.isfeatured,
"ostypeid":newostypeid,
"ispublic":iso_created.ispublic,
}
actual_dict = {
"id":edited_iso.id,
"name":edited_iso.name,
"displaytest":edited_iso.displaytext,
"account":edited_iso.account,
"domainid":edited_iso.domainid,
"isfeatured":edited_iso.isfeatured,
"ostypeid":edited_iso.ostypeid,
"ispublic":edited_iso.ispublic,
}
edit_iso_status = self.__verify_values(
expected_dict,
actual_dict
)
self.assertEqual(
True,
edit_iso_status,
"Edited ISO details are not as expected"
)
del self.services["iso"]["zoneid"]
return
@attr(tags=["advanced", "basic", "provisioning"])
def test_04_copy_iso(self):
"""
@Desc: Test to copy ISO from one zone to another
@steps:
Step1: Listing Zones available for a user
Step2: Verifying if the zones listed are greater than 1.
If Yes continuing.
If not halting the test.
Step3: Listing all the ISO's for a user in zone1
Step4: Verifying that no ISO's are listed
Step5: Listing all the ISO's for a user in zone2
Step6: Verifying that no ISO's are listed
Step7: Creating an ISO in zone 1
Step8: Listing all the ISO's again for a user in zone1
Step9: Verifying that list size is 1
Step10: Listing all the ISO's for a user in zone2
Step11: Verifying that no ISO's are listed
Step12: Copying the ISO created in step7 from zone1 to zone2
Step13: Listing all the ISO's for a user in zone2
Step14: Verifying that list size is 1
Step15: Listing all the ISO's for a user in zone1
Step16: Verifying that list size is 1
"""
# Listing Zones available for a user
zones_list = Zone.list(
self.userapiclient,
available=True
)
status = validateList(zones_list)
self.assertEquals(
PASS,
status[0],
"Failed to list Zones"
)
if not len(zones_list) > 1:
self.fail("Enough zones doesnot exists to copy iso")
else:
# Listing all the ISO's for a User in Zone 1
list_isos_zone1 = Iso.list(
self.userapiclient,
listall=self.services["listall"],
isofilter=self.services["templatefilter"],
zoneid=zones_list[0].id
)
# Verifying that no ISO's are listed
self.assertIsNone(
list_isos_zone1,
"ISO's listed for newly created User in Zone1"
)
# Listing all the ISO's for a User in Zone 2
list_isos_zone2 = Iso.list(
self.userapiclient,
listall=self.services["listall"],
isofilter=self.services["templatefilter"],
zoneid=zones_list[1].id
)
# Verifying that no ISO's are listed
self.assertIsNone(
list_isos_zone2,
"ISO's listed for newly created User in Zone2"
)
self.services["iso"]["zoneid"] = zones_list[0].id
# Creating an ISO in Zone 1
iso_created = Iso.create(
self.userapiclient,
self.services["iso"]
)
self.assertIsNotNone(
iso_created,
"ISO creation failed"
)
self.cleanup.append(iso_created)
# Listing all the ISO's for a User in Zone 1
list_isos_zone1 = Iso.list(
self.userapiclient,
listall=self.services["listall"],
isofilter=self.services["templatefilter"],
zoneid=zones_list[0].id
)
status = validateList(list_isos_zone1)
self.assertEquals(
PASS,
status[0],
"ISO creation failed in Zone1"
)
# Verifying that list size is 1
self.assertEquals(
1,
len(list_isos_zone1),
"Failed to create a Template"
)
# Listing all the ISO's for a User in Zone 2
list_isos_zone2 = Iso.list(
self.userapiclient,
listall=self.services["listall"],
isofilter=self.services["templatefilter"],
zoneid=zones_list[1].id
)
# Verifying that no ISO's are listed
self.assertIsNone(
list_isos_zone2,
"ISO's listed for newly created User in Zone2"
)
# Verifying the state of the ISO to be ready. If not waiting for state to become ready
iso_ready = False
count = 0
while iso_ready is False:
list_iso = Iso.list(
self.userapiclient,
listall=self.services["listall"],
isofilter=self.services["templatefilter"],
id=iso_created.id
)
status = validateList(list_iso)
self.assertEquals(
PASS,
status[0],
"Failed to list ISO by Id"
)
if list_iso[0].isready is True:
iso_ready = True
elif (str(list_iso[0].status) == "Error"):
self.fail("Created ISO is in Errored state")
break
elif count > 10:
self.fail("Timed out before ISO came into ready state")
break
else:
time.sleep(self.services["sleep"])
count = count + 1
# Copying the ISO from Zone1 to Zone2
copied_iso = Iso.copy(
self.userapiclient,
iso_created.id,
sourcezoneid=iso_created.zoneid,
destzoneid=zones_list[1].id
)
self.assertIsNotNone(
copied_iso,
"Copying ISO from Zone1 to Zone2 failed"
)
# Listing all the ISO's for a User in Zone 1
list_isos_zone1 = Iso.list(
self.userapiclient,
listall=self.services["listall"],
isofilter=self.services["templatefilter"],
zoneid=zones_list[0].id
)
status = validateList(list_isos_zone1)
self.assertEquals(
PASS,
status[0],
"ISO creation failed in Zone1"
)
# Verifying that list size is 1
self.assertEquals(
1,
len(list_isos_zone1),
"Failed to create a Template"
)
# Listing all the ISO's for a User in Zone 2
list_isos_zone2 = Iso.list(
self.userapiclient,
listall=self.services["listall"],
isofilter=self.services["templatefilter"],
zoneid=zones_list[1].id
)
status = validateList(list_isos_zone2)
self.assertEquals(
PASS,
status[0],
"ISO failed to copy into Zone2"
)
# Verifying that list size is 1
self.assertEquals(
1,
len(list_isos_zone2),
"ISO failed to copy into Zone2"
)
self.assertNotEquals(
"Connection refused",
list_isos_zone2[0].status,
"Failed to copy ISO"
)
self.assertEquals(
True,
list_isos_zone2[0].isready,
"Failed to copy ISO"
)
del self.services["iso"]["zoneid"]
return