def test_igvm_migration_log(self, performance_value, mock_time): for hv in self.hvs: hv.dataset_obj['igvm_migration_log'].clear() hv.dataset_obj.commit() src_hv = self.vm.hypervisor.dataset_obj['hostname'] cpu_usage_vm_src = self.vm.hypervisor.estimate_vm_cpu_usage(self.vm) timestamp = 1234567890 vm_migrate( VM_HOSTNAME, offline=True, offline_transport='drbd', ) src_hv_obj = (Query({ 'hostname': src_hv }, ['igvm_migration_log']).get()) self.assertEqual(list(src_hv_obj['igvm_migration_log']), ['{} -{}'.format(timestamp, round(cpu_usage_vm_src))]) with _get_vm(VM_HOSTNAME) as vm: dest_hv_obj = (Query( { 'hostname': vm.hypervisor.dataset_obj['hostname'] }, ['igvm_migration_log']).get()) cpu_usage_vm_dest = vm.hypervisor.estimate_vm_cpu_usage(vm) self.assertEqual( list(dest_hv_obj['igvm_migration_log']), ['{} +{}'.format(timestamp, round(cpu_usage_vm_dest))])
def setUp(self): super(CommandTest, self).setUp() vm_build(VM_HOSTNAME) self.check_vm_present() with _get_vm(VM_HOSTNAME) as vm: # For contacting VM over shell self.vm = vm
def test_rebuild(self): vm_build(VM_HOSTNAME) # Build the VM again, this must fail, as it is already built with self.assertRaises(IGVMError): vm_build(VM_HOSTNAME) # Create files on VM to check later if the VM was really rebuilt with _get_vm(VM_HOSTNAME) as vm: vm.run('touch /root/initial_canary') vm.run('test -f /root/initial_canary') # Now stop it and rebuild it vm_stop(VM_HOSTNAME) vm_build(VM_HOSTNAME, rebuild=True) self.check_vm_present() # The VM was rebuild and thus the test file must be gone with _get_vm(VM_HOSTNAME) as vm: vm.run('test ! -f /root/initial_canary')
def test_postboot(self): with NamedTemporaryFile() as fd: fd.write('echo hello > /root/postboot_result'.encode()) fd.flush() vm_build(VM_HOSTNAME, postboot=fd.name) self.check_vm_present() with _get_vm(VM_HOSTNAME) as vm: output = vm.run('cat /root/postboot_result') self.assertIn('hello', output)
def check_vm_absent(self, hv_name=None): # Operate on fresh object with _get_vm(VM_HOSTNAME, allow_retired=True) as vm: if not hv_name: hv_name = vm.dataset_obj['hypervisor'] for hv in HYPERVISORS: if hv.dataset_obj['hostname'] == hv_name: self.assertEqual(hv.vm_defined(vm), False) hv.run('test ! -b /dev/{}/{}'.format( VG_NAME, self.uid_name))
def test_delete(self): vm_build(VM_HOSTNAME) self.check_vm_present() # Fails while VM is powered on with self.assertRaises(IGVMError): vm_delete(VM_HOSTNAME) with _get_vm(VM_HOSTNAME) as vm: vm.shutdown() vm_delete(VM_HOSTNAME, retire=True) self.check_vm_absent()
def test_new_address(self): # We don't have a way to ask for new IP address from Serveradmin # and lock it for us. The method below will usually work fine. # When it starts failing, we must develop retry method. new_address = get_next_address(VM_NET, 2) change_address(VM_HOSTNAME, new_address, offline=True) obj = Query({'hostname': VM_HOSTNAME}, ['intern_ip']).get() self.assertEqual(obj['intern_ip'], new_address) with _get_vm(VM_HOSTNAME) as vm: vm.run(cmd('ip a | grep {}', new_address)) self.check_vm_present()
def check_vm_absent(self, vm_name=VM_HOSTNAME, hv_name=None): # Operate on fresh object with _get_vm(vm_name, allow_retired=True) as vm: if self.datacenter_type == 'kvm.dct': if not hv_name: hv_name = vm.dataset_obj['hypervisor'] for hv in self.hvs: if hv.dataset_obj['hostname'] == hv_name: self.assertEqual(hv.vm_defined(vm), False) hv.run('test ! -b /dev/{}/{}'.format( VG_NAME, self.uid_name)) elif self.datacenter_type == 'aws.dct': self.assertEqual( vm.aws_describe_instance_status( vm.dataset_obj['aws_instance_id']), AWS_RETURN_CODES['terminated'])
def check_vm_present(self, vm_name=VM_HOSTNAME): # Operate on fresh object with _get_vm(vm_name) as vm: for hv in self.hvs: if hv.dataset_obj['hostname'] == vm.dataset_obj['hypervisor']: # Is it on correct HV? self.assertEqual(hv.vm_defined(vm), True) self.assertEqual(hv.vm_running(vm), True) else: # Is it gone from other HVs after migration? self.assertEqual(hv.vm_defined(vm), False) hv.run('test ! -b /dev/{}/{}'.format( VG_NAME, self.uid_name)) # Is VM itself alive and fine? fqdn = vm.run('hostname -f').strip() self.assertEqual(fqdn, vm.fqdn) self.assertEqual(vm.dataset_obj.is_dirty(), False)
def setUp(self): super(MigrationTest, self).setUp() vm_build(VM_HOSTNAME) with _get_vm(VM_HOSTNAME) as vm: self.old_hv_name = vm.hypervisor.dataset_obj['hostname']