From: Ben Darnell Date: Wed, 25 Aug 2010 18:33:09 +0000 (-0700) Subject: Add a test for HTTPServer's SSL support X-Git-Tag: v1.1.0~23 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b398a816743db473a7f4373c251225c4d9be299e;p=thirdparty%2Ftornado.git Add a test for HTTPServer's SSL support --- diff --git a/tornado/test/httpserver_test.py b/tornado/test/httpserver_test.py index 10cd2a02a..ac7e5f5c8 100644 --- a/tornado/test/httpserver_test.py +++ b/tornado/test/httpserver_test.py @@ -2,10 +2,16 @@ from tornado.testing import AsyncHTTPTestCase, LogTrapTestCase from tornado.web import authenticated, Application, RequestHandler +import os +import pycurl import re import unittest import urllib +class HelloWorldRequestHandler(RequestHandler): + def get(self): + self.finish("Hello world") + class AuthRedirectRequestHandler(RequestHandler): def initialize(self, login_url): self.login_url = login_url @@ -40,3 +46,25 @@ class AuthRedirectTest(AsyncHTTPTestCase, LogTrapTestCase): self.assertTrue(re.match( 'http://example.com/login\?next=http%3A%2F%2Flocalhost%3A[0-9]+%2Fabsolute', response.headers['Location']), response.headers['Location']) + +class SSLTest(AsyncHTTPTestCase, LogTrapTestCase): + def get_app(self): + return Application([('/', HelloWorldRequestHandler)]) + + def get_httpserver_options(self): + # Testing keys were generated with: + # openssl req -new -keyout tornado/test/test.key -out tornado/test/test.crt -nodes -days 3650 -x509 + test_dir = os.path.dirname(__file__) + return dict(ssl_options=dict( + certfile=os.path.join(test_dir, 'test.crt'), + keyfile=os.path.join(test_dir, 'test.key'))) + + def test_ssl(self): + def disable_cert_check(curl): + # Our certificate was not signed by a CA, so don't check it + curl.setopt(pycurl.SSL_VERIFYPEER, 0) + self.http_client.fetch(self.get_url('/').replace('http', 'https'), + self.stop, + prepare_curl_callback=disable_cert_check) + response = self.wait() + self.assertEqual(response.body, "Hello world") diff --git a/tornado/test/test.crt b/tornado/test/test.crt new file mode 100644 index 000000000..25538c88a --- /dev/null +++ b/tornado/test/test.crt @@ -0,0 +1,15 @@ +-----BEGIN CERTIFICATE----- +MIICSDCCAbGgAwIBAgIJAN1oTowzMbkzMA0GCSqGSIb3DQEBBQUAMD0xCzAJBgNV +BAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRkwFwYDVQQKDBBUb3JuYWRvIFdl +YiBUZXN0MB4XDTEwMDgyNTE4MjQ0NFoXDTIwMDgyMjE4MjQ0NFowPTELMAkGA1UE +BhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExGTAXBgNVBAoMEFRvcm5hZG8gV2Vi +IFRlc3QwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALirW3mX4jbdFse2aZwW +zszCJ1IsRDrzALpbvMYLLbIZqo+Z8v5aERKTRQpXFqGaZyY+tdwYy7X7YXcLtKqv +jnw/MSeIaqkw5pROKz5aR0nkPLvcTmhJVLVPCLc8dFnIlu8aC9TrDhr90P+PzU39 +UG7zLweA9zXKBuW3Tjo5dMP3AgMBAAGjUDBOMB0GA1UdDgQWBBRhJjMBYrzddCFr +/0vvPyHMeqgo0TAfBgNVHSMEGDAWgBRhJjMBYrzddCFr/0vvPyHMeqgo0TAMBgNV +HRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAGP6GaxSfb21bikcqaK3ZKCC1sRJ +tiCuvJZbBUFUCAzl05dYUfJZim/oWK+GqyUkUB8ciYivUNnn9OtS7DnlTgT2ws2e +lNgn5cuFXoAGcHXzVlHG3yoywYBf3y0Dn20uzrlLXUWJAzoSLOt2LTaXvwlgm7hF +W1q8SQ6UBshRw2X0 +-----END CERTIFICATE----- diff --git a/tornado/test/test.key b/tornado/test/test.key new file mode 100644 index 000000000..577d518e5 --- /dev/null +++ b/tornado/test/test.key @@ -0,0 +1,16 @@ +-----BEGIN PRIVATE KEY----- +MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBALirW3mX4jbdFse2 +aZwWzszCJ1IsRDrzALpbvMYLLbIZqo+Z8v5aERKTRQpXFqGaZyY+tdwYy7X7YXcL +tKqvjnw/MSeIaqkw5pROKz5aR0nkPLvcTmhJVLVPCLc8dFnIlu8aC9TrDhr90P+P +zU39UG7zLweA9zXKBuW3Tjo5dMP3AgMBAAECgYEAiygNaWYrf95AcUQi9w00zpUr +nj9fNvCwxr2kVbRMvd2balS/CC4EmXPCXdVcZ3B7dBVjYzSIJV0Fh/iZLtnVysD9 +fcNMZ+Cz71b/T0ItsNYOsJk0qUVyP52uqsqkNppIPJsD19C+ZeMLZj6iEiylZyl8 +2U16c/kVIjER63mUEGkCQQDayQOTGPJrKHqPAkUqzeJkfvHH2yCf+cySU+w6ezyr +j9yxcq8aZoLusCebDVT+kz7RqnD5JePFvB38cMuepYBLAkEA2BTFdZx30f4moPNv +JlXlPNJMUTUzsXG7n4vNc+18O5ous0NGQII8jZWrIcTrP8wiP9fF3JwUsKrJhcBn +xRs3hQJBAIDUgz1YIE+HW3vgi1gkOh6RPdBAsVpiXtr/fggFz3j60qrO7FswaAMj +SX8c/6KUlBYkNjgP3qruFf4zcUNvEzcCQQCaioCPFVE9ByBpjLG6IUTKsz2R9xL5 +nfYqrbpLZ1aq6iLsYvkjugHE4X57sHLwNfdo4dHJbnf9wqhO2MVe25BhAkBdKYpY +7OKc/2mmMbJDhVBgoixz/muN/5VjdfbvVY48naZkJF1p1tmogqPC5F1jPCS4rM+S +FfPJIHRNEn2oktw5 +-----END PRIVATE KEY----- diff --git a/tornado/testing.py b/tornado/testing.py index d39d3c636..8c592db40 100644 --- a/tornado/testing.py +++ b/tornado/testing.py @@ -201,7 +201,8 @@ class AsyncHTTPTestCase(AsyncTestCase): self.http_client = AsyncHTTPClient(io_loop=self.io_loop) self._app = self.get_app() - self.http_server = HTTPServer(self._app, io_loop=self.io_loop) + self.http_server = HTTPServer(self._app, io_loop=self.io_loop, + **self.get_httpserver_options()) self.http_server.listen(self.get_http_port()) def get_app(self): @@ -210,6 +211,12 @@ class AsyncHTTPTestCase(AsyncTestCase): """ raise NotImplementedError() + def get_httpserver_options(self): + """May be overridden by subclasses to return additional + keyword arguments for HTTPServer. + """ + return {} + def get_http_port(self): """Returns the port used by the HTTPServer.