Skip to content
Snippets Groups Projects
Select Git revision
  • df58eef660b4b67efbe351571d9b9d79f96956be
  • develop default
  • feature/DBOARD3-1156-move-whois/nren-naming-to-inventory-update
  • master protected
  • inventoryProvider-functional
  • inventoryProvider-morework2
  • circuit-service-details-fix
  • lookup-SPECTRUM-SCHF-ports
  • inventoryProvider-1267-cleanup
  • inventoryProvider-moreWork
  • feature/DBOARD3-958
  • release/0.110
  • fix-uuid-validation-error
  • docker-poc
  • 0.152
  • 0.151
  • 0.150
  • 0.149
  • 0.148
  • 0.147
  • 0.146
  • 0.145
  • 0.144
  • 0.143
  • 0.142
  • 0.141
  • 0.140
  • 0.139
  • 0.138
  • 0.137
  • 0.136
  • 0.135
  • 0.134
  • 0.133
34 results

test_ims.py

Blame
  • test_ims.py 5.72 KiB
    from requests import HTTPError
    
    import inventory_provider
    
    
    class MockResponse:
        def __init__(self, json_data, status_code):
            self.json_data = json_data
            self.status_code = status_code
            self.text = '' if json_data else 'No records found for Entity:XXXXX'
    
        def json(self):
            return self.json_data
    
        def raise_for_status(self):
            pass
    
    
    def test_ims_class_login(mocker):
        mock_post = mocker.patch('inventory_provider.db.ims.requests.post')
        mock_get = mocker.patch('inventory_provider.db.ims.requests.get')
        mock_post.return_value = MockResponse("my_bearer_token", 200)
        mock_post.return_value.text = "my_bearer_token"
    
        ds = inventory_provider.db.ims.IMS(
            'dummy_base', 'dummy_username', 'dummy_password')
        ds.get_entity_by_id('Node', 1234)
        mock_post.assert_called_once_with(
            'dummy_base/login', auth=('dummy_username', 'dummy_password'))
        mock_get.assert_called_once_with(
            'dummy_base/ims/Node/1234',
            headers={'Authorization': 'Bearer my_bearer_token'},
            params=None)
    
    
    def test_ims_class_entity_by_id(mocker):
        mock_get = mocker.patch('inventory_provider.db.ims.requests.get')
        ds = inventory_provider.db.ims.IMS(
            'dummy_base', 'dummy_username', 'dummy_password', 'dummy_bt')
    
        ds.get_entity_by_id('Node', 1234)
        mock_get.assert_called_once_with(
            'dummy_base/ims/Node/1234',
            headers={'Authorization': 'Bearer dummy_bt'},
            params=None)
    
    
    def test_ims_class_entity_by_name(mocker):
        mock_get = mocker.patch('inventory_provider.db.ims.requests.get')
        ds = inventory_provider.db.ims.IMS(
            'dummy_base', 'dummy_username', 'dummy_password', 'dummy_bt')
    
        ds.get_entity_by_name('Node', 'dummy_name')
        mock_get.assert_called_once_with(
            'dummy_base/ims/Node/byname/"dummy_name"',
            headers={'Authorization': 'Bearer dummy_bt'},
            params=None)
    
    
    def test_ims_class_filtered_entities(mocker):
        mock_get = mocker.patch('inventory_provider.db.ims.requests.get')
        ds = inventory_provider.db.ims.IMS(
            'dummy_base', 'dummy_username', 'dummy_password', 'dummy_bt')
    
        list(ds.get_filtered_entities(
            'Node', 'dummy_param=dummy value', step_count=50))
        mock_get.assert_called_once_with(
            'dummy_base/ims/Node/filtered/dummy_param=dummy value',
            headers={'Authorization': 'Bearer dummy_bt'},
            params={
                'paginatorStartElement': 0,
                'paginatorNumberOfElements': 50
            })
    
        def side_effect(*args, **kargs):
            if kargs['params']['paginatorStartElement'] == 0:
                return MockResponse([1, 2], 200)
            return MockResponse([3], 200)
    
        mock_multi_get = mocker.patch(
            'inventory_provider.db.ims.requests.get', side_effect=side_effect)
    
        res = list(ds.get_filtered_entities(
            'Node', 'dummy_param=dummy value', step_count=2))
        mock_multi_get.assert_any_call(
            'dummy_base/ims/Node/filtered/dummy_param=dummy value',
            headers={'Authorization': 'Bearer dummy_bt'},
            params={
                'paginatorStartElement': 0,
                'paginatorNumberOfElements': 2
            })
        mock_multi_get.assert_any_call(
            'dummy_base/ims/Node/filtered/dummy_param=dummy value',
            headers={'Authorization': 'Bearer dummy_bt'},
            params={
                'paginatorStartElement': 2,
                'paginatorNumberOfElements': 2
            })
        assert mock_multi_get.call_count == 2
        assert res == [1, 2, 3]
    
        def side_effect_no_recs(*args, **kargs):
            if kargs['params']['paginatorStartElement'] == 0:
                return MockResponse([1, 2], 200)
            e = HTTPError()
            e.response = MockResponse('', 404)
            raise e
    
        mocker.patch('inventory_provider.db.ims.requests.get',
                     side_effect=side_effect_no_recs)
    
        res = list(ds.get_filtered_entities(
            'Node', 'dummy_param=dummy value', step_count=2))
        assert res == [1, 2]
    
    
    def test_ims_class_get_all_entities(mocker):
        mock_get = mocker.patch('inventory_provider.db.ims.requests.get')
        ds = inventory_provider.db.ims.IMS(
            'dummy_base', 'dummy_username', 'dummy_password', 'dummy_bt')
    
        list(ds.get_all_entities('Node', step_count=10))
        mock_get.assert_called_once_with(
            'dummy_base/ims/Node/filtered/Id <> 0',
            headers={'Authorization': 'Bearer dummy_bt'},
            params={
                'paginatorStartElement': 0,
                'paginatorNumberOfElements': 10
            })
    
    
    def test_ims_class_navigation_properties(mocker):
        mock_get = mocker.patch('inventory_provider.db.ims.requests.get')
        ds = inventory_provider.db.ims.IMS(
            'dummy_base', 'dummy_username', 'dummy_password', 'dummy_bt')
    
        ds.get_entity_by_id('Node', 1234, navigation_properties=[1, 2, 3])
        mock_get.assert_called_with(
            'dummy_base/ims/Node/1234',
            headers={'Authorization': 'Bearer dummy_bt'},
            params={'navigationproperty': 6})
    
    
    def test_ims_class_cache(mocker):
        mock_get = mocker.patch('inventory_provider.db.ims.requests.get')
        ds = inventory_provider.db.ims.IMS(
            'dummy_base', 'dummy_username', 'dummy_password', 'dummy_bt')
    
        ds.get_entity_by_id(
            'Node', 4567, navigation_properties=[1, 2, 3, 4], use_cache=True)
        assert mock_get.call_count == 1
        ds.get_entity_by_id(
            'Node', 4567, navigation_properties=[1, 2, 3, 4], use_cache=True)
        assert mock_get.call_count == 1
        ds.get_entity_by_id(
            'Node', 4567, navigation_properties=[1, 2, 3, 4], use_cache=False)
        assert mock_get.call_count == 2
        ds.get_entity_by_id(
            'Node', 4567, navigation_properties=[1, 2, 3, 4])
        assert mock_get.call_count == 3
        ds.get_entity_by_id(
            'Node', 4567, navigation_properties=[1, 2, 3, 4, 5], use_cache=True)
        assert mock_get.call_count == 4