예제 #1
0
 def setUp(self):
     self.set_response_data("", http.OK, {})
     self.server = MockHttpServer(handler=self.handle_request)
     return self.server.start()
예제 #2
0
class HttpUtilsTestCase(unittest.TestCase):
    def setUp(self):
        self.set_response_data("", http.OK, {})
        self.server = MockHttpServer(handler=self.handle_request)
        return self.server.start()

    def tearDown(self):
        return self.server.stop()

    def set_response_data(self, body, code, headers):
        self.response_body = body
        self.response_code = code
        self.response_headers = headers

    @inlineCallbacks
    def assert_last_request(self, args, data="", headers={}, method='GET'):
        request = yield self.server.queue.get()
        self.assertEqual(request.content.read(), data)
        self.assertEqual(request.method, method)
        self.assertEqual(request.args, args)

        for k, v in headers.iteritems():
            self.assertEqual(request.requestHeaders.getRawHeaders(k), v)

    def handle_request(self, request):
        request.setResponseCode(self.response_code)
        for h_name, h_values in self.response_headers.iteritems():
            request.responseHeaders.setRawHeaders(h_name, h_values)
        self.server.queue.put(request)
        return self.response_body

    def assert_happy_response(self, body, code=http.OK, headers={}):
        self.set_response_data(body, code, headers)
        d = utils.http_request(self.server.url)

        def assert_response(response):
            self.assertEqual(response['body'], body)
            self.assertEqual(response['status'], str(code))
            for k, v in headers.iteritems():
                self.assertEqual(response['headers'][k], v)
        d.addCallback(assert_response)
        return d

    def assert_response(self, body, code=http.OK, headers={}):
        self.set_response_data(body, code, headers)
        d = utils.http_request(self.server.url)

        def got_response(response):
            self.assertEqual(response['body'], body)
            self.assertEqual(response['status'], str(code))
            for k, v in headers.iteritems():
                self.assertEqual(response['headers'][k], v)
        d.addCallback(got_response)
        return d

    @inlineCallbacks
    def test_http_request_response_handling(self):
        yield self.assert_response("")
        yield self.assert_response(
            json.dumps({'a': [1, 2]}),
            code=http.CREATED,
            headers={'luke': ['Skywalker']})

    def test_http_request_for_GET(self):
        utils.http_request(
            "%s?%s" % (self.server.url, urlencode({'a': 'lerp', 'b': 'larp'})),
            headers={'Han': 'Solo', 'Mon': 'Mothma'},
            method='GET')
        return self.assert_last_request(
            args={'a': ['lerp'], 'b': ['larp']},
            headers={'Han': ['Solo'], 'Mon': ['Mothma']},
            method='GET')

    def test_http_request_for_POST(self):
        data = json.dumps({'a': 'lerp', 'b': 'larp'})
        utils.http_request(self.server.url, data=data, method='POST')
        return self.assert_last_request(args={}, data=data, method='POST')

    def test_http_request_for_DELETE(self):
        data = json.dumps({'a': 'lerp', 'b': 'larp'})
        utils.http_request(self.server.url, data=data, method='DELETE')
        return self.assert_last_request(args={}, data=data, method='DELETE')