From dd1ace7bce58b00f9a4c13a1216517b62ec7da1c Mon Sep 17 00:00:00 2001 From: Rudi Giesler Date: Mon, 23 Mar 2015 13:12:08 +0200 Subject: [PATCH] Make treq close the http connection --- vumi_twilio_api/tests/test_twilio_api.py | 32 ++++++++++++++---------- vumi_twilio_api/twilio_api.py | 6 +++-- 2 files changed, 23 insertions(+), 15 deletions(-) diff --git a/vumi_twilio_api/tests/test_twilio_api.py b/vumi_twilio_api/tests/test_twilio_api.py index f593cc3..332debc 100644 --- a/vumi_twilio_api/tests/test_twilio_api.py +++ b/vumi_twilio_api/tests/test_twilio_api.py @@ -1,6 +1,5 @@ import json import treq -from twilio.rest import TwilioRestClient from twisted.internet.defer import inlineCallbacks from twisted.trial.unittest import TestCase from vumi.application.tests.helpers import ApplicationHelper @@ -9,6 +8,7 @@ from vumi_twilio_api.twilio_api import TwilioAPIServer, TwilioAPIWorker + class TestTwilioAPIServer(VumiTestCase): @inlineCallbacks @@ -21,14 +21,17 @@ def setUp(self): }) addr = self.worker.webserver.getHost() self.url = 'http://%s:%s%s' % (addr.host, addr.port, '/api') - account = "TestAccount" - token = "test_account_token" - self.client = TwilioRestClient(account, token, base=self.url, version='v1') + + def _server_request(self, path=''): + url = '%s/v1/%s' % (self.url, path) + return treq.get(url, persistent=False) @inlineCallbacks def test_root_default(self): - response = yield treq.get(self.url + '/v1/') - self.assertEqual(response.headers.getRawHeaders('content-type'), ['application/xml']) + response = yield self._server_request() + self.assertEqual( + response.headers.getRawHeaders('content-type'), + ['application/xml']) self.assertEqual(response.code, 200) content = yield response.content() root = ET.fromstring(content) @@ -37,22 +40,26 @@ def test_root_default(self): @inlineCallbacks def test_root_xml(self): - response = yield treq.get(self.url + '/v1/.xml') - self.assertEqual(response.headers.getRawHeaders('content-type'), ['application/xml']) + response = yield self._server_request('.xml') + self.assertEqual( + response.headers.getRawHeaders('content-type'), + ['application/xml']) self.assertEqual(response.code, 200) content = yield response.content() root = ET.fromstring(content) self.assertEqual(root.tag, "TwilioResponse") self.assertEqual(list(root), []) - + @inlineCallbacks def test_root_json(self): - response = yield treq.get(self.url + '/v1/.json') - self.assertEqual(response.headers.getRawHeaders('content-type'), ['application/xml']) + response = yield self._server_request('.json') + self.assertEqual( + response.headers.getRawHeaders('content-type'), + ['application/json']) self.assertEqual(response.code, 200) content = yield response.json() self.assertEqual(content, {}) - + class TestServerFormatting(TestCase): @@ -95,4 +102,3 @@ def test_format_json(self): res = format_json(d) root = json.loads(res) self.assertEqual(root, d) - diff --git a/vumi_twilio_api/twilio_api.py b/vumi_twilio_api/twilio_api.py index 051bd89..0348db1 100644 --- a/vumi_twilio_api/twilio_api.py +++ b/vumi_twilio_api/twilio_api.py @@ -5,6 +5,7 @@ from vumi.config import ConfigInt, ConfigText import xml.etree.ElementTree as ET + class TwilioAPIConfig(ApplicationWorker.CONFIG_CLASS): """Config for the Twilio API worker""" web_path = ConfigText( @@ -57,8 +58,9 @@ def format_json(dct): return json.dumps(dct) def _format_response(self, request, dct, format_): - format_ = format_.lstrip('.').lower() - func = getattr(TwilioAPIServer, 'format_' + format_, TwilioAPIServer.format_xml) + format_ = str(format_.lstrip('.').lower()) + func = getattr( + TwilioAPIServer, 'format_' + format_, TwilioAPIServer.format_xml) request.setHeader('Content-Type', 'application/%s' % format_) return func(dct)