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 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))
Пример #3
0
    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
        )
Пример #4
0
    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
        )
Пример #5
0
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 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
Пример #9
0
    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."
Пример #10
0
 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)