Skip to content
Snippets Groups Projects
Commit 27eb6176 authored by Robert Latta's avatar Robert Latta
Browse files

added verify_option to allow querying of lab IMS

parent 29ce408b
Branches
Tags
No related merge requests found
......@@ -36,7 +36,8 @@ CONFIG_SCHEMA = {
'properties': {
'api': {'type': 'string'},
'username': {'type': 'string'},
'password': {'type': 'string'}
'password': {'type': 'string'},
'verify-ssl': {'type': 'boolean'},
},
'required': ['api', 'username', 'password'],
'additionalProperties': False
......
......@@ -199,14 +199,16 @@ class IMS(object):
bearer_token_init_time = 0
reconnect_attempts = 0
def __init__(self, base_url, username, password, bearer_token=None):
def __init__(self, base_url, username, password, bearer_token=None,
verify_ssl=True):
IMS.base_url = base_url
self.username = username
self.password = password
self.verify_ssl = verify_ssl
IMS.bearer_token = bearer_token
@classmethod
def _init_bearer_token(cls, username, password):
def _init_bearer_token(cls, username, password, verify_ssl=True):
re_init_time = time.time()
if not cls.bearer_token or \
re_init_time - cls.bearer_token_init_time \
......@@ -221,7 +223,7 @@ class IMS(object):
f' - URL: {cls.base_url + cls.LOGIN_PATH}')
response = requests.post(
cls.base_url + cls.LOGIN_PATH,
auth=(username, password))
auth=(username, password), verify=verify_ssl)
response.raise_for_status()
cls.bearer_token_init_time = re_init_time
cls.bearer_token = response.text
......@@ -233,7 +235,8 @@ class IMS(object):
logger.info('Clearing Dynamic Context Cache')
response = requests.put(
f'{self.base_url + IMS.IMS_PATH}/ClearDynamicContextCache',
headers={'Authorization': f'Bearer {self.bearer_token}'})
headers={'Authorization': f'Bearer {self.bearer_token}'},
verify=self.verify_ssl)
if response.status_code == 401:
IMS._init_bearer_token(self.username, self.password)
continue
......@@ -310,7 +313,7 @@ class IMS(object):
response = requests.get(
url,
headers={'Authorization': f'Bearer {self.bearer_token}'},
params=params)
params=params, verify=self.verify_ssl)
if _is_invalid_login_state(response):
IMS._init_bearer_token(self.username, self.password)
else:
......
......@@ -763,10 +763,12 @@ def extract_ims_data():
return _extract_ims_data(
ims_api_url=c['api'],
ims_username=c['username'],
ims_password=c['password'])
ims_password=c['password'],
verify_ssl=c.get('verify-ssl', True)
)
def _extract_ims_data(ims_api_url, ims_username, ims_password):
def _extract_ims_data(ims_api_url, ims_username, ims_password, verify_ssl):
"""
convenient entry point for testing ...
......@@ -777,7 +779,7 @@ def _extract_ims_data(ims_api_url, ims_username, ims_password):
"""
def _ds() -> IMS:
return IMS(ims_api_url, ims_username, ims_password)
return IMS(ims_api_url, ims_username, ims_password, verify_ssl)
_ds().clear_dynamic_context_cache()
......
......@@ -27,11 +27,11 @@ def test_ims_class_login(mocker):
'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'))
'dummy_base/login', auth=('dummy_username', 'dummy_password'), verify=True)
mock_get.assert_called_once_with(
'dummy_base/ims/Node/1234',
headers={'Authorization': 'Bearer my_bearer_token'},
params=None)
params=None, verify=True)
def test_ims_failed_response(mocker):
......@@ -60,7 +60,7 @@ def test_ims_class_entity_by_id(mocker):
mock_get.assert_called_once_with(
'dummy_base/ims/Node/1234',
headers={'Authorization': 'Bearer dummy_bt'},
params=None)
params=None, verify=True)
def test_ims_class_entity_by_name(mocker):
......@@ -72,7 +72,7 @@ def test_ims_class_entity_by_name(mocker):
mock_get.assert_called_once_with(
'dummy_base/ims/Node/byname/"dummy_name"',
headers={'Authorization': 'Bearer dummy_bt'},
params=None)
params=None, verify=True)
def test_ims_class_filtered_entities(mocker):
......@@ -88,7 +88,7 @@ def test_ims_class_filtered_entities(mocker):
params={
'paginatorStartElement': 0,
'paginatorNumberOfElements': 50
})
}, verify=True)
def side_effect(*args, **kargs):
if kargs['params']['paginatorStartElement'] == 0:
......@@ -106,14 +106,14 @@ def test_ims_class_filtered_entities(mocker):
params={
'paginatorStartElement': 0,
'paginatorNumberOfElements': 2
})
}, verify=True)
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
})
}, verify=True)
assert mock_multi_get.call_count == 2
assert res == [1, 2, 3]
......@@ -144,7 +144,7 @@ def test_ims_class_get_all_entities(mocker):
params={
'paginatorStartElement': 0,
'paginatorNumberOfElements': 10
})
}, verify=True)
def test_ims_class_navigation_properties(mocker):
......@@ -156,7 +156,7 @@ def test_ims_class_navigation_properties(mocker):
mock_get.assert_called_with(
'dummy_base/ims/Node/1234',
headers={'Authorization': 'Bearer dummy_bt'},
params={'navigationproperty': 6})
params={'navigationproperty': 6}, verify=True)
def test_ims_class_cache(mocker):
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment