mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			2127 lines
		
	
	
		
			81 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			2127 lines
		
	
	
		
			81 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
| # 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.
 | |
| """ Tests for DHCP DNS offload feature
 | |
| """
 | |
| from marvin.cloudstackTestCase import cloudstackTestCase, unittest
 | |
| from marvin.lib.utils import (random_gen, validateList, cleanup_resources, get_hypervisor_type)
 | |
| from marvin.lib.base import (Account,
 | |
|                              NIC,
 | |
|                              ServiceOffering,
 | |
|                              DiskOffering,
 | |
|                              VirtualMachine,
 | |
|                              Network,
 | |
|                              NetworkOffering,
 | |
|                              Configurations,
 | |
|                              Host,
 | |
|                              Template,
 | |
|                              SSHKeyPair,
 | |
|                              Router)
 | |
| from marvin.lib.common import (get_zone,
 | |
|                                get_template,
 | |
|                                get_domain
 | |
|                                )
 | |
| from nose.plugins.attrib import attr
 | |
| from marvin.codes import PASS,FAIL
 | |
| from random import randint
 | |
| import random,string,time,tempfile,os,re
 | |
| 
 | |
| @unittest.skip("Skipping dhcp-dns-offload tests for now, since it requires external dhcp server")
 | |
| class TestDeployVMs(cloudstackTestCase):
 | |
| 
 | |
|     @classmethod
 | |
|     def setUpClass(cls):
 | |
|         cls.testClient = super(TestDeployVMs, cls).getClsTestClient()
 | |
|         cls.api_client = cls.testClient.getApiClient()
 | |
|         cls.services = cls.testClient.getParsedTestDataConfig()
 | |
|         cls.hypervisor = (get_hypervisor_type(cls.api_client)).lower()
 | |
|         cls._cleanup = []
 | |
|         cls.unsupportedHypervisor = False
 | |
|         if cls.hypervisor not in ["xenserver", "kvm"]:
 | |
|             cls.unsupportedHypervisor = True
 | |
|             return
 | |
|         cls.zone = get_zone(cls.api_client, cls.testClient.getZoneForTests())
 | |
|         cls.domain = get_domain(cls.api_client)
 | |
|         cls.services['mode'] = cls.zone.networktype
 | |
|         cls.userdata = "Deploy vm with userdata in shared network"
 | |
|         cls.template = get_template(
 | |
|             cls.api_client,
 | |
|             cls.zone.id,
 | |
|             cls.services["ostype"]
 | |
|         )
 | |
|         cls.services["virtual_machine"]["zoneid"] = cls.zone.id
 | |
|         cls.services["virtual_machine"]["template"] = cls.template.id
 | |
|         try:
 | |
|             cls.service_offering = ServiceOffering.create(
 | |
|                 cls.api_client,
 | |
|                 cls.services["service_offering"]
 | |
|             )
 | |
|             cls._cleanup.append(cls.service_offering)
 | |
|             cls.disk_offering = DiskOffering.create(
 | |
|                 cls.api_client,
 | |
|                 cls.services["disk_offering"]
 | |
|             )
 | |
|             cls._cleanup.append(cls.disk_offering)
 | |
|             cls.network_offering1 = NetworkOffering.create(
 | |
|                 cls.api_client,
 | |
|                 cls.services["nw_off_no_services"],
 | |
|             )
 | |
|             cls._cleanup.append(cls.network_offering1)
 | |
|             # Enable Network offering
 | |
|             cls.network_offering1.update(cls.api_client, state='Enabled')
 | |
|             cls.network_offering3 = NetworkOffering.create(
 | |
|                 cls.api_client,
 | |
|                 cls.services["network_offering_shared"],
 | |
|             )
 | |
|             cls._cleanup.append(cls.network_offering3)
 | |
|             # Enable Network offering
 | |
|             cls.network_offering3.update(cls.api_client, state='Enabled')
 | |
|             #Create shared network without any services
 | |
|             cls.shared_network = Network.create(
 | |
|                 cls.api_client,
 | |
|                 cls.services["network2"],
 | |
|                 networkofferingid=cls.network_offering1.id,
 | |
|                 zoneid=cls.zone.id
 | |
|             )
 | |
|             cls._cleanup.append(cls.shared_network)
 | |
|             #Verify network services in a created network
 | |
|             assert TestDeployVMs.list_nw_services(cls.shared_network.id, cls.network_offering1.id),\
 | |
|                  "Network Services does not match with the offering services"
 | |
|             #Register passowrd and ssh-key reset enabled template
 | |
|             template = "ssh-password-template-xen" if cls.hypervisor == "xenserver" else "ssh-password-template-kvm"
 | |
|             cls.pwd_template = Template.register(cls.api_client,
 | |
|                                                  cls.services[template],
 | |
|                                                  zoneid=cls.zone.id)
 | |
|             cls.pwd_template.download(cls.api_client)
 | |
|             cls._cleanup.append(cls.pwd_template)
 | |
|         except Exception as e:
 | |
|             cls.tearDownClass()
 | |
|             raise e
 | |
|         return
 | |
| 
 | |
|     @classmethod
 | |
|     def tearDownClass(cls):
 | |
|         try:
 | |
|             cls._cleanup = cls._cleanup[::-1]
 | |
|             cleanup_resources(cls.api_client, cls._cleanup)
 | |
|         except Exception as e:
 | |
|             raise Exception("Warning: Exception during cleanup : %s" % e)
 | |
| 
 | |
|     def setUp(self):
 | |
|         self.apiclient = self.testClient.getApiClient()
 | |
|         self.dbclient = self.testClient.getDbConnection()
 | |
|         self.cleanup = []
 | |
|         self.tmp_files = []
 | |
|         if self.unsupportedHypervisor:
 | |
|             self.skipTest("Skipping tests because suitable hypervisors not present")
 | |
| 
 | |
|     def tearDown(self):
 | |
|         try:
 | |
|             self.cleanup = self.cleanup[::-1]
 | |
|             cleanup_resources(self.apiclient, self.cleanup)
 | |
|             for tmp_file in self.tmp_files:
 | |
|                 os.remove(tmp_file)
 | |
|         except Exception as e:
 | |
|             raise Exception("Warning: Exception during cleanup : %s" % e)
 | |
|         return
 | |
| 
 | |
|     def getVMIPAddress(self,id):
 | |
|         """
 | |
|         This method retrieves the IP address from a deployed vm.
 | |
|         """
 | |
|         params = ["externaldhcp.vmip.retrieval.interval","externaldhcp.vmip.max.retry"]
 | |
|         offload_params = {}
 | |
|         for param in params:
 | |
|             configs = Configurations.list(
 | |
|                 self.apiclient,
 | |
|                 name=param,
 | |
|             )
 | |
|             self.assertEqual(validateList(configs)[0],PASS,"List config returned invalid response")
 | |
|             config = configs[0]
 | |
|             offload_params[param] = config
 | |
|         max_wait = int(offload_params[params[0]].value)*int(offload_params[params[1]].value)
 | |
|         wait = 0
 | |
|         status = 0
 | |
|         while(wait <= max_wait):
 | |
|             vm_res = VirtualMachine.list(self.apiclient,id=id)
 | |
|             self.assertEqual(validateList(vm_res)[0], PASS, "vm list returned invalid response")
 | |
|             for nic in vm_res[0].nic:
 | |
|                 if nic.type == "Shared":
 | |
|                     if nic.ipaddress is None:
 | |
|                         time.sleep(int(offload_params[params[0]].value))
 | |
|                         wait += int(offload_params[params[0]].value)
 | |
|                         status = 0
 | |
|                         break
 | |
|                     else:
 | |
|                         status = 1
 | |
|                 else:
 | |
|                     continue
 | |
|             if status == 1:
 | |
|                 self.debug("CS has retrieved the vm ip address from the hypervisor")
 | |
|                 break
 | |
|         return [status, vm_res[0].nic[0].ipaddress]
 | |
| 
 | |
|     def list_nics(self, vm_id):
 | |
|         list_vm_res = VirtualMachine.list(self.apiclient, id=vm_id)
 | |
|         self.assertEqual(validateList(list_vm_res)[0], PASS, "List vms returned invalid response")
 | |
|         nics = list_vm_res[0].nic
 | |
|         for nic in nics:
 | |
|             if nic.type == "Shared":
 | |
|                 nic_res = NIC.list(
 | |
|                     self.apiclient,
 | |
|                     virtualmachineid=vm_id,
 | |
|                     nicid=nic.id
 | |
|                 )
 | |
|                 nic_ip = nic_res[0].ipaddress
 | |
|                 self.assertIsNotNone(nic_ip, "listNics API response does not have the ip address")
 | |
|             else:
 | |
|                 continue
 | |
|         return
 | |
| 
 | |
|     def isConfigDriveIsoAttached(self, vm_ip):
 | |
|         """
 | |
|         This method is to verify whether configdrive iso is attached to vm or not
 | |
|         Takes vm ip as the input
 | |
|         Returns mount path if config drive is attached else False
 | |
|         """
 | |
|         mountdir = "/root/iso"
 | |
|         cmd = "blkid -t LABEL='config' /dev/hd? /dev/sd? /dev/xvd? -o device"
 | |
|         try:
 | |
|             self.debug("SSH into VM: %s" % vm_ip)
 | |
|             ssh = self.vm.get_ssh_client(ipaddress=vm_ip, reconnect=True)
 | |
|             tmp_cmd = ['bash -c "if [ ! -d /root/iso ] ; then mkdir /root/iso ; fi"', "umount /root/iso"]
 | |
|             for tcmd in tmp_cmd:
 | |
|                 ssh.execute(tcmd)
 | |
|             configDrive = ssh.execute(cmd)
 | |
|             res = ssh.execute("mount {} {}".format(str(configDrive[0]), mountdir))
 | |
|             if str(res).lower().find("mounting read-only") > -1:
 | |
|                 self.debug("configDrive iso has been mounted at location %s" % mountdir)
 | |
|                 return mountdir
 | |
|             else:
 | |
|                 return False
 | |
|         except Exception as e:
 | |
|             self.debug("SSH Access failed for vm {}: Exception {}".format(vm_ip, e))
 | |
|             return False
 | |
| 
 | |
|     def verifyUserData(self, vm_ip, iso_path):
 | |
|         """
 | |
|         Connect to vm and verify Userdata
 | |
|         """
 | |
|         userdata_path = iso_path+"/cloudstack/userdata/user_data.txt"
 | |
|         try:
 | |
|             self.debug("SSH into VM: %s" % vm_ip)
 | |
|             ssh = self.vm.get_ssh_client(ipaddress=vm_ip, reconnect=True)
 | |
|             cmd = "cat %s" % userdata_path
 | |
|             res = ssh.execute(cmd)
 | |
|             if str(res).lower().find(self.userdata):
 | |
|                 self.debug("Userdata is found in the attached configDriveIso")
 | |
|                 return True
 | |
|             else:
 | |
|                 self.debug("Userdata is not found in the attached configDriveIso")
 | |
|                 return False
 | |
|         except Exception as e:
 | |
|             self.debug("SSH Access failed for vm {}: Exception {}".format(vm_ip, e))
 | |
|             return False
 | |
| 
 | |
|         return
 | |
| 
 | |
|     def verifyPassword(self, vm_ip, iso_path):
 | |
|         password_file = iso_path+"/cloudstack/password/vm_password.txt"
 | |
|         try:
 | |
|             self.debug("SSH into VM: %s" % vm_ip)
 | |
|             ssh = self.vm.get_ssh_client(ipaddress=vm_ip, reconnect=True)
 | |
|             cmd = "cat %s" % password_file
 | |
|             res = ssh.execute(cmd)
 | |
|             if str(res).find("No such file or directory"):
 | |
|                 self.debug("Password file is not found")
 | |
|                 return False
 | |
|             elif str(res).lower().find("saved_password"):
 | |
|                 self.debug("Reset password is not found in the attached configDriveIso")
 | |
|                 return False
 | |
|             else:
 | |
|                 self.debug("Reset Password is found in the attached configDriveIso")
 | |
|                 return True
 | |
|         except Exception as e:
 | |
|             self.debug("SSH Access failed for vm {}: Exception {}".format(vm_ip, e))
 | |
|             return False
 | |
|         return
 | |
| 
 | |
|     def verifySshKey(self, vm_ip, iso_path):
 | |
| 
 | |
|         publicKey_file = iso_path+"/cloudstack/metadata/public_keys.txt"
 | |
|         try:
 | |
|             self.debug("SSH into VM: %s" % vm_ip)
 | |
|             ssh = self.vm.get_ssh_client(ipaddress=vm_ip)
 | |
|             cmd = "cat %s" % publicKey_file
 | |
|             res = ssh.execute(cmd)
 | |
|             if str(res).lower().find("saved_password"):
 | |
|                 self.debug("Public Key is found in the attached configDriveIso")
 | |
|                 return True
 | |
|             else:
 | |
|                 self.debug("Public Key is not found in the attached configDriveIso")
 | |
|                 return False
 | |
|         except Exception as e:
 | |
|             self.debug("SSH Access failed for vm {}: Exception {}".format(vm_ip, e))
 | |
|             return False
 | |
|         return
 | |
| 
 | |
|     def getVMMetaData(self, vm_ip, iso_path):
 | |
| 
 | |
|         metadata_dir = iso_path+"/cloudstack/metadata/"
 | |
|         try:
 | |
|             response = {}
 | |
|             self.debug("SSH into VM: %s" % vm_ip)
 | |
|             ssh = self.vm.get_ssh_client(ipaddress=vm_ip, reconnect=True)
 | |
|             vm_files = ["availability_zone.txt", "instance_id.txt", "service_offering.txt", "vm_id.txt"]
 | |
|             for file in vm_files:
 | |
|                 cmd = "cat %s" % metadata_dir+file
 | |
|                 res = ssh.execute(cmd)
 | |
|                 response[file] = res
 | |
|         except Exception as e:
 | |
|             self.debug("SSH Access failed for vm {}: Exception {}".format(vm_ip, e))
 | |
|         return response
 | |
| 
 | |
|     def verifyMetaData(self, metadata):
 | |
| 
 | |
|         metadata_files = ["availability_zone.txt", "instance_id.txt", "service_offering.txt", "vm_id.txt"]
 | |
|         for mfile in metadata_files:
 | |
|             if mfile not in metadata:
 | |
|                 self.fail("{} file is not found in vm metadata".format(mfile))
 | |
|         self.assertEqual(
 | |
|             str(metadata["availability_zone.txt"][0]),
 | |
|             self.zone.name,
 | |
|             "Zone name inside metadata does not match with the zone"
 | |
|         )
 | |
|         self.assertEqual(
 | |
|             str(metadata["instance_id.txt"][0]),
 | |
|             self.vm.instancename,
 | |
|             "vm name inside metadata does not match with the instance name"
 | |
|         )
 | |
|         self.assertEqual(
 | |
|             str(metadata["service_offering.txt"][0]),
 | |
|             self.vm.serviceofferingname,
 | |
|             "Service offering inside metadata does not match with the instance offering"
 | |
|         )
 | |
|         qresultset = self.dbclient.execute(
 | |
|             "select id from vm_instance where instance_name='%s';" % \
 | |
|             self.vm.instancename)
 | |
|         self.assertEqual(validateList(qresultset)[0], PASS, "sql query returned invalid response")
 | |
|         self.assertEqual(
 | |
|             metadata["vm_id.txt"][0],
 | |
|             unicode(qresultset[0][0]),
 | |
|             "vm id in metadata does not match with the vm id from cloud db"
 | |
|         )
 | |
|         return
 | |
| 
 | |
|     def generate_ssh_keys(self):
 | |
|         """
 | |
|         This method generates ssh key pair and writes the private key into a temp file and returns the file name
 | |
|         """
 | |
|         self.keypair = SSHKeyPair.create(
 | |
|             self.apiclient,
 | |
|             name=random_gen() + ".pem",
 | |
|             account="admin",
 | |
|             domainid=1
 | |
|         )
 | |
|         self.debug("Created keypair with name: %s" % self.keypair.name)
 | |
|         self.debug("Writing the private key to local file")
 | |
|         keyPairFilePath = tempfile.gettempdir() + os.sep + self.keypair.name
 | |
|         self.tmp_files.append(keyPairFilePath)
 | |
|         self.debug("File path: %s" % keyPairFilePath)
 | |
|         f = open(keyPairFilePath, "w+")
 | |
|         f.write(self.keypair.privatekey)
 | |
|         f.close()
 | |
|         os.system("chmod 400 " + keyPairFilePath)
 | |
|         return keyPairFilePath
 | |
| 
 | |
|     def verifyIPFetchEvent(self, ipaddr):
 | |
| 
 | |
|         id = self.dbclient.execute(
 | |
|             "select instance_id,id from nics where ip4_address='%s' and removed is null;" % ipaddr
 | |
|         )
 | |
|         self.assertEqual(
 | |
|             validateList(id)[0],
 | |
|             PASS,
 | |
|             "sql query to select nic id returned invalid response"
 | |
|         )
 | |
|         qresultset = self.dbclient.execute(
 | |
|             "select description from event where type='EXTERNAL.DHCP.VM.IP.FETCH' order by id desc limit 1;"
 | |
|         )
 | |
|         self.assertEqual(
 | |
|             validateList(qresultset)[0],
 | |
|             PASS,
 | |
|             "sql query for IP Fetch event returned invalid response"
 | |
|         )
 | |
|         return True if re.search("VM %s nic id %s ip address %s got fetched successfully" % \
 | |
|                                  (id[0][0], id[0][1], ipaddr), str(qresultset[0])) else False
 | |
| 
 | |
|     def umountConfigDrive(self, vm_ip, iso_path):
 | |
|         """umount config drive iso attached inside guest vm"""
 | |
|         try:
 | |
|             self.debug("SSH into VM: %s" % vm_ip)
 | |
|             ssh = self.vm.get_ssh_client(ipaddress=vm_ip, reconnect=True)
 | |
|             ssh.execute("umount %s" % iso_path)
 | |
|         except Exception as e:
 | |
|             self.debug("SSH access failed for vm")
 | |
| 
 | |
|     @classmethod
 | |
|     def list_nw_services(cls, nw_id, nw_off_id):
 | |
|         """
 | |
|         Verify network services in a network. List of services supported should be as per the
 | |
|         network offering with which it has been created.
 | |
|         return True if created network and network offering has same services else False
 | |
|         """
 | |
|         nw_response = Network.list(cls.api_client, id = nw_id)
 | |
|         assert validateList(nw_response)[0] == PASS, "list networks returned invalid response"
 | |
|         nw_services = [service.name for service in nw_response[0].service]
 | |
|         nw_off_res = NetworkOffering.list(cls.api_client, id = nw_off_id)
 | |
|         assert validateList(nw_off_res)[0] == PASS, "list network offerings returned invalid response"
 | |
|         nw_off_services = [service.name for service in nw_off_res[0].service]
 | |
|         if len(nw_services) == len(nw_off_services) and len(nw_services) == 0:
 | |
|             return True
 | |
|         elif len(nw_services) != len(nw_off_services):
 | |
|             return False
 | |
|         for srv in nw_services:
 | |
|             if srv not in nw_off_services:
 | |
|                 return False
 | |
|         return True
 | |
| 
 | |
|     @attr(tags=["advanced"], required_hardware='True')
 | |
|     def test_01_createNetworks_TC3(self):
 | |
| 
 | |
|         """
 | |
|         Create shared networks with all the network offerings created in the setupClass method
 | |
|         """
 | |
|         nw_offs = [self.network_offering3]
 | |
|         vlan = self.services["network2"]["vlan"]
 | |
|         name = self.services["network2"]["name"]
 | |
|         for nw_off in nw_offs:
 | |
|             self.services["network2"]["name"]="SharedNetwork%s" % randint(1, 10)
 | |
|             try:
 | |
|                 self.services["network2"]["vlan"] += 1
 | |
|                 self.shared_network = Network.create(
 | |
|                     self.apiclient,
 | |
|                     self.services["network2"],
 | |
|                     networkofferingid=nw_off.id,
 | |
|                     zoneid=self.zone.id
 | |
|                 )
 | |
|                 self.cleanup.append(self.shared_network)
 | |
|                 self.assertTrue(
 | |
|                     TestDeployVMs.list_nw_services(self.shared_network.id, nw_off.id),
 | |
|                     "Network services not matched with network offering services"
 | |
|                 )
 | |
|             except Exception as e:
 | |
|                 self.fail("Shared network creation with network offering %s failed with error: %s" % (nw_off, e))
 | |
|         self.services["network2"]["vlan"] = vlan
 | |
|         self.services["network2"]["name"] = name
 | |
|         return
 | |
| 
 | |
|     @attr(tags=["advanced"], required_hardware='True')
 | |
|     def test_02_deployVM_nw_without_services_TC6(self):
 | |
|         """
 | |
|         1.Create shared network without any services
 | |
|         2.Deploy vm in that network
 | |
|         3.Verify vm deployment
 | |
|         4.Verify IP address retrieval
 | |
|         """
 | |
|         self.vm = VirtualMachine.create(
 | |
|             self.apiclient,
 | |
|             self.services["virtual_machine"],
 | |
|             templateid=self.template.id,
 | |
|             accountid="admin",
 | |
|             domainid=1,
 | |
|             serviceofferingid=self.service_offering.id,
 | |
|             zoneid=self.zone.id,
 | |
|             networkids=[self.shared_network.id],
 | |
|         )
 | |
|         self.assertIsNotNone(
 | |
|             self.vm,
 | |
|             "VM creation failed in a shared network without any services"
 | |
|         )
 | |
|         self.cleanup.append(self.vm)
 | |
|         #Verify IP address retrieval using listVirtualMachines API
 | |
|         ip_status,ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address"
 | |
|         )
 | |
|         #Verify the retrieved ip address in listNICs API response
 | |
|         self.list_nics(self.vm.id)
 | |
|         #Verify config drive is attached to vm or not
 | |
|         configDrive_iso = self.isConfigDriveIsoAttached(ip_addr)
 | |
|         self.assertNotEqual(
 | |
|             configDrive_iso,
 | |
|             False,
 | |
|             "Config drive iso is not attached to vm"
 | |
|         )
 | |
|         return
 | |
| 
 | |
|     @attr(tags=["advanced"], required_hardware='True')
 | |
|     def test_03_deployVM_with_userdata_TC7(self):
 | |
|         """
 | |
|         1.Create shared network without any services
 | |
|         2.Deploy vm with userdata in the above network
 | |
|         3.Verify vm deployment
 | |
|         4.Verify IP Address retrieval
 | |
|         """
 | |
|         self.services["virtual_machine"]["userdata"] = self.userdata
 | |
|         self.vm = VirtualMachine.create(
 | |
|             self.apiclient,
 | |
|             self.services["virtual_machine"],
 | |
|             templateid=self.template.id,
 | |
|             accountid="admin",
 | |
|             domainid=1,
 | |
|             serviceofferingid=self.service_offering.id,
 | |
|             zoneid=self.zone.id,
 | |
|             networkids=[self.shared_network.id],
 | |
|         )
 | |
|         self.assertIsNotNone(
 | |
|             self.vm,
 | |
|             "VM creation with userdata failed in a shared network without any services"
 | |
|         )
 | |
|         self.cleanup.append(self.vm)
 | |
|         #Verify IP address retrieval using listVirtualMachines API
 | |
|         ip_status,ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address"
 | |
|         )
 | |
|         #Verify the retrieved ip address in listNICs API response
 | |
|         self.list_nics(self.vm.id)
 | |
|         #Verify config drive is attached to vm or not
 | |
|         configDrive_iso = self.isConfigDriveIsoAttached(ip_addr)
 | |
|         self.assertNotEqual(
 | |
|             configDrive_iso,
 | |
|             False,
 | |
|             "Config drive iso is not attached to vm"
 | |
|         )
 | |
|         #Add userdata verification test
 | |
|         self.assertEqual(
 | |
|             self.verifyUserData(ip_addr, configDrive_iso),
 | |
|             True,
 | |
|             "Userdata is not matching"
 | |
|         )
 | |
|         return
 | |
| 
 | |
|     @attr(tags=["advanced"], required_hardware='True')
 | |
|     def test_04_deploy_win_VM_with_userdata_TC8(self):
 | |
|         """
 | |
|         1.Create shared network without any services
 | |
|         2.Deploy windows vm in the above network
 | |
|         3.Verify IP address retrieval
 | |
|         """
 | |
|         self.skipTest("Skip windows tests for now")
 | |
|         self.services["virtual_machine"]["userdata"] = self.userdata
 | |
|         self.shared_network = Network.create(
 | |
|             self.apiclient,
 | |
|             self.services["network2"],
 | |
|             networkofferingid=self.network_offering1.id,
 | |
|             zoneid=self.zone.id
 | |
|         )
 | |
|         self.cleanup.append(self.shared_network)
 | |
|         self.vm = VirtualMachine.create(
 | |
|             self.apiclient,
 | |
|             self.services["virtual_machine"],
 | |
|             templateid=self.win_template.id,
 | |
|             accountid="admin",
 | |
|             domainid=1,
 | |
|             serviceofferingid=self.service_offering.id,
 | |
|             zoneid=self.zone.id,
 | |
|             networkids=[self.shared_network.id],
 | |
|         )
 | |
|         self.assertIsNotNone(
 | |
|             self.vm,
 | |
|             "FAIL:VM Creation failed with windows template in a shared network without any services"
 | |
|         )
 | |
|         self.cleanup.append(self.vm)
 | |
|         ip_status,ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address"
 | |
|         )
 | |
|         self.list_nics(self.vm_id)
 | |
|         return
 | |
| 
 | |
|     @attr(tags=["advanced"], required_hardware='True')
 | |
|     def test_06_deployVM_with_userdata_TC11(self):
 | |
|         """
 | |
|         1.Create shared network with DHCP,DNS and userdata services provided by VR
 | |
|         2.Deploy vm in that network
 | |
|         3.Verify vm deployment
 | |
|         4.Verify IP address retrieval
 | |
|         """
 | |
|         vlan = self.services["network2"]["vlan"]
 | |
|         self.services["network2"]["vlan"] += 1
 | |
|         self.shared_network = Network.create(
 | |
|             self.apiclient,
 | |
|             self.services["network2"],
 | |
|             networkofferingid=self.network_offering3.id,
 | |
|             zoneid=self.zone.id
 | |
|         )
 | |
|         self.cleanup.append(self.shared_network)
 | |
|         self.services["network2"]["vlan"] = vlan
 | |
|         self.services["virtual_machine"]["userdata"] = self.userdata
 | |
|         self.vm = VirtualMachine.create(
 | |
|             self.apiclient,
 | |
|             self.services["virtual_machine"],
 | |
|             templateid=self.template.id,
 | |
|             accountid="admin",
 | |
|             domainid=1,
 | |
|             serviceofferingid=self.service_offering.id,
 | |
|             zoneid=self.zone.id,
 | |
|             networkids=[self.shared_network.id],
 | |
|         )
 | |
|         self.assertIsNotNone(
 | |
|             self.vm,
 | |
|             "Failed to create vm with in a shared network with DHCP and userdata services provided by VR"
 | |
|         )
 | |
|         self.cleanup.append(self.vm)
 | |
|         ip_status,ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address"
 | |
|         )
 | |
|         self.list_nics(self.vm.id)
 | |
|         #To make sure that vm got the ip address as part of the cs allocation process check user_ip_address table
 | |
|         #for allocated state for the assigned ip address
 | |
|         qresultset = self.dbclient.execute(
 | |
|             "select allocated from user_ip_address where public_ip_address='%s' and removed is null;" % \
 | |
|             self.vm.nic[0].ipaddress)
 | |
|         self.assertEqual(validateList(qresultset)[0],PASS,"sql query returned invalid response")
 | |
|         self.assertNotEqual(
 | |
|             qresultset[0],
 | |
|             'NULL',
 | |
|             "VM didn't get ip address as part of CS IP allocation process\
 | |
|                         It might have got from external dhcp server in that network")
 | |
|         return
 | |
| 
 | |
|     @attr(tags=["advanced"], required_hardware='True')
 | |
|     def test_07_deployVM_with_userdata_VR_TC12(self):
 | |
|         """
 | |
|         1.Create shared network with only userdata service and VR as the provider
 | |
|         2.Verify that network offering creation should fail
 | |
|         """
 | |
|         try:
 | |
|             self.network_offering4 = NetworkOffering.create(
 | |
|                 self.api_client,
 | |
|                 self.services["nw_off_userdata_VR"],
 | |
|             )
 | |
|             self.fail("NO creation with vr as the userdata provider should not be allowed\
 | |
|              since VR in not the dhcp provider")
 | |
|         except Exception as e:
 | |
|             self.debug("NO creation failed as expected with error message %s" % e)
 | |
|         return
 | |
| 
 | |
|     @attr(tags=["advanced"], required_hardware='True')
 | |
|     def test_09_StopStartVMAndGetVMIpAddress_TC16(self):
 | |
|         """
 | |
|         1.Create shared network without any services
 | |
|         2.Deploy vm with default cent os template and pass user data
 | |
|         3.Verify vm deployment
 | |
|         4.Verify IP address retrieval and userdata
 | |
|         5.Stop start vm and repeat step4
 | |
|         """
 | |
|         self.services["virtual_machine"]["userdata"] = self.userdata
 | |
|         self.vm = VirtualMachine.create(
 | |
|             self.apiclient,
 | |
|             self.services["virtual_machine"],
 | |
|             templateid=self.template.id,
 | |
|             accountid="admin",
 | |
|             domainid=1,
 | |
|             serviceofferingid=self.service_offering.id,
 | |
|             diskofferingid=self.disk_offering.id,
 | |
|             zoneid=self.zone.id,
 | |
|             networkids=[self.shared_network.id],
 | |
|         )
 | |
|         self.assertIsNotNone(
 | |
|             self.vm,
 | |
|             "Failed to create vm in a shared network without any services"
 | |
|         )
 | |
|         self.cleanup.append(self.vm)
 | |
|         ip_status, ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address"
 | |
|         )
 | |
|         self.list_nics(self.vm.id)
 | |
|         #Verify configdrive iso attach before vm stop/start
 | |
|         configDrive_iso = self.isConfigDriveIsoAttached(ip_addr)
 | |
|         self.assertNotEqual(
 | |
|             configDrive_iso,
 | |
|             False,
 | |
|             "Config drive iso is not attached to vm after vm stop start"
 | |
|         )
 | |
|         #Add userdata verification test
 | |
|         self.assertEqual(
 | |
|             self.verifyUserData(ip_addr, configDrive_iso),
 | |
|             True,
 | |
|             "Userdata is not matching with the data passed in vm deployment"
 | |
|         )
 | |
|         #Stop/Start VM and verify the IP address retrieval
 | |
|         self.vm.stop(self.apiclient)
 | |
|         self.vm.start(self.apiclient)
 | |
|         time.sleep(60)
 | |
|         ip_status,ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address after vm stop start"
 | |
|         )
 | |
|         self.list_nics(self.vm.id)
 | |
|         configDrive_iso = self.isConfigDriveIsoAttached(ip_addr)
 | |
|         self.assertNotEqual(
 | |
|             configDrive_iso,
 | |
|             False,
 | |
|             "Config drive iso is not attached to vm after vm stop start"
 | |
|         )
 | |
|         #Add userdata verification test
 | |
|         self.assertEqual(
 | |
|             self.verifyUserData(ip_addr, configDrive_iso),
 | |
|             True,
 | |
|             "Userdata is not matching after vm stop start"
 | |
|         )
 | |
|         return
 | |
| 
 | |
|     @attr(tags=["advanced"], required_hardware='True')
 | |
|     def test_10_RebootVMAndGetVMIpAddress_TC17(self):
 | |
|         """
 | |
|         1.Create shared network without any services
 | |
|         2.Deploy vm with default cent os template and pass user data
 | |
|         3.Verify vm deployment
 | |
|         4.Verify IP address retrieval and userdata
 | |
|         5.Reboot vm and repeat step4
 | |
|         """
 | |
|         self.services["virtual_machine"]["userdata"] = self.userdata
 | |
|         self.vm = VirtualMachine.create(
 | |
|             self.apiclient,
 | |
|             self.services["virtual_machine"],
 | |
|             templateid=self.template.id,
 | |
|             accountid="admin",
 | |
|             domainid=1,
 | |
|             serviceofferingid=self.service_offering.id,
 | |
|             diskofferingid=self.disk_offering.id,
 | |
|             zoneid=self.zone.id,
 | |
|             networkids=[self.shared_network.id],
 | |
|         )
 | |
|         self.cleanup.append(self.vm)
 | |
|         self.assertIsNotNone(
 | |
|             self.vm,
 | |
|             "Failed to create vm in a shared network without any services"
 | |
|         )
 | |
|         ip_status,ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address"
 | |
|         )
 | |
|         self.list_nics(self.vm.id)
 | |
|         #Verify configdrive iso attach before vm reboot
 | |
|         configDrive_iso = self.isConfigDriveIsoAttached(ip_addr)
 | |
|         self.assertNotEqual(
 | |
|             configDrive_iso,
 | |
|             False,
 | |
|             "Config drive iso is not attached to vm before reboot"
 | |
|         )
 | |
|         #Add userdata verification test
 | |
|         self.assertEqual(
 | |
|             self.verifyUserData(ip_addr, configDrive_iso),
 | |
|             True,
 | |
|             "Userdata is not matching with the data passed while deploying"
 | |
|         )
 | |
|         #Reboot VM and verify the IP address retrieval
 | |
|         self.vm.reboot(self.apiclient)
 | |
|         time.sleep(60)
 | |
|         ip_status, ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address after vm reboot"
 | |
|         )
 | |
|         self.list_nics(self.vm.id)
 | |
|         configDrive_iso = self.isConfigDriveIsoAttached(ip_addr)
 | |
|         self.assertNotEqual(
 | |
|             configDrive_iso,
 | |
|             False,
 | |
|             "Config drive iso is not attached to vm after vm reboot"
 | |
|         )
 | |
|         #Add userdata verification test
 | |
|         self.assertEqual(
 | |
|             self.verifyUserData(ip_addr, configDrive_iso),
 | |
|             True,
 | |
|             "Userdata is not matching after vm reboot"
 | |
|         )
 | |
|         return
 | |
| 
 | |
|     @attr(tags=["advanced"], required_hardware='True')
 | |
|     def test_11_DestroyVMAndGetVMIpAddress_TC18(self):
 | |
|         """
 | |
|         1.Create shared network without any services
 | |
|         2.Deploy vm with default cent os template and pass user data
 | |
|         3.Verify vm deployment
 | |
|         4.Verify IP address retrieval and userdata
 | |
|         5.Destroy,restore vm and repeat step4
 | |
|         """
 | |
|         self.services["virtual_machine"]["userdata"] = self.userdata
 | |
|         self.vm = VirtualMachine.create(
 | |
|             self.apiclient,
 | |
|             self.services["virtual_machine"],
 | |
|             templateid=self.template.id,
 | |
|             accountid="admin",
 | |
|             domainid=1,
 | |
|             serviceofferingid=self.service_offering.id,
 | |
|             diskofferingid=self.disk_offering.id,
 | |
|             zoneid=self.zone.id,
 | |
|             networkids=[self.shared_network.id],
 | |
|         )
 | |
|         self.assertIsNotNone(
 | |
|             self.vm,
 | |
|             "Failed to create vm in a shared network without any services"
 | |
|         )
 | |
|         self.cleanup.append(self.vm)
 | |
|         ip_status, ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address"
 | |
|         )
 | |
|         self.list_nics(self.vm.id)
 | |
|         #Verify configdrive iso attach before vm destroy
 | |
|         configDrive_iso = self.isConfigDriveIsoAttached(ip_addr)
 | |
|         self.assertNotEqual(
 | |
|             configDrive_iso,
 | |
|             False,
 | |
|             "Config drive iso is not attached to vm before destroy"
 | |
|         )
 | |
|         #Add userdata verification test
 | |
|         self.assertEqual(
 | |
|             self.verifyUserData(ip_addr, configDrive_iso),
 | |
|             True,
 | |
|             "Userdata is not matching with the data passed while deploying"
 | |
|         )
 | |
|         #Destroy VM and verify the IP address retrieval
 | |
|         self.vm.delete(self.apiclient,expunge=False)
 | |
|         self.vm.recover(self.apiclient)
 | |
|         self.vm.start(self.apiclient)
 | |
|         time.sleep(60)
 | |
|         ip_status, ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address after vm reboot"
 | |
|         )
 | |
|         self.list_nics(self.vm.id)
 | |
|         configDrive_iso = self.isConfigDriveIsoAttached(ip_addr)
 | |
|         self.assertNotEqual(
 | |
|             configDrive_iso,
 | |
|             False,
 | |
|             "Config drive iso is not attached to vm after vm reboot"
 | |
|         )
 | |
|         #Add userdata verification test
 | |
|         self.assertEqual(
 | |
|             self.verifyUserData(ip_addr, configDrive_iso),
 | |
|             True,
 | |
|             "Userdata is not matching after vm reboot"
 | |
|         )
 | |
|         return
 | |
| 
 | |
|     @attr(tags=["advanced"], required_hardware='True')
 | |
|     def test_12_ReInstallVMAndGetVMIpAddress_TC19(self):
 | |
|         """
 | |
|         1.Create shared network without any services
 | |
|         2.Deploy vm with default cent os template and pass user data
 | |
|         3.Verify vm deployment
 | |
|         4.Verify IP address retrieval and userdata
 | |
|         5.Reinstall vm to same template and repeat step4
 | |
|         """
 | |
|         self.services["virtual_machine"]["userdata"] = self.userdata
 | |
|         self.vm = VirtualMachine.create(
 | |
|             self.apiclient,
 | |
|             self.services["virtual_machine"],
 | |
|             templateid=self.template.id,
 | |
|             accountid="admin",
 | |
|             domainid=1,
 | |
|             serviceofferingid=self.service_offering.id,
 | |
|             diskofferingid=self.disk_offering.id,
 | |
|             zoneid=self.zone.id,
 | |
|             networkids=[self.shared_network.id],
 | |
|         )
 | |
|         self.assertIsNotNone(
 | |
|             self.vm,
 | |
|             "Failed to create vm in a shared network without any services"
 | |
|         )
 | |
|         self.cleanup.append(self.vm)
 | |
|         ip_status, ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address"
 | |
|         )
 | |
|         self.list_nics(self.vm.id)
 | |
|         #Verify configdrive iso attach before vm reinstall
 | |
|         configDrive_iso = self.isConfigDriveIsoAttached(ip_addr)
 | |
|         self.assertNotEqual(
 | |
|             configDrive_iso,
 | |
|             False,
 | |
|             "Config drive iso is not attached to vm before reinstall"
 | |
|         )
 | |
|         #Add userdata verification test
 | |
|         self.assertEqual(
 | |
|             self.verifyUserData(ip_addr,configDrive_iso),
 | |
|             True,
 | |
|             "Userdata is not matching with the data passed while deploying"
 | |
|         )
 | |
|         #Reinstall VM and verify the IP address retrieval
 | |
|         self.vm.restore(self.apiclient)
 | |
|         time.sleep(60)
 | |
|         ip_status, ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address after vm reinstall"
 | |
|         )
 | |
|         self.list_nics(self.vm.id)
 | |
|         configDrive_iso = self.isConfigDriveIsoAttached(ip_addr)
 | |
|         self.assertNotEqual(
 | |
|             configDrive_iso,
 | |
|             False,
 | |
|             "Config drive iso is not attached to vm after vm reinstall"
 | |
|         )
 | |
|         self.assertEqual(
 | |
|             self.verifyUserData(ip_addr, configDrive_iso),
 | |
|             True,
 | |
|             "Userdata is not matching after vm reinstall"
 | |
|         )
 | |
|         return
 | |
| 
 | |
|     @attr(tags=["advanced"], required_hardware='True')
 | |
|     def test_13_MigrateVMAndGetVMIpAddress_TC20(self):
 | |
|         """
 | |
|         1.Create shared network without any services
 | |
|         2.Deploy vm with default cent os template and pass user data
 | |
|         3.Verify vm deployment
 | |
|         4.Verify IP address retrieval and userdata
 | |
|         5.Live Migrate vm to another host in the cluster and repeat step4
 | |
|         """
 | |
|         self.services["virtual_machine"]["userdata"] = self.userdata
 | |
|         self.vm = VirtualMachine.create(
 | |
|             self.apiclient,
 | |
|             self.services["virtual_machine"],
 | |
|             templateid=self.template.id,
 | |
|             accountid="admin",
 | |
|             domainid=1,
 | |
|             serviceofferingid=self.service_offering.id,
 | |
|             diskofferingid=self.disk_offering.id,
 | |
|             zoneid=self.zone.id,
 | |
|             networkids=[self.shared_network.id],
 | |
|         )
 | |
|         self.assertIsNotNone(
 | |
|             self.vm,
 | |
|             "Failed to create vm in a shared network without any services"
 | |
|         )
 | |
|         self.cleanup.append(self.vm)
 | |
|         ip_status, ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address"
 | |
|         )
 | |
|         self.list_nics(self.vm.id)
 | |
|         configDrive_iso = self.isConfigDriveIsoAttached(ip_addr)
 | |
|         self.assertNotEqual(
 | |
|             configDrive_iso,
 | |
|             False,
 | |
|             "Config drive iso is not attached to vm before live migrate"
 | |
|         )
 | |
|         self.assertEqual(
 | |
|             self.verifyUserData(ip_addr, configDrive_iso),
 | |
|             True,
 | |
|             "Userdata is not matching with the data passed while deploying"
 | |
|         )
 | |
|         self.umountConfigDrive(ip_addr, configDrive_iso)
 | |
|         hosts = Host.listForMigration(self.apiclient,virtualmachineid=self.vm.id)
 | |
|         self.assertEqual(validateList(hosts)[0], PASS, "Find hosts for migration returned invalid response")
 | |
|         if len(hosts) < 1:
 | |
|             self.skipTest("No suitable hosts found for vm migration..so skipping test")
 | |
|         hostid = hosts[0].id
 | |
|         self.vm.migrate(self.apiclient,hostid=hostid)
 | |
|         ip_status, ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address after vm live migrate"
 | |
|         )
 | |
|         self.list_nics(self.vm.id)
 | |
|         configDrive_iso = self.isConfigDriveIsoAttached(ip_addr)
 | |
|         self.assertNotEqual(
 | |
|             configDrive_iso,
 | |
|             False,
 | |
|             "Config drive iso is not attached to vm after vm live migrate"
 | |
|         )
 | |
|         self.assertEqual(
 | |
|             self.verifyUserData(ip_addr, configDrive_iso),
 | |
|             True,
 | |
|             "Userdata is not matching after vm live migrate"
 | |
|         )
 | |
|         return
 | |
| 
 | |
|     @attr(tags=["advanced"], required_hardware='True')
 | |
|     def test_14_VM_with_password_enabled_template_TC24(self):
 | |
|         """
 | |
|         1.Create shared network without any services
 | |
|         2.Deploy vm with password enabled template
 | |
|         3.Verify accessing vm with the CS generated password
 | |
|         """
 | |
|         self.vm = VirtualMachine.create(
 | |
|             self.apiclient,
 | |
|             self.services["virtual_machine"],
 | |
|             templateid=self.pwd_template.id,
 | |
|             accountid="admin",
 | |
|             domainid=1,
 | |
|             serviceofferingid=self.service_offering.id,
 | |
|             diskofferingid=self.disk_offering.id,
 | |
|             zoneid=self.zone.id,
 | |
|             networkids=[self.shared_network.id],
 | |
|         )
 | |
|         self.assertIsNotNone(
 | |
|             self.vm,
 | |
|             "Failed to create vm in a shared network without any services with password enabled template"
 | |
|         )
 | |
|         self.cleanup.append(self.vm)
 | |
|         ip_status, ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address"
 | |
|         )
 | |
|         try:
 | |
|             self.debug("SSHing into VM: %s" % ip_addr)
 | |
|             self.vm.get_ssh_client(ipaddress=ip_addr, reconnect=True)
 | |
|         except Exception as e:
 | |
|             self.fail("SSH into VM: %s failed with new password: %s" %
 | |
|                       (self.vm.ssh_ip, e))
 | |
|         return
 | |
| 
 | |
|     @attr(tags=["advanced"], required_hardware='True')
 | |
|     def test_15_reset_password_TC27(self):
 | |
|         """
 | |
|         1.Create shared network without any services
 | |
|         2.Deploy vm with password enabled template
 | |
|         3.Reset password
 | |
|         4.Verify accessing vm with the new password
 | |
|         """
 | |
|         self.vm = VirtualMachine.create(
 | |
|             self.apiclient,
 | |
|             self.services["virtual_machine"],
 | |
|             templateid=self.pwd_template.id,
 | |
|             accountid="admin",
 | |
|             domainid=1,
 | |
|             serviceofferingid=self.service_offering.id,
 | |
|             diskofferingid=self.disk_offering.id,
 | |
|             zoneid=self.zone.id,
 | |
|             networkids=[self.shared_network.id],
 | |
|         )
 | |
|         self.assertIsNotNone(
 | |
|             self.vm,
 | |
|             "Failed to create vm in a shared network without any services"
 | |
|         )
 | |
|         self.cleanup.append(self.vm)
 | |
|         self.vm.stop(self.apiclient)
 | |
|         self.debug("Resetting VM password for VM: %s" % self.vm.name)
 | |
|         self.vm_password = self.vm.resetPassword(self.apiclient)
 | |
|         self.debug("Password reset to: %s" % self.vm_password)
 | |
|         self.debug("Starting VM to verify new password..")
 | |
|         self.vm.start(self.apiclient)
 | |
|         self.debug("VM - %s stated!" % self.vm.name)
 | |
|         ip_status, ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address"
 | |
|         )
 | |
|         try:
 | |
|             self.debug("SSHing into VM: %s" % ip_addr)
 | |
|             self.vm.password = self.vm_password
 | |
|             self.vm.get_ssh_client(ipaddress=ip_addr, reconnect=True)
 | |
|         except Exception as e:
 | |
|             self.fail("SSH into VM: %s failed with new password: %s" %
 | |
|                       (self.vm.ssh_ip, e))
 | |
|         return
 | |
| 
 | |
|     @attr(tags=["advanced"], required_hardware='True')
 | |
|     def test_16_deployVM_with_sshkeys_TC26(self):
 | |
|         """
 | |
|         1.Create shared network without any services
 | |
|         2.Deploy vm with ssh key reset script enabled template
 | |
|         3.Verify vm access with new keys
 | |
|         """
 | |
|         #generate key pair and get private key file name by calling below function
 | |
|         ssh_pvt_key = self.generate_ssh_keys()
 | |
|         self.vm = VirtualMachine.create(
 | |
|             self.apiclient,
 | |
|             self.services["virtual_machine"],
 | |
|             templateid=self.pwd_template.id,
 | |
|             accountid="admin",
 | |
|             domainid=1,
 | |
|             serviceofferingid=self.service_offering.id,
 | |
|             diskofferingid=self.disk_offering.id,
 | |
|             zoneid=self.zone.id,
 | |
|             networkids=[self.shared_network.id],
 | |
|             keypair=self.keypair.name
 | |
|         )
 | |
|         self.assertIsNotNone(
 | |
|             self.vm,
 | |
|             "Failed to create vm with ssh key pair"
 | |
|         )
 | |
|         self.cleanup.append(self.vm)
 | |
|         ip_status, ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address"
 | |
|         )
 | |
|         try:
 | |
|             self.debug("SSHing into VM: %s" % ip_addr)
 | |
|             self.vm.get_ssh_client(ipaddress=ip_addr, reconnect=True, keyPairFileLocation=str(ssh_pvt_key))
 | |
|         except Exception as e:
 | |
|             self.fail("SSH into VM: %s failed with ssh key pair: %s" %
 | |
|                       (self.vm.ssh_ip, e))
 | |
|         return
 | |
| 
 | |
|     @attr(tags=["advanced"], required_hardware='True')
 | |
|     def test_17_reset_sshkeys_TC29(self):
 | |
|         """
 | |
|         1.Create shared network without any services
 | |
|         2.Deploy vm with ssh key reset script enabled template
 | |
|         3.Reset keys
 | |
|         4.Verify vm access with new keys
 | |
|         """
 | |
|         #generate key pair and get private key file name by calling below function
 | |
|         self.generate_ssh_keys()
 | |
|         self.vm = VirtualMachine.create(
 | |
|             self.apiclient,
 | |
|             self.services["virtual_machine"],
 | |
|             templateid=self.pwd_template.id,
 | |
|             accountid="admin",
 | |
|             domainid=1,
 | |
|             serviceofferingid=self.service_offering.id,
 | |
|             diskofferingid=self.disk_offering.id,
 | |
|             zoneid=self.zone.id,
 | |
|             networkids=[self.shared_network.id],
 | |
|             keypair=self.keypair.name
 | |
|         )
 | |
|         self.assertIsNotNone(
 | |
|             self.vm,
 | |
|             "Failed to create vm with ssh key pair"
 | |
|         )
 | |
|         self.cleanup.append(self.vm)
 | |
|         try:
 | |
|             self.vm.stop(self.apiclient)
 | |
|         except Exception as e:
 | |
|             self.fail("Failed to stop virtual machine %s with error %s" % (self.vm.id, e))
 | |
|         self.debug("Creating a new SSH keypair")
 | |
|         new_pvt_key = self.generate_ssh_keys()
 | |
|         try:
 | |
|             self.vm.resetSshKey(
 | |
|                 self.apiclient,
 | |
|                 keypair=self.keypair.name,
 | |
|                 name=self.keypair.name,
 | |
|                 account="admin",
 | |
|                 domainid=1
 | |
|             )
 | |
|         except Exception as e:
 | |
|             self.fail("Failed to reset SSH key: %s, %s" % (self.vm.name, e))
 | |
|         self.debug("Starting the virtual machine after resetting the keypair")
 | |
|         try:
 | |
|             self.vm.start(self.apiclient)
 | |
|         except Exception as e:
 | |
|             self.fail("Failed to start virtual machine: %s, %s" % (self.vm.name, e))
 | |
|         ip_status, ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address"
 | |
|         )
 | |
|         try:
 | |
|             self.debug("SSHing into VM: %s" % ip_addr)
 | |
|             self.vm.get_ssh_client(ipaddress=ip_addr, reconnect=True, keyPairFileLocation=str(new_pvt_key))
 | |
|         except Exception as e:
 | |
|             self.fail("SSH into VM: %s failed with ssh key pair with error: %s" %
 | |
|                       (self.vm.ssh_ip, e))
 | |
|         return
 | |
| 
 | |
|     @attr(tags=["advanced"], required_hardware='True')
 | |
|     def test_18_reset_password_verify_after_vm_restart_TC36(self):
 | |
|         """
 | |
|         1.Create shared network without any services
 | |
|         2.Deploy vm with password enabled template
 | |
|         3.Reset password
 | |
|         4.Verify accessing vm with the new password
 | |
|         5.Stop/Start vm and repeat step 4
 | |
|         """
 | |
|         self.vm = VirtualMachine.create(
 | |
|             self.apiclient,
 | |
|             self.services["virtual_machine"],
 | |
|             templateid=self.pwd_template.id,
 | |
|             accountid="admin",
 | |
|             domainid=1,
 | |
|             serviceofferingid=self.service_offering.id,
 | |
|             diskofferingid=self.disk_offering.id,
 | |
|             zoneid=self.zone.id,
 | |
|             networkids=[self.shared_network.id],
 | |
|         )
 | |
|         self.assertIsNotNone(
 | |
|             self.vm,
 | |
|             "Failed to create vm in a shared network without any services"
 | |
|         )
 | |
|         self.cleanup.append(self.vm)
 | |
|         self.vm.stop(self.apiclient)
 | |
|         self.debug("Resetting VM password for VM: %s" % self.vm.name)
 | |
|         self.vm_password = self.vm.resetPassword(self.apiclient)
 | |
|         self.debug("Password reset to: %s" % self.vm_password)
 | |
|         self.debug("Starting VM to verify new password..")
 | |
|         self.vm.start(self.apiclient)
 | |
|         self.debug("VM - %s stated!" % self.vm.name)
 | |
|         ip_status,ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address"
 | |
|         )
 | |
|         try:
 | |
|             self.debug("SSHing into VM: %s" % ip_addr)
 | |
|             self.vm.password = self.vm_password
 | |
|             self.vm.get_ssh_client(ipaddress=ip_addr, reconnect=True)
 | |
|         except Exception as e:
 | |
|             self.fail("SSH into VM: %s failed with new password: %s" %
 | |
|                       (self.vm.ssh_ip, e))
 | |
|         #Stop start vm and verify connecting to vm with the same password
 | |
|         self.vm.stop(self.apiclient)
 | |
|         self.vm.start(self.apiclient)
 | |
|         ip_status,ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         try:
 | |
|             self.debug("SSH into vm after stop start")
 | |
|             self.vm.password = self.vm_password
 | |
|             self.vm.get_ssh_client(ipaddress=ip_addr, reconnect=True)
 | |
|         except Exception as e:
 | |
|             self.fail("SSH into vm failed with the same password after vm stop start")
 | |
|         return
 | |
| 
 | |
|     @attr(tags=["advanced"], required_hardware='True')
 | |
|     def test_19_reset_sshkeys_verify_after_vm_restartTC37(self):
 | |
|         """
 | |
|         1.Create shared network without any services
 | |
|         2.Deploy vm with ssh key reset script enabled template
 | |
|         3.Reset keys
 | |
|         4.Verify vm access with new keys
 | |
|         5.Stop/start vm and repeat step4
 | |
|         """
 | |
|         #generate key pair and get private key file name by calling below function
 | |
|         self.generate_ssh_keys()
 | |
|         self.vm = VirtualMachine.create(
 | |
|             self.apiclient,
 | |
|             self.services["virtual_machine"],
 | |
|             templateid=self.pwd_template.id,
 | |
|             accountid="admin",
 | |
|             domainid=1,
 | |
|             serviceofferingid=self.service_offering.id,
 | |
|             diskofferingid=self.disk_offering.id,
 | |
|             zoneid=self.zone.id,
 | |
|             networkids=[self.shared_network.id],
 | |
|             keypair=self.keypair.name
 | |
|         )
 | |
|         self.assertIsNotNone(
 | |
|             self.vm,
 | |
|             "Failed to create vm with ssh key pair"
 | |
|         )
 | |
|         self.cleanup.append(self.vm)
 | |
|         try:
 | |
|             self.vm.stop(self.apiclient)
 | |
|         except Exception as e:
 | |
|             self.fail("Failed to stop virtual machine %s with error %s" % (self.vm.id, e))
 | |
|         self.debug("Creating a new SSH keypair")
 | |
|         new_pvt_key = self.generate_ssh_keys()
 | |
|         try:
 | |
|             self.vm.resetSshKey(
 | |
|                 self.apiclient,
 | |
|                 keypair=self.keypair.name,
 | |
|                 name=self.keypair.name,
 | |
|                 account="admin",
 | |
|                 domainid=1
 | |
|             )
 | |
|         except Exception as e:
 | |
|             self.fail("Failed to reset SSH key: %s, %s" % (self.vm.name, e))
 | |
|         self.debug("Starting the virtual machine after resetting the keypair")
 | |
|         try:
 | |
|             self.vm.start(self.apiclient)
 | |
|         except Exception as e:
 | |
|             self.fail("Failed to start virtual machine: %s, %s" % (self.vm.name, e))
 | |
|         ip_status, ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address"
 | |
|         )
 | |
|         try:
 | |
|             self.debug("SSHing into VM: %s" % ip_addr)
 | |
|             self.vm.get_ssh_client(ipaddress=ip_addr, reconnect=True, keyPairFileLocation=str(new_pvt_key))
 | |
|         except Exception as e:
 | |
|             self.fail("SSH into VM: %s failed with ssh key pair with error: %s" %
 | |
|                       (self.vm.ssh_ip, e))
 | |
|         self.vm.stop(self.apiclient)
 | |
|         self.vm.start(self.apiclient)
 | |
|         ip_status, ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         try:
 | |
|             self.debug("SSH into vm after vm stop/start")
 | |
|             self.vm.get_ssh_client(ipaddress=ip_addr, reconnect=True, keyPairFileLocation=str(new_pvt_key))
 | |
|         except Exception as e:
 | |
|             self.fail("SSH into vm failed with new ssh keypair after vm stop start")
 | |
|         return
 | |
| 
 | |
|     @attr(tags=["advanced"], required_hardware='True')
 | |
|     def test_20_verify_VM_metadata_TC30(self):
 | |
|         """
 | |
|         1.Create shared network without any services
 | |
|         2.Deploy vm with userdata in the above network
 | |
|         3.Verify vm deployment
 | |
|         4.Verify IP Address retrieval
 | |
|         5.Verify metadata inside configdrive iso
 | |
|         """
 | |
|         self.services["virtual_machine"]["userdata"] = self.userdata
 | |
|         self.vm = VirtualMachine.create(
 | |
|             self.apiclient,
 | |
|             self.services["virtual_machine"],
 | |
|             templateid=self.template.id,
 | |
|             accountid="admin",
 | |
|             domainid=1,
 | |
|             serviceofferingid=self.service_offering.id,
 | |
|             zoneid=self.zone.id,
 | |
|             networkids=[self.shared_network.id],
 | |
|         )
 | |
|         self.assertIsNotNone(
 | |
|             self.vm,
 | |
|             "Failed to create vm with in a shared network without any services"
 | |
|         )
 | |
|         self.cleanup.append(self.vm)
 | |
|         ip_status, ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address"
 | |
|         )
 | |
|         self.list_nics(self.vm.id)
 | |
|         #Verify config drive is attached to vm or not
 | |
|         configDrive_iso = self.isConfigDriveIsoAttached(ip_addr)
 | |
|         self.assertNotEqual(
 | |
|             configDrive_iso,
 | |
|             False,
 | |
|             "Config drive iso is not attached to vm"
 | |
|         )
 | |
|         metadata = self.getVMMetaData(ip_addr, configDrive_iso)
 | |
|         self.verifyMetaData(metadata)
 | |
|         return
 | |
| 
 | |
|     @attr(tags=["advanced"], required_hardware='True')
 | |
|     def test_21_StopStartVM_verify_ConfigDrive_TC31(self):
 | |
|         """
 | |
|         1.Create shared network without any services
 | |
|         2.Deploy vm with default cent os template and pass user data
 | |
|         3.Verify vm deployment
 | |
|         4.Verify IP address retrieval and userdata
 | |
|         5.Stop start vm
 | |
|         6.Verify userdata and metadata
 | |
|         """
 | |
|         self.services["virtual_machine"]["userdata"] = self.userdata
 | |
|         self.vm = VirtualMachine.create(
 | |
|             self.apiclient,
 | |
|             self.services["virtual_machine"],
 | |
|             templateid=self.template.id,
 | |
|             accountid="admin",
 | |
|             domainid=1,
 | |
|             serviceofferingid=self.service_offering.id,
 | |
|             diskofferingid=self.disk_offering.id,
 | |
|             zoneid=self.zone.id,
 | |
|             networkids=[self.shared_network.id],
 | |
|         )
 | |
|         self.assertIsNotNone(
 | |
|             self.vm,
 | |
|             "Failed to create vm in a shared network without any services"
 | |
|         )
 | |
|         self.cleanup.append(self.vm)
 | |
|         ip_status, ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address"
 | |
|         )
 | |
|         self.list_nics(self.vm.id)
 | |
|         #Verify configdrive iso attach before vm stop/start
 | |
|         configDrive_iso = self.isConfigDriveIsoAttached(ip_addr)
 | |
|         self.assertNotEqual(
 | |
|             configDrive_iso,
 | |
|             False,
 | |
|             "Config drive iso is not attached to vm before vm stop start"
 | |
|         )
 | |
|         #Add userdata verification test
 | |
|         self.assertEqual(
 | |
|             self.verifyUserData(ip_addr,configDrive_iso),
 | |
|             True,
 | |
|             "Userdata is not matching with the data passed in vm deployment"
 | |
|         )
 | |
|         metadata = self.getVMMetaData(ip_addr, configDrive_iso)
 | |
|         self.verifyMetaData(metadata)
 | |
|         #Stop/Start VM and verify IP address retrieval,userdata and metadata
 | |
|         self.vm.stop(self.apiclient)
 | |
|         self.vm.start(self.apiclient)
 | |
|         time.sleep(60)
 | |
|         ip_status,ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address after vm stop start"
 | |
|         )
 | |
|         self.list_nics(self.vm.id)
 | |
|         configDrive_iso = self.isConfigDriveIsoAttached(ip_addr)
 | |
|         self.assertNotEqual(
 | |
|             configDrive_iso,
 | |
|             False,
 | |
|             "Config drive iso is not attached to vm after vm stop start"
 | |
|         )
 | |
|         self.assertEqual(
 | |
|             self.verifyUserData(ip_addr, configDrive_iso),
 | |
|             True,
 | |
|             "Userdata is not matching after vm stop start"
 | |
|         )
 | |
|         metadata = self.getVMMetaData(ip_addr, configDrive_iso)
 | |
|         self.verifyMetaData(metadata)
 | |
|         return
 | |
| 
 | |
|     @attr(tags=["advanced"], required_hardware='True')
 | |
|     def test_22_RebootVM_verify_ConfigDrive_TC32(self):
 | |
|         """
 | |
|         1.Create shared network without any services
 | |
|         2.Deploy vm with default cent os template and pass user data
 | |
|         3.Verify vm deployment
 | |
|         4.Verify IP address retrieval,userdata and metadata
 | |
|         5.Reboot vm
 | |
|         6.Repeat step4
 | |
|         """
 | |
|         self.services["virtual_machine"]["userdata"] = self.userdata
 | |
|         self.vm = VirtualMachine.create(
 | |
|             self.apiclient,
 | |
|             self.services["virtual_machine"],
 | |
|             templateid=self.template.id,
 | |
|             accountid="admin",
 | |
|             domainid=1,
 | |
|             serviceofferingid=self.service_offering.id,
 | |
|             diskofferingid=self.disk_offering.id,
 | |
|             zoneid=self.zone.id,
 | |
|             networkids=[self.shared_network.id],
 | |
|         )
 | |
|         self.assertIsNotNone(
 | |
|             self.vm,
 | |
|             "Failed to create vm in a shared network without any services"
 | |
|         )
 | |
|         self.cleanup.append(self.vm)
 | |
|         ip_status, ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address"
 | |
|         )
 | |
|         self.list_nics(self.vm.id)
 | |
|         #Verify configdrive iso attach before vm stop/start
 | |
|         configDrive_iso = self.isConfigDriveIsoAttached(ip_addr)
 | |
|         self.assertNotEqual(
 | |
|             configDrive_iso,
 | |
|             False,
 | |
|             "Config drive iso is not attached to vm before vm reboot"
 | |
|         )
 | |
|         #Add userdata verification test
 | |
|         self.assertEqual(
 | |
|             self.verifyUserData(ip_addr, configDrive_iso),
 | |
|             True,
 | |
|             "Userdata is not matching with the data passed in vm deployment"
 | |
|         )
 | |
|         metadata = self.getVMMetaData(ip_addr, configDrive_iso)
 | |
|         self.verifyMetaData(metadata)
 | |
|         #Reboot VM and verify IP address retrieval,userdata and metadata
 | |
|         self.vm.reboot(self.apiclient)
 | |
|         time.sleep(60)
 | |
|         ip_status,ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address after vm reboot"
 | |
|         )
 | |
|         self.list_nics(self.vm.id)
 | |
|         configDrive_iso = self.isConfigDriveIsoAttached(ip_addr)
 | |
|         self.assertNotEqual(
 | |
|             configDrive_iso,
 | |
|             False,
 | |
|             "Config drive iso is not attached to vm after vm reboot"
 | |
|         )
 | |
|         self.assertEqual(
 | |
|             self.verifyUserData(ip_addr, configDrive_iso),
 | |
|             True,
 | |
|             "Userdata is not matching after vm reboot"
 | |
|         )
 | |
|         metadata = self.getVMMetaData(ip_addr, configDrive_iso)
 | |
|         self.verifyMetaData(metadata)
 | |
|         return
 | |
| 
 | |
|     @attr(tags=["advanced"], required_hardware='True')
 | |
|     def test_23_DestroyVM_verify_ConfigDrive_TC33(self):
 | |
|         """
 | |
|         1.Create shared network without any services
 | |
|         2.Deploy vm with default cent os template and pass user data
 | |
|         3.Verify vm deployment
 | |
|         4.Verify IP address retrieval,userdata and metadata
 | |
|         5.Destroy and restore vm
 | |
|         6.Repeat step4
 | |
|         """
 | |
|         self.services["virtual_machine"]["userdata"] = self.userdata
 | |
|         self.vm = VirtualMachine.create(
 | |
|             self.apiclient,
 | |
|             self.services["virtual_machine"],
 | |
|             templateid=self.template.id,
 | |
|             accountid="admin",
 | |
|             domainid=1,
 | |
|             serviceofferingid=self.service_offering.id,
 | |
|             diskofferingid=self.disk_offering.id,
 | |
|             zoneid=self.zone.id,
 | |
|             networkids=[self.shared_network.id],
 | |
|         )
 | |
|         self.assertIsNotNone(
 | |
|             self.vm,
 | |
|             "Failed to create vm in a shared network without any services"
 | |
|         )
 | |
|         self.cleanup.append(self.vm)
 | |
|         ip_status, ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address"
 | |
|         )
 | |
|         self.list_nics(self.vm.id)
 | |
|         #Verify configdrive iso attach before vm stop/start
 | |
|         configDrive_iso = self.isConfigDriveIsoAttached(ip_addr)
 | |
|         self.assertNotEqual(
 | |
|             configDrive_iso,
 | |
|             False,
 | |
|             "Config drive iso is not attached to vm before vm destroy"
 | |
|         )
 | |
|         #Add userdata verification test
 | |
|         self.assertEqual(
 | |
|             self.verifyUserData(ip_addr, configDrive_iso),
 | |
|             True,
 | |
|             "Userdata is not matching with the data passed in vm deployment"
 | |
|         )
 | |
|         metadata = self.getVMMetaData(ip_addr, configDrive_iso)
 | |
|         self.verifyMetaData(metadata)
 | |
|         #Destroy VM and verify IP address retrieval,userdata and metadata
 | |
|         self.vm.delete(self.apiclient, expunge=False)
 | |
|         self.vm.recover(self.apiclient)
 | |
|         self.vm.start(self.apiclient)
 | |
|         time.sleep(60)
 | |
|         ip_status, ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address after vm destroy"
 | |
|         )
 | |
|         self.list_nics(self.vm.id)
 | |
|         configDrive_iso = self.isConfigDriveIsoAttached(ip_addr)
 | |
|         self.assertNotEqual(
 | |
|             configDrive_iso,
 | |
|             False,
 | |
|             "Config drive iso is not attached to vm after vm destroy"
 | |
|         )
 | |
|         self.assertEqual(
 | |
|             self.verifyUserData(ip_addr, configDrive_iso),
 | |
|             True,
 | |
|             "Userdata is not matching after vm destroy"
 | |
|         )
 | |
|         metadata = self.getVMMetaData(ip_addr, configDrive_iso)
 | |
|         self.verifyMetaData(metadata)
 | |
|         return
 | |
| 
 | |
|     @attr(tags=["advanced"], required_hardware='True')
 | |
|     def test_24_ReInstallVM_verify_ConfigDrive_TC34(self):
 | |
|         """
 | |
|         1.Create shared network without any services
 | |
|         2.Deploy vm with default cent os template and pass user data
 | |
|         3.Verify vm deployment
 | |
|         4.Verify IP address retrieval,userdata and metadata
 | |
|         5.Reinstall vm to the same template
 | |
|         6.Repeat step4
 | |
|         """
 | |
|         self.services["virtual_machine"]["userdata"] = self.userdata
 | |
|         self.vm = VirtualMachine.create(
 | |
|             self.apiclient,
 | |
|             self.services["virtual_machine"],
 | |
|             templateid=self.template.id,
 | |
|             accountid="admin",
 | |
|             domainid=1,
 | |
|             serviceofferingid=self.service_offering.id,
 | |
|             diskofferingid=self.disk_offering.id,
 | |
|             zoneid=self.zone.id,
 | |
|             networkids=[self.shared_network.id],
 | |
|         )
 | |
|         self.assertIsNotNone(
 | |
|             self.vm,
 | |
|             "Failed to create vm in a shared network without any services"
 | |
|         )
 | |
|         self.cleanup.append(self.vm)
 | |
|         ip_status, ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address"
 | |
|         )
 | |
|         self.list_nics(self.vm.id)
 | |
|         #Verify configdrive iso attach before vm stop/start
 | |
|         configDrive_iso = self.isConfigDriveIsoAttached(ip_addr)
 | |
|         self.assertNotEqual(
 | |
|             configDrive_iso,
 | |
|             False,
 | |
|             "Config drive iso is not attached to vm before vm reinstall"
 | |
|         )
 | |
|         #Add userdata verification test
 | |
|         self.assertEqual(
 | |
|             self.verifyUserData(ip_addr, configDrive_iso),
 | |
|             True,
 | |
|             "Userdata is not matching with the data passed in vm reinstall"
 | |
|         )
 | |
|         metadata = self.getVMMetaData(ip_addr, configDrive_iso)
 | |
|         self.verifyMetaData(metadata)
 | |
|         #Reinstall VM and verify the IP address retrieval
 | |
|         self.vm.restore(self.apiclient)
 | |
|         time.sleep(60)
 | |
|         ip_status,ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address after vm reinstall"
 | |
|         )
 | |
|         self.list_nics(self.vm.id)
 | |
|         configDrive_iso = self.isConfigDriveIsoAttached(ip_addr)
 | |
|         self.assertNotEqual(
 | |
|             configDrive_iso,
 | |
|             False,
 | |
|             "Config drive iso is not attached to vm after vm reinstall"
 | |
|         )
 | |
|         self.assertEqual(
 | |
|             self.verifyUserData(ip_addr,configDrive_iso),
 | |
|             True,
 | |
|             "Userdata is not matching after vm reinstall"
 | |
|         )
 | |
|         metadata = self.getVMMetaData(ip_addr, configDrive_iso)
 | |
|         self.verifyMetaData(metadata)
 | |
|         return
 | |
| 
 | |
|     @attr(tags=["advanced"], required_hardware='True')
 | |
|     def test_25_MigrateVMVM_verify_ConfigDrive_TC35(self):
 | |
|         """
 | |
|         1.Create shared network without any services
 | |
|         2.Deploy vm with default cent os template and pass user data
 | |
|         3.Verify vm deployment
 | |
|         4.Verify IP address retrieval,userdata and metadata
 | |
|         5.Migrate VM and Repeat step4
 | |
|         """
 | |
|         self.services["virtual_machine"]["userdata"] = self.userdata
 | |
|         self.vm = VirtualMachine.create(
 | |
|             self.apiclient,
 | |
|             self.services["virtual_machine"],
 | |
|             templateid=self.template.id,
 | |
|             accountid="admin",
 | |
|             domainid=1,
 | |
|             serviceofferingid=self.service_offering.id,
 | |
|             diskofferingid=self.disk_offering.id,
 | |
|             zoneid=self.zone.id,
 | |
|             networkids=[self.shared_network.id],
 | |
|         )
 | |
|         self.assertIsNotNone(
 | |
|             self.vm,
 | |
|             "Failed to create vm in a shared network without any services"
 | |
|         )
 | |
|         self.cleanup.append(self.vm)
 | |
|         ip_status, ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address"
 | |
|         )
 | |
|         self.list_nics(self.vm.id)
 | |
|         #Verify configdrive iso attach before vm stop/start
 | |
|         configDrive_iso = self.isConfigDriveIsoAttached(ip_addr)
 | |
|         self.assertNotEqual(
 | |
|             configDrive_iso,
 | |
|             False,
 | |
|             "Config drive iso is not attached to vm before vm reinstall"
 | |
|         )
 | |
|         #Add userdata verification test
 | |
|         self.assertEqual(
 | |
|             self.verifyUserData(ip_addr, configDrive_iso),
 | |
|             True,
 | |
|             "Userdata is not matching with the data passed in vm reinstall"
 | |
|         )
 | |
|         metadata = self.getVMMetaData(ip_addr, configDrive_iso)
 | |
|         self.verifyMetaData(metadata)
 | |
|         #Migrate VM and verify ip address retrieval,userdata and metadata
 | |
|         hosts = Host.listForMigration(self.apiclient,virtualmachineid=self.vm.id)
 | |
|         self.assertEqual(validateList(hosts)[0], PASS, "Find hosts for migration returned invalid response")
 | |
|         if len(hosts) < 1:
 | |
|             self.skipTest("No suitable hosts found for vm migration..so skipping test")
 | |
|         hostid = hosts[0].id
 | |
|         self.umountConfigDrive(ip_addr, configDrive_iso)
 | |
|         self.vm.migrate(self.apiclient, hostid=hostid)
 | |
|         time.sleep(60)
 | |
|         ip_status, ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address after vm reinstall"
 | |
|         )
 | |
|         self.list_nics(self.vm.id)
 | |
|         configDrive_iso = self.isConfigDriveIsoAttached(ip_addr)
 | |
|         self.assertNotEqual(
 | |
|             configDrive_iso,
 | |
|             False,
 | |
|             "Config drive iso is not attached to vm after vm reinstall"
 | |
|         )
 | |
|         self.assertEqual(
 | |
|             self.verifyUserData(ip_addr,configDrive_iso),
 | |
|             True,
 | |
|             "Userdata is not matching after vm reinstall"
 | |
|         )
 | |
|         metadata = self.getVMMetaData(ip_addr, configDrive_iso)
 | |
|         self.verifyMetaData(metadata)
 | |
|         return
 | |
| 
 | |
|     @attr(tags=["advanced"], required_hardware='True')
 | |
|     def test_26_DeployVM_verify_IPFetchEvent_TC56(self):
 | |
|         """
 | |
|         1.Create shared network without any services
 | |
|         2.Deploy vm in that network
 | |
|         3.Verify vm deployment
 | |
|         4.Verify IP address retrieval
 | |
|         5.Verify EXTERNAL.DHCP.VM.IP.FETCH event after IP address retrieval
 | |
|         """
 | |
|         self.vm = VirtualMachine.create(
 | |
|             self.apiclient,
 | |
|             self.services["virtual_machine"],
 | |
|             templateid=self.template.id,
 | |
|             accountid="admin",
 | |
|             domainid=1,
 | |
|             serviceofferingid=self.service_offering.id,
 | |
|             zoneid=self.zone.id,
 | |
|             networkids=[self.shared_network.id],
 | |
|         )
 | |
|         self.assertIsNotNone(
 | |
|             self.vm,
 | |
|             "VM creation failed in a shared network without any services"
 | |
|         )
 | |
|         self.cleanup.append(self.vm)
 | |
|         #Verify IP address retrieval using listVirtualMachines API
 | |
|         ip_status, ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address"
 | |
|         )
 | |
|         #Verify the retrieved ip address in listNICs API response
 | |
|         self.list_nics(self.vm.id)
 | |
|         #Verify config drive is attached to vm or not
 | |
|         configDrive_iso = self.isConfigDriveIsoAttached(ip_addr)
 | |
|         self.assertNotEqual(
 | |
|             configDrive_iso,
 | |
|             False,
 | |
|             "Config drive iso is not attached to vm"
 | |
|         )
 | |
|         #Verify EXTERNAL.DHCP.VM.IP.FETCH event from DB
 | |
|         self.assertEqual(
 | |
|             self.verifyIPFetchEvent(ip_addr),
 | |
|             True,
 | |
|             "EXTERNAL.DHCP.VM.IP.FETCH is not generated"
 | |
|         )
 | |
|         return
 | |
| 
 | |
|     @attr(tags=["advanced"], required_hardware='True')
 | |
|     def test_27_StopStartVM_verify_IPFetchEvent_TC57(self):
 | |
|         """
 | |
|         1.Create shared network without any services
 | |
|         2.Deploy vm in that network
 | |
|         3.Verify vm deployment
 | |
|         4.Verify IP address retrieval
 | |
|         5.Verify EXTERNAL.DHCP.VM.IP.FETCH event after IP address retrieval
 | |
|         6.Stop/Start vm and repeat step5
 | |
|         """
 | |
|         self.vm = VirtualMachine.create(
 | |
|             self.apiclient,
 | |
|             self.services["virtual_machine"],
 | |
|             templateid=self.template.id,
 | |
|             accountid="admin",
 | |
|             domainid=1,
 | |
|             serviceofferingid=self.service_offering.id,
 | |
|             zoneid=self.zone.id,
 | |
|             networkids=[self.shared_network.id],
 | |
|         )
 | |
|         self.assertIsNotNone(
 | |
|             self.vm,
 | |
|             "VM creation failed in a shared network without any services"
 | |
|         )
 | |
|         self.cleanup.append(self.vm)
 | |
|         #Verify IP address retrieval using listVirtualMachines API
 | |
|         ip_status, ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address"
 | |
|         )
 | |
|         #Verify the retrieved ip address in listNICs API response
 | |
|         self.list_nics(self.vm.id)
 | |
|         #Verify EXTERNAL.DHCP.VM.IP.FETCH event from DB
 | |
|         self.assertEqual(
 | |
|             self.verifyIPFetchEvent(ip_addr),
 | |
|             True,
 | |
|             "EXTERNAL.DHCP.VM.IP.FETCH is not generated"
 | |
|         )
 | |
|         #Stop/Start VM and verify IP address retrieval,event notification
 | |
|         self.vm.stop(self.apiclient)
 | |
|         self.vm.start(self.apiclient)
 | |
|         time.sleep(60)
 | |
|         ip_status, ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address after vm stop start"
 | |
|         )
 | |
|         #Verify EXTERNAL.DHCP.VM.IP.FETCH event from DB
 | |
|         self.assertEqual(
 | |
|             self.verifyIPFetchEvent(ip_addr),
 | |
|             True,
 | |
|             "EXTERNAL.DHCP.VM.IP.FETCH is not generated"
 | |
|         )
 | |
|         return
 | |
| 
 | |
|     @attr(tags=["advanced"], required_hardware='True')
 | |
|     def test_28_RebootVM_verify_IPFetchEvent_TC58(self):
 | |
|         """
 | |
|         1.Create shared network without any services
 | |
|         2.Deploy vm in that network
 | |
|         3.Verify vm deployment
 | |
|         4.Verify IP address retrieval
 | |
|         5.Verify EXTERNAL.DHCP.VM.IP.FETCH event after IP address retrieval
 | |
|         6.Reboot vm and repeat step5
 | |
|         """
 | |
|         self.vm = VirtualMachine.create(
 | |
|             self.apiclient,
 | |
|             self.services["virtual_machine"],
 | |
|             templateid=self.template.id,
 | |
|             accountid="admin",
 | |
|             domainid=1,
 | |
|             serviceofferingid=self.service_offering.id,
 | |
|             zoneid=self.zone.id,
 | |
|             networkids=[self.shared_network.id],
 | |
|         )
 | |
|         self.assertIsNotNone(
 | |
|             self.vm,
 | |
|             "VM creation failed in a shared network without any services"
 | |
|         )
 | |
|         self.cleanup.append(self.vm)
 | |
|         #Verify IP address retrieval using listVirtualMachines API
 | |
|         ip_status, ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address"
 | |
|         )
 | |
|         #Verify the retrieved ip address in listNICs API response
 | |
|         self.list_nics(self.vm.id)
 | |
|         #Verify EXTERNAL.DHCP.VM.IP.FETCH event from DB
 | |
|         self.assertEqual(
 | |
|             self.verifyIPFetchEvent(ip_addr),
 | |
|             True,
 | |
|             "EXTERNAL.DHCP.VM.IP.FETCH is not generated"
 | |
|         )
 | |
|         #Reboot VM and verify IP address retrieval,event notification
 | |
|         self.vm.reboot(self.apiclient)
 | |
|         time.sleep(60)
 | |
|         ip_status, ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address after vm stop start"
 | |
|         )
 | |
|         #Verify EXTERNAL.DHCP.VM.IP.FETCH event from DB
 | |
|         self.assertEqual(
 | |
|             self.verifyIPFetchEvent(ip_addr),
 | |
|             True,
 | |
|             "EXTERNAL.DHCP.VM.IP.FETCH is not generated"
 | |
|         )
 | |
|         return
 | |
| 
 | |
|     @attr(tags=["advanced"], required_hardware='True')
 | |
|     def test_29_deployVM_In_Two_Networks_TC49(self):
 | |
|         """
 | |
|         1.Create shared network without any services
 | |
|         2.Create isolated network with VR as the service provider
 | |
|         2.Deploy vm in both the networks
 | |
|         3.Verify vm deployment
 | |
|         4.Verify IP address retrieval
 | |
|         5.Verify metadata
 | |
|         """
 | |
|         self.no_isolate = NetworkOffering.create(
 | |
|             self.apiclient,
 | |
|             self.services["isolated_network_offering"]
 | |
|         )
 | |
|         self.no_isolate.update(self.apiclient, state='Enabled')
 | |
|         self.isolated_network = Network.create(
 | |
|             self.apiclient,
 | |
|             self.services["network"],
 | |
|             networkofferingid=self.no_isolate.id,
 | |
|             zoneid=self.zone.id,
 | |
|             accountid="admin",
 | |
|             domainid=1
 | |
|         )
 | |
|         self.cleanup.append(self.isolated_network)
 | |
|         self.vm = VirtualMachine.create(
 | |
|             self.apiclient,
 | |
|             self.services["virtual_machine"],
 | |
|             templateid=self.template.id,
 | |
|             accountid="admin",
 | |
|             domainid=1,
 | |
|             serviceofferingid=self.service_offering.id,
 | |
|             zoneid=self.zone.id,
 | |
|             networkids=[self.shared_network.id, self.isolated_network.id],
 | |
|             )
 | |
|         self.assertIsNotNone(
 | |
|             self.vm,
 | |
|             "VM creation failed in a shared network without any services"
 | |
|         )
 | |
|         self.cleanup.append(self.vm)
 | |
|         #Verify IP address retrieval using listVirtualMachines API
 | |
|         ip_status, ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address"
 | |
|         )
 | |
|         #Verify the retrieved ip address in listNICs API response
 | |
|         self.list_nics(self.vm.id)
 | |
|         #Verify config drive is attached to vm or not
 | |
|         configDrive_iso = self.isConfigDriveIsoAttached(ip_addr)
 | |
|         self.assertNotEqual(
 | |
|             configDrive_iso,
 | |
|             False,
 | |
|             "Config drive iso is not attached to vm"
 | |
|         )
 | |
|         metadata = self.getVMMetaData(ip_addr, configDrive_iso)
 | |
|         self.verifyMetaData(metadata)
 | |
|         return
 | |
| 
 | |
|     @attr(tags=["advanced"], required_hardware='True')
 | |
|     def test_30_deployVM_In_Two_Networks_TC50(self):
 | |
|         """
 | |
|         1.Create shared network without any services
 | |
|         2.Create another shared network with VR as the service provider
 | |
|         2.Deploy vm in both the networks
 | |
|         3.Verify vm deployment
 | |
|         4.Verify IP address retrieval
 | |
|         5.Verify metadata
 | |
|         """
 | |
|         self.services["shared_network_offering_all_services"]["specifyVlan"]="True"
 | |
|         self.services["shared_network_offering_all_services"]["specifyIpRanges"]="True"
 | |
|         self.no_shared_vr = NetworkOffering.create(
 | |
|             self.apiclient,
 | |
|             self.services["shared_network_offering_all_services"]
 | |
|         )
 | |
|         self.no_shared_vr.update(self.apiclient, state='Enabled')
 | |
|         self.services["shared_network"]["vlan"] = self.services["vlan"]
 | |
|         self.services["shared_network"]["gateway"] = self.services["gateway"]
 | |
|         self.services["shared_network"]["netmask"] = self.services["netmask"]
 | |
|         self.services["shared_network"]["startip"] = self.services["startip"]
 | |
|         self.services["shared_network"]["endip"] = self.services["endip"]
 | |
|         self.shared_network2 = Network.create(
 | |
|             self.apiclient,
 | |
|             self.services["shared_network"],
 | |
|             networkofferingid=self.no_shared_vr.id,
 | |
|             zoneid=self.zone.id,
 | |
|             accountid="admin",
 | |
|             domainid=1
 | |
|         )
 | |
|         self.cleanup.append(self.shared_network2)
 | |
|         self.vm = VirtualMachine.create(
 | |
|             self.apiclient,
 | |
|             self.services["virtual_machine"],
 | |
|             templateid=self.template.id,
 | |
|             accountid="admin",
 | |
|             domainid=1,
 | |
|             serviceofferingid=self.service_offering.id,
 | |
|             zoneid=self.zone.id,
 | |
|             networkids=[self.shared_network.id, self.shared_network2.id],
 | |
|         )
 | |
|         self.assertIsNotNone(
 | |
|             self.vm,
 | |
|             "VM creation failed in a shared network without any services"
 | |
|         )
 | |
|         self.cleanup.append(self.vm)
 | |
|         #Verify IP address retrieval using listVirtualMachines API
 | |
|         ip_status,ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address"
 | |
|         )
 | |
|         #Verify the retrieved ip address in listNICs API response
 | |
|         self.list_nics(self.vm.id)
 | |
|         #Verify config drive is attached to vm or not
 | |
|         configDrive_iso = self.isConfigDriveIsoAttached(ip_addr)
 | |
|         self.assertNotEqual(
 | |
|             configDrive_iso,
 | |
|             False,
 | |
|             "Config drive iso is not attached to vm"
 | |
|         )
 | |
|         metadata = self.getVMMetaData(ip_addr, configDrive_iso)
 | |
|         self.verifyMetaData(metadata)
 | |
|         return
 | |
| 
 | |
|     @attr(tags=["advanced"], required_hardware='True')
 | |
|     def test_31_deployVM_with_userdataByVR_TC38(self):
 | |
|         """
 | |
|         1.Create shared network with userdata service and VR as the provider
 | |
|         2.Deploy vm with userdata in the above network
 | |
|         3.Verify vm deployment
 | |
|         4.Verify IP Address retrieval
 | |
|         """
 | |
|         self.skipTest("this combination is not supported")
 | |
|         self.services["virtual_machine"]["userdata"] = self.userdata
 | |
|         self.vm = VirtualMachine.create(
 | |
|             self.apiclient,
 | |
|             self.services["virtual_machine"],
 | |
|             templateid=self.template.id,
 | |
|             accountid="admin",
 | |
|             domainid=1,
 | |
|             serviceofferingid=self.service_offering.id,
 | |
|             zoneid=self.zone.id,
 | |
|             networkids=[self.shared_network.id],
 | |
|         )
 | |
|         self.assertIsNotNone(
 | |
|             self.vm,
 | |
|             "VM creation with userdata failed in a shared network with VR as the provider"
 | |
|         )
 | |
|         self.cleanup.append(self.vm)
 | |
|         #Verify IP address retrieval using listVirtualMachines API
 | |
|         ip_status, ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address"
 | |
|         )
 | |
|         #Verify the retrieved ip address in listNICs API response
 | |
|         self.list_nics(self.vm.id)
 | |
|         vr_res = Router.list(
 | |
|             self.apiclient,
 | |
|             networkid=self.shared_network.id,
 | |
|             listAll=True
 | |
|         )
 | |
|         self.assertEqual(validateList(vr_res)[0],PASS,"List Routers returned invalid response")
 | |
|         vr_ip = vr_res[0].guestipaddress
 | |
|         ssh = self.vm.get_ssh_client(ipaddress=ip_addr)
 | |
|         cmd = "curl http://%s/latest/user-data" % vr_ip
 | |
|         res = ssh.execute(cmd)
 | |
|         self.assertEqual(
 | |
|             str(res),
 | |
|             self.userdata,
 | |
|             "Failed to get the userdata from VR in shared network"
 | |
|         )
 | |
|         return
 | |
| 
 | |
|     @attr(tags=["advanced"], required_hardware='True')
 | |
|     def test_32_restart_network_TC6(self):
 | |
|         """
 | |
|         1.Create shared network without any services
 | |
|         2.Deploy vm in that network
 | |
|         3.Verify vm deployment
 | |
|         4.Verify IP address retrieval
 | |
|         5.Restart network and verify access to VM
 | |
|         """
 | |
|         self.vm = VirtualMachine.create(
 | |
|             self.apiclient,
 | |
|             self.services["virtual_machine"],
 | |
|             templateid=self.template.id,
 | |
|             accountid="admin",
 | |
|             domainid=1,
 | |
|             serviceofferingid=self.service_offering.id,
 | |
|             zoneid=self.zone.id,
 | |
|             networkids=[self.shared_network.id],
 | |
|         )
 | |
|         self.assertIsNotNone(
 | |
|             self.vm,
 | |
|             "VM creation failed in a shared network without any services"
 | |
|         )
 | |
|         self.cleanup.append(self.vm)
 | |
|         #Verify IP address retrieval using listVirtualMachines API
 | |
|         ip_status, ip_addr = self.getVMIPAddress(self.vm.id)
 | |
|         self.assertEqual(
 | |
|             ip_status,
 | |
|             1,
 | |
|             "Failed to retrieve vm ip address"
 | |
|         )
 | |
|         #Verify the retrieved ip address in listNICs API response
 | |
|         self.list_nics(self.vm.id)
 | |
|         res = self.shared_network.restart(self.apiclient, cleanup=True)
 | |
|         if res.success:
 | |
|             self.assertEqual(
 | |
|                 res.success,
 | |
|                 True,
 | |
|                 "Failed to restart shared network without any services"
 | |
|             )
 | |
|         else:
 | |
|             self.fail("Failed restarting shared network without any services")
 | |
|         return
 | |
| 
 | |
|     @attr(tags=["advanced"], required_hardware='True')
 | |
|     def test_33_verify_config_params_TC65(self):
 | |
|         """
 | |
|         #@desc: Validate external dhcp config parameters against invalid values
 | |
|         #1.Generate random values using special characters, strings and numbers
 | |
|         #2.Try to update the config params with those values.
 | |
|         #3.Verify that invalid values are not allowed
 | |
|         """
 | |
|         params = ["externaldhcp.vmip.retrieval.interval","externaldhcp.vmip.max.retry",\
 | |
|                   "externaldhcp.vmipFetch.threadPool.max"]
 | |
|         for param in params:
 | |
|             random_num = ''.join(random.choice(string.digits + string.punctuation + string.ascii_letters) \
 | |
|                                  for _ in range(3))
 | |
|             try:
 | |
|                 Configurations.update(
 | |
|                     self.apiclient,
 | |
|                     name=param,
 | |
|                     value=random_num
 | |
|                 )
 | |
|                 self.fail("FAIL:{} takes invalid value".format(param))
 | |
|             except Exception as e:
 | |
|                 self.debug("Success: Updating dhcp config params with invalid values is not allowed\
 | |
|                            and throws following message: %s" % e)
 | |
|         return
 | |
| 
 |