def test_should_contain1(self, requests): response = Response() response.status_code = 200 response._content = """ <CFRDOC> <AMDDATE>Jan 1, 2001</AMDDATE> <PARTS>Part 111 to 222</PARTS> </CFRDOC>""" response._content_consumed = True requests.get.return_value = response volume = annual.Volume(2001, 12, 2) self.assertFalse(volume.should_contain(1)) self.assertFalse(volume.should_contain(100)) self.assertFalse(volume.should_contain(300)) self.assertFalse(volume.should_contain(250)) self.assertTrue(volume.should_contain(111)) self.assertTrue(volume.should_contain(211)) self.assertTrue(volume.should_contain(222)) response._content = """ <CFRDOC> <AMDDATE>Jan 1, 2001</AMDDATE> <PARTS>Parts 587 to End</PARTS> </CFRDOC>""" response._content_consumed = True volume = annual.Volume(2001, 12, 2) self.assertFalse(volume.should_contain(111)) self.assertFalse(volume.should_contain(586)) self.assertTrue(volume.should_contain(587)) self.assertTrue(volume.should_contain(600)) self.assertTrue(volume.should_contain(999999))
def mock_send(method, status, headers=None, body=RESPONSE_BODY): if headers is None: headers = {} response = Response() response._content_consumed = True response._content = json.dumps(body).encode('ascii') if body is not None else None response.request = mock.create_autospec(Request) response.request.method = method response.request.url = RESOURCE_URL response.request.headers = { 'x-ms-client-request-id': '67f4dd4e-6262-45e1-8bed-5c45cf23b6d9' } response.status_code = status response.headers = headers response.headers.update({"content-type": "application/json; charset=utf8"}) response.reason = "OK" request = CLIENT._request( response.request.method, response.request.url, None, # params response.request.headers, body, None, # form_content None # stream_content ) return PipelineResponse( request, RequestsTransportResponse( request, response, ), None # context )
def mock_update(url, headers=None): response = Response() response._content_consumed = True response.request = mock.create_autospec(Request) response.request.method = 'GET' response.headers = headers or {} response.headers.update( {"content-type": "application/json; charset=utf8"}) response.reason = "OK" if url == ASYNC_URL: response.request.url = url response.status_code = POLLING_STATUS response._content = ASYNC_BODY.encode('ascii') response.randomFieldFromPollAsyncOpHeader = None elif url == LOCATION_URL: response.request.url = url response.status_code = POLLING_STATUS response._content = LOCATION_BODY.encode('ascii') response.randomFieldFromPollLocationHeader = None elif url == ERROR: raise BadEndpointError("boom") elif url == RESOURCE_URL: response.request.url = url response.status_code = POLLING_STATUS response._content = RESOURCE_BODY.encode('ascii') else: raise Exception('URL does not match') request = CLIENT._request( response.request.method, response.request.url, None, # params {}, # request has no headers None, # Request has no body None, # form_content None # stream_content ) return PipelineResponse( request, AsyncioRequestsTransportResponse( request, response, ), None # context )
def make_response( status_code: int = 200, content: bytes = b'', headers: dict = None, reason: str = None, encoding: str = None, ) -> Response: response = Response() response.status_code = status_code response._content = content response._content_consumed = True response.headers = CaseInsensitiveDict(headers or {}) response.encoding = encoding or get_encoding_from_headers(headers or {}) response.reason = reason return response
def mock_update(http_request, http_response, url, headers=None): response = Response() response._content_consumed = True response.request = mock.create_autospec(Request) response.request.method = 'GET' response.headers = headers or {} response.headers.update({"content-type": "application/json; charset=utf8"}) response.reason = "OK" if url == ASYNC_URL: response.request.url = url response.status_code = POLLING_STATUS response._content = ASYNC_BODY.encode('ascii') response.randomFieldFromPollAsyncOpHeader = None elif url == LOCATION_URL: response.request.url = url response.status_code = POLLING_STATUS response._content = LOCATION_BODY.encode('ascii') response.randomFieldFromPollLocationHeader = None elif url == ERROR: raise BadEndpointError("boom") elif url == RESOURCE_URL: response.request.url = url response.status_code = POLLING_STATUS response._content = RESOURCE_BODY.encode('ascii') else: raise Exception('URL does not match') request = http_request( response.request.method, response.request.url, ) response = create_transport_response(http_response, request, response) if is_rest(http_response): response.body() return PipelineResponse( request, response, None # context )
def side_effect(url, stream=False): response = Response() response.status_code = 200 response._content_consumed = True if 'bulkdata' in url: response._content = """ <CFRDOC> <AMDDATE>Jan 1, 2001</AMDDATE> <PARTS>Part 111 to 222</PARTS> %s %s </CFRDOC>""" % (pt111, pt112) elif url.endswith('part111.xml'): response._content = pt111 elif url.endswith('part112.xml'): response._content = pt112 else: response.status_code = 404 return response
def test_cloud_error(self): response = Response() response._content = br'{"real": true}' # Has to be valid bytes JSON response._content_consumed = True response.status_code = 400 response.headers = {"content-type": "application/json; charset=utf8"} response.reason = 'BadRequest' message = { 'error': { 'code': '500', 'message': { 'value': 'Bad Request\nRequest:34875\nTime:1999-12-31T23:59:59-23:59' }, 'values': { 'invalid_attribute': 'data' } } } response._content = json.dumps(message).encode("utf-8") error = CloudError(response) self.assertEqual(error.message, 'Bad Request') self.assertEqual(error.status_code, 400) self.assertIsInstance(error.response, Response) self.assertIsInstance(error.error, CloudErrorData) error = CloudError(response, "Request failed with bad status") self.assertEqual(error.message, "Request failed with bad status") self.assertEqual(error.status_code, 400) self.assertIsInstance(error.error, Response) response._content = b"{{" error = CloudError(response) self.assertIn("None", error.message) response._content = json.dumps({ 'message': 'server error' }).encode("utf-8") error = CloudError(response) self.assertTrue("server error" in error.message) self.assertEqual(error.status_code, 400) response._content = b"{{" response.reason = "FAILED!" error = CloudError(response) self.assertTrue("FAILED!" in error.message) self.assertIsInstance(error.error, RequestException) response.reason = 'BadRequest' response._content = b'{\r\n "odata.metadata":"https://account.region.batch.azure.com/$metadata#Microsoft.Azure.Batch.Protocol.Entities.Container.errors/@Element","code":"InvalidHeaderValue","message":{\r\n "lang":"en-US","value":"The value for one of the HTTP headers is not in the correct format.\\nRequestId:5f4c1f05-603a-4495-8e80-01f776310bbd\\nTime:2016-01-04T22:12:33.9245931Z"\r\n },"values":[\r\n {\r\n "key":"HeaderName","value":"Content-Type"\r\n },{\r\n "key":"HeaderValue","value":"application/json; odata=minimalmetadata; charset=utf-8"\r\n }\r\n ]\r\n}' error = CloudError(response) self.assertIn( "The value for one of the HTTP headers is not in the correct format", error.message) response._content = b'{"error":{"code":"Conflict","message":"The maximum number of Free ServerFarms allowed in a Subscription is 10.","target":null,"details":[{"message":"The maximum number of Free ServerFarms allowed in a Subscription is 10."},{"code":"Conflict"},{"errorentity":{"code":"Conflict","message":"The maximum number of Free ServerFarms allowed in a Subscription is 10.","extendedCode":"59301","messageTemplate":"The maximum number of {0} ServerFarms allowed in a Subscription is {1}.","parameters":["Free","10"],"innerErrors":null}}],"innererror":null}}' error = CloudError(response) self.assertIsInstance(error.error, CloudErrorData) self.assertEqual(error.error.error, "Conflict") response._content = json.dumps({ "error": { "code": "BadArgument", "message": "The provided database 'foo' has an invalid username.", "target": "query", "details": [{ "code": "301", "target": "$search", "message": "$search query option not supported", }] } }).encode('utf-8') error = CloudError(response) self.assertIsInstance(error.error, CloudErrorData) self.assertEqual(error.error.error, "BadArgument") # See https://github.com/Azure/msrestazure-for-python/issues/54 response._content = b'"{\\"error\\": {\\"code\\": \\"ResourceGroupNotFound\\", \\"message\\": \\"Resource group \'res_grp\' could not be found.\\"}}"' error = CloudError(response) self.assertIn(response.text, error.message) response._content = json.dumps({ "error": { "code": "InvalidTemplateDeployment", "message": "The template deployment failed because of policy violation. Please see details for more information.", "details": [{ "code": "RequestDisallowedByPolicy", "target": "vm1", "message": "Resource 'vm1' was disallowed by policy. Policy identifiers: '[{\"policyAssignment\":{\"name\":\"Allowed virtual machine SKUs\",\"id\":\"/subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/fytest/providers/Microsoft.Authorization/policyAssignments/9c95e7fe8227466b82f48228\"},\"policyDefinition\":{\"name\":\"Allowed virtual machine SKUs\",\"id\":\"/providers/Microsoft.Authorization/policyDefinitions/cccc23c7-8427-4f53-ad12-b6a63eb452b3\"}}]'.", "additionalInfo": [{ "type": "PolicyViolation", "info": { "policyDefinitionDisplayName": "Allowed virtual machine SKUs", "evaluationDetails": { "evaluatedExpressions": [{ "result": "True", "expression": "type", "path": "type", "expressionValue": "Microsoft.Compute/virtualMachines", "targetValue": "Microsoft.Compute/virtualMachines", "operator": "Equals" }, { "result": "False", "expression": "Microsoft.Compute/virtualMachines/sku.name", "path": "properties.hardwareProfile.vmSize", "expressionValue": "Standard_DS1_v2", "targetValue": ["Basic_A0"], "operator": "In" }] }, "policyDefinitionId": "/providers/Microsoft.Authorization/policyDefinitions/cccc23c7-8427-4f53-ad12-b6a63eb452b3", "policyDefinitionName": "cccc23c7-8427-4f53-ad12-b6a63eb452b3", "policyDefinitionEffect": "Deny", "policyAssignmentId": "/subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/fytest/providers/Microsoft.Authorization/policyAssignments/9c95e7fe8227466b82f48228", "policyAssignmentName": "9c95e7fe8227466b82f48228", "policyAssignmentDisplayName": "Allowed virtual machine SKUs", "policyAssignmentScope": "/subscriptions/0b1f6471-1bf0-4dda-aec3-cb9272f09590/resourceGroups/fytest", "policyAssignmentParameters": { "listOfAllowedSKUs": { "value": ["Basic_A0"] } } } }] }] } }).encode('utf-8') error = CloudError(response) assert error.message == "The template deployment failed because of policy violation. Please see details for more information."
def test_function(content): resp = Response() resp.status_code = 400 resp._content_consumed = True resp._content = content raise HTTPError(response=resp)
def test_cloud_error(self): response = Response() response._content = br'{"real": true}' # Has to be valid bytes JSON response._content_consumed = True response.status_code = 400 response.headers = {"content-type": "application/json; charset=utf8"} response.reason = 'BadRequest' message = { 'error': { 'code': '500', 'message': { 'value': 'Bad Request\nRequest:34875\nTime:1999-12-31T23:59:59-23:59' }, 'values': { 'invalid_attribute': 'data' } } } response._content = json.dumps(message).encode("utf-8") error = CloudError(response) self.assertEqual(error.message, 'Bad Request') self.assertEqual(error.status_code, 400) self.assertIsInstance(error.response, Response) self.assertIsInstance(error.error, CloudErrorData) error = CloudError(response, "Request failed with bad status") self.assertEqual(error.message, "Request failed with bad status") self.assertEqual(error.status_code, 400) self.assertIsInstance(error.error, Response) response._content = b"{{" error = CloudError(response) self.assertIn("None", error.message) response._content = json.dumps({ 'message': 'server error' }).encode("utf-8") error = CloudError(response) self.assertTrue("server error" in error.message) self.assertEqual(error.status_code, 400) response._content = b"{{" response.reason = "FAILED!" error = CloudError(response) self.assertTrue("FAILED!" in error.message) self.assertIsInstance(error.error, RequestException) response.reason = 'BadRequest' response._content = b'{\r\n "odata.metadata":"https://account.region.batch.azure.com/$metadata#Microsoft.Azure.Batch.Protocol.Entities.Container.errors/@Element","code":"InvalidHeaderValue","message":{\r\n "lang":"en-US","value":"The value for one of the HTTP headers is not in the correct format.\\nRequestId:5f4c1f05-603a-4495-8e80-01f776310bbd\\nTime:2016-01-04T22:12:33.9245931Z"\r\n },"values":[\r\n {\r\n "key":"HeaderName","value":"Content-Type"\r\n },{\r\n "key":"HeaderValue","value":"application/json; odata=minimalmetadata; charset=utf-8"\r\n }\r\n ]\r\n}' error = CloudError(response) self.assertIn( "The value for one of the HTTP headers is not in the correct format", error.message) response._content = b'{"error":{"code":"Conflict","message":"The maximum number of Free ServerFarms allowed in a Subscription is 10.","target":null,"details":[{"message":"The maximum number of Free ServerFarms allowed in a Subscription is 10."},{"code":"Conflict"},{"errorentity":{"code":"Conflict","message":"The maximum number of Free ServerFarms allowed in a Subscription is 10.","extendedCode":"59301","messageTemplate":"The maximum number of {0} ServerFarms allowed in a Subscription is {1}.","parameters":["Free","10"],"innerErrors":null}}],"innererror":null}}' error = CloudError(response) self.assertIsInstance(error.error, CloudErrorData) self.assertEqual(error.error.error, "Conflict") response._content = json.dumps({ "error": { "code": "BadArgument", "message": "The provided database 'foo' has an invalid username.", "target": "query", "details": [{ "code": "301", "target": "$search", "message": "$search query option not supported", }] } }).encode('utf-8') error = CloudError(response) self.assertIsInstance(error.error, CloudErrorData) self.assertEqual(error.error.error, "BadArgument") # See https://github.com/Azure/msrestazure-for-python/issues/54 response._content = b'"{\\"error\\": {\\"code\\": \\"ResourceGroupNotFound\\", \\"message\\": \\"Resource group \'res_grp\' could not be found.\\"}}"' error = CloudError(response) self.assertIn(response.text, error.message)