commit 5e37dc53df4704c9b4ab0f3943159a5198f0c515 Author: Isis Lovecruft isis@torproject.org Date: Wed Apr 16 19:26:19 2014 +0000
Fix issue with transport URL params in HTTPServer unittests.
Also fixes several PEP8 whitespace issues in test_HTTPServer.py. --- lib/bridgedb/test/test_HTTPServer.py | 83 +++++++++++++++++++++------------- 1 file changed, 52 insertions(+), 31 deletions(-)
diff --git a/lib/bridgedb/test/test_HTTPServer.py b/lib/bridgedb/test/test_HTTPServer.py index 111adc1..52c2fb7 100644 --- a/lib/bridgedb/test/test_HTTPServer.py +++ b/lib/bridgedb/test/test_HTTPServer.py @@ -178,8 +178,8 @@ class GimpCaptchaProtectedResourceTests(unittest.TestCase):
self.request.method = b'POST' self.request.addArg('captcha_challenge_field', expectedChallenge) - self.request.addArg('captcha_response_field', expectedResponse) - + self.request.addArg('captcha_response_field', expectedResponse) + response = self.captchaResource.extractClientSolution(self.request) (challenge, response) = response self.assertEqual(challenge, expectedChallenge) @@ -192,8 +192,8 @@ class GimpCaptchaProtectedResourceTests(unittest.TestCase):
self.request.method = b'POST' self.request.addArg('captcha_challenge_field', expectedChallenge) - self.request.addArg('captcha_response_field', expectedResponse) - + self.request.addArg('captcha_response_field', expectedResponse) + valid = self.captchaResource.checkSolution(self.request) self.assertFalse(valid)
@@ -238,7 +238,7 @@ class GimpCaptchaProtectedResourceTests(unittest.TestCase): """ self.request.method = b'POST' self.request.addArg('captcha_challenge_field', '') - self.request.addArg('captcha_response_field', '') + self.request.addArg('captcha_response_field', '')
page = self.captchaResource.render_POST(self.request) self.assertEqual(BeautifulSoup(page).find('meta')['http-equiv'], @@ -253,7 +253,7 @@ class GimpCaptchaProtectedResourceTests(unittest.TestCase):
self.request.method = b'POST' self.request.addArg('captcha_challenge_field', expectedChallenge) - self.request.addArg('captcha_response_field', expectedResponse) + self.request.addArg('captcha_response_field', expectedResponse)
page = self.captchaResource.render_POST(self.request) self.assertEqual(BeautifulSoup(page).find('meta')['http-equiv'], @@ -357,8 +357,8 @@ class ReCaptchaProtectedResourceTests(unittest.TestCase): """ self.request.method = b'POST' self.request.addArg('captcha_challenge_field', '') - self.request.addArg('captcha_response_field', '') - + self.request.addArg('captcha_response_field', '') + self.assertEqual((False, self.request), self.successResultOf( self.captchaResource.checkSolution(self.request))) @@ -398,7 +398,7 @@ class ReCaptchaProtectedResourceTests(unittest.TestCase): """ self.request.method = b'POST' self.request.addArg('captcha_challenge_field', '') - self.request.addArg('captcha_response_field', '') + self.request.addArg('captcha_response_field', '')
page = self.captchaResource.render_POST(self.request) self.assertEqual(page, HTTPServer.server.NOT_DONE_YET) @@ -412,7 +412,7 @@ class ReCaptchaProtectedResourceTests(unittest.TestCase):
self.request.method = b'POST' self.request.addArg('captcha_challenge_field', expectedChallenge) - self.request.addArg('captcha_response_field', expectedResponse) + self.request.addArg('captcha_response_field', expectedResponse)
page = self.captchaResource.render_POST(self.request) self.assertEqual(page, HTTPServer.server.NOT_DONE_YET) @@ -580,34 +580,51 @@ class WebResourceBridgesTests(unittest.TestCase):
page = self.bridgesResource.render(request) self.bridgesResource.useForwardedHeader = False # Reset it - self.assertSubstring("To enter bridges into", page) + + # The response should explain how to use the bridge lines: + self.assertTrue("To enter bridges into Tor Browser" in str(page))
def test_render_GET_RTLlang(self): - """Test rendering a request for obfs3 bridges in Arabic.""" - request = DummyRequest(["bridges?transport=obfs3"]) + """Test rendering a request for plain bridges in Arabic.""" + request = DummyRequest([b"bridges?transport=obfs3"]) + request.method = b'GET' + request.getClientIP = lambda: '3.3.3.3' + # For some strange reason, the 'Accept-Language' value *should not* be + # a list, unlike all the other headers and args… + request.headers.update({'accept-language': 'ar,en,en_US,'}) + + page = self.bridgesResource.render(request) + self.assertSubstring("direction: rtl", page) + self.assertSubstring( + "إذا لم يعمل تور بنجاح معك، يجب عليك ارسال بريد إلكتروني إلي", page) + + for bridgeLine in self.parseBridgesFromHTMLPage(page): + # Check that each bridge line had the expected number of fields: + bridgeLine = bridgeLine.split(' ') + self.assertEqual(len(bridgeLine), 2) + + def test_render_GET_RTLlang_obfs3(self): + """Test rendering a request for obfs3 bridges in Farsi.""" + request = DummyRequest([b"bridges?transport=obfs3"]) request.method = b'GET' request.getClientIP = lambda: '3.3.3.3' - request.headers.update({'accept-language': 'ar'}) + request.headers.update({'accept-language': 'fa,en,en_US,'}) # We actually have to set the request args manually when using a # DummyRequest: - request.args.update({'transport': 'obfs3'}) + request.args.update({'transport': ['obfs3']})
page = self.bridgesResource.render(request) self.assertSubstring("direction: rtl", page) self.assertSubstring( - "إذا لم يعمل تور بنجاح معك، يجب عليك ارسال بريد إلكتروني إلي", page) + # "I need an alternative way to get bridges!" + "به یک راه دیگر برای دریافت پلها احتیاج دارم!", + page)
for bridgeLine in self.parseBridgesFromHTMLPage(page): # Check that each bridge line had the expected number of fields: bridgeLine = bridgeLine.split(' ') self.assertEqual(len(bridgeLine), 3) - - print(""" - FIXME: The first field should be the transport method: - DummyBridge.getConfigLine() receives transport='o', not 'obfs3'. - What the hell? - """) - #self.assertEqual(bridgeLine[0], 'obfs3') + self.assertEqual(bridgeLine[0], 'obfs3')
# Check that the IP and port seem okay: ip, port = bridgeLine[1].rsplit(':') @@ -616,24 +633,28 @@ class WebResourceBridgesTests(unittest.TestCase): self.assertGreater(int(port), 0) self.assertLessEqual(int(port), 65535)
+ def test_renderAnswer_textplain(self): """If the request format specifies 'plain', we should return content with mimetype 'text/plain'. """ request = DummyRequest([self.pagename]) - request.args.update({'format': 'plain'}) + request.args.update({'format': ['plain']}) request.getClientIP = lambda: '4.4.4.4' request.method = b'GET'
page = self.bridgesResource.render(request) + self.assertTrue("html" not in str(page))
- print(""" - FIXME: The result page should have a mimetype of 'text/plain', and yet - it's still HTML. - """) - #self.assertNotSubstring("html", page) + # We just need to strip and split it because it looks like: + # + # 94.235.85.233:9492 0d9d0547c3471cddc473f7288a6abfb54562dc06 + # 255.225.204.145:9511 1fb89d618b3a12afe3529fd072127ea08fb50466 + # + # (Yes, there are two leading spaces at the beginning of each line) + # + bridgeLines = [line.strip() for line in page.strip().split('\n')]
- bridgeLines = self.parseBridgesFromHTMLPage(page) for bridgeLine in bridgeLines: bridgeLine = bridgeLine.split(' ') self.assertEqual(len(bridgeLine), 2) @@ -665,7 +686,7 @@ class WebResourceOptionsTests(unittest.TestCase): request.headers.update({'accept-language': 'he'}) # We actually have to set the request args manually when using a # DummyRequest: - request.args.update({'transport': 'obfs2'}) + request.args.update({'transport': ['obfs2']})
page = self.optionsResource.render(request) self.assertSubstring("direction: rtl", page)