def _get_exception_type(expected_error_code=_DEFAULT_ERROR_CODE): """Dynamically calculate the expected exception to be caught. Dynamically calculate the expected exception to be caught by the test case. Only ``Forbidden`` and ``NotFound`` exceptions are permitted. ``NotFound`` is supported because Neutron, for security reasons, masks ``Forbidden`` exceptions as ``NotFound`` exceptions. :param expected_error_code: the integer representation of the expected exception to be caught. Must be contained in ``_SUPPORTED_ERROR_CODES``. :returns: tuple of the exception type corresponding to ``expected_error_code`` and a message explaining that a non-Forbidden exception was expected, if applicable. """ expected_exception = None irregular_msg = None if not isinstance(expected_error_code, six.integer_types) \ or expected_error_code not in _SUPPORTED_ERROR_CODES: msg = ("Please pass an expected error code. Currently " "supported codes: {0}".format(_SUPPORTED_ERROR_CODES)) LOG.error(msg) raise rbac_exceptions.RbacInvalidErrorCode(msg) if expected_error_code == 403: expected_exception = lib_exc.Forbidden elif expected_error_code == 404: expected_exception = lib_exc.NotFound irregular_msg = ("NotFound exception was caught for test %s. Expected " "policies which may have caused the error: %s. The " "service %s throws a 404 instead of a 403, which is " "irregular") return expected_exception, irregular_msg
def _get_exception_type(expected_error_code): expected_exception = None irregular_msg = None supported_error_codes = [403, 404] if expected_error_code == 403: expected_exception = exceptions.Forbidden elif expected_error_code == 404: expected_exception = exceptions.NotFound irregular_msg = ("NotFound exception was caught for policy action " "{0}. The service {1} throws a 404 instead of a 403, " "which is irregular.") else: msg = ("Please pass an expected error code. Currently " "supported codes: {0}".format(str(supported_error_codes))) LOG.error(msg) raise rbac_exceptions.RbacInvalidErrorCode() return expected_exception, irregular_msg