diff --git a/package/cloudshell/cp/vcenter/commands/command_orchestrator.py b/package/cloudshell/cp/vcenter/commands/command_orchestrator.py index b950ea0c..0e44b65e 100644 --- a/package/cloudshell/cp/vcenter/commands/command_orchestrator.py +++ b/package/cloudshell/cp/vcenter/commands/command_orchestrator.py @@ -44,8 +44,8 @@ def __init__(self): :param context: models.QualiDriverModels.InitCommandContext """ self.cs_helper = CloudshellDriverHelper() - pv_service = pyVmomiService(SmartConnect, Disconnect) synchronous_task_waiter = SynchronousTaskWaiter() + pv_service = pyVmomiService(connect=SmartConnect, disconnect=Disconnect, task_waiter=synchronous_task_waiter) self.resource_model_parser = ResourceModelParser() port_group_name_generator = DvPortGroupNameGenerator() diff --git a/package/cloudshell/cp/vcenter/common/vcenter/task_waiter.py b/package/cloudshell/cp/vcenter/common/vcenter/task_waiter.py index 84ebd655..b75b7a0e 100644 --- a/package/cloudshell/cp/vcenter/common/vcenter/task_waiter.py +++ b/package/cloudshell/cp/vcenter/common/vcenter/task_waiter.py @@ -16,7 +16,7 @@ def wait_for_task(self, task, logger, action_name='job', hide_result=False): :param logger: """ - while task.info.state == vim.TaskInfo.State.running: + while task.info.state in [vim.TaskInfo.State.running, vim.TaskInfo.State.queued]: time.sleep(2) if task.info.state == vim.TaskInfo.State.success: @@ -26,7 +26,7 @@ def wait_for_task(self, task, logger, action_name='job', hide_result=False): else: out = '%s completed successfully.' % action_name logger.info(out) - else: + else: # error state multi_msg = '' if task.info.error.faultMessage: multi_msg = ', '.join([err.message for err in task.info.error.faultMessage]) diff --git a/package/cloudshell/cp/vcenter/common/vcenter/vmomi_service.py b/package/cloudshell/cp/vcenter/common/vcenter/vmomi_service.py index f39b5300..d5b5e2c0 100644 --- a/package/cloudshell/cp/vcenter/common/vcenter/vmomi_service.py +++ b/package/cloudshell/cp/vcenter/common/vcenter/vmomi_service.py @@ -4,7 +4,7 @@ from cloudshell.cp.vcenter.common.utilites.io import get_path_and_name from cloudshell.cp.vcenter.common.vcenter.vm_location import VMLocation from cloudshell.cp.vcenter.common.utilites.common_utils import str2bool - +from cloudshell.cp.vcenter.common.vcenter.task_waiter import SynchronousTaskWaiter class pyVmomiService: # region consts @@ -18,9 +18,14 @@ class pyVmomiService: # endregion - def __init__(self, connect, disconnect, vim_import=None): + def __init__(self, connect, disconnect, task_waiter, vim_import=None): + """ + :param SynchronousTaskWaiter task_waiter: + :return: + """ self.pyvmomi_connect = connect self.pyvmomi_disconnect = disconnect + self.task_waiter = task_waiter if vim_import is None: from pyVmomi import vim self.vim = vim @@ -316,26 +321,6 @@ def get_all_items_in_vcenter(si, type_filter, root=None): container = si.content.viewManager.CreateContainerView(container=root, recursive=True) return [item for item in container.view if not type_filter or isinstance(item, type_filter)] - def wait_for_task(self, task, logger): - """ wait for a vCenter task to finish - :param task: - :param logger: - """ - task_done = False - while not task_done: - if task.info.state == 'success': - logger.info("Task succeeded: " + task.info.state) - return task.info.result - - if task.info.state == 'error': - multi_msg = '' - if task.info.error.faultMessage: - multi_msg = ', '.join([err.message for err in task.info.error.faultMessage]) - multi_msg = multi_msg if multi_msg else task.info.error.msg - logger.info(multi_msg) - raise Exception(multi_msg) - time.sleep(1) - class CloneVmParameters: """ This is clone_vm method params object @@ -455,7 +440,7 @@ def clone_vm(self, clone_params, logger): logger.info("cloning VM...") try: task = template.Clone(folder=dest_folder, name=clone_params.vm_name, spec=clone_spec) - vm = self.wait_for_task(task, logger) + vm = self.task_waiter.wait_for_task(task=task, logger=logger, action_name='Clone VM') except vim.fault.NoPermission as error: logger.error("vcenter returned - no permission: {0}".format(error)) @@ -546,12 +531,12 @@ def destroy_vm(self, vm, logger): logger.info(("The current powerState is: {0}. Attempting to power off {1}" .format(vm.runtime.powerState, vm.name))) task = vm.PowerOffVM_Task() - self.wait_for_task(task, logger) + self.task_waiter.wait_for_task(task=task, logger=logger, action_name="Power Off Before Destroy") logger.info(("Destroying VM {0}".format(vm.name))) task = vm.Destroy_Task() - return self.wait_for_task(task, logger) + return self.task_waiter.wait_for_task(task=task, logger=logger, action_name="Destroy VM") def destroy_vm_by_name(self, si, vm_name, vm_path, logger): """ diff --git a/package/cloudshell/tests/test_common/test_vcenter/test_task_waiter.py b/package/cloudshell/tests/test_common/test_vcenter/test_task_waiter.py index 53d01fda..f13ef076 100644 --- a/package/cloudshell/tests/test_common/test_vcenter/test_task_waiter.py +++ b/package/cloudshell/tests/test_common/test_vcenter/test_task_waiter.py @@ -36,6 +36,21 @@ def test_wait_for_task(self): self.assertEqual(res, result) + @patch('time.sleep', helper.change_to_success) + def test_wait_for_queued_task(self): + task.info = Mock(spec=vim.TaskInfo) + task.info.state = vim.TaskInfo.State.queued + result = 'result' + task.info.result = result + + waiter = SynchronousTaskWaiter() + res = waiter.wait_for_task(task=task, + logger=Mock(), + action_name='job', + hide_result=False) + + self.assertEqual(res, result) + @patch('time.sleep', helper.change_to_success) def test_wait_for_task_result_none(self): task.info = Mock(spec=vim.TaskInfo) diff --git a/package/cloudshell/tests/test_common/test_vcenter/test_vmomi_service.py b/package/cloudshell/tests/test_common/test_vcenter/test_vmomi_service.py index 6e48ccb9..9b9ff2d9 100644 --- a/package/cloudshell/tests/test_common/test_vcenter/test_vmomi_service.py +++ b/package/cloudshell/tests/test_common/test_vcenter/test_vmomi_service.py @@ -64,11 +64,10 @@ def test_clone_vm_power_on_false(self): template = Mock(spec=vim.VirtualMachine) template.datastore = [Mock()] - pv_service = pyVmomiService(None, None, vim_mock) + pv_service = pyVmomiService(None, None, Mock(), vim_import=vim_mock) pv_service.find_vm_by_name = Mock(return_value=template) pv_service.get_obj = Mock() pv_service.get_folder = Mock(return_value=datacenter) - pv_service.wait_for_task = Mock() pv_service._get_datastore = Mock(return_value=Mock(spec=vim.Datastore)) pv_service._get_resource_pool = Mock(return_value=(Mock(spec=vim.ResourcePool), None)) @@ -87,7 +86,7 @@ def test_clone_vm_power_on_false(self): self.assertTrue(vim_mock.vm.CloneSpec.called) self.assertTrue(pv_service.get_folder.called) self.assertTrue(pv_service.find_vm_by_name.called) - self.assertTrue(pv_service.wait_for_task.called) + self.assertTrue(pv_service.task_waiter.wait_for_task.called) def test_clone_vm_resource_pool_is_not_empty(self): """ @@ -107,11 +106,10 @@ def test_clone_vm_resource_pool_is_not_empty(self): template = Mock(spec=vim.VirtualMachine) template.datastore = [Mock()] - pv_service = pyVmomiService(None, None, vim_mock) + pv_service = pyVmomiService(None, None, Mock(), vim_mock) pv_service.find_vm_by_name = Mock(return_value=template) pv_service.get_obj = Mock() pv_service.get_folder = Mock(return_value=datacenter) - pv_service.wait_for_task = Mock() pv_service._get_datastore = Mock(return_value=Mock(spec=vim.Datastore)) pv_service._get_resource_pool = Mock(return_value=(Mock(spec=vim.ResourcePool), None)) @@ -130,7 +128,7 @@ def test_clone_vm_resource_pool_is_not_empty(self): self.assertTrue(vim_mock.vm.CloneSpec.called) self.assertTrue(pv_service.get_folder.called) self.assertTrue(pv_service.find_vm_by_name.called) - self.assertTrue(pv_service.wait_for_task.called) + self.assertTrue(pv_service.task_waiter.wait_for_task.called) def test_clone_vm_datastore_name_is_not_none(self): """ @@ -150,11 +148,10 @@ def test_clone_vm_datastore_name_is_not_none(self): template = Mock(spec=vim.VirtualMachine) template.datastore = [Mock()] - pv_service = pyVmomiService(None, None, vim_mock) + pv_service = pyVmomiService(None, None, Mock(), vim_mock) pv_service.find_vm_by_name = Mock(return_value=template) pv_service.get_obj = Mock() pv_service.get_folder = Mock(return_value=datacenter) - pv_service.wait_for_task = Mock() pv_service._get_datastore = Mock(return_value=Mock(spec=vim.Datastore)) pv_service._get_resource_pool = Mock(return_value=(Mock(spec=vim.ResourcePool), None)) @@ -173,7 +170,7 @@ def test_clone_vm_datastore_name_is_not_none(self): self.assertTrue(vim_mock.vm.CloneSpec.called) self.assertTrue(pv_service.get_folder.called) self.assertTrue(pv_service.find_vm_by_name.called) - self.assertTrue(pv_service.wait_for_task.called) + self.assertTrue(pv_service.task_waiter.wait_for_task.called) def test_clone_vm_destenation_folder_is_unsupported(self): """ @@ -193,11 +190,10 @@ def test_clone_vm_destenation_folder_is_unsupported(self): template = Mock(spec=vim.VirtualMachine) template.datastore = [Mock()] - pv_service = pyVmomiService(None, None, vim_mock) + pv_service = pyVmomiService(None, None, Mock(), vim_mock) pv_service.find_vm_by_name = Mock(return_value=template) pv_service.get_obj = Mock() pv_service.get_folder = Mock(return_value=folder) - pv_service.wait_for_task = Mock() pv_service._get_datastore = Mock(return_value=Mock(spec=vim.Datastore)) pv_service._get_resource_pool = Mock(return_value=Mock(spec=vim.ResourcePool)) @@ -212,7 +208,7 @@ def test_clone_vm_destenation_folder_is_unsupported(self): self.assertFalse(vim_mock.vm.RelocateSpec.called) self.assertFalse(vim_mock.vm.CloneSpec.called) self.assertFalse(pv_service.find_vm_by_name.called) - self.assertFalse(pv_service.wait_for_task.called) + self.assertFalse(pv_service.task_waiter.wait_for_task.called) def test_clone_vm_destenation_folder_is_folder_type(self): """ @@ -232,11 +228,10 @@ def test_clone_vm_destenation_folder_is_folder_type(self): template = Mock(spec=vim.VirtualMachine) template.datastore = [Mock()] - pv_service = pyVmomiService(None, None, vim_mock) + pv_service = pyVmomiService(None, None, Mock(), vim_mock) pv_service.find_vm_by_name = Mock(return_value=template) pv_service.get_obj = Mock() pv_service.get_folder = Mock(return_value=folder) - pv_service.wait_for_task = Mock() pv_service._get_datastore = Mock(return_value=Mock(spec=vim.Datastore)) pv_service._get_resource_pool = Mock(return_value=(Mock(spec=vim.ResourcePool), None)) @@ -254,7 +249,7 @@ def test_clone_vm_destenation_folder_is_folder_type(self): self.assertTrue(vim_mock.vm.CloneSpec.called) self.assertTrue(pv_service.get_folder.called) self.assertTrue(pv_service.find_vm_by_name.called) - self.assertTrue(pv_service.wait_for_task.called) + self.assertTrue(pv_service.task_waiter.wait_for_task.called) def test_clone_vm_datastore_name_is_none(self): """ @@ -273,11 +268,10 @@ def test_clone_vm_datastore_name_is_none(self): template = Mock(spec=vim.VirtualMachine) template.datastore = [Mock()] - pv_service = pyVmomiService(None, None, vim_mock) + pv_service = pyVmomiService(None, None, Mock(), vim_mock) pv_service.find_vm_by_name = Mock(return_value=template) pv_service.get_obj = Mock() pv_service.get_folder = Mock(return_value=datacenter) - pv_service.wait_for_task = Mock() pv_service._get_datastore = Mock(return_value=Mock(spec=vim.Datastore)) pv_service._get_resource_pool = Mock(return_value=(Mock(spec=vim.ResourcePool), None)) @@ -296,7 +290,7 @@ def test_clone_vm_datastore_name_is_none(self): self.assertTrue(vim_mock.vm.CloneSpec.called) self.assertTrue(pv_service.get_folder.called) self.assertTrue(pv_service.find_vm_by_name.called) - self.assertTrue(pv_service.wait_for_task.called) + self.assertTrue(pv_service.task_waiter.wait_for_task.called) def test_clone_vm_vm_folder_is_none(self): """ @@ -305,7 +299,7 @@ def test_clone_vm_vm_folder_is_none(self): '#arrange' si = create_autospec(spec=vim.ServiceInstance) - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) params = pv_service.CloneVmParameters(si=si, template_name='my_temp', vm_name='my_name', @@ -324,7 +318,7 @@ def test_clone_vm_vm_name_is_none(self): '#arrange' si = create_autospec(spec=vim.ServiceInstance) - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) params = pv_service.CloneVmParameters(si=si, template_name='my_temp', vm_name=None, @@ -343,7 +337,7 @@ def test_clone_vm_template_name_is_none(self): '#arrange' si = create_autospec(spec=vim.ServiceInstance) - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) params = pv_service.CloneVmParameters(si=si, template_name=None, vm_name=None, @@ -360,7 +354,7 @@ def test_clone_vm_si_is_none(self): Checks clone_vm """ '#arrange' - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) params = pv_service.CloneVmParameters(si=None, template_name=None, vm_name=None, @@ -377,7 +371,7 @@ def test_destroy_vm_by_name(self): Checks whether the vm found and call to be destroy """ '#arrange' - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) si = create_autospec(spec=vim.ServiceInstance) si.RetrieveContent = Mock() @@ -400,7 +394,7 @@ def test_destroy_vm_by_uuid(self): Checks whether the vm found and call to be destroy """ '#arrange' - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) si = create_autospec(spec=vim.ServiceInstance) si.RetrieveContent = Mock() @@ -425,7 +419,7 @@ def test_get_folder_path_not_found(self): Checks when path not found """ '#arrange' - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) def find_child_mock(*args): root = args[0] @@ -483,7 +477,7 @@ def test_get_folder_deep_and_complex_path(self): Checks when path is deep and complex, goes through all the folder types """ '#arrange' - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) def find_child_mock(*args): root = args[0] @@ -541,7 +535,7 @@ def test_get_folder_deep_path(self): Checks when path is deep, more then two """ '#arrange' - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) def find_child_mock(*args): root = args[0] @@ -584,7 +578,7 @@ def test_get_folder_one_sub_folder(self): """ '#arrange' - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) def find_child_mock(*args): root = args[0] @@ -622,7 +616,7 @@ def test_get_folder_path_empty(self): '#arrange' folder_name = 'rootFolder' - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) si = create_autospec(spec=vim.ServiceInstance) si.RetrieveContent = Mock() @@ -642,7 +636,7 @@ def test_get_object_by_path_checks_networkFolder(self): Checks whether the function can grab network folder """ '#arrange' - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) def search_child(*args, **keys): if args[0].name == pv_service.Network: @@ -675,7 +669,7 @@ def test_get_object_by_path_checks_hostFolder(self): Checks whether the function can grab host folder """ '#arrange' - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) def search_child(*args, **keys): if args[0].name == pv_service.Host: @@ -708,7 +702,7 @@ def test_get_object_by_path_checks_datacenterFolder(self): Checks whether the function can grab datacenter folder """ '#arrange' - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) def search_child(*args, **keys): if args[0].name == pv_service.Datacenter: @@ -741,7 +735,7 @@ def test_get_object_by_path_checks_datastoreFolder(self): Checks whether the function can grab datastore folder """ '#arrange' - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) def search_child(*args, **keys): if args[0].name == pv_service.Datastore: @@ -774,7 +768,7 @@ def test_get_object_by_path_checks_vmFolder(self): Checks whether the function can grab vm folder """ '#arrange' - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) def search_child(*args, **keys): if args[0].name == pv_service.VM: @@ -807,7 +801,7 @@ def test_get_object_by_path_checks_childEntity(self): Checks whether the function can grab from child entities """ '#arrange' - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) def search_child(*args, **keys): if args[0].name == pv_service.ChildEntity: @@ -839,7 +833,7 @@ def test_get_object_by_path_no_nested_objs(self): Checks whether the function returns 'None' if it doesn't find an object """ '#arrange' - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) get_folder = MagicMock(return_value=Mock(spec=[])) pv_service.get_folder = get_folder @@ -858,7 +852,7 @@ def test_get_object_by_path_no_folder_found(self): '#arrange' folder_name = 'rootFolder' - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) si = create_autospec(spec=vim.ServiceInstance) si.RetrieveContent = Mock() @@ -887,7 +881,7 @@ def side_eff(*args, **kwargs): counter.i += 1 return 'not found' - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) si = create_autospec(spec=vim.ServiceInstance) si.RetrieveContent = Mock() @@ -921,7 +915,7 @@ def side_eff(*args, **kwargs): counter.i = counter.i + 1; return Mock(spec=vim.Datacenter) - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) si = create_autospec(spec=vim.ServiceInstance) si.RetrieveContent = Mock() @@ -943,7 +937,7 @@ def test_find_item_in_path_by_type_type_is_None(self): Checks whether the function can grab object by uuid """ '#arrange' - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) si = create_autospec(spec=vim.ServiceInstance) si.RetrieveContent = Mock() @@ -963,7 +957,7 @@ def test_find_item_in_path_by_type_path_None(self): Checks whether the function can grab object by uuid """ '#arrange' - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) si = create_autospec(spec=vim.ServiceInstance) si.RetrieveContent = Mock() @@ -983,7 +977,7 @@ def test_get_vm_by_uuid_vm_with_path(self): Checks whether the function can grab object by uuid """ '#arrange' - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) dc = Mock(spec=vim.Datacenter) pv_service.find_item_in_path_by_type = Mock(return_value=dc) @@ -1007,7 +1001,7 @@ def test_get_vm_by_uuid_vm_without_uuid(self): Checks whether the function can grab object by uuid """ '#arrange' - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) si = create_autospec(spec=vim.ServiceInstance) si.RetrieveContent = Mock() @@ -1024,7 +1018,7 @@ def test_get_vm_by_uuid_vm_without_path(self): Checks whether the function can grab object by uuid """ '#arrange' - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) si = create_autospec(spec=vim.ServiceInstance) si.RetrieveContent = Mock() @@ -1045,7 +1039,7 @@ def test_get_vm_by_name_isVm_VM_type(self): Checks whether the function can passes vm type """ '#arrange' - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) def find_obj_by_path_mock(*args, **kwargs): return args[3] == pv_service.VM @@ -1067,7 +1061,7 @@ def test_get_datastore_by_name_is_Datastore_type(self): Checks whether the function can passes datastore type """ '#arrange' - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) def find_obj_by_path_mock(*args, **kwargs): return args[3] == pv_service.Datastore @@ -1089,7 +1083,7 @@ def test_get_datacenter_by_name_is_Datacenter_type(self): Checks whether the function can passes datascenter type """ '#arrange' - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) def find_obj_by_path_mock(*args, **kwargs): return args[3] == pv_service.Datacenter @@ -1111,7 +1105,7 @@ def test_get_host_by_name_is_Host_type(self): Checks whether the function can passes host type """ '#arrange' - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) def find_obj_by_path_mock(*args, **kwargs): return args[3] == pv_service.Host @@ -1133,7 +1127,7 @@ def test_get_network_by_name_is_network_type(self): Checks whether the function can passes network type """ '#arrange' - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) def find_obj_by_path_mock(*args, **kwargs): return args[3] == pv_service.Network @@ -1152,7 +1146,7 @@ def find_obj_by_path_mock(*args, **kwargs): def test_connect(self): # arrange - pv_service = pyVmomiService(SmartConnect, Disconnect) + pv_service = pyVmomiService(SmartConnect, Disconnect, Mock()) address = Mock() user = Mock() password = Mock() @@ -1166,7 +1160,7 @@ def test_connect(self): def test_disconnect(self): # arrange - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) si = create_autospec(spec=vim.ServiceInstance) pv_service.pyvmomi_disconnect = Mock() @@ -1178,7 +1172,7 @@ def test_disconnect(self): def test_get_network_by_full_name(self): # arrange - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) si = create_autospec(spec=vim.ServiceInstance) default_network_full_name = 'Root/Folder/Folder2/Name' pv_service.find_network_by_name = Mock() @@ -1191,7 +1185,7 @@ def test_get_network_by_full_name(self): def test_destroy_vm(self): # arrange - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) pv_service.wait_for_task = Mock() vm = Mock() vm.runtime = Mock() @@ -1208,7 +1202,7 @@ def test_destroy_vm(self): def test_vm_get_network_by_name(self): # Arrange - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) pv_service.wait_for_task = Mock() network = Mock() @@ -1238,7 +1232,7 @@ def test_vm_get_network_by_name(self): def test_vm_get_network_by_name_1(self): # Arrange - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) pv_service.wait_for_task = Mock() network = Mock() @@ -1268,7 +1262,7 @@ def test_vm_get_network_by_name_1(self): def test_get_snapshot_no_snapshot_param(self): # Arrange - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) pv_service.wait_for_task = Mock() # Act @@ -1279,7 +1273,7 @@ def test_get_snapshot_no_snapshot_param(self): def test_get_snapshot_snapshot_not_found(self): # Arrange - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) pv_service.wait_for_task = Mock() params = Mock() @@ -1294,7 +1288,7 @@ def test_get_snapshot_snapshot_not_found(self): def test_get_snapshot_snapshot_has_no_root(self): # Arrange - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) pv_service.wait_for_task = Mock() params = Mock() @@ -1309,7 +1303,7 @@ def test_get_snapshot_snapshot_has_no_root(self): def test_get_snapshot_snapshot(self): # Arrange - pv_service = pyVmomiService(None, None) + pv_service = pyVmomiService(None, None, Mock()) pv_service.wait_for_task = Mock() params = Mock() diff --git a/package/cloudshell/tests/test_network/vnic/test_network_vnic.py b/package/cloudshell/tests/test_network/vnic/test_network_vnic.py index 9e21b45f..c7227b0c 100644 --- a/package/cloudshell/tests/test_network/vnic/test_network_vnic.py +++ b/package/cloudshell/tests/test_network/vnic/test_network_vnic.py @@ -16,7 +16,7 @@ def test_vnic_reconfig_task(self): vm = Mock() vm.ReconfigVM_Task = lambda x: isinstance(x, vim.vm.ConfigSpec) - api_wrapper = pyVmomiService(Mock, Mock()) + api_wrapper = pyVmomiService(Mock, Mock(), Mock()) res = api_wrapper.vm_reconfig_task(vm, []) self.assertTrue(res)