diff --git a/.travis.yml b/.travis.yml
index 4b2ac2bc..e3b33c04 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,7 +1,6 @@
 # https://travis-ci.org/tornadoweb/tornado
 language: python
 python:
-    - 2.7.8
     - 2.7
     - pypy
     - 3.3
@@ -9,7 +8,7 @@ python:
     - 3.5
     - 3.6
     - nightly
-    - pypy3
+    - pypy3.5-5.8.0
 
 install:
     - if [[ $TRAVIS_PYTHON_VERSION == 2* ]]; then travis_retry pip install futures mock monotonic trollius; fi
diff --git a/docs/releases.rst b/docs/releases.rst
index 3a9ef777..128c7603 100644
--- a/docs/releases.rst
+++ b/docs/releases.rst
@@ -4,6 +4,7 @@ Release notes
 .. toctree::
    :maxdepth: 2
 
+   releases/v4.5.3
    releases/v4.5.2
    releases/v4.5.1
    releases/v4.5.0
diff --git a/docs/releases/v4.5.3.rst b/docs/releases/v4.5.3.rst
new file mode 100644
index 00000000..b1102459
--- /dev/null
+++ b/docs/releases/v4.5.3.rst
@@ -0,0 +1,49 @@
+What's new in Tornado 4.5.2
+===========================
+
+Aug 27, 2017
+------------
+
+`tornado.curl_httpclient`
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+- Improved debug logging on Python 3.
+
+`tornado.httpserver`
+~~~~~~~~~~~~~~~~~~~~
+
+- ``Content-Length`` and ``Transfer-Encoding`` headers are no longer
+  sent with 1xx or 204 responses (this was already true of 304
+  responses).
+- Reading chunked requests no longer leaves the connection in a broken
+  state.
+
+`tornado.iostream`
+~~~~~~~~~~~~~~~~~~
+
+- Writing a `memoryview` can no longer result in "BufferError:
+  Existing exports of data: object cannot be re-sized".
+
+`tornado.options`
+~~~~~~~~~~~~~~~~~
+
+- Duplicate option names are now detected properly whether they use
+  hyphens or underscores.
+
+`tornado.testing`
+~~~~~~~~~~~~~~~~~
+
+- `.AsyncHTTPTestCase.fetch` now uses ``127.0.0.1`` instead of
+  ``localhost``, improving compatibility with systems that have
+  partially-working ipv6 stacks.
+
+`tornado.web`
+~~~~~~~~~~~~~
+
+- It is no longer allowed to send a body with 1xx or 204 responses.
+
+`tornado.websocket`
+~~~~~~~~~~~~~~~~~~~
+
+- Requests with invalid websocket headers now get a response with
+  status code 400 instead of a closed connection.
diff --git a/setup.py b/setup.py
index 66d846be..a1feea67 100644
--- a/setup.py
+++ b/setup.py
@@ -103,7 +103,7 @@ http://api.mongodb.org/python/current/installation.html#osx
 
 kwargs = {}
 
-version = "4.5.2"
+version = "4.5.3"
 
 with open('README.rst') as f:
     kwargs['long_description'] = f.read()
diff --git a/tornado/__init__.py b/tornado/__init__.py
index 3eaa57b8..fa71bf61 100644
--- a/tornado/__init__.py
+++ b/tornado/__init__.py
@@ -25,5 +25,5 @@ from __future__ import absolute_import, division, print_function
 # is zero for an official release, positive for a development branch,
 # or negative for a release candidate or beta (after the base version
 # number has been incremented)
-version = "4.5.2"
-version_info = (4, 5, 2, 0)
+version = "4.5.3"
+version_info = (4, 5, 3, 0)
diff --git a/tornado/curl_httpclient.py b/tornado/curl_httpclient.py
index eef4a17a..8558d65c 100644
--- a/tornado/curl_httpclient.py
+++ b/tornado/curl_httpclient.py
@@ -493,6 +493,7 @@ class CurlAsyncHTTPClient(AsyncHTTPClient):
 
     def _curl_debug(self, debug_type, debug_msg):
         debug_types = ('I', '<', '>', '<', '>')
+        debug_msg = native_str(debug_msg)
         if debug_type == 0:
             curl_log.debug('%s', debug_msg.strip())
         elif debug_type in (1, 2):
diff --git a/tornado/http1connection.py b/tornado/http1connection.py
index 53744ece..32bed6c9 100644
--- a/tornado/http1connection.py
+++ b/tornado/http1connection.py
@@ -349,10 +349,11 @@ class HTTP1Connection(httputil.HTTPConnection):
                 # self._request_start_line.version or
                 # start_line.version?
                 self._request_start_line.version == 'HTTP/1.1' and
-                # 304 responses have no body (not even a zero-length body), and so
-                # should not have either Content-Length or Transfer-Encoding.
-                # headers.
+                # 1xx, 204 and 304 responses have no body (not even a zero-length
+                # body), and so should not have either Content-Length or
+                # Transfer-Encoding headers.
                 start_line.code not in (204, 304) and
+                (start_line.code < 100 or start_line.code >= 200) and
                 # No need to chunk the output if a Content-Length is specified.
                 'Content-Length' not in headers and
                 # Applications are discouraged from touching Transfer-Encoding,
@@ -592,6 +593,9 @@ class HTTP1Connection(httputil.HTTPConnection):
             chunk_len = yield self.stream.read_until(b"\r\n", max_bytes=64)
             chunk_len = int(chunk_len.strip(), 16)
             if chunk_len == 0:
+                crlf = yield self.stream.read_bytes(2)
+                if crlf != b'\r\n':
+                    raise httputil.HTTPInputError("improperly terminated chunked request")
                 return
             total_size += chunk_len
             if total_size > self._max_body_size:
diff --git a/tornado/iostream.py b/tornado/iostream.py
index a1619c49..639ed508 100644
--- a/tornado/iostream.py
+++ b/tornado/iostream.py
@@ -1061,7 +1061,12 @@ class IOStream(BaseIOStream):
         return chunk
 
     def write_to_fd(self, data):
-        return self.socket.send(data)
+        try:
+            return self.socket.send(data)
+        finally:
+            # Avoid keeping to data, which can be a memoryview.
+            # See https://github.com/tornadoweb/tornado/pull/2008
+            del data
 
     def connect(self, address, callback=None, server_hostname=None):
         """Connects the socket to a remote address without blocking.
@@ -1471,6 +1476,10 @@ class SSLIOStream(IOStream):
                 # simply return 0 bytes written.
                 return 0
             raise
+        finally:
+            # Avoid keeping to data, which can be a memoryview.
+            # See https://github.com/tornadoweb/tornado/pull/2008
+            del data
 
     def read_from_fd(self):
         if self._ssl_accepting:
@@ -1528,7 +1537,12 @@ class PipeIOStream(BaseIOStream):
         os.close(self.fd)
 
     def write_to_fd(self, data):
-        return os.write(self.fd, data)
+        try:
+            return os.write(self.fd, data)
+        finally:
+            # Avoid keeping to data, which can be a memoryview.
+            # See https://github.com/tornadoweb/tornado/pull/2008
+            del data
 
     def read_from_fd(self):
         try:
diff --git a/tornado/options.py b/tornado/options.py
index 0a72cc65..707fbd35 100644
--- a/tornado/options.py
+++ b/tornado/options.py
@@ -223,9 +223,10 @@ class OptionParser(object):
         override options set earlier on the command line, but can be overridden
         by later flags.
         """
-        if name in self._options:
+        normalized = self._normalize_name(name)
+        if normalized in self._options:
             raise Error("Option %r already defined in %s" %
-                        (name, self._options[name].file_name))
+                        (normalized, self._options[normalized].file_name))
         frame = sys._getframe(0)
         options_file = frame.f_code.co_filename
 
@@ -247,7 +248,6 @@ class OptionParser(object):
             group_name = group
         else:
             group_name = file_name
-        normalized = self._normalize_name(name)
         option = _Option(name, file_name=file_name,
                          default=default, type=type, help=help,
                          metavar=metavar, multiple=multiple,
diff --git a/tornado/web.py b/tornado/web.py
index d79889fa..e8d102b5 100644
--- a/tornado/web.py
+++ b/tornado/web.py
@@ -974,7 +974,8 @@ class RequestHandler(object):
                 if self.check_etag_header():
                     self._write_buffer = []
                     self.set_status(304)
-            if self._status_code in (204, 304):
+            if (self._status_code in (204, 304) or
+                (self._status_code >= 100 and self._status_code < 200)):
                 assert not self._write_buffer, "Cannot send body with %s" % self._status_code
                 self._clear_headers_for_304()
             elif "Content-Length" not in self._headers:
diff --git a/tornado/websocket.py b/tornado/websocket.py
index 69437ee4..0e9d339f 100644
--- a/tornado/websocket.py
+++ b/tornado/websocket.py
@@ -616,6 +616,14 @@ class WebSocketProtocol13(WebSocketProtocol):
     def accept_connection(self):
         try:
             self._handle_websocket_headers()
+        except ValueError:
+            self.handler.set_status(400)
+            log_msg = "Missing/Invalid WebSocket headers"
+            self.handler.finish(log_msg)
+            gen_log.debug(log_msg)
+            return
+
+        try:
             self._accept_connection()
         except ValueError:
             gen_log.debug("Malformed WebSocket request received",

release: 4.5.3
The following PRs have been nominated for inclusion in a 4.5.3 release:

- #2225 
- #2020 
- #2236 (fixes issue introduced by #2225)
- #1949 (fixes tests for tornado_http2)
diff --git a/tornado/test/httpserver_test.py b/tornado/test/httpserver_test.py
index 11cb7231..59eb6fd1 100644
--- a/tornado/test/httpserver_test.py
+++ b/tornado/test/httpserver_test.py
@@ -786,9 +786,12 @@ class KeepAliveTest(AsyncHTTPTestCase):
     def test_keepalive_chunked(self):
         self.http_version = b'HTTP/1.0'
         self.connect()
-        self.stream.write(b'POST / HTTP/1.0\r\nConnection: keep-alive\r\n'
+        self.stream.write(b'POST / HTTP/1.0\r\n'
+                          b'Connection: keep-alive\r\n'
                           b'Transfer-Encoding: chunked\r\n'
-                          b'\r\n0\r\n')
+                          b'\r\n'
+                          b'0\r\n'
+                          b'\r\n')
         self.read_response()
         self.assertEqual(self.headers['Connection'], 'Keep-Alive')
         self.stream.write(b'GET / HTTP/1.0\r\nConnection: keep-alive\r\n\r\n')
diff --git a/tornado/test/iostream_test.py b/tornado/test/iostream_test.py
index 91bc7bf6..56fffe60 100644
--- a/tornado/test/iostream_test.py
+++ b/tornado/test/iostream_test.py
@@ -9,7 +9,7 @@ from tornado.netutil import ssl_wrap_socket
 from tornado.stack_context import NullContext
 from tornado.tcpserver import TCPServer
 from tornado.testing import AsyncHTTPTestCase, AsyncHTTPSTestCase, AsyncTestCase, bind_unused_port, ExpectLog, gen_test
-from tornado.test.util import unittest, skipIfNonUnix, refusing_port
+from tornado.test.util import unittest, skipIfNonUnix, refusing_port, skipPypy3V58
 from tornado.web import RequestHandler, Application
 import errno
 import logging
@@ -539,6 +539,7 @@ class TestIOStreamMixin(object):
             client.close()
 
     @skipIfNonUnix
+    @skipPypy3V58
     def test_inline_read_error(self):
         # An error on an inline read is raised without logging (on the
         # assumption that it will eventually be noticed or logged further
@@ -557,6 +558,7 @@ class TestIOStreamMixin(object):
             server.close()
             client.close()
 
+    @skipPypy3V58
     def test_async_read_error_logging(self):
         # Socket errors on asynchronous reads should be logged (but only
         # once).
@@ -993,7 +995,7 @@ class TestIOStreamStartTLS(AsyncTestCase):
         server_future = self.server_start_tls(_server_ssl_options())
         client_future = self.client_start_tls(
             ssl.create_default_context(),
-            server_hostname=b'127.0.0.1')
+            server_hostname='127.0.0.1')
         with ExpectLog(gen_log, "SSL Error"):
             with self.assertRaises(ssl.SSLError):
                 # The client fails to connect with an SSL error.
diff --git a/tornado/test/options_test.py b/tornado/test/options_test.py
index bafeea6f..1a0ac8fb 100644
--- a/tornado/test/options_test.py
+++ b/tornado/test/options_test.py
@@ -7,7 +7,7 @@ import sys
 
 from tornado.options import OptionParser, Error
 from tornado.util import basestring_type, PY3
-from tornado.test.util import unittest
+from tornado.test.util import unittest, subTest
 
 if PY3:
     from io import StringIO
@@ -232,6 +232,24 @@ class OptionsTest(unittest.TestCase):
         self.assertRegexpMatches(str(cm.exception),
                                  'Option.*foo.*already defined')
 
+    def test_error_redefine_underscore(self):
+        # Ensure that the dash/underscore normalization doesn't
+        # interfere with the redefinition error.
+        tests = [
+            ('foo-bar', 'foo-bar'),
+            ('foo_bar', 'foo_bar'),
+            ('foo-bar', 'foo_bar'),
+            ('foo_bar', 'foo-bar'),
+            ]
+        for a, b in tests:
+            with subTest(self, a=a, b=b):
+                options = OptionParser()
+                options.define(a)
+                with self.assertRaises(Error) as cm:
+                    options.define(b)
+                self.assertRegexpMatches(str(cm.exception),
+                                         'Option.*foo.bar.*already defined')
+
     def test_dash_underscore_cli(self):
         # Dashes and underscores should be interchangeable.
         for defined_name in ['foo-bar', 'foo_bar']:
diff --git a/tornado/test/simple_httpclient_test.py b/tornado/test/simple_httpclient_test.py
index 02d57c5f..0e75e530 100644
--- a/tornado/test/simple_httpclient_test.py
+++ b/tornado/test/simple_httpclient_test.py
@@ -272,16 +272,9 @@ class SimpleHTTPClientTestMixin(object):
 
     @skipIfNoIPv6
     def test_ipv6(self):
-        try:
-            [sock] = bind_sockets(None, '::1', family=socket.AF_INET6)
-            port = sock.getsockname()[1]
-            self.http_server.add_socket(sock)
-        except socket.gaierror as e:
-            if e.args[0] == socket.EAI_ADDRFAMILY:
-                # python supports ipv6, but it's not configured on the network
-                # interface, so skip this test.
-                return
-            raise
+        [sock] = bind_sockets(None, '::1', family=socket.AF_INET6)
+        port = sock.getsockname()[1]
+        self.http_server.add_socket(sock)
         url = '%s://[::1]:%d/hello' % (self.get_protocol(), port)
 
         # ipv6 is currently enabled by default but can be disabled
@@ -327,7 +320,7 @@ class SimpleHTTPClientTestMixin(object):
         self.assertNotIn("Content-Length", response.headers)
 
     def test_host_header(self):
-        host_re = re.compile(b"^localhost:[0-9]+$")
+        host_re = re.compile(b"^127.0.0.1:[0-9]+$")
         response = self.fetch("/host_echo")
         self.assertTrue(host_re.match(response.body))
 
diff --git a/tornado/test/util.py b/tornado/test/util.py
index 6c032da6..90a9c7b8 100644
--- a/tornado/test/util.py
+++ b/tornado/test/util.py
@@ -1,5 +1,6 @@
 from __future__ import absolute_import, division, print_function
 
+import contextlib
 import os
 import platform
 import socket
@@ -34,14 +35,39 @@ skipOnAppEngine = unittest.skipIf('APPENGINE_RUNTIME' in os.environ,
 skipIfNoNetwork = unittest.skipIf('NO_NETWORK' in os.environ,
                                   'network access disabled')
 
-skipIfNoIPv6 = unittest.skipIf(not socket.has_ipv6, 'ipv6 support not present')
-
-
 skipBefore33 = unittest.skipIf(sys.version_info < (3, 3), 'PEP 380 (yield from) not available')
 skipBefore35 = unittest.skipIf(sys.version_info < (3, 5), 'PEP 492 (async/await) not available')
 skipNotCPython = unittest.skipIf(platform.python_implementation() != 'CPython',
                                  'Not CPython implementation')
 
+# Used for tests affected by
+# https://bitbucket.org/pypy/pypy/issues/2616/incomplete-error-handling-in
+# TODO: remove this after pypy3 5.8 is obsolete.
+skipPypy3V58 = unittest.skipIf(platform.python_implementation() == 'PyPy' and
+                               sys.version_info > (3,) and
+                               sys.pypy_version_info < (5, 9),
+                               'pypy3 5.8 has buggy ssl module')
+
+
+def _detect_ipv6():
+    if not socket.has_ipv6:
+        # socket.has_ipv6 check reports whether ipv6 was present at compile
+        # time. It's usually true even when ipv6 doesn't work for other reasons.
+        return False
+    sock = None
+    try:
+        sock = socket.socket(socket.AF_INET6)
+        sock.bind(('::1', 0))
+    except socket.error:
+        return False
+    finally:
+        if sock is not None:
+            sock.close()
+    return True
+
+
+skipIfNoIPv6 = unittest.skipIf(not _detect_ipv6(), 'ipv6 support not present')
+
 
 def refusing_port():
     """Returns a local port number that will refuse all connections.
@@ -94,3 +120,15 @@ def is_coverage_running():
         except AttributeError:
             return False
     return mod.startswith('coverage')
+
+
+def subTest(test, *args, **kwargs):
+    """Compatibility shim for unittest.TestCase.subTest.
+
+    Usage: ``with tornado.test.util.subTest(self, x=x):``
+    """
+    try:
+        subTest = test.subTest  # py34+
+    except AttributeError:
+        subTest = contextlib.contextmanager(lambda *a, **kw: (yield))
+    return subTest(*args, **kwargs)
diff --git a/tornado/test/web_test.py b/tornado/test/web_test.py
index d79ea52c..013c2ac2 100644
--- a/tornado/test/web_test.py
+++ b/tornado/test/web_test.py
@@ -356,7 +356,7 @@ class AuthRedirectTest(WebTestCase):
         response = self.wait()
         self.assertEqual(response.code, 302)
         self.assertTrue(re.match(
-            'http://example.com/login\?next=http%3A%2F%2Flocalhost%3A[0-9]+%2Fabsolute',
+            'http://example.com/login\?next=http%3A%2F%2F127.0.0.1%3A[0-9]+%2Fabsolute',
             response.headers['Location']), response.headers['Location'])
 
 
@@ -2134,7 +2134,7 @@ class StreamingRequestBodyTest(WebTestCase):
         stream.write(b"4\r\nqwer\r\n")
         data = yield self.data
         self.assertEquals(data, b"qwer")
-        stream.write(b"0\r\n")
+        stream.write(b"0\r\n\r\n")
         yield self.finished
         data = yield gen.Task(stream.read_until_close)
         # This would ideally use an HTTP1Connection to read the response.
diff --git a/tornado/test/websocket_test.py b/tornado/test/websocket_test.py
index d47a74e6..95a5ecd4 100644
--- a/tornado/test/websocket_test.py
+++ b/tornado/test/websocket_test.py
@@ -189,6 +189,13 @@ class WebSocketTest(WebSocketBaseTestCase):
         response = self.fetch('/echo')
         self.assertEqual(response.code, 400)
 
+    def test_missing_websocket_key(self):
+        response = self.fetch('/echo',
+                              headers={'Connection': 'Upgrade',
+                                       'Upgrade': 'WebSocket',
+                                       'Sec-WebSocket-Version': '13'})
+        self.assertEqual(response.code, 400)
+
     def test_bad_websocket_version(self):
         response = self.fetch('/echo',
                               headers={'Connection': 'Upgrade',
diff --git a/tornado/testing.py b/tornado/testing.py
index 74d04b60..82a3b937 100644
--- a/tornado/testing.py
+++ b/tornado/testing.py
@@ -423,7 +423,7 @@ class AsyncHTTPTestCase(AsyncTestCase):
 
     def get_url(self, path):
         """Returns an absolute url for the given path on the test server."""
-        return '%s://localhost:%s%s' % (self.get_protocol(),
+        return '%s://127.0.0.1:%s%s' % (self.get_protocol(),
                                         self.get_http_port(), path)
 
     def tearDown(self):

pip install -e .[dev]
parse_log_pytest
requirements.txt
pytest pytest-cov pytest-xdist pytest-mock pytest-asyncio
apt-get update apt-get install -y gcc python3-dev
3.6
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs==22.2.0
certifi==2021.5.30
coverage==6.2
execnet==1.9.0
importlib-metadata==4.8.3
iniconfig==1.1.1
packaging==21.3
pluggy==1.0.0
py==1.11.0
pyparsing==3.1.4
pytest==7.0.1
pytest-asyncio==0.16.0
pytest-cov==4.0.0
pytest-mock==3.6.1
pytest-xdist==3.0.2
tomli==1.2.3
-e git+https://github.com/tornadoweb/tornado.git@810c341d2488c11813995dd2beadab7ba00ff44d#egg=tornado
typing_extensions==4.1.1
zipp==3.6.0

name: tornado
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - attrs==22.2.0
      - coverage==6.2
      - execnet==1.9.0
      - importlib-metadata==4.8.3
      - iniconfig==1.1.1
      - packaging==21.3
      - pluggy==1.0.0
      - py==1.11.0
      - pyparsing==3.1.4
      - pytest==7.0.1
      - pytest-asyncio==0.16.0
      - pytest-cov==4.0.0
      - pytest-mock==3.6.1
      - pytest-xdist==3.0.2
      - tomli==1.2.3
      - typing-extensions==4.1.1
      - zipp==3.6.0
prefix: /opt/conda/envs/tornado

tornado/test/options_test.py::OptionsTest::test_error_redefine_underscore tornado/test/websocket_test.py::WebSocketTest::test_missing_websocket_key
tornado/test/httpserver_test.py::HTTPServerRawTest::test_invalid_content_length tornado/test/httpserver_test.py::HTTPServerRawTest::test_malformed_first_line tornado/test/httpserver_test.py::HTTPServerRawTest::test_malformed_headers tornado/test/httpserver_test.py::UnixSocketTest::test_unix_socket_bad_request tornado/test/httpserver_test.py::BodyLimitsTest::test_body_size_override_reset tornado/test/httpserver_test.py::BodyLimitsTest::test_large_body_buffered tornado/test/httpserver_test.py::BodyLimitsTest::test_large_body_buffered_chunked tornado/test/httpserver_test.py::BodyLimitsTest::test_large_body_streaming tornado/test/httpserver_test.py::BodyLimitsTest::test_large_body_streaming_chunked tornado/test/httpserver_test.py::BodyLimitsTest::test_timeout tornado/test/iostream_test.py::TestIOStreamWebMixin::test_connection_closed tornado/test/iostream_test.py::TestIOStreamWebMixin::test_read_until_close tornado/test/iostream_test.py::TestIOStreamWebMixin::test_read_zero_bytes tornado/test/iostream_test.py::TestIOStreamWebMixin::test_write_while_connecting tornado/test/iostream_test.py::TestIOStreamWebMixin::test_future_interface tornado/test/iostream_test.py::TestIOStreamWebMixin::test_future_close_while_reading tornado/test/iostream_test.py::TestIOStreamWebMixin::test_future_read_until_close tornado/test/iostream_test.py::TestIOStreamMixin::test_streaming_callback_with_data_in_buffer tornado/test/iostream_test.py::TestIOStreamMixin::test_write_zero_bytes tornado/test/iostream_test.py::TestIOStreamMixin::test_connection_refused tornado/test/iostream_test.py::TestIOStreamMixin::test_gaierror tornado/test/iostream_test.py::TestIOStreamMixin::test_read_callback_error tornado/test/iostream_test.py::TestIOStreamMixin::test_streaming_callback tornado/test/iostream_test.py::TestIOStreamMixin::test_streaming_until_close tornado/test/iostream_test.py::TestIOStreamMixin::test_streaming_until_close_future tornado/test/iostream_test.py::TestIOStreamMixin::test_delayed_close_callback tornado/test/iostream_test.py::TestIOStreamMixin::test_future_delayed_close_callback tornado/test/iostream_test.py::TestIOStreamMixin::test_close_buffered_data tornado/test/iostream_test.py::TestIOStreamMixin::test_read_until_close_after_close tornado/test/iostream_test.py::TestIOStreamMixin::test_read_until_close_with_error tornado/test/iostream_test.py::TestIOStreamMixin::test_streaming_read_until_close_after_close tornado/test/iostream_test.py::TestIOStreamMixin::test_large_read_until tornado/test/iostream_test.py::TestIOStreamMixin::test_close_callback_with_pending_read tornado/test/iostream_test.py::TestIOStreamMixin::test_inline_read_error tornado/test/iostream_test.py::TestIOStreamMixin::test_async_read_error_logging tornado/test/iostream_test.py::TestIOStreamMixin::test_future_close_callback tornado/test/iostream_test.py::TestIOStreamMixin::test_write_memoryview tornado/test/iostream_test.py::TestIOStreamMixin::test_read_bytes_partial tornado/test/iostream_test.py::TestIOStreamMixin::test_read_until_max_bytes tornado/test/iostream_test.py::TestIOStreamMixin::test_read_until_max_bytes_inline tornado/test/iostream_test.py::TestIOStreamMixin::test_read_until_max_bytes_ignores_extra tornado/test/iostream_test.py::TestIOStreamMixin::test_read_until_regex_max_bytes tornado/test/iostream_test.py::TestIOStreamMixin::test_read_until_regex_max_bytes_inline tornado/test/iostream_test.py::TestIOStreamMixin::test_read_until_regex_max_bytes_ignores_extra tornado/test/iostream_test.py::TestIOStreamMixin::test_small_reads_from_large_buffer tornado/test/iostream_test.py::TestIOStreamMixin::test_small_read_untils_from_large_buffer tornado/test/iostream_test.py::TestIOStreamMixin::test_flow_control tornado/test/iostream_test.py::TestIOStreamMixin::test_future_write tornado/test/iostream_test.py::TestIOStream::test_read_until_max_bytes tornado/test/iostream_test.py::TestIOStream::test_read_until_max_bytes_ignores_extra tornado/test/iostream_test.py::TestIOStream::test_read_until_max_bytes_inline tornado/test/iostream_test.py::TestIOStream::test_read_until_regex_max_bytes tornado/test/iostream_test.py::TestIOStream::test_read_until_regex_max_bytes_ignores_extra tornado/test/iostream_test.py::TestIOStream::test_read_until_regex_max_bytes_inline tornado/test/iostream_test.py::TestIOStreamSSL::test_inline_read_error tornado/test/iostream_test.py::TestIOStreamSSL::test_read_until_close_after_close tornado/test/iostream_test.py::TestIOStreamSSL::test_read_until_max_bytes tornado/test/iostream_test.py::TestIOStreamSSL::test_read_until_max_bytes_ignores_extra tornado/test/iostream_test.py::TestIOStreamSSL::test_read_until_max_bytes_inline tornado/test/iostream_test.py::TestIOStreamSSL::test_read_until_regex_max_bytes tornado/test/iostream_test.py::TestIOStreamSSL::test_read_until_regex_max_bytes_ignores_extra tornado/test/iostream_test.py::TestIOStreamSSL::test_read_until_regex_max_bytes_inline tornado/test/iostream_test.py::TestIOStreamSSL::test_streaming_read_until_close_after_close tornado/test/iostream_test.py::TestIOStreamSSL::test_write_zero_bytes tornado/test/iostream_test.py::TestIOStreamSSLContext::test_inline_read_error tornado/test/iostream_test.py::TestIOStreamSSLContext::test_read_until_close_after_close tornado/test/iostream_test.py::TestIOStreamSSLContext::test_read_until_max_bytes tornado/test/iostream_test.py::TestIOStreamSSLContext::test_read_until_max_bytes_ignores_extra tornado/test/iostream_test.py::TestIOStreamSSLContext::test_read_until_max_bytes_inline tornado/test/iostream_test.py::TestIOStreamSSLContext::test_read_until_regex_max_bytes tornado/test/iostream_test.py::TestIOStreamSSLContext::test_read_until_regex_max_bytes_ignores_extra tornado/test/iostream_test.py::TestIOStreamSSLContext::test_read_until_regex_max_bytes_inline tornado/test/iostream_test.py::TestIOStreamSSLContext::test_streaming_read_until_close_after_close tornado/test/iostream_test.py::TestIOStreamSSLContext::test_write_zero_bytes tornado/test/simple_httpclient_test.py::MaxHeaderSizeTest::test_large_headers tornado/test/simple_httpclient_test.py::MaxBodySizeTest::test_large_body tornado/test/simple_httpclient_test.py::ChunkedWithContentLengthTest::test_chunked_with_content_length
tornado/test/httpserver_test.py::SSLv23Test::test_error_logging tornado/test/httpserver_test.py::SSLv23Test::test_large_post tornado/test/httpserver_test.py::SSLv23Test::test_non_ssl_request tornado/test/httpserver_test.py::SSLv23Test::test_ssl tornado/test/httpserver_test.py::SSLv3Test::test_error_logging tornado/test/httpserver_test.py::SSLv3Test::test_large_post tornado/test/httpserver_test.py::SSLv3Test::test_non_ssl_request tornado/test/httpserver_test.py::SSLv3Test::test_ssl tornado/test/httpserver_test.py::TLSv1Test::test_error_logging tornado/test/httpserver_test.py::TLSv1Test::test_large_post tornado/test/httpserver_test.py::TLSv1Test::test_non_ssl_request tornado/test/httpserver_test.py::TLSv1Test::test_ssl tornado/test/httpserver_test.py::SSLContextTest::test_error_logging tornado/test/httpserver_test.py::SSLContextTest::test_large_post tornado/test/httpserver_test.py::SSLContextTest::test_non_ssl_request tornado/test/httpserver_test.py::SSLContextTest::test_ssl tornado/test/httpserver_test.py::BadSSLOptionsTest::test_missing_arguments tornado/test/httpserver_test.py::BadSSLOptionsTest::test_missing_key tornado/test/httpserver_test.py::HTTPConnectionTest::test_100_continue tornado/test/httpserver_test.py::HTTPConnectionTest::test_multipart_form tornado/test/httpserver_test.py::HTTPConnectionTest::test_newlines tornado/test/httpserver_test.py::HTTPServerTest::test_double_slash tornado/test/httpserver_test.py::HTTPServerTest::test_empty_post_parameters tornado/test/httpserver_test.py::HTTPServerTest::test_empty_query_string tornado/test/httpserver_test.py::HTTPServerTest::test_malformed_body tornado/test/httpserver_test.py::HTTPServerTest::test_query_string_encoding tornado/test/httpserver_test.py::HTTPServerTest::test_types tornado/test/httpserver_test.py::HTTPServerRawTest::test_chunked_request_body tornado/test/httpserver_test.py::HTTPServerRawTest::test_chunked_request_uppercase tornado/test/httpserver_test.py::HTTPServerRawTest::test_empty_request tornado/test/httpserver_test.py::XHeaderTest::test_ip_headers tornado/test/httpserver_test.py::XHeaderTest::test_scheme_headers tornado/test/httpserver_test.py::XHeaderTest::test_trusted_downstream tornado/test/httpserver_test.py::SSLXHeaderTest::test_request_without_xprotocol tornado/test/httpserver_test.py::ManualProtocolTest::test_manual_protocol tornado/test/httpserver_test.py::UnixSocketTest::test_unix_socket tornado/test/httpserver_test.py::KeepAliveTest::test_cancel_during_download tornado/test/httpserver_test.py::KeepAliveTest::test_finish_while_closed tornado/test/httpserver_test.py::KeepAliveTest::test_http10 tornado/test/httpserver_test.py::KeepAliveTest::test_http10_keepalive tornado/test/httpserver_test.py::KeepAliveTest::test_http10_keepalive_extra_crlf tornado/test/httpserver_test.py::KeepAliveTest::test_keepalive_chunked tornado/test/httpserver_test.py::KeepAliveTest::test_pipelined_cancel tornado/test/httpserver_test.py::KeepAliveTest::test_pipelined_requests tornado/test/httpserver_test.py::KeepAliveTest::test_request_close tornado/test/httpserver_test.py::KeepAliveTest::test_two_requests tornado/test/httpserver_test.py::GzipTest::test_gzip tornado/test/httpserver_test.py::GzipTest::test_uncompressed tornado/test/httpserver_test.py::GzipUnsupportedTest::test_gzip_unsupported tornado/test/httpserver_test.py::GzipUnsupportedTest::test_uncompressed tornado/test/httpserver_test.py::StreamingChunkSizeTest::test_chunked_body tornado/test/httpserver_test.py::StreamingChunkSizeTest::test_chunked_compressed tornado/test/httpserver_test.py::StreamingChunkSizeTest::test_compressed_body tornado/test/httpserver_test.py::StreamingChunkSizeTest::test_regular_body tornado/test/httpserver_test.py::MaxHeaderSizeTest::test_large_headers tornado/test/httpserver_test.py::MaxHeaderSizeTest::test_small_headers tornado/test/httpserver_test.py::IdleTimeoutTest::test_idle_after_use tornado/test/httpserver_test.py::IdleTimeoutTest::test_unused_connection tornado/test/httpserver_test.py::BodyLimitsTest::test_large_body_streaming_chunked_override tornado/test/httpserver_test.py::BodyLimitsTest::test_large_body_streaming_override tornado/test/httpserver_test.py::BodyLimitsTest::test_small_body tornado/test/httpserver_test.py::LegacyInterfaceTest::test_legacy_interface tornado/test/iostream_test.py::TestIOStreamWebHTTP::test_connection_closed tornado/test/iostream_test.py::TestIOStreamWebHTTP::test_future_close_while_reading tornado/test/iostream_test.py::TestIOStreamWebHTTP::test_future_interface tornado/test/iostream_test.py::TestIOStreamWebHTTP::test_future_read_until_close tornado/test/iostream_test.py::TestIOStreamWebHTTP::test_read_until_close tornado/test/iostream_test.py::TestIOStreamWebHTTP::test_read_zero_bytes tornado/test/iostream_test.py::TestIOStreamWebHTTP::test_write_while_connecting tornado/test/iostream_test.py::TestIOStreamWebHTTPS::test_connection_closed tornado/test/iostream_test.py::TestIOStreamWebHTTPS::test_future_close_while_reading tornado/test/iostream_test.py::TestIOStreamWebHTTPS::test_future_interface tornado/test/iostream_test.py::TestIOStreamWebHTTPS::test_future_read_until_close tornado/test/iostream_test.py::TestIOStreamWebHTTPS::test_read_until_close tornado/test/iostream_test.py::TestIOStreamWebHTTPS::test_read_zero_bytes tornado/test/iostream_test.py::TestIOStreamWebHTTPS::test_write_while_connecting tornado/test/iostream_test.py::TestIOStream::test_async_read_error_logging tornado/test/iostream_test.py::TestIOStream::test_close_buffered_data tornado/test/iostream_test.py::TestIOStream::test_close_callback_with_pending_read tornado/test/iostream_test.py::TestIOStream::test_connection_refused tornado/test/iostream_test.py::TestIOStream::test_delayed_close_callback tornado/test/iostream_test.py::TestIOStream::test_flow_control tornado/test/iostream_test.py::TestIOStream::test_future_close_callback tornado/test/iostream_test.py::TestIOStream::test_future_delayed_close_callback tornado/test/iostream_test.py::TestIOStream::test_future_write tornado/test/iostream_test.py::TestIOStream::test_gaierror tornado/test/iostream_test.py::TestIOStream::test_inline_read_error tornado/test/iostream_test.py::TestIOStream::test_large_read_until tornado/test/iostream_test.py::TestIOStream::test_read_bytes_partial tornado/test/iostream_test.py::TestIOStream::test_read_callback_error tornado/test/iostream_test.py::TestIOStream::test_read_until_close_after_close tornado/test/iostream_test.py::TestIOStream::test_read_until_close_with_error tornado/test/iostream_test.py::TestIOStream::test_small_read_untils_from_large_buffer tornado/test/iostream_test.py::TestIOStream::test_small_reads_from_large_buffer tornado/test/iostream_test.py::TestIOStream::test_streaming_callback tornado/test/iostream_test.py::TestIOStream::test_streaming_callback_with_data_in_buffer tornado/test/iostream_test.py::TestIOStream::test_streaming_read_until_close_after_close tornado/test/iostream_test.py::TestIOStream::test_streaming_until_close tornado/test/iostream_test.py::TestIOStream::test_streaming_until_close_future tornado/test/iostream_test.py::TestIOStream::test_write_memoryview tornado/test/iostream_test.py::TestIOStream::test_write_zero_bytes tornado/test/iostream_test.py::TestIOStreamSSL::test_async_read_error_logging tornado/test/iostream_test.py::TestIOStreamSSL::test_close_buffered_data tornado/test/iostream_test.py::TestIOStreamSSL::test_close_callback_with_pending_read tornado/test/iostream_test.py::TestIOStreamSSL::test_connection_refused tornado/test/iostream_test.py::TestIOStreamSSL::test_delayed_close_callback tornado/test/iostream_test.py::TestIOStreamSSL::test_flow_control tornado/test/iostream_test.py::TestIOStreamSSL::test_future_close_callback tornado/test/iostream_test.py::TestIOStreamSSL::test_future_delayed_close_callback tornado/test/iostream_test.py::TestIOStreamSSL::test_future_write tornado/test/iostream_test.py::TestIOStreamSSL::test_gaierror tornado/test/iostream_test.py::TestIOStreamSSL::test_large_read_until tornado/test/iostream_test.py::TestIOStreamSSL::test_read_bytes_partial tornado/test/iostream_test.py::TestIOStreamSSL::test_read_callback_error tornado/test/iostream_test.py::TestIOStreamSSL::test_read_until_close_with_error tornado/test/iostream_test.py::TestIOStreamSSL::test_small_read_untils_from_large_buffer tornado/test/iostream_test.py::TestIOStreamSSL::test_small_reads_from_large_buffer tornado/test/iostream_test.py::TestIOStreamSSL::test_streaming_callback tornado/test/iostream_test.py::TestIOStreamSSL::test_streaming_callback_with_data_in_buffer tornado/test/iostream_test.py::TestIOStreamSSL::test_streaming_until_close tornado/test/iostream_test.py::TestIOStreamSSL::test_streaming_until_close_future tornado/test/iostream_test.py::TestIOStreamSSL::test_write_memoryview tornado/test/iostream_test.py::TestIOStreamSSLContext::test_async_read_error_logging tornado/test/iostream_test.py::TestIOStreamSSLContext::test_close_buffered_data tornado/test/iostream_test.py::TestIOStreamSSLContext::test_close_callback_with_pending_read tornado/test/iostream_test.py::TestIOStreamSSLContext::test_connection_refused tornado/test/iostream_test.py::TestIOStreamSSLContext::test_delayed_close_callback tornado/test/iostream_test.py::TestIOStreamSSLContext::test_flow_control tornado/test/iostream_test.py::TestIOStreamSSLContext::test_future_close_callback tornado/test/iostream_test.py::TestIOStreamSSLContext::test_future_delayed_close_callback tornado/test/iostream_test.py::TestIOStreamSSLContext::test_future_write tornado/test/iostream_test.py::TestIOStreamSSLContext::test_gaierror tornado/test/iostream_test.py::TestIOStreamSSLContext::test_large_read_until tornado/test/iostream_test.py::TestIOStreamSSLContext::test_read_bytes_partial tornado/test/iostream_test.py::TestIOStreamSSLContext::test_read_callback_error tornado/test/iostream_test.py::TestIOStreamSSLContext::test_read_until_close_with_error tornado/test/iostream_test.py::TestIOStreamSSLContext::test_small_read_untils_from_large_buffer tornado/test/iostream_test.py::TestIOStreamSSLContext::test_small_reads_from_large_buffer tornado/test/iostream_test.py::TestIOStreamSSLContext::test_streaming_callback tornado/test/iostream_test.py::TestIOStreamSSLContext::test_streaming_callback_with_data_in_buffer tornado/test/iostream_test.py::TestIOStreamSSLContext::test_streaming_until_close tornado/test/iostream_test.py::TestIOStreamSSLContext::test_streaming_until_close_future tornado/test/iostream_test.py::TestIOStreamSSLContext::test_write_memoryview tornado/test/iostream_test.py::TestIOStreamStartTLS::test_check_hostname tornado/test/iostream_test.py::TestIOStreamStartTLS::test_handshake_fail tornado/test/iostream_test.py::TestIOStreamStartTLS::test_start_tls_smtp tornado/test/iostream_test.py::WaitForHandshakeTest::test_wait_for_handshake_already_connected tornado/test/iostream_test.py::WaitForHandshakeTest::test_wait_for_handshake_already_waiting_error tornado/test/iostream_test.py::WaitForHandshakeTest::test_wait_for_handshake_callback tornado/test/iostream_test.py::WaitForHandshakeTest::test_wait_for_handshake_future tornado/test/iostream_test.py::TestPipeIOStream::test_pipe_iostream tornado/test/iostream_test.py::TestPipeIOStream::test_pipe_iostream_big_write tornado/test/options_test.py::OptionsTest::test_as_dict tornado/test/options_test.py::OptionsTest::test_dash_underscore_cli tornado/test/options_test.py::OptionsTest::test_dash_underscore_file tornado/test/options_test.py::OptionsTest::test_dash_underscore_introspection tornado/test/options_test.py::OptionsTest::test_error_redefine tornado/test/options_test.py::OptionsTest::test_getitem tornado/test/options_test.py::OptionsTest::test_group_dict tornado/test/options_test.py::OptionsTest::test_help tornado/test/options_test.py::OptionsTest::test_items tornado/test/options_test.py::OptionsTest::test_iter tornado/test/options_test.py::OptionsTest::test_mock_patch tornado/test/options_test.py::OptionsTest::test_multiple_int tornado/test/options_test.py::OptionsTest::test_multiple_string tornado/test/options_test.py::OptionsTest::test_parse_callbacks tornado/test/options_test.py::OptionsTest::test_parse_command_line tornado/test/options_test.py::OptionsTest::test_parse_config_file tornado/test/options_test.py::OptionsTest::test_setattr tornado/test/options_test.py::OptionsTest::test_setattr_type_check tornado/test/options_test.py::OptionsTest::test_setattr_with_callback tornado/test/options_test.py::OptionsTest::test_setitem tornado/test/options_test.py::OptionsTest::test_subcommand tornado/test/options_test.py::OptionsTest::test_types tornado/test/simple_httpclient_test.py::SimpleHTTPClientCommonTestCase::test_304_with_content_length tornado/test/simple_httpclient_test.py::SimpleHTTPClientCommonTestCase::test_all_methods tornado/test/simple_httpclient_test.py::SimpleHTTPClientCommonTestCase::test_basic_auth tornado/test/simple_httpclient_test.py::SimpleHTTPClientCommonTestCase::test_basic_auth_explicit_mode tornado/test/simple_httpclient_test.py::SimpleHTTPClientCommonTestCase::test_body_encoding tornado/test/simple_httpclient_test.py::SimpleHTTPClientCommonTestCase::test_body_sanity_checks tornado/test/simple_httpclient_test.py::SimpleHTTPClientCommonTestCase::test_chunked tornado/test/simple_httpclient_test.py::SimpleHTTPClientCommonTestCase::test_chunked_close tornado/test/simple_httpclient_test.py::SimpleHTTPClientCommonTestCase::test_configure_defaults tornado/test/simple_httpclient_test.py::SimpleHTTPClientCommonTestCase::test_credentials_in_url tornado/test/simple_httpclient_test.py::SimpleHTTPClientCommonTestCase::test_final_callback_stack_context tornado/test/simple_httpclient_test.py::SimpleHTTPClientCommonTestCase::test_follow_redirect tornado/test/simple_httpclient_test.py::SimpleHTTPClientCommonTestCase::test_future_http_error tornado/test/simple_httpclient_test.py::SimpleHTTPClientCommonTestCase::test_future_http_error_no_raise tornado/test/simple_httpclient_test.py::SimpleHTTPClientCommonTestCase::test_future_interface tornado/test/simple_httpclient_test.py::SimpleHTTPClientCommonTestCase::test_header_callback tornado/test/simple_httpclient_test.py::SimpleHTTPClientCommonTestCase::test_header_callback_stack_context tornado/test/simple_httpclient_test.py::SimpleHTTPClientCommonTestCase::test_header_types tornado/test/simple_httpclient_test.py::SimpleHTTPClientCommonTestCase::test_hello_world tornado/test/simple_httpclient_test.py::SimpleHTTPClientCommonTestCase::test_multi_line_headers tornado/test/simple_httpclient_test.py::SimpleHTTPClientCommonTestCase::test_non_ascii_header tornado/test/simple_httpclient_test.py::SimpleHTTPClientCommonTestCase::test_patch_receives_payload tornado/test/simple_httpclient_test.py::SimpleHTTPClientCommonTestCase::test_post tornado/test/simple_httpclient_test.py::SimpleHTTPClientCommonTestCase::test_put_307 tornado/test/simple_httpclient_test.py::SimpleHTTPClientCommonTestCase::test_reuse_request_from_response tornado/test/simple_httpclient_test.py::SimpleHTTPClientCommonTestCase::test_streaming_callback tornado/test/simple_httpclient_test.py::SimpleHTTPClientCommonTestCase::test_streaming_stack_context tornado/test/simple_httpclient_test.py::SimpleHTTPClientCommonTestCase::test_types tornado/test/simple_httpclient_test.py::SimpleHTTPClientCommonTestCase::test_unsupported_auth_mode tornado/test/simple_httpclient_test.py::SimpleHTTPClientTestCase::test_100_continue tornado/test/simple_httpclient_test.py::SimpleHTTPClientTestCase::test_100_continue_early_response tornado/test/simple_httpclient_test.py::SimpleHTTPClientTestCase::test_async_body_producer_chunked tornado/test/simple_httpclient_test.py::SimpleHTTPClientTestCase::test_async_body_producer_content_length tornado/test/simple_httpclient_test.py::SimpleHTTPClientTestCase::test_connect_timeout tornado/test/simple_httpclient_test.py::SimpleHTTPClientTestCase::test_connection_limit tornado/test/simple_httpclient_test.py::SimpleHTTPClientTestCase::test_connection_refused tornado/test/simple_httpclient_test.py::SimpleHTTPClientTestCase::test_gzip tornado/test/simple_httpclient_test.py::SimpleHTTPClientTestCase::test_head_request tornado/test/simple_httpclient_test.py::SimpleHTTPClientTestCase::test_header_reuse tornado/test/simple_httpclient_test.py::SimpleHTTPClientTestCase::test_host_header tornado/test/simple_httpclient_test.py::SimpleHTTPClientTestCase::test_ipv6 tornado/test/simple_httpclient_test.py::SimpleHTTPClientTestCase::test_max_redirects tornado/test/simple_httpclient_test.py::SimpleHTTPClientTestCase::test_native_body_producer_chunked tornado/test/simple_httpclient_test.py::SimpleHTTPClientTestCase::test_native_body_producer_content_length tornado/test/simple_httpclient_test.py::SimpleHTTPClientTestCase::test_no_content tornado/test/simple_httpclient_test.py::SimpleHTTPClientTestCase::test_no_content_length tornado/test/simple_httpclient_test.py::SimpleHTTPClientTestCase::test_options_request tornado/test/simple_httpclient_test.py::SimpleHTTPClientTestCase::test_queue_timeout tornado/test/simple_httpclient_test.py::SimpleHTTPClientTestCase::test_redirect_connection_limit tornado/test/simple_httpclient_test.py::SimpleHTTPClientTestCase::test_request_timeout tornado/test/simple_httpclient_test.py::SimpleHTTPClientTestCase::test_see_other_redirect tornado/test/simple_httpclient_test.py::SimpleHTTPClientTestCase::test_singleton tornado/test/simple_httpclient_test.py::SimpleHTTPClientTestCase::test_streaming_follow_redirects tornado/test/simple_httpclient_test.py::SimpleHTTPClientTestCase::test_sync_body_producer_chunked tornado/test/simple_httpclient_test.py::SimpleHTTPClientTestCase::test_sync_body_producer_content_length tornado/test/simple_httpclient_test.py::SimpleHTTPSClientTestCase::test_100_continue tornado/test/simple_httpclient_test.py::SimpleHTTPSClientTestCase::test_100_continue_early_response tornado/test/simple_httpclient_test.py::SimpleHTTPSClientTestCase::test_async_body_producer_chunked tornado/test/simple_httpclient_test.py::SimpleHTTPSClientTestCase::test_async_body_producer_content_length tornado/test/simple_httpclient_test.py::SimpleHTTPSClientTestCase::test_connect_timeout tornado/test/simple_httpclient_test.py::SimpleHTTPSClientTestCase::test_connection_limit tornado/test/simple_httpclient_test.py::SimpleHTTPSClientTestCase::test_connection_refused tornado/test/simple_httpclient_test.py::SimpleHTTPSClientTestCase::test_error_logging tornado/test/simple_httpclient_test.py::SimpleHTTPSClientTestCase::test_gzip tornado/test/simple_httpclient_test.py::SimpleHTTPSClientTestCase::test_head_request tornado/test/simple_httpclient_test.py::SimpleHTTPSClientTestCase::test_header_reuse tornado/test/simple_httpclient_test.py::SimpleHTTPSClientTestCase::test_host_header tornado/test/simple_httpclient_test.py::SimpleHTTPSClientTestCase::test_ipv6 tornado/test/simple_httpclient_test.py::SimpleHTTPSClientTestCase::test_max_redirects tornado/test/simple_httpclient_test.py::SimpleHTTPSClientTestCase::test_native_body_producer_chunked tornado/test/simple_httpclient_test.py::SimpleHTTPSClientTestCase::test_native_body_producer_content_length tornado/test/simple_httpclient_test.py::SimpleHTTPSClientTestCase::test_no_content tornado/test/simple_httpclient_test.py::SimpleHTTPSClientTestCase::test_no_content_length tornado/test/simple_httpclient_test.py::SimpleHTTPSClientTestCase::test_options_request tornado/test/simple_httpclient_test.py::SimpleHTTPSClientTestCase::test_queue_timeout tornado/test/simple_httpclient_test.py::SimpleHTTPSClientTestCase::test_redirect_connection_limit tornado/test/simple_httpclient_test.py::SimpleHTTPSClientTestCase::test_request_timeout tornado/test/simple_httpclient_test.py::SimpleHTTPSClientTestCase::test_see_other_redirect tornado/test/simple_httpclient_test.py::SimpleHTTPSClientTestCase::test_singleton tornado/test/simple_httpclient_test.py::SimpleHTTPSClientTestCase::test_ssl_context tornado/test/simple_httpclient_test.py::SimpleHTTPSClientTestCase::test_ssl_context_handshake_fail tornado/test/simple_httpclient_test.py::SimpleHTTPSClientTestCase::test_ssl_options tornado/test/simple_httpclient_test.py::SimpleHTTPSClientTestCase::test_ssl_options_handshake_fail tornado/test/simple_httpclient_test.py::SimpleHTTPSClientTestCase::test_streaming_follow_redirects tornado/test/simple_httpclient_test.py::SimpleHTTPSClientTestCase::test_sync_body_producer_chunked tornado/test/simple_httpclient_test.py::SimpleHTTPSClientTestCase::test_sync_body_producer_content_length tornado/test/simple_httpclient_test.py::CreateAsyncHTTPClientTestCase::test_max_clients tornado/test/simple_httpclient_test.py::HTTP100ContinueTestCase::test_100_continue tornado/test/simple_httpclient_test.py::HTTP204NoContentTestCase::test_204_no_content tornado/test/simple_httpclient_test.py::HostnameMappingTestCase::test_hostname_mapping tornado/test/simple_httpclient_test.py::HostnameMappingTestCase::test_port_mapping tornado/test/simple_httpclient_test.py::ResolveTimeoutTestCase::test_resolve_timeout tornado/test/simple_httpclient_test.py::MaxHeaderSizeTest::test_small_headers tornado/test/simple_httpclient_test.py::MaxBodySizeTest::test_small_body tornado/test/simple_httpclient_test.py::MaxBufferSizeTest::test_large_body tornado/test/web_test.py::SecureCookieV1Test::test_arbitrary_bytes tornado/test/web_test.py::SecureCookieV1Test::test_cookie_tampering_future_timestamp tornado/test/web_test.py::SecureCookieV1Test::test_round_trip tornado/test/web_test.py::SecureCookieV2Test::test_key_version_increment_version tornado/test/web_test.py::SecureCookieV2Test::test_key_version_invalidate_version tornado/test/web_test.py::SecureCookieV2Test::test_key_version_roundtrip tornado/test/web_test.py::SecureCookieV2Test::test_key_version_roundtrip_differing_version tornado/test/web_test.py::SecureCookieV2Test::test_round_trip tornado/test/web_test.py::CookieTest::test_cookie_special_char tornado/test/web_test.py::CookieTest::test_get_cookie tornado/test/web_test.py::CookieTest::test_set_cookie tornado/test/web_test.py::CookieTest::test_set_cookie_domain tornado/test/web_test.py::CookieTest::test_set_cookie_expires_days tornado/test/web_test.py::CookieTest::test_set_cookie_false_flags tornado/test/web_test.py::CookieTest::test_set_cookie_max_age tornado/test/web_test.py::CookieTest::test_set_cookie_overwrite tornado/test/web_test.py::AuthRedirectTest::test_absolute_auth_redirect tornado/test/web_test.py::AuthRedirectTest::test_relative_auth_redirect tornado/test/web_test.py::ConnectionCloseTest::test_connection_close tornado/test/web_test.py::RequestEncodingTest::test_error tornado/test/web_test.py::RequestEncodingTest::test_group_encoding tornado/test/web_test.py::RequestEncodingTest::test_group_question_mark tornado/test/web_test.py::RequestEncodingTest::test_slashes tornado/test/web_test.py::WSGISafeWebTest::test_decode_argument tornado/test/web_test.py::WSGISafeWebTest::test_decode_argument_invalid_unicode tornado/test/web_test.py::WSGISafeWebTest::test_decode_argument_plus tornado/test/web_test.py::WSGISafeWebTest::test_get_argument tornado/test/web_test.py::WSGISafeWebTest::test_get_body_arguments tornado/test/web_test.py::WSGISafeWebTest::test_get_query_arguments tornado/test/web_test.py::WSGISafeWebTest::test_header_injection tornado/test/web_test.py::WSGISafeWebTest::test_multi_header tornado/test/web_test.py::WSGISafeWebTest::test_no_gzip tornado/test/web_test.py::WSGISafeWebTest::test_optional_path tornado/test/web_test.py::WSGISafeWebTest::test_redirect tornado/test/web_test.py::WSGISafeWebTest::test_reverse_url tornado/test/web_test.py::WSGISafeWebTest::test_types tornado/test/web_test.py::WSGISafeWebTest::test_uimodule_resources tornado/test/web_test.py::WSGISafeWebTest::test_uimodule_unescaped tornado/test/web_test.py::WSGISafeWebTest::test_web_redirect tornado/test/web_test.py::WSGISafeWebTest::test_web_redirect_double_slash tornado/test/web_test.py::NonWSGIWebTests::test_empty_flush tornado/test/web_test.py::NonWSGIWebTests::test_flow_control tornado/test/web_test.py::ErrorResponseTest::test_default tornado/test/web_test.py::ErrorResponseTest::test_failed_write_error tornado/test/web_test.py::ErrorResponseTest::test_write_error tornado/test/web_test.py::StaticFileTest::test_absolute_static_url tornado/test/web_test.py::StaticFileTest::test_absolute_version_exclusion tornado/test/web_test.py::StaticFileTest::test_include_host_override tornado/test/web_test.py::StaticFileTest::test_path_traversal_protection tornado/test/web_test.py::StaticFileTest::test_relative_version_exclusion tornado/test/web_test.py::StaticFileTest::test_root_static_path tornado/test/web_test.py::StaticFileTest::test_static_304_if_modified_since tornado/test/web_test.py::StaticFileTest::test_static_304_if_none_match tornado/test/web_test.py::StaticFileTest::test_static_404 tornado/test/web_test.py::StaticFileTest::test_static_compressed_files tornado/test/web_test.py::StaticFileTest::test_static_etag tornado/test/web_test.py::StaticFileTest::test_static_files tornado/test/web_test.py::StaticFileTest::test_static_head tornado/test/web_test.py::StaticFileTest::test_static_head_range tornado/test/web_test.py::StaticFileTest::test_static_if_modified_since_pre_epoch tornado/test/web_test.py::StaticFileTest::test_static_if_modified_since_time_zone tornado/test/web_test.py::StaticFileTest::test_static_invalid_range tornado/test/web_test.py::StaticFileTest::test_static_range_if_none_match tornado/test/web_test.py::StaticFileTest::test_static_unsatisfiable_range_invalid_start tornado/test/web_test.py::StaticFileTest::test_static_unsatisfiable_range_zero_suffix tornado/test/web_test.py::StaticFileTest::test_static_url tornado/test/web_test.py::StaticFileTest::test_static_with_range tornado/test/web_test.py::StaticFileTest::test_static_with_range_end_edge tornado/test/web_test.py::StaticFileTest::test_static_with_range_full_file tornado/test/web_test.py::StaticFileTest::test_static_with_range_full_past_end tornado/test/web_test.py::StaticFileTest::test_static_with_range_neg_end tornado/test/web_test.py::StaticFileTest::test_static_with_range_partial_past_end tornado/test/web_test.py::StaticDefaultFilenameTest::test_static_default_filename tornado/test/web_test.py::StaticDefaultFilenameTest::test_static_default_redirect tornado/test/web_test.py::StaticFileWithPathTest::test_serve tornado/test/web_test.py::CustomStaticFileTest::test_serve tornado/test/web_test.py::CustomStaticFileTest::test_static_url tornado/test/web_test.py::HostMatchingTest::test_host_matching tornado/test/web_test.py::DefaultHostMatchingTest::test_default_host_matching tornado/test/web_test.py::NamedURLSpecGroupsTest::test_named_urlspec_groups tornado/test/web_test.py::ClearHeaderTest::test_clear_header tornado/test/web_test.py::Header204Test::test_204_headers tornado/test/web_test.py::Header304Test::test_304_headers tornado/test/web_test.py::StatusReasonTest::test_status tornado/test/web_test.py::DateHeaderTest::test_date_header tornado/test/web_test.py::RaiseWithReasonTest::test_httperror_str tornado/test/web_test.py::RaiseWithReasonTest::test_httperror_str_from_httputil tornado/test/web_test.py::RaiseWithReasonTest::test_raise_with_reason tornado/test/web_test.py::ErrorHandlerXSRFTest::test_404_xsrf tornado/test/web_test.py::ErrorHandlerXSRFTest::test_error_xsrf tornado/test/web_test.py::GzipTestCase::test_gzip tornado/test/web_test.py::GzipTestCase::test_gzip_not_requested tornado/test/web_test.py::GzipTestCase::test_gzip_static tornado/test/web_test.py::GzipTestCase::test_vary_already_present tornado/test/web_test.py::GzipTestCase::test_vary_already_present_multiple tornado/test/web_test.py::PathArgsInPrepareTest::test_kw tornado/test/web_test.py::PathArgsInPrepareTest::test_pos tornado/test/web_test.py::ClearAllCookiesTest::test_clear_all_cookies tornado/test/web_test.py::ExceptionHandlerTest::test_http_error tornado/test/web_test.py::ExceptionHandlerTest::test_known_error tornado/test/web_test.py::ExceptionHandlerTest::test_unknown_error tornado/test/web_test.py::BuggyLoggingTest::test_buggy_log_exception tornado/test/web_test.py::UIMethodUIModuleTest::test_ui_method tornado/test/web_test.py::GetArgumentErrorTest::test_catch_error tornado/test/web_test.py::MultipleExceptionTest::test_multi_exception tornado/test/web_test.py::SetLazyPropertiesTest::test_set_properties tornado/test/web_test.py::GetCurrentUserTest::test_get_current_user_from_ui_module_is_lazy tornado/test/web_test.py::GetCurrentUserTest::test_get_current_user_from_ui_module_works tornado/test/web_test.py::GetCurrentUserTest::test_get_current_user_works tornado/test/web_test.py::UnimplementedHTTPMethodsTest::test_unimplemented_standard_methods tornado/test/web_test.py::UnimplementedNonStandardMethodsTest::test_unimplemented_other tornado/test/web_test.py::UnimplementedNonStandardMethodsTest::test_unimplemented_patch tornado/test/web_test.py::AllHTTPMethodsTest::test_standard_methods tornado/test/web_test.py::PatchMethodTest::test_other tornado/test/web_test.py::PatchMethodTest::test_patch tornado/test/web_test.py::FinishInPrepareTest::test_finish_in_prepare tornado/test/web_test.py::Default404Test::test_404 tornado/test/web_test.py::Custom404Test::test_404 tornado/test/web_test.py::DefaultHandlerArgumentsTest::test_403 tornado/test/web_test.py::HandlerByNameTest::test_handler_by_name tornado/test/web_test.py::StreamingRequestBodyTest::test_close_during_upload tornado/test/web_test.py::StreamingRequestBodyTest::test_early_return tornado/test/web_test.py::StreamingRequestBodyTest::test_early_return_with_data tornado/test/web_test.py::StreamingRequestBodyTest::test_streaming_body tornado/test/web_test.py::DecoratedStreamingRequestFlowControlTest::test_flow_control_chunked_body tornado/test/web_test.py::DecoratedStreamingRequestFlowControlTest::test_flow_control_compressed_body tornado/test/web_test.py::DecoratedStreamingRequestFlowControlTest::test_flow_control_fixed_body tornado/test/web_test.py::NativeStreamingRequestFlowControlTest::test_flow_control_chunked_body tornado/test/web_test.py::NativeStreamingRequestFlowControlTest::test_flow_control_compressed_body tornado/test/web_test.py::NativeStreamingRequestFlowControlTest::test_flow_control_fixed_body tornado/test/web_test.py::IncorrectContentLengthTest::test_content_length_too_high tornado/test/web_test.py::IncorrectContentLengthTest::test_content_length_too_low tornado/test/web_test.py::ClientCloseTest::test_client_close tornado/test/web_test.py::SignedValueTest::test_expired tornado/test/web_test.py::SignedValueTest::test_key_version_retrieval tornado/test/web_test.py::SignedValueTest::test_key_versioning_invalid_key tornado/test/web_test.py::SignedValueTest::test_key_versioning_read_write_default_key tornado/test/web_test.py::SignedValueTest::test_key_versioning_read_write_non_default_key tornado/test/web_test.py::SignedValueTest::test_known_values tornado/test/web_test.py::SignedValueTest::test_name_swap tornado/test/web_test.py::SignedValueTest::test_non_ascii tornado/test/web_test.py::SignedValueTest::test_payload_tampering tornado/test/web_test.py::SignedValueTest::test_signature_tampering tornado/test/web_test.py::XSRFTest::test_cross_user tornado/test/web_test.py::XSRFTest::test_distinct_tokens tornado/test/web_test.py::XSRFTest::test_refresh_token tornado/test/web_test.py::XSRFTest::test_versioning tornado/test/web_test.py::XSRFTest::test_xsrf_fail_argument_invalid_format tornado/test/web_test.py::XSRFTest::test_xsrf_fail_body_no_cookie tornado/test/web_test.py::XSRFTest::test_xsrf_fail_cookie_invalid_format tornado/test/web_test.py::XSRFTest::test_xsrf_fail_cookie_no_body tornado/test/web_test.py::XSRFTest::test_xsrf_fail_no_token tornado/test/web_test.py::XSRFTest::test_xsrf_success_header tornado/test/web_test.py::XSRFTest::test_xsrf_success_non_hex_token tornado/test/web_test.py::XSRFTest::test_xsrf_success_post_body tornado/test/web_test.py::XSRFTest::test_xsrf_success_query_string tornado/test/web_test.py::XSRFTest::test_xsrf_success_short_token tornado/test/web_test.py::XSRFCookieKwargsTest::test_xsrf_httponly tornado/test/web_test.py::FinishExceptionTest::test_finish_exception tornado/test/web_test.py::DecoratorTest::test_addslash tornado/test/web_test.py::DecoratorTest::test_removeslash tornado/test/web_test.py::CacheTest::test_multiple_strong_etag_match tornado/test/web_test.py::CacheTest::test_multiple_strong_etag_not_match tornado/test/web_test.py::CacheTest::test_multiple_weak_etag_match tornado/test/web_test.py::CacheTest::test_multiple_weak_etag_not_match tornado/test/web_test.py::CacheTest::test_strong_etag_match tornado/test/web_test.py::CacheTest::test_strong_etag_not_match tornado/test/web_test.py::CacheTest::test_weak_etag_match tornado/test/web_test.py::CacheTest::test_weak_etag_not_match tornado/test/web_test.py::CacheTest::test_wildcard_etag tornado/test/web_test.py::RequestSummaryTest::test_missing_remote_ip tornado/test/web_test.py::HTTPErrorTest::test_copy tornado/test/web_test.py::ApplicationTest::test_listen tornado/test/web_test.py::URLSpecReverseTest::test_non_reversible tornado/test/web_test.py::URLSpecReverseTest::test_reverse tornado/test/web_test.py::URLSpecReverseTest::test_reverse_arguments tornado/test/web_test.py::RedirectHandlerTest::test_basic_redirect tornado/test/web_test.py::RedirectHandlerTest::test_redirect_pattern tornado/test/websocket_test.py::WebSocketTest::test_async_prepare tornado/test/websocket_test.py::WebSocketTest::test_bad_websocket_version tornado/test/websocket_test.py::WebSocketTest::test_binary_message tornado/test/websocket_test.py::WebSocketTest::test_check_origin_invalid tornado/test/websocket_test.py::WebSocketTest::test_check_origin_invalid_partial_url tornado/test/websocket_test.py::WebSocketTest::test_check_origin_invalid_subdomains tornado/test/websocket_test.py::WebSocketTest::test_check_origin_valid_no_path tornado/test/websocket_test.py::WebSocketTest::test_check_origin_valid_with_path tornado/test/websocket_test.py::WebSocketTest::test_client_close_reason tornado/test/websocket_test.py::WebSocketTest::test_coroutine tornado/test/websocket_test.py::WebSocketTest::test_error_in_on_message tornado/test/websocket_test.py::WebSocketTest::test_http_request tornado/test/websocket_test.py::WebSocketTest::test_path_args tornado/test/websocket_test.py::WebSocketTest::test_render_message tornado/test/websocket_test.py::WebSocketTest::test_server_close_reason tornado/test/websocket_test.py::WebSocketTest::test_unicode_message tornado/test/websocket_test.py::WebSocketTest::test_websocket_callbacks tornado/test/websocket_test.py::WebSocketTest::test_websocket_close_buffered_data tornado/test/websocket_test.py::WebSocketTest::test_websocket_gen tornado/test/websocket_test.py::WebSocketTest::test_websocket_header_echo tornado/test/websocket_test.py::WebSocketTest::test_websocket_headers tornado/test/websocket_test.py::WebSocketTest::test_websocket_http_fail tornado/test/websocket_test.py::WebSocketTest::test_websocket_http_success tornado/test/websocket_test.py::WebSocketTest::test_websocket_network_fail tornado/test/websocket_test.py::WebSocketNativeCoroutineTest::test_native_coroutine tornado/test/websocket_test.py::NoCompressionTest::test_message_sizes tornado/test/websocket_test.py::ServerOnlyCompressionTest::test_message_sizes tornado/test/websocket_test.py::ClientOnlyCompressionTest::test_message_sizes tornado/test/websocket_test.py::DefaultCompressionTest::test_message_sizes tornado/test/websocket_test.py::PythonMaskFunctionTest::test_mask tornado/test/websocket_test.py::CythonMaskFunctionTest::test_mask tornado/test/websocket_test.py::ServerPeriodicPingTest::test_server_ping tornado/test/websocket_test.py::ClientPeriodicPingTest::test_client_ping tornado/test/websocket_test.py::MaxMessageSizeTest::test_large_message
tornado/curl_httpclient.py docs/releases.rst tornado/web.py tornado/__init__.py setup.py tornado/iostream.py tornado/websocket.py docs/releases/v4.5.3.rst .travis.yml tornado/http1connection.py tornado/options.py
tornado/curl_httpclient.py docs/releases.rst tornado/web.py tornado/__init__.py setup.py tornado/iostream.py tornado/websocket.py docs/releases/v4.5.3.rst .travis.yml tornado/http1connection.py tornado/options.py