def validate_response(cls, schema, resp, body): # Only check the response if the status code is a success code # TODO(cyeoh): Eventually we should be able to verify that a failure # code if it exists is something that we expect. This is explicitly # declared in the V3 API and so we should be able to export this in # the response schema. For now we'll ignore it. if resp.status in HTTP_SUCCESS: response_code = schema['status_code'] if resp.status not in response_code: msg = ("The status code(%s) is different than the expected " "one(%s)") % (resp.status, response_code) raise exceptions.InvalidHttpSuccessCode(msg) # Check the body of a response body_schema = schema.get('response_body') if body_schema: try: jsonschema.validate(body, body_schema) except jsonschema.ValidationError as ex: msg = ("HTTP response body is invalid (%s)") % ex raise exceptions.InvalidHTTPResponseBody(msg) else: if body: msg = ("HTTP response body should not exist (%s)") % body raise exceptions.InvalidHTTPResponseBody(msg) # Check the header of a response header_schema = schema.get('response_header') if header_schema: try: jsonschema.validate(resp, header_schema) except jsonschema.ValidationError as ex: msg = ("HTTP response header is invalid (%s)") % ex raise exceptions.InvalidHTTPResponseHeader(msg)
def assert_version_header_matches_request(api_microversion_header_name, api_microversion, response_header): """Checks API microversion in resposne header Verify whether microversion is present in response header and with specified 'api_microversion' value. @param: api_microversion_header_name: Microversion header name Example- "X-OpenStack-Nova-API-Version" @param: api_microversion: Microversion number like "2.10" @param: response_header: Response header where microversion is expected to be present. """ api_microversion_header_name = api_microversion_header_name.lower() if (api_microversion_header_name not in response_header or api_microversion != response_header[api_microversion_header_name]): msg = ( "Microversion header '%s' with value '%s' does not match in " "response - %s. " % (api_microversion_header_name, api_microversion, response_header)) raise exceptions.InvalidHTTPResponseHeader(msg)