Exemple #1
0
    def test_detach_volume_vmdk_invalid(self):
        connection_info = {'driver_volume_type': 'vmdk',
                           'serial': 'volume-fake-id',
                           'data': {'volume': 'vm-10',
                                    'volume_id': 'volume-fake-id'}}
        instance = mock.MagicMock(name='fake-name', vm_state=vm_states.ACTIVE)
        vmdk_info = vm_util.VmdkInfo('fake-path', constants.ADAPTER_TYPE_IDE,
                                     constants.DISK_TYPE_PREALLOCATED, 1024,
                                     'fake-device')
        with contextlib.nested(
            mock.patch.object(vm_util, 'get_vm_ref',
                              return_value=mock.sentinel.vm_ref),
            mock.patch.object(self._volumeops, '_get_volume_ref'),
            mock.patch.object(self._volumeops,
                              '_get_vmdk_backed_disk_device'),
            mock.patch.object(vm_util, 'get_vmdk_info',
                              return_value=vmdk_info)
        ) as (get_vm_ref, get_volume_ref, get_vmdk_backed_disk_device,
              get_vmdk_info):
            self.assertRaises(exception.Invalid,
                self._volumeops._detach_volume_vmdk, connection_info,
                instance)

            get_vm_ref.assert_called_once_with(self._volumeops._session,
                                               instance)
            get_volume_ref.assert_called_once_with(
                connection_info['data']['volume'])
            get_vmdk_backed_disk_device.assert_called_once_with(
                mock.sentinel.vm_ref, connection_info['data'])
            self.assertTrue(get_vmdk_info.called)
Exemple #2
0
    def test_attach_volume_vmdk_invalid(self):
        connection_info = {
            'driver_volume_type': 'vmdk',
            'serial': 'volume-fake-id',
            'data': {
                'volume': 'vm-10',
                'volume_id': 'volume-fake-id'
            }
        }
        instance = mock.MagicMock(name='fake-name', vm_state=vm_states.ACTIVE)
        vmdk_info = vm_util.VmdkInfo('fake-path', 'ide', 'preallocated', 1024,
                                     'fake-device')
        with contextlib.nested(
                mock.patch.object(vm_util, 'get_vm_ref'),
                mock.patch.object(self._volumeops, '_get_volume_ref'),
                mock.patch.object(vm_util,
                                  'get_vmdk_info',
                                  return_value=vmdk_info)) as (get_vm_ref,
                                                               get_volume_ref,
                                                               get_vmdk_info):
            self.assertRaises(exception.Invalid,
                              self._volumeops._attach_volume_vmdk,
                              connection_info, instance)

            get_vm_ref.assert_called_once_with(self._volumeops._session,
                                               instance)
            get_volume_ref.assert_called_once_with(
                connection_info['data']['volume'])
            self.assertTrue(get_vmdk_info.called)
Exemple #3
0
    def _test_attach_volume_vmdk(self, adapter_type=None):
        connection_info = {
            'driver_volume_type': constants.DISK_FORMAT_VMDK,
            'serial': 'volume-fake-id',
            'data': {
                'volume': 'vm-10',
                'volume_id': 'volume-fake-id'
            }
        }
        vm_ref = 'fake-vm-ref'
        volume_device = mock.MagicMock()
        volume_device.backing.fileName = 'fake-path'
        default_adapter_type = constants.DEFAULT_ADAPTER_TYPE
        disk_type = constants.DEFAULT_DISK_TYPE
        disk_uuid = 'e97f357b-331e-4ad1-b726-89be048fb811'
        backing = mock.Mock(uuid=disk_uuid)
        device = mock.Mock(backing=backing)
        vmdk_info = vm_util.VmdkInfo('fake-path', default_adapter_type,
                                     disk_type, 1024, device)
        adapter_type = adapter_type or default_adapter_type

        if adapter_type == constants.ADAPTER_TYPE_IDE:
            vm_state = power_state.SHUTDOWN
        else:
            vm_state = power_state.RUNNING
        with test.nested(
                mock.patch.object(vm_util, 'get_vm_ref', return_value=vm_ref),
                mock.patch.object(self._volumeops, '_get_volume_ref'),
                mock.patch.object(vm_util,
                                  'get_vmdk_info',
                                  return_value=vmdk_info),
                mock.patch.object(self._volumeops, 'attach_disk_to_vm'),
                mock.patch.object(self._volumeops, '_update_volume_details'),
                mock.patch.object(
                    vm_util, 'get_vm_state',
                    return_value=vm_state)) as (get_vm_ref, get_volume_ref,
                                                get_vmdk_info,
                                                attach_disk_to_vm,
                                                update_volume_details,
                                                get_vm_state):
            self._volumeops.attach_volume(connection_info, self._instance,
                                          adapter_type)

            get_vm_ref.assert_called_once_with(self._volumeops._session,
                                               self._instance)
            get_volume_ref.assert_called_once_with(connection_info['data'])
            self.assertTrue(get_vmdk_info.called)
            attach_disk_to_vm.assert_called_once_with(
                vm_ref,
                self._instance,
                adapter_type,
                constants.DISK_TYPE_PREALLOCATED,
                vmdk_path='fake-path')
            update_volume_details.assert_called_once_with(
                vm_ref, connection_info['data']['volume_id'], disk_uuid)
            if adapter_type == constants.ADAPTER_TYPE_IDE:
                get_vm_state.assert_called_once_with(self._volumeops._session,
                                                     self._instance)
            else:
                self.assertFalse(get_vm_state.called)
Exemple #4
0
    def test_detach_volume_vmdk(self):

        vmdk_info = vm_util.VmdkInfo('fake-path', 'lsiLogic', 'thin', 1024,
                                     'fake-device')
        with test.nested(
                mock.patch.object(vm_util,
                                  'get_vm_ref',
                                  return_value=mock.sentinel.vm_ref),
                mock.patch.object(self._volumeops,
                                  '_get_volume_ref',
                                  return_value=mock.sentinel.volume_ref),
                mock.patch.object(self._volumeops,
                                  '_get_vmdk_backed_disk_device',
                                  return_value=mock.sentinel.device),
                mock.patch.object(vm_util,
                                  'get_vmdk_info',
                                  return_value=vmdk_info),
                mock.patch.object(self._volumeops, '_consolidate_vmdk_volume'),
                mock.patch.object(self._volumeops, 'detach_disk_from_vm'),
                mock.patch.object(self._volumeops, '_update_volume_details'),
        ) as (get_vm_ref, get_volume_ref, get_vmdk_backed_disk_device,
              get_vmdk_info, consolidate_vmdk_volume, detach_disk_from_vm,
              update_volume_details):

            connection_info = {
                'driver_volume_type': 'vmdk',
                'serial': 'volume-fake-id',
                'data': {
                    'volume': 'vm-10',
                    'volume_id': 'd11a82de-ddaa-448d-b50a-a255a7e61a1e'
                }
            }
            instance = mock.MagicMock(name='fake-name',
                                      vm_state=vm_states.ACTIVE)
            self._volumeops._detach_volume_vmdk(connection_info, instance)

            get_vm_ref.assert_called_once_with(self._volumeops._session,
                                               instance)
            get_volume_ref.assert_called_once_with(
                connection_info['data']['volume'])
            get_vmdk_backed_disk_device.assert_called_once_with(
                mock.sentinel.vm_ref, connection_info['data'])
            get_vmdk_info.assert_called_once_with(self._volumeops._session,
                                                  mock.sentinel.volume_ref)
            consolidate_vmdk_volume.assert_called_once_with(
                instance,
                mock.sentinel.vm_ref,
                mock.sentinel.device,
                mock.sentinel.volume_ref,
                adapter_type=vmdk_info.adapter_type,
                disk_type=vmdk_info.disk_type)
            detach_disk_from_vm.assert_called_once_with(
                mock.sentinel.vm_ref, instance, mock.sentinel.device)
            update_volume_details.assert_called_once_with(
                mock.sentinel.vm_ref, connection_info['data']['volume_id'], "")