mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
4495 lines
160 KiB
Python
4495 lines
160 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 cloudstackTestCase
|
|
import unittest
|
|
from marvin.lib.utils import cleanup_resources, validateList
|
|
from marvin.lib.base import (Account,
|
|
ServiceOffering,
|
|
NetworkOffering,
|
|
Network,
|
|
VirtualMachine,
|
|
SecurityGroup,
|
|
DiskOffering,
|
|
Resources,
|
|
Iso,
|
|
Configurations,
|
|
SSHKeyPair,
|
|
Volume,
|
|
VmSnapshot,
|
|
Zone,
|
|
Template,
|
|
Host)
|
|
from marvin.lib.common import (get_zone,
|
|
get_template,
|
|
get_domain,
|
|
find_storage_pool_type)
|
|
from marvin.codes import PASS
|
|
from marvin.sshClient import SshClient
|
|
from nose.plugins.attrib import attr
|
|
import time
|
|
from marvin.cloudstackException import CloudstackAPIException
|
|
|
|
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()
|
|
cls.hypervisor = cls.testClient.getHypervisorInfo()
|
|
# Get Domain, Zone, Template
|
|
cls.domain = get_domain(cls.api_client)
|
|
cls.zone = get_zone(
|
|
cls.api_client,
|
|
cls.testClient.getZoneForTests())
|
|
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.hypervisor
|
|
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._cleanup.append(cls.service_offering)
|
|
cls._cleanup.append(cls.disk_offering)
|
|
except Exception as e:
|
|
cls.tearDownClass()
|
|
raise Exception("Warning: Exception in setup : %s" % e)
|
|
return
|
|
|
|
def setUp(self):
|
|
|
|
self.apiClient = self.testClient.getApiClient()
|
|
self.account = Account.create(
|
|
self.apiClient,
|
|
self.services["account"],
|
|
domainid=self.domain.id
|
|
)
|
|
# Getting authentication for user in newly created Account
|
|
self.user = self.account.user[0]
|
|
self.userapiclient = self.testClient.getUserApiClient(
|
|
self.user.username,
|
|
self.domain.name)
|
|
# Updating resource Limits
|
|
for i in range(0, 12):
|
|
Resources.updateLimit(
|
|
self.api_client,
|
|
account=self.account.name,
|
|
domainid=self.domain.id,
|
|
max=-1,
|
|
resourcetype=i
|
|
)
|
|
|
|
self.cleanup = [self.account, ]
|
|
|
|
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 = list(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"], required_hardware="false")
|
|
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"
|
|
)
|
|
|
|
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.assertEqual(
|
|
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.assertEqual(
|
|
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.assertEqual(
|
|
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.assertNotEqual(
|
|
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.apiClient, expunge=True)
|
|
|
|
# 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"], required_hardware="false")
|
|
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"
|
|
)
|
|
# 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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"Newly created VM is not in Running state"
|
|
)
|
|
# Verifying list size is 1
|
|
self.assertEqual(
|
|
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"], required_hardware="false")
|
|
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"
|
|
)
|
|
# 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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"Stopped VM is not in Stopped state"
|
|
)
|
|
# Verifying list size is 1
|
|
self.assertEqual(
|
|
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"], required_hardware="false")
|
|
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, expunge=False)
|
|
# 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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"Destroyed VM is not in Destroyed state"
|
|
)
|
|
# Verifying that the length of the destroyed VMs list should be 1
|
|
self.assertEqual(
|
|
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"], required_hardware="false")
|
|
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"
|
|
)
|
|
# 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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"Listing of VM after creation failed"
|
|
)
|
|
self.assertEqual(
|
|
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.assertEqual(
|
|
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"], required_hardware="false")
|
|
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"
|
|
)
|
|
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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"VM's creation failed"
|
|
)
|
|
self.assertEqual(
|
|
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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"Failed to list VM by Name"
|
|
)
|
|
# Verifying that the size of the list is 1
|
|
self.assertEqual(
|
|
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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"Failed to list VM by Name"
|
|
)
|
|
# Verifying that the size of the list is 2
|
|
self.assertEqual(
|
|
2,
|
|
len(list_vm_bypartialname),
|
|
"VM list by full name count is not matching"
|
|
)
|
|
return
|
|
|
|
@attr(tags=["advanced", "basic"], required_hardware="false")
|
|
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"
|
|
)
|
|
# 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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"VM's creation failed"
|
|
)
|
|
self.assertEqual(
|
|
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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"List VM by name and state failed"
|
|
)
|
|
# Verifying that the size of the list is 1
|
|
self.assertEqual(
|
|
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"], required_hardware="false")
|
|
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.assertEqual(
|
|
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"
|
|
)
|
|
# 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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"VM creation failed"
|
|
)
|
|
# Verifying that the size of the list is 1
|
|
self.assertEqual(
|
|
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"], required_hardware="false")
|
|
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.assertEqual(
|
|
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"
|
|
)
|
|
# 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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"VM creation failed"
|
|
)
|
|
# Verifying that the size of the list is 1
|
|
self.assertEqual(
|
|
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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"Listing VM's by name and zone failed"
|
|
)
|
|
# Verifying that the size of the list is 1
|
|
self.assertEqual(
|
|
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"], required_hardware="false")
|
|
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"
|
|
)
|
|
# 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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"VM creation failed"
|
|
)
|
|
# Verifying that the size of the list is 1
|
|
self.assertEqual(
|
|
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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"Listing VM's by name and zone failed"
|
|
)
|
|
# Verifying that the size of the list is 1
|
|
self.assertEqual(
|
|
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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"Listing VM's by name, account and zone failed"
|
|
)
|
|
# Verifying that the size of the list is 1
|
|
self.assertEqual(
|
|
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"], required_hardware="true")
|
|
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"
|
|
)
|
|
# 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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"VM creation failed"
|
|
)
|
|
# Verifying that the size of the list is 1
|
|
self.assertEqual(
|
|
1,
|
|
len(list_vms_after),
|
|
"VM list count is not matching"
|
|
)
|
|
# Stopping the VM deployed above
|
|
vm_created.stop(
|
|
self.userapiclient,
|
|
forced=True
|
|
)
|
|
# 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.assertEqual(
|
|
"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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"Listing of Key pairs failed"
|
|
)
|
|
# Verifying that list size is increased by 1
|
|
self.assertEqual(
|
|
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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"Listing of VM failed"
|
|
)
|
|
self.assertEqual(
|
|
1,
|
|
len(list_vm),
|
|
"VMs list is not as expected"
|
|
)
|
|
# Verifying that VM's SSH keypair is set to newly created keypair
|
|
self.assertEqual(
|
|
new_keypair.name,
|
|
list_vm[0].keypair,
|
|
"VM is not set to newly created SSH Key pair"
|
|
)
|
|
return
|
|
|
|
@attr(tags=["advanced", "basic"], required_hardware="true")
|
|
def test_12_running_vm_change_service(self):
|
|
"""
|
|
@Desc: Test to verify change service for Running VM
|
|
@Steps:
|
|
Step1: Deploying a VM
|
|
Step2: Listing all the existing service offerings
|
|
Step3: 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.
|
|
Step4: Perform change service for the Running VM
|
|
Step5: Verifying that change service is not possible for Running 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"
|
|
)
|
|
# Listing details of current Service Offering
|
|
vm_so_list = ServiceOffering.list(
|
|
self.userapiclient,
|
|
id=vm_created.serviceofferingid
|
|
)
|
|
status = validateList(vm_so_list)
|
|
self.assertEqual(
|
|
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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"VM creation failed"
|
|
)
|
|
# Verifying that the size of the list is 1
|
|
self.assertEqual(
|
|
1,
|
|
len(list_vms_after),
|
|
"VM list count is not matching"
|
|
)
|
|
# 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 Running VM
|
|
with self.assertRaises(Exception):
|
|
vm_created.change_service_offering(
|
|
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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"Listing of VM failed"
|
|
)
|
|
self.assertEqual(
|
|
1,
|
|
len(list_vms_after),
|
|
"VMs list is not as expected"
|
|
)
|
|
# Verifying that VM's service offerings is not changed
|
|
self.assertEqual(
|
|
current_so.id,
|
|
list_vms_after[0].serviceofferingid,
|
|
"VM is not containing old Service Offering"
|
|
)
|
|
return
|
|
|
|
@attr(tags=["advanced"], required_hardware="true")
|
|
def test_13_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
|
|
"""
|
|
if self.hypervisor.lower() in ['hyperv']:
|
|
self.skipTest(
|
|
"This feature is not supported on existing hypervisor.\
|
|
Hence, skipping the test")
|
|
|
|
hypervisorIsVmware = False
|
|
|
|
if self.hypervisor.lower() == "vmware":
|
|
hypervisorIsVmware = True
|
|
|
|
# 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,
|
|
mode=self.zone.networktype if hypervisorIsVmware else "default"
|
|
)
|
|
self.assertIsNotNone(
|
|
vm_created,
|
|
"VM creation failed"
|
|
)
|
|
# 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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"VM creation failed"
|
|
)
|
|
# Verifying that the size of the list is 1
|
|
self.assertEqual(
|
|
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,
|
|
type="Isolated"
|
|
)
|
|
status = validateList(list_network_before)
|
|
self.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"Default Network not created when deploying a VM"
|
|
)
|
|
# Verifying that only 1 network is created while deploying a VM
|
|
self.assertEqual(
|
|
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"
|
|
)
|
|
# Listing all the networks again
|
|
list_network_after = Network.list(
|
|
self.userapiclient,
|
|
zoneid=self.zone.id,
|
|
account=self.account.name,
|
|
domainid=self.domain.id,
|
|
type="Isolated"
|
|
)
|
|
status = validateList(list_network_after)
|
|
self.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"List of Networks failed"
|
|
)
|
|
# Verifying that list size is 2
|
|
self.assertEqual(
|
|
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.assertEqual(
|
|
1,
|
|
len(vm_nics_before),
|
|
"VM Nic count is not matching"
|
|
)
|
|
# Verifying that the nic is same as the default network listed above
|
|
self.assertEqual(
|
|
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.assertEqual(
|
|
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.assertEqual(
|
|
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.assertEqual(
|
|
1,
|
|
default_count,
|
|
"Default NIC count is not matching"
|
|
)
|
|
# Verifying that default NIC is same the network created when VM is
|
|
# deployed
|
|
self.assertEqual(
|
|
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.assertEqual(
|
|
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.assertEqual(
|
|
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.assertEqual(
|
|
1,
|
|
default_count,
|
|
"Default NIC count is not matching"
|
|
)
|
|
# Verifying that default NIC is same the newly updated network (network
|
|
# 2)
|
|
self.assertEqual(
|
|
network2.id,
|
|
default_nic.networkid,
|
|
"Default NIC is not matching for VM"
|
|
)
|
|
|
|
# If hypervisor is Vmware, then check if
|
|
# the vmware tools are installed and the process is running
|
|
# Vmware tools are necessary for remove nic operations (vmware 5.5+)
|
|
isVmwareToolInstalled = False
|
|
if hypervisorIsVmware:
|
|
sshClient = vm_created.get_ssh_client()
|
|
result = str(
|
|
sshClient.execute("service vmware-tools status")).lower()
|
|
self.debug("and result is: %s" % result)
|
|
if "running" in result:
|
|
isVmwareToolInstalled = True
|
|
|
|
goForUnplugOperation = True
|
|
# If Vmware tools are not installed in case of vmware hypervisor
|
|
# then don't go further for unplug operation (remove nic) as it won't
|
|
# be supported
|
|
if hypervisorIsVmware and not isVmwareToolInstalled:
|
|
goForUnplugOperation = False
|
|
|
|
if goForUnplugOperation:
|
|
# 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.assertEqual(
|
|
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.assertEqual(
|
|
1,
|
|
len(vm_nics_after),
|
|
"VM NIC's count is not matching"
|
|
)
|
|
# Verifying the nic network is same as the default nic network
|
|
self.assertEqual(
|
|
network2.id,
|
|
vm_nics_after[0].networkid,
|
|
"VM NIC is not same as expected"
|
|
)
|
|
return
|
|
@attr(tags=["advanced", "basic"], required_hardware="true")
|
|
def test_14_Create_vm_with_same_sshkey(self):
|
|
"""
|
|
@Desc: Test to verify API call Register ssh key pair fails when uses same public key for differnet key name
|
|
"""
|
|
|
|
|
|
# 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 first Key pair
|
|
new_keypair1 = 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_keypair1,
|
|
"New Key pair generation failed"
|
|
)
|
|
self.assertEqual(
|
|
"keypair1",
|
|
new_keypair1.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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"Listing of Key pairs failed"
|
|
)
|
|
# Verifying that list size is increased by 1
|
|
self.assertEqual(
|
|
list_keypairs_before_size + 1,
|
|
len(list_keypairs_after),
|
|
"List count is not matching"
|
|
)
|
|
|
|
# Deploying a VM with keypair 1
|
|
first_vm_created = VirtualMachine.create(
|
|
self.userapiclient,
|
|
self.services["virtual_machine"],
|
|
accountid=self.account.name,
|
|
domainid=self.account.domainid,
|
|
serviceofferingid=self.service_offering.id,
|
|
keypair=new_keypair1.name
|
|
)
|
|
self.assertIsNotNone(
|
|
first_vm_created,
|
|
"VM creation failed"
|
|
)
|
|
# Listing all the VMs for a user again
|
|
list_vms_after = VirtualMachine.list(
|
|
self.userapiclient,id=first_vm_created.id,
|
|
listall=True,
|
|
)
|
|
status = validateList(list_vms_after)
|
|
self.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"VM creation failed"
|
|
)
|
|
vm = list_vms_after[0]
|
|
self.assertEqual(
|
|
vm.state,
|
|
"Running",
|
|
"VM state should be running after deployment")
|
|
self.assertEqual(vm.keypair , new_keypair1.name , "VM keypair name is not keypair1")
|
|
|
|
try:
|
|
|
|
# Registering second key pair using same public key
|
|
new_keypair2 = SSHKeyPair.register(
|
|
self.userapiclient,
|
|
name="keypair2",
|
|
publickey="ssh-rsa: e6:9a:1e:b5:98:75:88:5d:56:bc:92:7b:43:48:05:b2")
|
|
self.fail("SSH Key creation passed using same public key ")
|
|
except CloudstackAPIException as e:
|
|
self.assertRaises("Exception Raised : %s" % e)
|
|
|
|
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()
|
|
cls.hypervisor = cls.testClient.getHypervisorInfo()
|
|
# Get Domain, Zone, Template
|
|
cls.domain = get_domain(cls.api_client)
|
|
cls.zone = get_zone(
|
|
cls.api_client,
|
|
cls.testClient.getZoneForTests())
|
|
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.hypervisor
|
|
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._cleanup.append(cls.service_offering)
|
|
cls._cleanup.append(cls.disk_offering)
|
|
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 = []
|
|
self.account = Account.create(
|
|
self.apiClient,
|
|
self.services["account"],
|
|
domainid=self.domain.id
|
|
)
|
|
# Getting authentication for user in newly created Account
|
|
self.user = self.account.user[0]
|
|
self.userapiclient = self.testClient.getUserApiClient(
|
|
self.user.username,
|
|
self.domain.name)
|
|
# Updating resource Limits
|
|
for i in range(0, 8):
|
|
Resources.updateLimit(
|
|
self.api_client,
|
|
account=self.account.name,
|
|
domainid=self.domain.id,
|
|
max=-1,
|
|
resourcetype=i
|
|
)
|
|
self.cleanup.append(self.account)
|
|
|
|
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 = list(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"], required_hardware="false")
|
|
def test_27_VM_restore_ES3467(self):
|
|
"""
|
|
@Desc:Test to verify order of root and data disk remains same on Xenserver after VM reset
|
|
@Steps :
|
|
1.Create VM with data disk from Windows template
|
|
5.check disk sequence on hypervisor: 1st = root disk, 2nd = data disk
|
|
6. Issue "reset VM" command on CCP
|
|
7. check disk sequence on hypervisor remains same and VM starts successfully
|
|
"""
|
|
if self.hypervisor.lower() in ['kvm', 'hyperv', 'lxc', 'vmware']:
|
|
self.skipTest(
|
|
"This test not applicable on existing hypervisor. Hence,\
|
|
skipping the test")
|
|
try:
|
|
|
|
template = Template.register(self.apiClient,
|
|
self.services["Windows 7 (64-bit)"],
|
|
zoneid=self.zone.id,
|
|
account=self.account.name,
|
|
domainid=self.domain.id)
|
|
|
|
self.debug(
|
|
"Registered a template of format: %s with ID: %s" % (
|
|
self.services["Windows 7 (64-bit)"]["format"],
|
|
template.id
|
|
))
|
|
template.download(self.apiClient)
|
|
self.cleanup.append(template)
|
|
# Wait for template status to be changed across
|
|
time.sleep(self.services["sleep"])
|
|
timeout = self.services["timeout"]
|
|
while True:
|
|
list_template_response = Template.list(
|
|
self.apiClient,
|
|
templatefilter='all',
|
|
id=template.id,
|
|
zoneid=self.zone.id,
|
|
account=self.account.name,
|
|
domainid=self.account.domainid)
|
|
if isinstance(list_template_response, list):
|
|
break
|
|
elif timeout == 0:
|
|
raise Exception("List template failed!")
|
|
|
|
time.sleep(5)
|
|
timeout -= 1
|
|
# Verify template response to check whether template added successfully
|
|
status = validateList(list_template_response)
|
|
self.assertEqual(PASS, status[0], "Template download failed")
|
|
|
|
self.assertNotEqual(
|
|
len(list_template_response),
|
|
0,
|
|
"Check template available in List Templates"
|
|
)
|
|
|
|
template_response = list_template_response[0]
|
|
self.assertEqual(
|
|
template_response.isready,
|
|
True,
|
|
"Template state is not ready, it is %s" % template_response.isready
|
|
)
|
|
disk_offering = DiskOffering.create(
|
|
self.api_client,
|
|
self.services["disk_offering"]
|
|
)
|
|
self.cleanup.append(disk_offering)
|
|
# Deploy new virtual machine using template
|
|
virtual_machine = VirtualMachine.create(
|
|
self.apiClient,
|
|
self.services["virtual_machine"],
|
|
templateid=template.id,
|
|
accountid=self.account.name,
|
|
domainid=self.account.domainid,
|
|
serviceofferingid=self.service_offering.id,
|
|
diskofferingid=disk_offering.id
|
|
)
|
|
self.debug("creating an instance with template ID: %s" % template.id)
|
|
vm_response = VirtualMachine.list(self.apiClient,
|
|
id=virtual_machine.id,
|
|
account=self.account.name,
|
|
domainid=self.account.domainid)
|
|
self.assertEqual(
|
|
isinstance(vm_response, list),
|
|
True,
|
|
"Check for list VMs response after VM deployment"
|
|
)
|
|
# Verify VM response to check whether VM deployment was successful
|
|
self.assertNotEqual(
|
|
len(vm_response),
|
|
0,
|
|
"Check VMs available in List VMs response"
|
|
)
|
|
vm = vm_response[0]
|
|
self.assertEqual(
|
|
vm.state,
|
|
'Running',
|
|
"Check the state of VM created from Template"
|
|
)
|
|
self.cleanup.append(virtual_machine)
|
|
list_volume_response = Volume.list(
|
|
self.apiClient,
|
|
virtualmachineid=virtual_machine.id,
|
|
type='ROOT',
|
|
listall=True
|
|
)
|
|
cmd = "xe vbd-list vm-name-label=" + virtual_machine.instancename + " vdi-name-label=" + \
|
|
list_volume_response[0].name + " userdevice=0 --minimal"
|
|
hosts = Host.list(self.apiClient, id=virtual_machine.hostid)
|
|
self.assertEqual(
|
|
isinstance(hosts, list),
|
|
True,
|
|
"Check list host returns a valid list")
|
|
host = hosts[0]
|
|
if self.hypervisor.lower() in 'xenserver':
|
|
#
|
|
ssh = SshClient(host.ipaddress, 22, self.services["configurableData"]["host"]["username"],
|
|
self.services["configurableData"]["host"]["password"])
|
|
result = ssh.execute(cmd)
|
|
res = str(result)
|
|
self.assertNotEqual(res, "", "root disk should have user device=0")
|
|
|
|
self.debug("Restoring the VM: %s" % virtual_machine.id)
|
|
# Restore VM
|
|
virtual_machine.restore(self.apiClient, template.id)
|
|
vm_response = VirtualMachine.list(
|
|
self.apiClient,
|
|
id=virtual_machine.id,
|
|
)
|
|
hosts = Host.list(self.apiClient, id=virtual_machine.hostid)
|
|
self.assertEqual(
|
|
isinstance(hosts, list),
|
|
True,
|
|
"Check list host returns a valid list")
|
|
host = hosts[0]
|
|
if self.hypervisor.lower() in 'xenserver':
|
|
#
|
|
ssh = SshClient(host.ipaddress, 22, self.services["configurableData"]["host"]["username"],
|
|
self.services["configurableData"]["host"]["password"])
|
|
result = ssh.execute(cmd)
|
|
res = str(result)
|
|
self.assertNotEqual(res, "", "root disk should have user device=0")
|
|
|
|
#
|
|
# Verify VM response to check whether VM deployment was successful
|
|
self.assertNotEqual(
|
|
len(vm_response),
|
|
0,
|
|
"Check VMs available in List VMs response"
|
|
)
|
|
self.assertEqual(
|
|
isinstance(vm_response, list),
|
|
True,
|
|
"Check list VM response for valid list"
|
|
)
|
|
vm = vm_response[0]
|
|
self.assertEqual(
|
|
vm.state,
|
|
'Running',
|
|
"Check the state of VM"
|
|
)
|
|
except Exception as e:
|
|
self.fail("Exception occurred: %s" % e)
|
|
return
|
|
|
|
@attr(tags=["advanced", "basic"], required_hardware="false")
|
|
def test_28_VM_restore_ES3467(self):
|
|
"""
|
|
@Desc:Test to verify order of root and data disk remains same on Xenserver after VM reset
|
|
@Steps :
|
|
1.Create VM from Centos template
|
|
3.Add data disk to VM
|
|
5.check disk sequence on hypervisor: 1st = root disk, 2nd = data disk
|
|
6. Issue "reset VM" command on CCP
|
|
7. check disk sequence on hypervisor remains same and VM starts successfully
|
|
"""
|
|
try:
|
|
# Deploy new virtual machine using template
|
|
virtual_machine = VirtualMachine.create(
|
|
self.apiClient,
|
|
self.services["virtual_machine"],
|
|
accountid=self.account.name,
|
|
domainid=self.account.domainid,
|
|
serviceofferingid=self.service_offering.id
|
|
|
|
)
|
|
self.debug("creating an instance with template ID: %s" % self.template.id)
|
|
vm_response = VirtualMachine.list(self.apiClient,
|
|
id=virtual_machine.id,
|
|
account=self.account.name,
|
|
domainid=self.account.domainid)
|
|
self.assertEqual(
|
|
isinstance(vm_response, list),
|
|
True,
|
|
"Check for list VMs response after VM deployment"
|
|
)
|
|
# Verify VM response to check whether VM deployment was successful
|
|
self.assertNotEqual(
|
|
len(vm_response),
|
|
0,
|
|
"Check VMs available in List VMs response"
|
|
)
|
|
vm = vm_response[0]
|
|
self.assertEqual(
|
|
vm.state,
|
|
'Running',
|
|
"Check the state of VM created from Template"
|
|
)
|
|
disk_offering = DiskOffering.create(
|
|
self.api_client,
|
|
self.services["disk_offering"]
|
|
)
|
|
self.cleanup.append(disk_offering)
|
|
volume = Volume.create(
|
|
self.apiClient,
|
|
self.services["volume"],
|
|
zoneid=self.zone.id,
|
|
account=self.account.name,
|
|
domainid=self.account.domainid,
|
|
diskofferingid=disk_offering.id
|
|
)
|
|
# Check List Volume response for newly created volume
|
|
list_volume_response = Volume.list(
|
|
self.apiClient,
|
|
id=volume.id
|
|
)
|
|
self.assertNotEqual(
|
|
list_volume_response,
|
|
None,
|
|
"Check if volume exists in ListVolumes"
|
|
)
|
|
# Attach volume to VM
|
|
virtual_machine.attach_volume(
|
|
self.apiClient,
|
|
volume
|
|
)
|
|
# Check volumes attached to same VM
|
|
list_volume_response = Volume.list(
|
|
self.apiClient,
|
|
virtualmachineid=virtual_machine.id,
|
|
type='DATADISK',
|
|
listall=True
|
|
)
|
|
|
|
self.assertNotEqual(
|
|
list_volume_response,
|
|
None,
|
|
"Check if volume exists in ListVolumes")
|
|
self.assertEqual(
|
|
isinstance(list_volume_response, list),
|
|
True,
|
|
"Check list volumes response for valid list")
|
|
list_volume_response = Volume.list(
|
|
self.apiClient,
|
|
virtualmachineid=virtual_machine.id,
|
|
type='ROOT',
|
|
listall=True
|
|
)
|
|
cmd = "xe vbd-list vm-name-label=" + virtual_machine.instancename + " vdi-name-label=" + \
|
|
list_volume_response[0].name + " userdevice=0 --minimal"
|
|
hosts = Host.list(self.apiClient, id=virtual_machine.hostid)
|
|
self.assertEqual(
|
|
isinstance(hosts, list),
|
|
True,
|
|
"Check list host returns a valid list")
|
|
host = hosts[0]
|
|
if self.hypervisor.lower() in 'xenserver':
|
|
#
|
|
# host.user, host.passwd = get_host_credentials(self, host.ipaddress)
|
|
ssh = SshClient(host.ipaddress, 22, self.services["configurableData"]["host"]["username"],
|
|
self.services["configurableData"]["host"]["password"])
|
|
result = ssh.execute(cmd)
|
|
res = str(result)
|
|
self.assertNotEqual(res, "", "root disk should have user device=0")
|
|
|
|
# Stop VM
|
|
virtual_machine.stop(self.apiClient)
|
|
|
|
self.debug("Restoring the VM: %s" % virtual_machine.id)
|
|
# Restore VM
|
|
virtual_machine.restore(self.apiClient, self.template.id)
|
|
vm_response = VirtualMachine.list(
|
|
self.apiClient,
|
|
id=virtual_machine.id,
|
|
)
|
|
# Verify VM response to check whether VM deployment was successful
|
|
self.assertNotEqual(
|
|
len(vm_response),
|
|
0,
|
|
"Check VMs available in List VMs response"
|
|
)
|
|
self.assertEqual(
|
|
isinstance(vm_response, list),
|
|
True,
|
|
"Check list VM response for valid list"
|
|
)
|
|
vm = vm_response[0]
|
|
self.assertEqual(
|
|
vm.state,
|
|
'Stopped',
|
|
"Check the state of VM"
|
|
)
|
|
# Start VM
|
|
virtual_machine.start(self.apiClient)
|
|
if self.hypervisor.lower() in 'xenserver':
|
|
#
|
|
# host.user, host.passwd = get_host_credentials(self, host.ipaddress)
|
|
ssh = SshClient(host.ipaddress, 22, self.services["configurableData"]["host"]["username"],
|
|
self.services["configurableData"]["host"]["password"])
|
|
result = ssh.execute(cmd)
|
|
res = str(result)
|
|
self.assertNotEqual(res, "", "root disk should have user device=0")
|
|
|
|
vm_response = VirtualMachine.list(
|
|
self.apiClient,
|
|
id=virtual_machine.id,
|
|
)
|
|
self.assertEqual(
|
|
isinstance(vm_response, list),
|
|
True,
|
|
"Check list VM response for valid list"
|
|
)
|
|
# Verify VM response to check whether VM deployment was successful
|
|
self.assertNotEqual(
|
|
len(vm_response),
|
|
0,
|
|
"Check VMs available in List VMs response"
|
|
)
|
|
|
|
vm = vm_response[0]
|
|
self.assertEqual(
|
|
vm.state,
|
|
'Running',
|
|
"Check the state of VM"
|
|
)
|
|
except Exception as e:
|
|
self.fail("Exception occurred: %s" % e)
|
|
return
|
|
|
|
|
|
@attr(tags=["advanced", "basic"], required_hardware="true")
|
|
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
|
|
"""
|
|
if self.hypervisor.lower() in ['kvm', 'hyperv', 'lxc']:
|
|
self.skipTest(
|
|
"This feature is not supported on existing hypervisor. Hence,\
|
|
skipping the test")
|
|
# 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"
|
|
)
|
|
# 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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"VM creation failed"
|
|
)
|
|
# Verifying that the size of the list is 1
|
|
self.assertEqual(
|
|
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
|
|
)
|
|
|
|
self.assertEqual(validateList(isos_list)[0],
|
|
PASS,
|
|
"isos list validation failed")
|
|
|
|
if self.hypervisor.lower() == "xenserver":
|
|
isoDesc = "xen"
|
|
else:
|
|
isoDesc = "vmware"
|
|
|
|
validIsosToAttach = [iso for iso in isos_list
|
|
if isoDesc in iso.displaytext.lower()]
|
|
if not validIsosToAttach:
|
|
self.skipTest(
|
|
"Valid ISO not present in setup suitable to attach to VM")
|
|
|
|
iso_toattach = validIsosToAttach[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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"VM listing by Id failed"
|
|
)
|
|
# Verifying that attached ISO details are present in VM
|
|
self.assertEqual(
|
|
iso_toattach.name,
|
|
list_vm[0].isoname,
|
|
"Attached ISO name is not matching"
|
|
)
|
|
self.assertEqual(
|
|
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.assertEqual(
|
|
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"
|
|
)
|
|
return
|
|
|
|
@attr(tags=["advanced", "basic"], required_hardware="true")
|
|
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
|
|
"""
|
|
if self.hypervisor.lower() in ['kvm', 'hyperv', 'lxc']:
|
|
self.skipTest(
|
|
"This feature is not supported on existing hypervisor. Hence,\
|
|
skipping the test")
|
|
# 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"
|
|
)
|
|
# 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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"VM creation failed"
|
|
)
|
|
# Verifying that the size of the list is 1
|
|
self.assertEqual(
|
|
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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"VM Snapshots creation failed"
|
|
)
|
|
self.assertEqual(
|
|
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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"Listing of VM Snapshots failed in page 1"
|
|
)
|
|
# Verifying the list size is equal to pagesize
|
|
self.assertEqual(
|
|
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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"Listing of VM Snapshots failed in page 2"
|
|
)
|
|
# Verifying the list size is equal to 1
|
|
self.assertEqual(
|
|
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"], required_hardware="true")
|
|
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
|
|
"""
|
|
if self.hypervisor.lower() in ['kvm', 'hyperv', 'lxc']:
|
|
self.skipTest(
|
|
"This feature is not supported on existing hypervisor.\
|
|
Hence, skipping the test")
|
|
# 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"
|
|
)
|
|
# 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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"VM creation failed"
|
|
)
|
|
# Verifying that the size of the list is 1
|
|
self.assertEqual(
|
|
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,
|
|
snapshotmemory=True
|
|
)
|
|
self.assertIsNotNone(
|
|
snapshot1,
|
|
"Snapshot creation failed"
|
|
)
|
|
snapshot2 = VmSnapshot.create(
|
|
self.userapiclient,
|
|
vm_created.id,
|
|
snapshotmemory=True
|
|
)
|
|
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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"VM Snapshots creation failed"
|
|
)
|
|
self.assertEqual(
|
|
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.assertEqual(
|
|
1,
|
|
current_count,
|
|
"count of VM Snapshot with current flag as true is not matching"
|
|
)
|
|
self.assertEqual(
|
|
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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"VM Snapshots creation failed"
|
|
)
|
|
self.assertEqual(
|
|
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.assertEqual(
|
|
1,
|
|
current_count,
|
|
"count of VM Snapshot with current flag as true is not matching"
|
|
)
|
|
self.assertEqual(
|
|
snapshot1.id,
|
|
current_snapshot.id,
|
|
"Current flag was set properly after reverting the VM to snapshot"
|
|
)
|
|
return
|
|
|
|
@attr(tags=["advanced", "basic"], required_hardware="false")
|
|
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
|
|
"""
|
|
self.hypervisor = self.testClient.getHypervisorInfo()
|
|
if self.hypervisor.lower() == 'lxc':
|
|
if not find_storage_pool_type(self.api_client, storagetype='rbd'):
|
|
self.skipTest("RBD storage type is required for data volumes for LXC")
|
|
# 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"
|
|
)
|
|
# 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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"VM creation failed"
|
|
)
|
|
# Verifying that the size of the list is 1
|
|
self.assertEqual(
|
|
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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"Root volume is not created for VM deployed"
|
|
)
|
|
# Verifying the size of the list is 1
|
|
self.assertEqual(
|
|
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"
|
|
)
|
|
# 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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"Volumes are not listed"
|
|
)
|
|
# Verifying that size of the list is equal to page size + 1
|
|
self.assertEqual(
|
|
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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"Volumes not listed in page1"
|
|
)
|
|
# Verifying that list size is equal to page size
|
|
self.assertEqual(
|
|
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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"Volumes not listed in page2"
|
|
)
|
|
# Verifying that list size is equal to 1
|
|
self.assertEqual(
|
|
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"
|
|
)
|
|
# Listing all the volumes for a VM again 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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"Volumes not listed in page1"
|
|
)
|
|
# Verifying that list size is equal to page size
|
|
self.assertEqual(
|
|
self.services["pagesize"],
|
|
len(list_volumes_page1),
|
|
"VM's volume count is not matching in page 1"
|
|
)
|
|
|
|
list_data_disks = Volume.list(
|
|
self.userapiclient,
|
|
listall=self.services["listall"],
|
|
virtualmachineid=vm_created.id,
|
|
page=1,
|
|
pagesize=self.services["pagesize"],
|
|
type="DATADISK"
|
|
)
|
|
|
|
for volume in list_data_disks:
|
|
vm_created.detach_volume(self.userapiclient, volume)
|
|
|
|
volumes = Volume.list(
|
|
self.userapiclient,
|
|
listall=self.services["listall"],
|
|
virtualmachineid=vm_created.id,
|
|
page=1,
|
|
pagesize=self.services["pagesize"]
|
|
)
|
|
|
|
self.assertEqual(
|
|
len(volumes),
|
|
len(list_volumes_page1) - len(list_data_disks),
|
|
"The volumes number should match with (volumes initially\
|
|
present minus volumes detached")
|
|
|
|
return
|
|
|
|
@attr(tags=["advanced", "basic"], required_hardware="true")
|
|
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
|
|
"""
|
|
if self.hypervisor.lower() == 'kvm':
|
|
self.skipTest(
|
|
"ScaleVM is not supported on KVM. Hence, skipping the test")
|
|
# 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.assertEqual(
|
|
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"
|
|
)
|
|
# Listing details of current Service Offering
|
|
vm_so_list = ServiceOffering.list(
|
|
self.userapiclient,
|
|
id=vm_created.serviceofferingid
|
|
)
|
|
status = validateList(vm_so_list)
|
|
self.assertEqual(
|
|
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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"VM creation failed"
|
|
)
|
|
# Verifying that the size of the list is 1
|
|
self.assertEqual(
|
|
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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"Listing of VM failed"
|
|
)
|
|
self.assertEqual(
|
|
1,
|
|
len(list_vms_after),
|
|
"VMs list is not as expected"
|
|
)
|
|
# Verifying that VM's service offerings is changed
|
|
self.assertEqual(
|
|
new_so.id,
|
|
list_vms_after[0].serviceofferingid,
|
|
"VM is not containing New Service Offering"
|
|
)
|
|
return
|
|
|
|
@attr(tags=["advanced", "basic"], required_hardware="true")
|
|
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"
|
|
)
|
|
# Listing details of current Service Offering
|
|
vm_so_list = ServiceOffering.list(
|
|
self.userapiclient,
|
|
id=vm_created.serviceofferingid
|
|
)
|
|
status = validateList(vm_so_list)
|
|
self.assertEqual(
|
|
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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"VM creation failed"
|
|
)
|
|
# Verifying that the size of the list is 1
|
|
self.assertEqual(
|
|
1,
|
|
len(list_vms_after),
|
|
"VM list count is not matching"
|
|
)
|
|
# Stopping the VM deployed above
|
|
vm_created.stop(
|
|
self.userapiclient,
|
|
forced=True
|
|
)
|
|
# 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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"Listing of VM failed"
|
|
)
|
|
self.assertEqual(
|
|
1,
|
|
len(list_vm),
|
|
"VMs list is not as expected"
|
|
)
|
|
# Verifying that VM's service offerings is changed
|
|
self.assertEqual(
|
|
new_so.id,
|
|
list_vm[0].serviceofferingid,
|
|
"VM is not containing New Service Offering"
|
|
)
|
|
return
|
|
|
|
@attr(tags=["advanced", "basic"], required_hardware="true")
|
|
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"
|
|
)
|
|
# 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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"VM creation failed"
|
|
)
|
|
# Verifying that the size of the list is 1
|
|
self.assertEqual(
|
|
1,
|
|
len(list_vms_after),
|
|
"VM list count is not matching"
|
|
)
|
|
# Stopping the VM deployed above
|
|
vm_created.stop(
|
|
self.userapiclient,
|
|
forced=True
|
|
)
|
|
# 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.assertEqual(
|
|
"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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"Listing of Key pairs failed"
|
|
)
|
|
# Verifying that list size is increased by 1
|
|
self.assertEqual(
|
|
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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"Listing of VM failed"
|
|
)
|
|
self.assertEqual(
|
|
1,
|
|
len(list_vm),
|
|
"VMs list is not as expected"
|
|
)
|
|
# Verifying that VM's SSH keypair is set to newly created keypair
|
|
self.assertEqual(
|
|
new_keypair.name,
|
|
list_vm[0].keypair,
|
|
"VM is not set to newly created SSH Key pair"
|
|
)
|
|
return
|
|
|
|
@attr(tags=["advanced", "basic"], required_hardware="false")
|
|
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"
|
|
)
|
|
# Verifying the displayname and group details for deployed VM
|
|
self.assertEqual(
|
|
self.services["virtual_machine"]["displayname"],
|
|
vm_created.displayname,
|
|
"Display name of VM is not as expected"
|
|
)
|
|
self.assertEqual(
|
|
"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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"VM creation failed"
|
|
)
|
|
# Verifying that the size of the list is 1
|
|
self.assertEqual(
|
|
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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"Listing of VM by Id failed"
|
|
)
|
|
self.assertEqual(
|
|
1,
|
|
len(list_vm),
|
|
"Count of List VM by Id is not matching"
|
|
)
|
|
# Verifying that displayname and group details are updated
|
|
self.assertEqual(
|
|
"DisplayName",
|
|
list_vm[0].displayname,
|
|
"Displayname of VM is not updated"
|
|
)
|
|
self.assertEqual(
|
|
"Group",
|
|
list_vm[0].group,
|
|
"Group of VM is not updated"
|
|
)
|
|
return
|
|
|
|
@attr(tags=["advanced", "basic"], required_hardware="true")
|
|
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"
|
|
)
|
|
# 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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"VM creation failed"
|
|
)
|
|
# Verifying that the size of the list is 1
|
|
self.assertEqual(
|
|
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"], required_hardware="false")
|
|
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"],
|
|
type="Isolated"
|
|
)
|
|
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.assertEqual(
|
|
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"
|
|
)
|
|
networks_list_size = networks_list_size + 1
|
|
|
|
# Listing the networks again
|
|
networks_list_after = Network.list(
|
|
self.userapiclient,
|
|
listall=self.services["listall"],
|
|
type="Isolated"
|
|
)
|
|
status = validateList(network_offerings_list)
|
|
self.assertEqual(
|
|
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"
|
|
)
|
|
# 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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"VM creation failed"
|
|
)
|
|
# Verifying that the size of the list is 1
|
|
self.assertEqual(
|
|
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.assertEqual(
|
|
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.assertEqual(
|
|
networks_list_after[0].id,
|
|
vm_nics[i].networkid,
|
|
"Default NIC is not as expected"
|
|
)
|
|
else:
|
|
self.assertEqual(
|
|
networks_list_after[1].id,
|
|
vm_nics[i].networkid,
|
|
"Non Default NIC is not as expected"
|
|
)
|
|
return
|
|
|
|
@attr(tags=["basic"], required_hardware="true")
|
|
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"
|
|
)
|
|
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.assertEqual(
|
|
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"
|
|
)
|
|
# 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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"VM creation failed"
|
|
)
|
|
# Verifying that the size of the list is 1
|
|
self.assertEqual(
|
|
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.assertEqual(
|
|
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.assertEqual(
|
|
True,
|
|
vm_securitygroups_flag,
|
|
"Security Groups in VM are not same as created"
|
|
)
|
|
return
|
|
|
|
@attr(tags=["advanced"], required_hardware="false")
|
|
def test_24_deploy_vm_with_static_ip_ES1662(self):
|
|
"""
|
|
@Desc: Test to verify deploy VM with static ip address assignment
|
|
@Steps:
|
|
Step1: Create a network for the user
|
|
Step2: List the network and check that it is created for the user
|
|
Step3: Deploy vm with ip address in the above network
|
|
Step4: List the vm and verify the ip address in the response
|
|
"""
|
|
# 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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"Isolated Network Offerings with sourceNat enabled are not found"
|
|
)
|
|
"""
|
|
Create Isolated network with ip range
|
|
"""
|
|
self.services["network"]["startip"] = "10.1.1.2"
|
|
self.services["network"]["endip"] = "10.1.1.254"
|
|
self.services["network"]["gateway"] = "10.1.1.1"
|
|
self.services["network"]["netmask"] = "255.255.255.0"
|
|
vm_ip = "10.1.1.10"
|
|
"""
|
|
Creating isolated/guest network with ip range
|
|
"""
|
|
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"
|
|
)
|
|
# Deploying a VM
|
|
vm_created = VirtualMachine.create(
|
|
self.userapiclient,
|
|
self.services["virtual_machine"],
|
|
accountid=self.account.name,
|
|
domainid=self.account.domainid,
|
|
networkids=network.id,
|
|
ipaddress=vm_ip,
|
|
serviceofferingid=self.service_offering.id,
|
|
)
|
|
self.assertIsNotNone(
|
|
vm_created,
|
|
"VM creation failed"
|
|
)
|
|
# Listing all the VMs for a user again
|
|
vm_response = VirtualMachine.list(
|
|
self.userapiclient,
|
|
id=vm_created.id,
|
|
)
|
|
status = validateList(vm_response)
|
|
self.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"vm list returned invalid response"
|
|
)
|
|
# Verifying that the size of the list is 1
|
|
self.assertEqual(
|
|
1,
|
|
len(vm_response),
|
|
"VM list count is not matching"
|
|
)
|
|
# Verifying that the NIC's in VM created are same as provided
|
|
vm_nics = vm_created.nic
|
|
status = validateList(vm_nics)
|
|
self.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"vm list returned invalid response for vm nics"
|
|
)
|
|
# Verifying that the size of nics is 1
|
|
self.assertEqual(
|
|
1,
|
|
len(vm_nics),
|
|
"VM is created with more than one nic which is not expected"
|
|
)
|
|
"""
|
|
Verifying that NIC IP address is as expected
|
|
"""
|
|
self.assertEqual(
|
|
str(vm_nics[0].ipaddress),
|
|
vm_ip,
|
|
"VM is not created with static ip address used in vm deployment"
|
|
)
|
|
try:
|
|
vm_created.delete(self.apiClient, expunge=True)
|
|
except Exception as e:
|
|
raise Exception("Warning: Exception in expunging vm : %s" % e)
|
|
return
|
|
|
|
@attr(tags=["advanced"], required_hardware="false")
|
|
def test_25_ip_reallocation_ES1377(self):
|
|
"""
|
|
@Desc: Test to verify dnsmasq dhcp conflict issue due to
|
|
/ect/hosts not getting updated
|
|
@Steps:
|
|
Step1: Create a network for the user
|
|
Step2: List the network and check that it is created for the user
|
|
Step3: Deploy vm1 with hostname hostA and ip address IP A in the
|
|
above network
|
|
Step4: List the vm and verify the ip address in the response and
|
|
verify ssh access to vm
|
|
Step5: Deploy vm2 with hostname hostB and ip address IP B in the
|
|
same network
|
|
Step6: Repeat step4
|
|
Step7: Destroy vm1 and vm2
|
|
Step8: Deploy vm3 with hostname hostA and ip address IP B
|
|
Step9: Repeat step4
|
|
Step10: Deploy vm4 with IP A and hostC
|
|
Step11: Repeat step4
|
|
"""
|
|
# 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.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"Isolated Network Offerings with sourceNat enabled are not found"
|
|
)
|
|
"""
|
|
Create Isolated network with ip range
|
|
"""
|
|
self.services["network"]["startip"] = "10.1.1.2"
|
|
self.services["network"]["endip"] = "10.1.1.254"
|
|
self.services["network"]["gateway"] = "10.1.1.1"
|
|
self.services["network"]["netmask"] = "255.255.255.0"
|
|
"""
|
|
Creating isolated/guest network with ip range
|
|
"""
|
|
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"
|
|
)
|
|
vm_ip1 = "10.1.1.10"
|
|
name1 = "hostA"
|
|
self.debug("network id:%s" % network.id)
|
|
self.services["virtual_machine"]["name"] = name1
|
|
# Deploying a VM
|
|
vm1 = VirtualMachine.create(
|
|
self.userapiclient,
|
|
self.services["virtual_machine"],
|
|
accountid=self.account.name,
|
|
domainid=self.account.domainid,
|
|
networkids=[network.id],
|
|
ipaddress=vm_ip1,
|
|
serviceofferingid=self.service_offering.id,
|
|
mode="advanced",
|
|
)
|
|
self.assertIsNotNone(
|
|
vm1, "VM1 creation failed with ip address %s and host name %s" %
|
|
(vm_ip1, name1))
|
|
# self.cleanup.append(vm_created)
|
|
# Listing all the VMs for a user again
|
|
vm_response = VirtualMachine.list(
|
|
self.userapiclient,
|
|
id=vm1.id,
|
|
)
|
|
status = validateList(vm_response)
|
|
self.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"vm list api returned invalid response for vm1"
|
|
)
|
|
# Verifying that the size of the list is 1
|
|
self.assertEqual(
|
|
1,
|
|
len(vm_response),
|
|
"VM list count is not matching"
|
|
)
|
|
# Deploying a VM
|
|
vm_ip2 = "10.1.1.20"
|
|
name2 = "hostB"
|
|
self.services["virtual_machine"]["name"] = name2
|
|
vm2 = VirtualMachine.create(
|
|
self.userapiclient,
|
|
self.services["virtual_machine"],
|
|
accountid=self.account.name,
|
|
domainid=self.account.domainid,
|
|
networkids=[network.id],
|
|
ipaddress=vm_ip2,
|
|
serviceofferingid=self.service_offering.id,
|
|
mode="advanced",
|
|
)
|
|
self.assertIsNotNone(
|
|
vm2,
|
|
"VM2 creation failed"
|
|
)
|
|
vm_response = VirtualMachine.list(
|
|
self.userapiclient,
|
|
id=vm2.id,
|
|
)
|
|
status = validateList(vm_response)
|
|
self.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"vm list api returned invalid response for vm2"
|
|
)
|
|
# Verifying that the size of the list is 1
|
|
self.assertEqual(
|
|
1,
|
|
len(vm_response),
|
|
"VM list count is not matching after vm2 deployment"
|
|
)
|
|
try:
|
|
vm1.delete(self.apiClient, expunge=True)
|
|
vm2.delete(self.apiClient, expunge=True)
|
|
except Exception as e:
|
|
raise Exception("Warning: Exception in expunging vms : %s" % e)
|
|
"""
|
|
Deploy vm3 with ip address of vm1 and host name of vm2 so both the vm1
|
|
and vm2 entries would be deleted from dhcphosts file on VR becase
|
|
dhcprelease matches entries with host name and ip address so it
|
|
matches both the entries.
|
|
"""
|
|
# Deploying a VM
|
|
self.services["virtual_machine"]["name"] = name2
|
|
vm3 = VirtualMachine.create(
|
|
self.userapiclient,
|
|
self.services["virtual_machine"],
|
|
accountid=self.account.name,
|
|
domainid=self.account.domainid,
|
|
networkids=[network.id],
|
|
ipaddress=vm_ip1,
|
|
serviceofferingid=self.service_offering.id,
|
|
mode="advanced",
|
|
)
|
|
self.assertIsNotNone(
|
|
vm3,
|
|
"VM3 creation failed"
|
|
)
|
|
vm_response = VirtualMachine.list(
|
|
self.userapiclient,
|
|
id=vm3.id,
|
|
)
|
|
status = validateList(vm_response)
|
|
self.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"vm list api returned invalid response for vm3"
|
|
)
|
|
# Verifying that the size of the list is 1
|
|
self.assertEqual(
|
|
1,
|
|
len(vm_response),
|
|
"VM list count is not matching after vm2 deployment"
|
|
)
|
|
# Deploying a VM
|
|
"""
|
|
Deploy vm4 with ip address of vm2. dnsmasq and dhcprelase
|
|
should be in sync. We should not see dhcp lease block due to IP
|
|
reallocation.
|
|
"""
|
|
name3 = "hostC"
|
|
self.services["virtual_machine"]["name"] = name3
|
|
vm4 = VirtualMachine.create(
|
|
self.userapiclient,
|
|
self.services["virtual_machine"],
|
|
accountid=self.account.name,
|
|
domainid=self.account.domainid,
|
|
networkids=[network.id],
|
|
ipaddress=vm_ip2,
|
|
serviceofferingid=self.service_offering.id,
|
|
mode="advanced",
|
|
)
|
|
self.assertIsNotNone(
|
|
vm4,
|
|
"VM4 creation failed"
|
|
)
|
|
vm_response = VirtualMachine.list(
|
|
self.userapiclient,
|
|
id=vm4.id,
|
|
)
|
|
status = validateList(vm_response)
|
|
self.assertEqual(
|
|
PASS,
|
|
status[0],
|
|
"vm list api returned invalid response for vm4"
|
|
)
|
|
# Verifying that the size of the list is 1
|
|
self.assertEqual(
|
|
1,
|
|
len(vm_response),
|
|
"VM list count is not matching after vm2 deployment"
|
|
)
|
|
try:
|
|
vm3.delete(self.apiClient, expunge=True)
|
|
vm4.delete(self.apiClient, expunge=True)
|
|
except Exception as e:
|
|
raise Exception(
|
|
"Warning: Exception in expunging vms vm3 and vm4 : %s" %
|
|
e)
|
|
return
|