def test_03_RouterStartOnVmDeploy(self): """Test router start on VM deploy """ # Validate the following # 1. deployVirtualMachine in the account # 2. listVirtualMachines account=user, domainid=1 # 3. when listVirtualMachines reports the userVM to be in state=Running # 4. listRouters should report router to have come back to "Running" # state # 5. All other VMs in the account should remain in "Stopped" state # stop all pre-existing virtual machines if they are in 'Running' state virtual_machines = list_virtual_machines( self.apiclient, account=self.account.name, domainid=self.account.domainid, ) self.assertEqual( isinstance(virtual_machines, list), True, "Check for list virtual machines response return valid data") self.assertNotEqual(len(virtual_machines), 0, "Check list virtual machines response") for virtual_machine in virtual_machines: self.debug("VM ID: %s & VM state: %s" % (virtual_machine.id, virtual_machine.state)) if virtual_machine.state == 'Running': # Stop virtual machine cmd = stopVirtualMachine.stopVirtualMachineCmd() cmd.id = virtual_machine.id self.apiclient.stopVirtualMachine(cmd) vm = VirtualMachine.create(self.apiclient, self.services["virtual_machine"], templateid=self.template.id, accountid=self.account.name, domainid=self.account.domainid, serviceofferingid=self.service_offering.id) self.debug("Deployed a VM with ID: %s" % vm.id) virtual_machines = list_virtual_machines( self.apiclient, id=vm.id, account=self.account.name, domainid=self.account.domainid, ) self.assertEqual( isinstance(virtual_machines, list), True, "Check for list virtual machines response return valid data") self.assertNotEqual(len(virtual_machines), 0, "Check list virtual machines response") # VM state should be 'Running' for virtual_machine in virtual_machines: self.assertEqual(virtual_machine.state, 'Running', "Check list VM response for Running state") routers = list_routers( self.apiclient, account=self.account.name, domainid=self.account.domainid, ) self.assertEqual(isinstance(routers, list), True, "Check for list routers response return valid data") self.assertNotEqual(len(routers), 0, "Check list router response") # Routers associated with account should be 'Running' after deployment # of VM for router in routers: self.debug("Router ID: %s & Router state: %s" % (router.id, router.state)) self.assertEqual(router.state, 'Running', "Check list router response for router state") # All other VMs (VM_1) should be in 'Stopped' virtual_machines = list_virtual_machines( self.apiclient, id=self.vm_1.id, account=self.account.name, domainid=self.account.domainid, ) self.assertEqual(isinstance(virtual_machines, list), True, "Check for list VMs response return valid data") self.assertNotEqual(len(virtual_machines), 0, "Check list virtual machines response") for virtual_machine in virtual_machines: self.debug("VM ID: %s & VM state: %s" % (virtual_machine.id, virtual_machine.state)) self.assertEqual(virtual_machine.state, 'Stopped', "Check list VM response for Stopped state") return
def stop_VM(self, virtual_machine): """ Return Stop Virtual Machine command""" cmd = stopVirtualMachine.stopVirtualMachineCmd() cmd.id = virtual_machine.id return cmd
def test_02_NetworkGarbageCollection(self): """Test network garbage collection """ # Validate the following # 1. wait for router to start and guest network to be created # a.listRouters account=user, domainid=1 (router state=Running) # b.listNetworks account=user domainid=1 (network state=Implemented) # c.listVirtualMachines account=user domainid=1 (VM states=Running) # 4. stopVirtualMachines (stop all VMs in this account) # 5. wait for VMs to stop-listVirtualMachines account=user, domainid=1 # (Both VM states = Stopped) # 6. wait for network.gc.interval*2 seconds (600s) # 7. listRouters account=user, domainid=1 routers = list_routers( self.apiclient, account=self.account.name, domainid=self.account.domainid, ) self.assertEqual(isinstance(routers, list), True, "Check for list routers response return valid data") self.assertNotEqual(len(routers), 0, "Check list router response") # Router associated with account should be in running state timeout = 180 router = routers[0] self.debug("Router ID: %s & Router state: %s" % (router.id, router.state)) self.debug("Wait for %s secs max for router to reach Running state" % timeout) while timeout: time.sleep(60) routers = list_routers(self.apiclient, account=self.account.name, domainid=self.account.domainid, id=router.id) router = routers[0] if router.state == 'Running': break timeout = timeout - 60 if timeout == 0: self.assertEqual(router.state, 'Running', "Router not in Running state") # Network state associated with account should be 'Implemented' networks = list_networks(self.apiclient, account=self.account.name, domainid=self.account.domainid, type='Isolated') self.assertEqual(isinstance(networks, list), True, "Check for list networks response return valid data") self.assertNotEqual(len(networks), 0, "Check list networks response") # Check if network in 'Implemented' state for network in networks: self.debug("Network ID: %s & Network state: %s" % (network.id, network.state)) self.assertIn(network.state, ['Implemented', 'Allocated'], "Check list network response for network state") # VM state associated with account should be 'Running' virtual_machines = list_virtual_machines( self.apiclient, account=self.account.name, domainid=self.account.domainid, ) self.assertEqual( isinstance(virtual_machines, list), True, "Check for list virtual machines response return valid data") self.assertNotEqual(len(virtual_machines), 0, "Check list virtual machines response") for virtual_machine in virtual_machines: self.debug("VM ID: %s & VM state: %s" % (virtual_machine.id, virtual_machine.state)) self.assertEqual(virtual_machine.state, 'Running', "Check list VM response for Running state") # Stop virtual machine cmd = stopVirtualMachine.stopVirtualMachineCmd() cmd.id = virtual_machine.id self.apiclient.stopVirtualMachine(cmd) gcinterval = list_configurations(self.apiclient, name='network.gc.interval') self.assertEqual( isinstance(gcinterval, list), True, "Check for list intervals response return valid data") self.debug("network.gc.interval: %s" % gcinterval[0].value) gcwait = list_configurations(self.apiclient, name='network.gc.wait') self.assertEqual( isinstance(gcwait, list), True, "Check for list intervals response return valid data") self.debug("network.gc.wait: %s" % gcwait[0].value) total_wait = int(gcinterval[0].value) + int(gcwait[0].value) # Router is stopped after (network.gc.interval *2) time. Wait for # (network.gc.interval+network.gc.wait) * 2 for moving # router to 'Stopped' time.sleep(total_wait * 2) routers = list_routers( self.apiclient, account=self.account.name, domainid=self.account.domainid, ) self.assertEqual(isinstance(routers, list), True, "Check for list routers response return valid data") self.assertNotEqual(len(routers), 0, "Check list router response") for router in routers: self.debug("Router ID: %s & Router state: %s" % (router.id, router.state)) self.assertEqual(router.state, 'Stopped', "Check list router response for router state") # Cleanup Vm_2 - Not required for further tests self.cleanup.append(self.vm_2) return
def stop_vm(self, id): cmd = stopVirtualMachine.stopVirtualMachineCmd() cmd.id = id return self.apiclient.stopVirtualMachine(cmd)