diff --git a/test/test_ims.py b/test/test_ims.py index 67c4513bad3a90de8fa2121a631af8f3be087f84..c9501dfe303003a6d50b9aa373de292409d98152 100644 --- a/test/test_ims.py +++ b/test/test_ims.py @@ -5,6 +5,152 @@ from inventory_provider.db.ims import InventoryStatus from inventory_provider.db.ims_data import lookup_lg_routers, lookup_pop_info +class MockResponse: + def __init__(self, json_data, status_code): + self.json_data = json_data + self.status_code = status_code + + 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) + + 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': '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': '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': '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')) + mock_get.assert_called_once_with( + 'dummy_base/ims/Node/filtered/dummy_param=dummy value', + headers={'Authorization': 'dummy_bt'}, + params={ + 'paginatorStartElement': 0, + 'paginatorNumberOfElements': + inventory_provider.db.ims.IMS.NO_OF_ELEMENTS_PER_ITERATION + }) + + inventory_provider.db.ims.IMS.NO_OF_ELEMENTS_PER_ITERATION = 2 + + 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')) + mock_multi_get.assert_any_call( + 'dummy_base/ims/Node/filtered/dummy_param=dummy value', + headers={'Authorization': 'dummy_bt'}, + params={ + 'paginatorStartElement': 0, + 'paginatorNumberOfElements': 2 + }) + mock_multi_get.assert_any_call( + 'dummy_base/ims/Node/filtered/dummy_param=dummy value', + headers={'Authorization': 'dummy_bt'}, + params={ + 'paginatorStartElement': 2, + 'paginatorNumberOfElements': 2 + }) + assert mock_multi_get.call_count == 2 + assert res == [1, 2, 3] + + +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')) + mock_get.assert_called_once_with( + 'dummy_base/ims/Node/filtered/Id <> 0', + headers={'Authorization': 'dummy_bt'}, + params={ + 'paginatorStartElement': 0, + 'paginatorNumberOfElements': + inventory_provider.db.ims.IMS.NO_OF_ELEMENTS_PER_ITERATION + }) + + +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': '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 + + def test_lookup_lg_routers(mocker): ims = mocker.patch('inventory_provider.db.ims.IMS')