コード例 #1
0
    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)
コード例 #2
0
    def test_find_item_in_path_by_type_complex_path(self):
        """
        Checks whether the function can grab object by uuid
        """
        '#arrange'

        class counter:
            i = 0

        def side_eff(*args, **kwargs):
            if counter.i != 1:
                counter.i = counter.i + 1
                return 'not yet'
            else:
                counter.i = counter.i + 1
                return Mock(spec=vim.Datacenter)

        pv_service = pyVmomiService(None, None, Mock())

        si = create_autospec(spec=vim.ServiceInstance)
        si.RetrieveContent = Mock()
        si.content = create_autospec(spec=vim.ServiceInstanceContent())

        si.content.searchIndex = Mock()
        si.content.rootFolder = Mock()
        si.content.searchIndex.FindChild = Mock(side_effect=side_eff)

        '#act'
        result = pv_service.find_item_in_path_by_type(si, 'test//dc/asd',
                                                      vim.Datacenter)

        '#assert'
        self.assertTrue(isinstance(result, vim.Datacenter))
        self.assertTrue(counter.i, 1)
コード例 #3
0
    def test_destroy_vm_by_uuid(self):
        """
        Checks whether the vm found and call to be destroy
        """
        '#arrange'
        pv_service = pyVmomiService(None, None, Mock())

        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=si,
            vm_uuid='thisuni-vers-ally-uniq-ueidentifier',
            vm_path='fake/path',
            logger=Mock())

        '#assert'
        self.assertTrue(result)
        self.assertTrue(pv_service.find_by_uuid.called)
        self.assertTrue(pv_service.destroy_vm.called)
コード例 #4
0
    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, Mock())

        dc = Mock(spec=vim.Datacenter)
        pv_service.find_item_in_path_by_type = Mock(return_value=dc)

        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(
            return_value='b8e4da4e-a2ff-11e5-bf7f-feff819cdc9f')

        '#act'
        result = pv_service.find_by_uuid(
            si, 'b8e4da4e-a2ff-11e5-bf7f-feff819cdc9f', True, 'path/path/path')

        '#assert'
        self.assertTrue(result)
        self.assertTrue(
            pv_service.find_item_in_path_by_type.called_with(
                si, 'path/path/path', vim.Datacenter))
コード例 #5
0
    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)
コード例 #6
0
    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, Mock())

        si = create_autospec(spec=vim.ServiceInstance)
        si.RetrieveContent = Mock()
        si.content = create_autospec(spec=vim.ServiceInstanceContent())

        '#act'
        result = pv_service.find_by_uuid(si, None)

        '#assert'
        self.assertIsNone(result)
コード例 #7
0
    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, Mock())

        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'
        self.assertRaises(ValueError, pv_service.find_obj_by_path, si, '', '',
                          '')
コード例 #8
0
    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, Mock())

        si = create_autospec(spec=vim.ServiceInstance)
        si.RetrieveContent = Mock()
        si.content = create_autospec(spec=vim.ServiceInstanceContent())

        si.content.searchIndex = Mock()
        si.content.rootFolder = Mock

        '#act'
        result = pv_service.find_item_in_path_by_type(si, None, 'not none')

        '#assert'
        self.assertEqual(result, si.content.rootFolder)
コード例 #9
0
    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)
コード例 #10
0
    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)
コード例 #11
0
    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)
コード例 #12
0
    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)
コード例 #13
0
    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)
コード例 #14
0
    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, Mock())

        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'
        self.assertRaises(ValueError, pv_service.find_obj_by_path, si,
                          'nothing/to/be/found', 'fake_vm', pv_service.VM)

        '#assert'
        self.assertTrue(pv_service.get_folder.called)