Raise Not Authorized Exception when connection request is forbidden

Currently it logs IncompatibleOneViewAPIVersion which confuses
users to assume it is version issue. It can be wrong request
call.

Change-Id: I0bd69a9173d7318bb9e06a38ba54c043f9198b30
Closes-Bug: 1603928
This commit is contained in:
Lokesh S 2016-07-18 10:19:37 +00:00 committed by Thiago Paiva
parent 2100accffd
commit 8c976721ca
2 changed files with 90 additions and 10 deletions

View File

@ -129,13 +129,12 @@ class BaseClient(object):
verify_ssl = self._get_verify_connection_option()
try:
versions = requests.get(
url, headers=headers, verify=verify_ssl
).json()
return versions
except requests.RequestException as e:
raise exceptions.OneViewConnectionError(e.message)
response = requests.get(
url, headers=headers, verify=verify_ssl
)
_check_request_status(response)
versions = response.json()
return versions
# --- Requests ---
def _prepare_and_do_request(
@ -655,8 +654,9 @@ def _check_request_status(response):
repeat = False
status = response.status_code
if status == 401:
raise exceptions.OneViewNotAuthorizedException()
if status in (401, 403):
error_code = response.json().get('errorCode')
raise exceptions.OneViewNotAuthorizedException(error_code)
elif status == 404:
raise exceptions.OneViewResourceNotFoundError()
elif status in (408, 409,):

View File

@ -916,7 +916,8 @@ class OneViewClientTestCase(unittest.TestCase):
mock_get_oneview_version.assert_called_once_with()
@mock.patch.object(client.Client, 'get_oneview_version')
def test_verify_oneview_version_fail(self, mock_get_oneview_version):
def test_verify_oneview_version_under_supported(self,
mock_get_oneview_version):
mock_get_oneview_version.return_value = {
'minimumVersion': 120,
'currentVersion': 120
@ -926,6 +927,85 @@ class OneViewClientTestCase(unittest.TestCase):
self.oneview_client.verify_oneview_version
)
@mock.patch.object(client.Client, 'get_oneview_version')
def test_verify_oneview_version_within_supported(
self,
mock_get_oneview_version
):
mock_get_oneview_version.return_value = {
'minimumVersion': 120,
'currentVersion': 300
}
self.oneview_client.verify_oneview_version()
mock_get_oneview_version.assert_called_once_with()
@mock.patch.object(client.Client, 'get_oneview_version')
def test_verify_oneview_version_within_supported2(
self,
mock_get_oneview_version
):
mock_get_oneview_version.return_value = {
'minimumVersion': 200,
'currentVersion': 300
}
self.oneview_client.verify_oneview_version()
mock_get_oneview_version.assert_called_once_with()
@mock.patch.object(client.Client, 'get_oneview_version')
def test_verify_oneview_version_over_supported(self,
mock_get_oneview_version):
mock_get_oneview_version.return_value = {
'minimumVersion': 300,
'currentVersion': 400
}
self.assertRaises(
exceptions.IncompatibleOneViewAPIVersion,
self.oneview_client.verify_oneview_version
)
@mock.patch.object(client.Client, 'get_oneview_version')
def test_verify_oneview_version_not_authorized(self,
mock_get_oneview_version):
mock_get_oneview_version.side_effect = [
exceptions.OneViewNotAuthorizedException
]
self.assertRaises(
exceptions.OneViewNotAuthorizedException,
self.oneview_client.verify_oneview_version
)
@mock.patch.object(requests, 'get')
def test_get_oneview_version_forbidden_with_json(self, mock_get):
response = mock_get.return_value
response.status_code = http_client.FORBIDDEN
response.json.return_value = {
'errorSource': None,
'recommendedActions': [
'Check the request URI, then resend the request.'
],
'nestedErrors': [],
'errorCode': 'GENERIC_HTTP_403',
'details': 'You are not allowed to access the requested resource.',
'message': 'Forbidden',
'data': {}
}
mock_get.return_value = response
self.assertRaises(
exceptions.OneViewNotAuthorizedException,
self.oneview_client.get_oneview_version
)
@mock.patch.object(requests, 'get')
def test_get_oneview_version_forbidden_without_json(self, mock_get):
response = mock_get.return_value
response.status_code = http_client.FORBIDDEN
mock_get.return_value = response
self.assertRaises(
exceptions.OneViewNotAuthorizedException,
self.oneview_client.get_oneview_version
)
@mock.patch.object(client.Client, 'get_server_profile_from_hardware')
def test_is_mac_compatible_with_server_profile(
self, mock_get_server_profile_from_hardware