Merge "Raise Not Authorized Exception when connection request is forbidden"

This commit is contained in:
Jenkins 2016-08-09 04:58:56 +00:00 committed by Gerrit Code Review
commit 57f2e99cce
2 changed files with 90 additions and 10 deletions

View File

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

View File

@ -940,7 +940,8 @@ class OneViewClientTestCase(unittest.TestCase):
mock_get_oneview_version.assert_called_once_with() mock_get_oneview_version.assert_called_once_with()
@mock.patch.object(client.Client, 'get_oneview_version') @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 = { mock_get_oneview_version.return_value = {
'minimumVersion': 120, 'minimumVersion': 120,
'currentVersion': 120 'currentVersion': 120
@ -950,6 +951,85 @@ class OneViewClientTestCase(unittest.TestCase):
self.oneview_client.verify_oneview_version 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') @mock.patch.object(client.Client, 'get_server_profile_from_hardware')
def test_is_mac_compatible_with_server_profile( def test_is_mac_compatible_with_server_profile(
self, mock_get_server_profile_from_hardware self, mock_get_server_profile_from_hardware