def vms(): os.environ['vcdriver_folder'] = os.getenv('vcdriver_test_folder') load(os.getenv('vcdriver_test_config_file')) unix = VirtualMachine(template=os.getenv('vcdriver_test_unix_template')) windows = VirtualMachine( template=os.getenv('vcdriver_test_windows_template')) vms = {'unix': unix, 'windows': windows} for vm in vms.values(): try: vm.find() vm.destroy() except NoObjectFound: pass with virtual_machines(vms.values()): yield vms
def test_virtual_machine_vm_id(): vm = VirtualMachine() vm_object_mock = mock.MagicMock() vm_object_mock.summary.vm = "'vim.VirtualMachine:vm-83288'" vm.__setattr__('_vm_object', vm_object_mock) vm_id = vm.vm_id() assert vm_id == 'vm-83288'
def test_virtual_machines_fail(destroy, create, connection): vm = VirtualMachine() with pytest.raises(Exception): with virtual_machines([vm]): raise Exception create.assert_called_once_with() destroy.assert_called_once_with()
def test_snapshot_success(remove, revert, create): vm = VirtualMachine() with snapshot(vm): pass create.assert_called_once() revert.assert_called_once() remove.assert_called_once()
def test_virtual_machine_ip_timeout(connection): vm = VirtualMachine(timeout=1) vm_object_mock = mock.MagicMock() vm_object_mock.summary.guest.ipAddress = None vm.__setattr__('_vm_object', vm_object_mock) with pytest.raises(TimeoutError): vm.ip()
def test_schedule_vcenter_task_on_vm(connection): mock_CreateScheduledTask = mock.MagicMock() connection.return_value.content.scheduledTaskManager.CreateScheduledTask = mock_CreateScheduledTask vm = VirtualMachine() vm._schedule_vcenter_task_on_vm(vim.VirtualMachine.PowerOff, 'Power off virtual machine "dummy"', datetime.timedelta(hours=1)) assert mock_CreateScheduledTask.call_count == 1
def test_virtual_machine_ip_with_dhcp_wait(validate_ip, timeout_loop, connection): vm = VirtualMachine() validate_ip.side_effect = lambda x: x vm_object_mock = mock.MagicMock() vm_object_mock.summary.guest.ipAddress = None vm.__setattr__('_vm_object', vm_object_mock) assert vm.ip() is None
def test_snapshot_fail(remove, revert, create): vm = VirtualMachine() with pytest.raises(Exception): with snapshot(vm): raise Exception create.assert_called_once() revert.assert_called_once() remove.assert_called_once()
def test_virtual_machine_destroy_vm_on(wait_for_vcenter_task, connection): vm = VirtualMachine() vm_object_mock = mock.MagicMock() vm.__setattr__('_vm_object', vm_object_mock) vm.destroy() vm.destroy() assert vm.__getattribute__('_vm_object') is None assert wait_for_vcenter_task.call_count == 2
def test_virtual_machine_ip(connection): vm = VirtualMachine() vm_object_mock = mock.MagicMock() vm_object_mock.summary.guest.ipAddress = '127.0.0.1' assert vm.ip() is None vm.__setattr__('_vm_object', vm_object_mock) assert vm.ip() == '127.0.0.1' assert vm.ip() == '127.0.0.1'
def test_virtual_machine_reset_wrong_power_state(wait_for_vcenter_task, connection): wait_for_vcenter_task.side_effect = vim.fault.InvalidPowerState vm = VirtualMachine() vm.reset() vm.__setattr__('_vm_object', mock.MagicMock()) vm.reset() assert wait_for_vcenter_task.call_count == 1
def test_virtual_machine_destroy_vm_off(wait_for_vcenter_task, connection): vm = VirtualMachine() vm_object_mock = mock.MagicMock() vm.__setattr__('_vm_object', vm_object_mock) wait_for_vcenter_task.side_effect = [vim.fault.InvalidPowerState, None] vm.destroy() vm.destroy() assert vm.__getattribute__('_vm_object') is None assert wait_for_vcenter_task.call_count == 2
def vms(): load(os.getenv('vcdriver_test_config_file')) unix = VirtualMachine( name='test-integration-vcdriver-unix', template=os.getenv('vcdriver_test_unix_template') ) windows = VirtualMachine( name='test-integration-vcdriver-windows', template=os.getenv('vcdriver_test_windows_template') ) vms = {'unix': unix, 'windows': windows} yield vms for vm in vms.values(): try: vm.find() vm.destroy() except: pass
def test_virtual_machine_ssh_download_fail(helpers_run, vm_run, get, session): os.environ['vcdriver_vm_ssh_username'] = '******' os.environ['vcdriver_vm_ssh_password'] = '******' load() vm = VirtualMachine() vm_object_mock = mock.MagicMock() vm_object_mock.summary.guest.ipAddress = '127.0.0.1' vm.__setattr__('_vm_object', vm_object_mock) with pytest.raises(DownloadError): vm.ssh_download('from', 'to')
def test_virtual_machine_ssh_fail(sudo, helpers_run, vm_run, connection): os.environ['vcdriver_vm_ssh_username'] = '******' os.environ['vcdriver_vm_ssh_password'] = '******' load() vm = VirtualMachine() vm_object_mock = mock.MagicMock() vm_object_mock.summary.guest.ipAddress = 'fe80::250:56ff:febf:1a0a' vm.__setattr__('_vm_object', vm_object_mock) with pytest.raises(SshError): vm.ssh('whatever', use_sudo=True)
def test_virtual_machine_power_off(wait_for_vcenter_task, connection): vm = VirtualMachine() mock_schedule_vcenter_task_on_vm = mock.MagicMock() vm.__setattr__('_schedule_vcenter_task_on_vm', mock_schedule_vcenter_task_on_vm) vm.power_off() vm.__setattr__('_vm_object', mock.MagicMock()) vm.power_off() assert wait_for_vcenter_task.call_count == 1 assert mock_schedule_vcenter_task_on_vm.call_count == 0
def test_virtual_machine_winrm_timeout(run_ps, connection): os.environ['vcdriver_vm_winrm_username'] = '******' os.environ['vcdriver_vm_winrm_password'] = '******' load() vm = VirtualMachine(timeout=1) vm_object_mock = mock.MagicMock() vm_object_mock.summary.guest.ipAddress = '127.0.0.1' vm.__setattr__('_vm_object', vm_object_mock) run_ps.side_effect = Exception with pytest.raises(TimeoutError): vm.winrm('script', dict())
def test_virtual_machine_winrm_fail(run_ps, connection): os.environ['vcdriver_vm_winrm_username'] = '******' os.environ['vcdriver_vm_winrm_password'] = '******' load() vm = VirtualMachine() vm_object_mock = mock.MagicMock() vm_object_mock.summary.guest.ipAddress = '127.0.0.1' vm.__setattr__('_vm_object', vm_object_mock) run_ps.return_value.status_code = 1 with pytest.raises(WinRmError): vm.winrm('script', dict())
def test_virtual_machine_reboot(connection): vm = VirtualMachine() vm_object_mock = mock.MagicMock() reboot_mock = mock.MagicMock() vm_object_mock.RebootGuest = reboot_mock vm_object_mock.summary.runtime.powerState = 'poweredOn' vm_object_mock.summary.guest.toolsRunningStatus = 'guestToolsRunning' vm.reboot() vm.__setattr__('_vm_object', vm_object_mock) vm.reboot() assert reboot_mock.call_count == 1
def test_virtual_machine_shutdown_wrong_power_state(connection): vm = VirtualMachine() vm_object_mock = mock.MagicMock() shutdown_mock = mock.MagicMock() vm_object_mock.ShutdownGuest = shutdown_mock vm_object_mock.summary.runtime.powerState = 'poweredOff' vm_object_mock.summary.guest.toolsRunningStatus = 'guestToolsRunning' vm.shutdown() vm.__setattr__('_vm_object', vm_object_mock) vm.shutdown() assert shutdown_mock.call_count == 0
def test_virtual_machine_ssh_timeout(helpers_run, vm_run, connection): os.environ['vcdriver_vm_ssh_username'] = '******' os.environ['vcdriver_vm_ssh_password'] = '******' load() vm = VirtualMachine(timeout=1) vm_object_mock = mock.MagicMock() vm_object_mock.summary.guest.ipAddress = '127.0.0.1' vm.__setattr__('_vm_object', vm_object_mock) helpers_run.side_effect = Exception vm_run.side_effect = Exception with pytest.raises(TimeoutError): vm.ssh('whatever', use_sudo=True)
def test_virtual_machine_winrm_success(run_ps, connection): os.environ['vcdriver_vm_winrm_username'] = '******' os.environ['vcdriver_vm_winrm_password'] = '******' load() vm = VirtualMachine() assert vm.winrm('whatever', dict()) is None vm_object_mock = mock.MagicMock() vm_object_mock.summary.guest.ipAddress = '127.0.0.1' vm.__setattr__('_vm_object', vm_object_mock) run_ps.return_value.status_code = 0 vm.winrm('script', dict()) run_ps.assert_called_with('script') assert run_ps.call_count == 2
def test_virtual_machine_download_success(helpers_run, vm_run, get, session): os.environ['vcdriver_vm_ssh_username'] = '******' os.environ['vcdriver_vm_ssh_password'] = '******' load() vm = VirtualMachine() assert vm.download('from', 'to') is None vm_object_mock = mock.MagicMock() vm_object_mock.summary.guest.ipAddress = '127.0.0.1' vm.__setattr__('_vm_object', vm_object_mock) result_mock = mock.MagicMock() result_mock.failed = False get.return_value = result_mock assert vm.download('from', 'to') == result_mock
def test_virtual_machine_create_snapshot(wait_for_vcenter_task): fake_snapshot = mock.MagicMock() fake_snapshot.name = 'snapshot' fake_snapshot.childSnapshotList = [] vm = VirtualMachine() assert vm.create_snapshot('snapshot', True) is None vm_object_mock = mock.MagicMock() vm_object_mock.snapshot.rootSnapshotList = [] vm.__setattr__('_vm_object', vm_object_mock) vm.create_snapshot('snapshot', True) vm_object_mock.snapshot.rootSnapshotList = [fake_snapshot] with pytest.raises(TooManyObjectsFound): vm.create_snapshot('snapshot', True)
def test_virtual_machine_power_off_with_delay(wait_for_vcenter_task, connection): vm = VirtualMachine() mock_schedule_vcenter_task_on_vm = mock.MagicMock() vm.__setattr__('_schedule_vcenter_task_on_vm', mock_schedule_vcenter_task_on_vm) vm.power_off(delay_by=datetime.timedelta(hours=1)) vm_object_mock = mock.MagicMock() vm_object_mock.summary.vm = "'vim.VirtualMachine:vm-83288'" vm.__setattr__('_vm_object', vm_object_mock) vm.power_off(delay_by=datetime.timedelta(hours=1)) assert wait_for_vcenter_task.call_count == 0 assert mock_schedule_vcenter_task_on_vm.call_count == 1
def test_virtual_machine_create_not_enough_disk_space( wait_for_vcenter_task, relocate_spec, clone_spec, get_vcenter_object_by_name, connection): os.environ['vcdriver_resource_pool'] = 'something' os.environ['vcdriver_data_store'] = 'something' os.environ['vcdriver_data_store_threshold'] = '120' os.environ['vcdriver_folder'] = 'something' load() vm = VirtualMachine() with pytest.raises(NotEnoughDiskSpace): vm.create() assert vm.__getattribute__('_vm_object') is None assert wait_for_vcenter_task.call_count == 0
def test_virtual_machine_create(wait_for_vcenter_task, relocate_spec, clone_spec, get_vcenter_object_by_name, connection): os.environ['vcdriver_resource_pool'] = 'something' os.environ['vcdriver_data_store'] = 'something' os.environ['vcdriver_data_store_threshold'] = '20' os.environ['vcdriver_folder'] = 'something' load() vm = VirtualMachine() vm.create() vm.create() assert vm.__getattribute__('_vm_object') is not None assert wait_for_vcenter_task.call_count == 1
def test_virtual_machine_ssh_success(helpers_run, vm_run, sudo, connection): os.environ['vcdriver_vm_ssh_username'] = '******' os.environ['vcdriver_vm_ssh_password'] = '******' load() vm = VirtualMachine() assert vm.ssh('whatever') is None vm_object_mock = mock.MagicMock() vm_object_mock.summary.guest.ipAddress = '127.0.0.1' vm.__setattr__('_vm_object', vm_object_mock) result_mock = mock.MagicMock() result_mock.return_code = 3 result_mock.failed = False helpers_run.return_value = result_mock vm_run.return_value = result_mock sudo.return_value = result_mock assert vm.ssh('whatever', use_sudo=False).return_code == 3 assert vm.ssh('whatever', use_sudo=True).return_code == 3
def destroy_virtual_machines(folder_name, timeout=600): """ Destroy all the virtual machines in the folder with the given name :param folder_name: The folder name :param timeout: The timeout for vcenter tasks in seconds :return: A list with the destroyed vms """ folder = get_vcenter_object_by_name(connection(), vim.Folder, folder_name) destroyed_vms = [] for entity in folder.childEntity: if isinstance(entity, vim.VirtualMachine): vm = VirtualMachine(name=entity.summary.config.name, timeout=timeout) vm.__setattr__('_vm_object', entity) vm.destroy() destroyed_vms.append(vm) return destroyed_vms
def test_virtual_machine_winrm_upload_fail(run_ps, connection, open, os_stat): st_size_mock = mock.Mock() st_size_mock.st_size = 3 os_stat.return_value = st_size_mock code_mock = mock.Mock() code_mock.status_code = 1 code_mock.std_err = 'Whatever'.encode('ascii') run_ps.return_value = code_mock read_mock = mock.Mock read_mock.read = lambda x, y: b'\0\0\0' open.__enter__ = read_mock open.__exit__ = mock.Mock() os.environ['vcdriver_vm_winrm_username'] = '******' os.environ['vcdriver_vm_winrm_password'] = '******' load() vm = VirtualMachine() vm_object_mock = mock.MagicMock() vm_object_mock.summary.guest.ipAddress = '127.0.0.1' vm.__setattr__('_vm_object', vm_object_mock) with pytest.raises(WinRmError): vm.winrm_upload('whatever', 'whatever', step=2)