Пример #1
0
    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))])
Пример #2
0
 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
Пример #3
0
    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')
Пример #4
0
    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)
Пример #5
0
    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))
Пример #6
0
    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()
Пример #7
0
    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()
Пример #8
0
    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'])
Пример #9
0
    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)
Пример #10
0
 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']