def test_get_object_by_path_checks_childEntity(self): """ Checks whether the function can grab from child entities """ '#arrange' pv_service = pyVmomiService(None, None) def search_child(*args, **keys): if args[0].name == pv_service.ChildEntity: return True return False class FolderMock: childEntity = None folder = Mock(spec=FolderMock()) folder.name = pv_service.ChildEntity get_folder = MagicMock(return_value=folder) pv_service.get_folder = get_folder si = create_autospec(spec=vim.ServiceInstance) si.RetrieveContent = Mock() si.content = create_autospec(spec=vim.ServiceInstanceContent()) si.content.searchIndex = Mock() si.content.searchIndex.FindChild = MagicMock(side_effect=search_child) '#act' result = pv_service.find_obj_by_path(si, '', '', '') '#assert' self.assertTrue(result)
def integration_clone_vm_destory(self): """ Checks whether clone_vm and destroy methods works """ '#arrange' cred = TestCredentials() pv_service = pyVmomiService(SmartConnect, Disconnect) si = pv_service.connect(cred.host, cred.username, cred.password) params = pv_service.CloneVmParameters(si=si, template_name='DC0_C0_RP0_VM20', vm_name='my_clone', vm_folder='DC0') '#act' now = datetime.now() res = pv_service.clone_vm(params) print 'clone took: %s' % (str(datetime.now() - now)) '#assert' self.assertTrue(type(res.vm), vim.VirtualMachine) '#tear down' now = datetime.now() if res.error is None and res.vm is not None: destroyed = pv_service.destroy_vm(res.vm) print 'destroy took: %s' % (str(datetime.now() - now)) self.assertIsNone(destroyed)
def integration_clone_vm_destory(self): """ Checks whether clone_vm and destroy methods works """ "#arrange" cred = TestCredentials() pv_service = pyVmomiService(SmartConnect, Disconnect) si = pv_service.connect(cred.host, cred.username, cred.password) params = pv_service.CloneVmParameters( si=si, template_name="DC0_C0_RP0_VM20", vm_name="my_clone", vm_folder="DC0" ) "#act" now = datetime.now() res = pv_service.clone_vm(params) print "clone took: %s" % (str(datetime.now() - now)) "#assert" self.assertTrue(type(res.vm), vim.VirtualMachine) "#tear down" now = datetime.now() if res.error is None and res.vm is not None: destroyed = pv_service.destroy_vm(res.vm) print "destroy took: %s" % (str(datetime.now() - now)) self.assertIsNone(destroyed)
def test_get_object_by_path_checks_childEntity(self): """ Checks whether the function can grab from child entities """ "#arrange" pv_service = pyVmomiService(None, None) def search_child(*args, **keys): if args[0].name == pv_service.ChildEntity: return True return False class FolderMock: childEntity = None folder = Mock(spec=FolderMock()) folder.name = pv_service.ChildEntity get_folder = MagicMock(return_value=folder) pv_service.get_folder = get_folder si = create_autospec(spec=vim.ServiceInstance) si.RetrieveContent = Mock() si.content = create_autospec(spec=vim.ServiceInstanceContent()) si.content.searchIndex = Mock() si.content.searchIndex.FindChild = MagicMock(side_effect=search_child) "#act" result = pv_service.find_obj_by_path(si, "", "", "") "#assert" self.assertTrue(result)
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) def find_child_mock(*args): root = args[0] if hasattr(root, pv_service.ChildEntity): for folder in root.childEntity: if folder.name == args[1]: return folder else: for folder in root: if folder.name == args[1]: return folder return None si = create_autospec(spec=vim.ServiceInstance) si.RetrieveContent = Mock() si.content = create_autospec(spec=vim.ServiceInstanceContent()) si.content.searchIndex = Mock() si.content.searchIndex.FindChild = MagicMock( side_effect=find_child_mock) first_folder = Mock(spec=[], name='first') first_folder.name = 'first' second_folder = Mock(spec=[], name='second') second_folder.name = 'second' third_folder = Mock(spec=[], name='third') third_folder.name = 'third' fourth_folder = Mock(spec=[], name='fourth') fourth_folder.name = 'fourth' fifth_folder = Mock(spec=[], name='fifth') fifth_folder.name = 'fifth' sixth_folder = Mock(spec=[], name='sixth') sixth_folder.name = 'sixth' si.content.rootFolder = Mock() si.content.rootFolder.name = 'rootFolder' si.content.rootFolder.childEntity = [first_folder, second_folder] first_folder.vmFolder = [second_folder, sixth_folder] second_folder.networkFolder = [fourth_folder, third_folder] third_folder.hostFolder = [third_folder, fourth_folder] fourth_folder.datacenterFolder = [fifth_folder] fifth_folder.datastoreFolder = [sixth_folder] '#act' result = pv_service.get_folder( si, 'first/second/third/fourth/fifth/sixth') '#assert' self.assertEqual(result, sixth_folder)
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) def find_child_mock(*args): root = args[0] if hasattr(root, pv_service.ChildEntity): for folder in root.childEntity: if folder.name == args[1]: return folder else: for folder in root: if folder.name == args[1]: return folder return None si = create_autospec(spec=vim.ServiceInstance) si.RetrieveContent = Mock() si.content = create_autospec(spec=vim.ServiceInstanceContent()) si.content.searchIndex = Mock() si.content.searchIndex.FindChild = MagicMock(side_effect=find_child_mock) first_folder = Mock(spec=[], name="first") first_folder.name = "first" second_folder = Mock(spec=[], name="second") second_folder.name = "second" third_folder = Mock(spec=[], name="third") third_folder.name = "third" fourth_folder = Mock(spec=[], name="fourth") fourth_folder.name = "fourth" fifth_folder = Mock(spec=[], name="fifth") fifth_folder.name = "fifth" sixth_folder = Mock(spec=[], name="sixth") sixth_folder.name = "sixth" si.content.rootFolder = Mock() si.content.rootFolder.name = "rootFolder" si.content.rootFolder.childEntity = [first_folder, second_folder] first_folder.vmFolder = [second_folder, sixth_folder] second_folder.networkFolder = [fourth_folder, third_folder] third_folder.hostFolder = [third_folder, fourth_folder] fourth_folder.datacenterFolder = [fifth_folder] fifth_folder.datastoreFolder = [sixth_folder] "#act" result = pv_service.get_folder(si, "first/second/third/fourth/fifth/sixth") "#assert" self.assertEqual(result, sixth_folder)
def test_clone_vm_si_is_none(self): """ Checks clone_vm """ "#arrange" pv_service = pyVmomiService(None, None) params = pv_service.CloneVmParameters(si=None, template_name=None, vm_name=None, vm_folder=None) "#act" res = pv_service.clone_vm(params) "#assert" self.assertTrue(res.error is not None)
def test_clone_vm_template_name_is_none(self): """ Checks clone_vm """ "#arrange" si = create_autospec(spec=vim.ServiceInstance) pv_service = pyVmomiService(None, None) params = pv_service.CloneVmParameters(si=si, template_name=None, vm_name=None, vm_folder=None) "#act" res = pv_service.clone_vm(params) "#assert" self.assertTrue(res.error is not None)
def test_clone_vm_si_is_none(self): """ Checks clone_vm """ '#arrange' pv_service = pyVmomiService(None, None) params = pv_service.CloneVmParameters(si=None, template_name=None, vm_name=None, vm_folder=None) '#act' res = pv_service.clone_vm(params) '#assert' self.assertTrue(res.error is not None)
def __init__(self): py_vmomi_service = pyVmomiService(SmartConnect, Disconnect) cloudshell_data_retriever_service = CloudshellDataRetrieverService() resource_connection_details_retriever = ResourceConnectionDetailsRetriever(cloudshell_data_retriever_service) network_adapter_retriever_command = NetworkAdaptersRetrieverCommand(py_vmomi_service, cloudshell_data_retriever_service, resource_connection_details_retriever) destroy_virtual_machine_command = DestroyVirtualMachineCommand(py_vmomi_service, cloudshell_data_retriever_service) deploy_from_template_command = DeployFromTemplateCommand(py_vmomi_service, cloudshell_data_retriever_service, resource_connection_details_retriever) self.commandExecuterService = CommandExecuterService(py_vmomi_service, network_adapter_retriever_command, destroy_virtual_machine_command, deploy_from_template_command)
def __init__(self): py_vmomi_service = pyVmomiService(SmartConnect, Disconnect) cloudshell_data_retriever_service = CloudshellDataRetrieverService() resource_connection_details_retriever = ResourceConnectionDetailsRetriever( cloudshell_data_retriever_service) network_adapter_retriever_command = NetworkAdaptersRetrieverCommand( py_vmomi_service, cloudshell_data_retriever_service, resource_connection_details_retriever) destroy_virtual_machine_command = DestroyVirtualMachineCommand( py_vmomi_service, cloudshell_data_retriever_service) deploy_from_template_command = DeployFromTemplateCommand( py_vmomi_service, cloudshell_data_retriever_service, resource_connection_details_retriever) self.commandExecuterService = CommandExecuterService( py_vmomi_service, network_adapter_retriever_command, destroy_virtual_machine_command, deploy_from_template_command)
def test_clone_vm_template_name_is_none(self): """ Checks clone_vm """ '#arrange' si = create_autospec(spec=vim.ServiceInstance) pv_service = pyVmomiService(None, None) params = pv_service.CloneVmParameters(si=si, template_name=None, vm_name=None, vm_folder=None) '#act' res = pv_service.clone_vm(params) '#assert' self.assertTrue(res.error is not None)
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) get_folder = MagicMock(return_value=Mock(spec=[])) pv_service.get_folder = get_folder si = create_autospec(spec=vim.ServiceInstance) si.RetrieveContent = Mock() si.content = create_autospec(spec=vim.ServiceInstanceContent()) '#act' result = pv_service.find_obj_by_path(si, '', '', '') '#assert' self.assertIsNone(result)
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) get_folder = MagicMock(return_value=Mock(spec=[])) pv_service.get_folder = get_folder si = create_autospec(spec=vim.ServiceInstance) si.RetrieveContent = Mock() si.content = create_autospec(spec=vim.ServiceInstanceContent()) "#act" result = pv_service.find_obj_by_path(si, "", "", "") "#assert" self.assertIsNone(result)
def test_get_folder_deep_path(self): """ Checks when path is deep, more then two """ '#arrange' pv_service = pyVmomiService(None, None) def find_child_mock(*args): root = args[0] for folder in root.childEntity: if folder.name == args[1]: return folder return None si = create_autospec(spec=vim.ServiceInstance) si.RetrieveContent = Mock() si.content = create_autospec(spec=vim.ServiceInstanceContent()) si.content.searchIndex = Mock() si.content.searchIndex.FindChild = MagicMock( side_effect=find_child_mock) inner_folder = Mock() inner_folder.name = 'inner' inner_decoy_folder = Mock() inner_decoy_folder.name = 'decoy' inner_deep_folder = Mock() inner_deep_folder.name = 'inner_deep_folder' inner_folder.childEntity = [inner_deep_folder, inner_decoy_folder] inner_decoy_folder.childEntity = [inner_folder] si.content.rootFolder = Mock() si.content.rootFolder.childEntity = [inner_decoy_folder, inner_folder] si.content.rootFolder.name = 'rootFolder' '#act' result = pv_service.get_folder(si, 'decoy/inner/inner_deep_folder/') '#assert' self.assertEqual(result, inner_deep_folder)
def test_clone_vm_resource_pool_is_not_empty(self): """ Checks clone_vm """ '#arrange' si = Mock(spec=vim.ServiceInstance) vim_mock = Mock() vim_mock.vm = Mock() vim_mock.vm.RelocateSpec = Mock() vim_mock.vm.CloneSpec = Mock() vim_mock.Datacenter = vim.Datacenter vim_mock.Datastore = vim.Datastore vim_mock.ServiceInstance = vim.ServiceInstance datacenter = Mock(spec=vim.Datacenter) template = Mock(spec=vim.VirtualMachine) template.datastore = [Mock()] pv_service = pyVmomiService(None, None, 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() params = pv_service.CloneVmParameters(si=si, template_name='my_temp', vm_name='my_name', vm_folder='my_folder', resource_pool='my_resource_pool') '#act' res = pv_service.clone_vm(params) '#assert' self.assertIsNone(res.error) self.assertTrue(vim_mock.vm.RelocateSpec.called) 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.get_obj.called) self.assertTrue(pv_service.wait_for_task.called)
def test_get_folder_deep_path(self): """ Checks when path is deep, more then two """ "#arrange" pv_service = pyVmomiService(None, None) def find_child_mock(*args): root = args[0] for folder in root.childEntity: if folder.name == args[1]: return folder return None si = create_autospec(spec=vim.ServiceInstance) si.RetrieveContent = Mock() si.content = create_autospec(spec=vim.ServiceInstanceContent()) si.content.searchIndex = Mock() si.content.searchIndex.FindChild = MagicMock(side_effect=find_child_mock) inner_folder = Mock() inner_folder.name = "inner" inner_decoy_folder = Mock() inner_decoy_folder.name = "decoy" inner_deep_folder = Mock() inner_deep_folder.name = "inner_deep_folder" inner_folder.childEntity = [inner_deep_folder, inner_decoy_folder] inner_decoy_folder.childEntity = [inner_folder] si.content.rootFolder = Mock() si.content.rootFolder.childEntity = [inner_decoy_folder, inner_folder] si.content.rootFolder.name = "rootFolder" "#act" result = pv_service.get_folder(si, "decoy/inner/inner_deep_folder/") "#assert" self.assertEqual(result, inner_deep_folder)
def test_get_folder_path_empty(self): """ Checks if the receiving path is empty, the function returns root folder """ "#arrange" folder_name = "rootFolder" pv_service = pyVmomiService(None, None) si = create_autospec(spec=vim.ServiceInstance) si.RetrieveContent = Mock() si.content = create_autospec(spec=vim.ServiceInstanceContent()) si.content.rootFolder = Mock() si.content.rootFolder.name = folder_name "#act" result = pv_service.get_folder(si, "") "#assert" self.assertEqual(result.name, folder_name)
def test_get_host_by_name_is_Host_type(self): """ Checks whether the function can passes host type """ '#arrange' pv_service = pyVmomiService(None, None) def find_obj_by_path_mock(*args, **kwargs): return args[3] == pv_service.Host si = create_autospec(spec=vim.ServiceInstance) si.RetrieveContent = Mock() si.content = create_autospec(spec=vim.ServiceInstanceContent()) pv_service.find_obj_by_path = Mock(side_effect=find_obj_by_path_mock) '#act' result = pv_service.find_host_by_name(si, '', '') '#assert' self.assertTrue(result)
def test_get_folder_path_empty(self): """ Checks if the receiving path is empty, the function returns root folder """ '#arrange' folder_name = 'rootFolder' pv_service = pyVmomiService(None, None) si = create_autospec(spec=vim.ServiceInstance) si.RetrieveContent = Mock() si.content = create_autospec(spec=vim.ServiceInstanceContent()) si.content.rootFolder = Mock() si.content.rootFolder.name = folder_name '#act' result = pv_service.get_folder(si, '') '#assert' self.assertEqual(result.name, folder_name)
def test_get_network_by_name_is_network_type(self): """ Checks whether the function can passes network type """ "#arrange" pv_service = pyVmomiService(None, None) def find_obj_by_path_mock(*args, **kwargs): return args[3] == pv_service.Network si = create_autospec(spec=vim.ServiceInstance) si.RetrieveContent = Mock() si.content = create_autospec(spec=vim.ServiceInstanceContent()) pv_service.find_obj_by_path = Mock(side_effect=find_obj_by_path_mock) "#act" result = pv_service.find_network_by_name(si, "", "") "#assert" self.assertTrue(result)
def test_get_vm_by_uuid_vm_in_folder(self): """ Checks whether the function can grab object by uuid """ '#arrange' pv_service = pyVmomiService(None, None) def find_by_uuid_mock(*args, **kwargs): folder = args[0]['vmFolder_test'] uuid = args[1] isVM = args[2] if not isVM: return False for item in folder: if item == uuid: return True return False get_folder = MagicMock( return_value={ 'vmFolder_test': [ 'b8e4d6de-a2ff-11e5-bf7f-feff819cdc9f', 'b8e4da4e-a2ff-11e5-bf7f-feff819cdc9f' ] }) pv_service.get_folder = get_folder si = create_autospec(spec=vim.ServiceInstance) si.RetrieveContent = Mock() si.content = create_autospec(spec=vim.ServiceInstanceContent()) si.content.searchIndex = Mock() si.content.searchIndex.FindByUuid = Mock(side_effect=find_by_uuid_mock) '#act' result = pv_service.find_by_uuid( si, '', 'b8e4da4e-a2ff-11e5-bf7f-feff819cdc9f') '#assert' self.assertTrue(result)
def test_destroy_vm_by_uuid(self): """ Checks whether the vm found and call to be destroy """ "#arrange" pv_service = pyVmomiService(None, None) si = create_autospec(spec=vim.ServiceInstance) si.RetrieveContent = Mock() si.content = create_autospec(spec=vim.ServiceInstanceContent()) si.content.searchIndex = Mock() pv_service.find_by_uuid = Mock(return_value=Mock(name="vm")) pv_service.destroy_vm = Mock(return_value=True) "#act" result = pv_service.destroy_vm_by_uuid(si, "thisuni-vers-ally-uniq-ueidentifier", "fake/path") "#assert" self.assertTrue(result) self.assertTrue(pv_service.find_by_uuid.called) self.assertTrue(pv_service.destroy_vm.called)
def test_clone_vm_resource_pool_is_not_empty(self): """ Checks clone_vm """ "#arrange" si = Mock(spec=vim.ServiceInstance) vim_mock = Mock() vim_mock.vm = Mock() vim_mock.vm.RelocateSpec = Mock() vim_mock.vm.CloneSpec = Mock() vim_mock.Datacenter = vim.Datacenter vim_mock.Datastore = vim.Datastore vim_mock.ServiceInstance = vim.ServiceInstance datacenter = Mock(spec=vim.Datacenter) template = Mock(spec=vim.VirtualMachine) template.datastore = [Mock()] pv_service = pyVmomiService(None, None, 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() params = pv_service.CloneVmParameters( si=si, template_name="my_temp", vm_name="my_name", vm_folder="my_folder", resource_pool="my_resource_pool" ) "#act" res = pv_service.clone_vm(params) "#assert" self.assertIsNone(res.error) self.assertTrue(vim_mock.vm.RelocateSpec.called) 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.get_obj.called) self.assertTrue(pv_service.wait_for_task.called)
def test_destroy_vm_by_name(self): """ Checks whether the vm found and call to be destroy """ '#arrange' pv_service = pyVmomiService(None, None) si = create_autospec(spec=vim.ServiceInstance) si.RetrieveContent = Mock() si.content = create_autospec(spec=vim.ServiceInstanceContent()) si.content.searchIndex = Mock() pv_service.find_vm_by_name = Mock(return_value=Mock(name='vm')) pv_service.destroy_vm = Mock(return_value=True) '#act' result = pv_service.destroy_vm_by_name(si, 'vm_name:name', 'fake/path') '#assert' self.assertTrue(result) self.assertTrue(pv_service.find_vm_by_name.called) self.assertTrue(pv_service.destroy_vm.called)
def test_get_vm_by_uuid_vm_in_folder(self): """ Checks whether the function can grab object by uuid """ "#arrange" pv_service = pyVmomiService(None, None) def find_by_uuid_mock(*args, **kwargs): folder = args[0]["vmFolder_test"] uuid = args[1] isVM = args[2] if not isVM: return False for item in folder: if item == uuid: return True return False get_folder = MagicMock( return_value={ "vmFolder_test": ["b8e4d6de-a2ff-11e5-bf7f-feff819cdc9f", "b8e4da4e-a2ff-11e5-bf7f-feff819cdc9f"] } ) pv_service.get_folder = get_folder si = create_autospec(spec=vim.ServiceInstance) si.RetrieveContent = Mock() si.content = create_autospec(spec=vim.ServiceInstanceContent()) si.content.searchIndex = Mock() si.content.searchIndex.FindByUuid = Mock(side_effect=find_by_uuid_mock) "#act" result = pv_service.find_by_uuid(si, "", "b8e4da4e-a2ff-11e5-bf7f-feff819cdc9f") "#assert" self.assertTrue(result)
def test_get_object_by_path_no_folder_found(self): """ Checks if the receiving path that does not exist """ "#arrange" folder_name = "rootFolder" pv_service = pyVmomiService(None, None) si = create_autospec(spec=vim.ServiceInstance) si.RetrieveContent = Mock() si.content = create_autospec(spec=vim.ServiceInstanceContent()) si.content.rootFolder = Mock() si.content.rootFolder.name = folder_name pv_service.get_folder = Mock(return_value=None) "#act" result = pv_service.find_obj_by_path(si, "nothing/to/be/found", "fake_vm", pv_service.VM) "#assert" self.assertIsNone(result) self.assertTrue(pv_service.get_folder.called)
def test_get_object_by_path_no_folder_found(self): """ Checks if the receiving path that does not exist """ '#arrange' folder_name = 'rootFolder' pv_service = pyVmomiService(None, None) si = create_autospec(spec=vim.ServiceInstance) si.RetrieveContent = Mock() si.content = create_autospec(spec=vim.ServiceInstanceContent()) si.content.rootFolder = Mock() si.content.rootFolder.name = folder_name pv_service.get_folder = Mock(return_value=None) '#act' result = pv_service.find_obj_by_path(si, 'nothing/to/be/found', 'fake_vm', pv_service.VM) '#assert' self.assertIsNone(result) self.assertTrue(pv_service.get_folder.called)