tornado icon indicating copy to clipboard operation
tornado copied to clipboard

6.4.1: pytest fails in multiple nits with `AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'` error

Open kloczek opened this issue 1 year ago • 2 comments

I'm packaging your module as an rpm package so I'm using the typical PEP517 based build, install and test cycle used on building packages from non-root account.

  • python3 -sBm build -w --no-isolation
  • because I'm calling build with --no-isolation I'm using during all processes only locally installed modules
  • install .whl file in </install/prefix> using installer module
  • run pytest with $PYTHONPATH pointing to sitearch and sitelib inside </install/prefix>
  • build is performed in env which is cut off from access to the public network (pytest is executed with -m "not network")

pytest shows as well some PytestCollectionWarning warnings.

Please let me know if you need more details or want me to perform some diagnostics.

kloczek avatar Jun 06 '24 19:06 kloczek

Here is pytest output:
+ PYTHONPATH=/home/tkloczko/rpmbuild/BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages:/home/tkloczko/rpmbuild/BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib/python3.10/site-packages
+ /usr/bin/pytest -ra -m 'not network' --import-mode=importlib --ignore maint/test/cython/cythonapp_test.py --ignore maint/test/redbot/red_test.py
==================================================================================== test session starts ====================================================================================
platform linux -- Python 3.10.14, pytest-8.2.2, pluggy-1.5.0
benchmark: 4.0.0 (defaults: timer=time.perf_counter disable_gc=False min_rounds=5 min_time=0.000005 max_time=1.0 calibration_precision=10 warmup=False warmup_iterations=100000)
rootdir: /home/tkloczko/rpmbuild/BUILD/tornado-6.4.1
configfile: pyproject.toml
plugins: asyncio-0.23.7, pytest_httpserver-1.0.10, benchmark-4.0.0, timeout-2.3.1
asyncio: mode=strict
collected 1262 items

tornado/test/asyncio_test.py ............                                                                                                                                             [  0%]
tornado/test/auth_test.py ...................                                                                                                                                         [  2%]
tornado/test/autoreload_test.py ....                                                                                                                                                  [  2%]
tornado/test/circlerefs_test.py ......                                                                                                                                                [  3%]
tornado/test/concurrent_test.py .........                                                                                                                                             [  3%]
tornado/test/curl_httpclient_test.py sssssssssssssssssssssssssssssssssssssssssss                                                                                                      [  7%]
tornado/test/escape_test.py ...........                                                                                                                                               [  8%]
tornado/test/gen_test.py ........................................................................                                                                                     [ 13%]
tornado/test/http1connection_test.py .                                                                                                                                                [ 14%]
tornado/test/httpclient_test.py ...........................................................                                                                                           [ 18%]
tornado/test/httpserver_test.py .................................................................................                                                                     [ 25%]
tornado/test/httputil_test.py ...............................................                                                                                                         [ 28%]
tornado/test/import_test.py ...                                                                                                                                                       [ 29%]
tornado/test/ioloop_test.py .....................................................                                                                                                     [ 33%]
tornado/test/iostream_test.py FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF.......................................................................................... [ 45%]
....................................................                                                                                                                                  [ 49%]
tornado/test/locale_test.py ........                                                                                                                                                  [ 50%]
tornado/test/locks_test.py ........................................                                                                                                                   [ 53%]
tornado/test/log_test.py ...............                                                                                                                                              [ 54%]
tornado/test/netutil_test.py .......ss...                                                                                                                                             [ 55%]
tornado/test/options_test.py ........................                                                                                                                                 [ 57%]
tornado/test/process_test.py .........                                                                                                                                                [ 57%]
tornado/test/queues_test.py .........................................                                                                                                                 [ 61%]
tornado/test/routing_test.py ......                                                                                                                                                   [ 61%]
tornado/test/simple_httpclient_test.py ...............................................................................................................                                [ 70%]
tornado/test/tcpclient_test.py ..............................                                                                                                                         [ 72%]
tornado/test/tcpserver_test.py ........                                                                                                                                               [ 73%]
tornado/test/template_test.py ...............s...........................                                                                                                             [ 76%]
tornado/test/testing_test.py .....................                                                                                                                                    [ 78%]
tornado/test/twisted_test.py ss                                                                                                                                                       [ 78%]
tornado/test/util_test.py .........s...........                                                                                                                                       [ 80%]
tornado/test/web_test.py ..................................................................................................................s......................................... [ 92%]
.....................................                                                                                                                                                 [ 95%]
tornado/test/websocket_test.py .................................................                                                                                                      [ 99%]
tornado/test/wsgi_test.py ......                                                                                                                                                      [100%]

========================================================================================= FAILURES ==========================================================================================
________________________________________________________________________ TestIOStreamWebMixin.test_connection_closed ________________________________________________________________________

self = <tornado.test.iostream_test.TestIOStreamWebMixin object at 0x7f4b4c0b7c40>

    def test_connection_closed(self: typing.Any):
        # When a server sends a response and then closes the connection,
        # the client must be allowed to read the data before the IOStream
        # closes itself.  Epoll reports closed connections with a separate
        # EPOLLRDHUP event delivered at the same time as the read event,
        # while kqueue reports them as a second read/write event with an EOF
        # flag.
>       response = self.fetch("/", headers={"Connection": "close"})
E       AttributeError: 'TestIOStreamWebMixin' object has no attribute 'fetch'

tornado/test/iostream_test.py:73: AttributeError
________________________________________________________________________ TestIOStreamWebMixin.test_read_until_close _________________________________________________________________________

self = <tornado.test.iostream_test.TestIOStreamWebMixin object at 0x7f4b4c0b7d90>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestIOStreamWebMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
_________________________________________________________________________ TestIOStreamWebMixin.test_read_zero_bytes _________________________________________________________________________

self = <tornado.test.iostream_test.TestIOStreamWebMixin object at 0x7f4b4c0b7f70>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestIOStreamWebMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
_____________________________________________________________________ TestIOStreamWebMixin.test_write_while_connecting ______________________________________________________________________

self = <tornado.test.iostream_test.TestIOStreamWebMixin object at 0x7f4b4c0b8160>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestIOStreamWebMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
________________________________________________________________________ TestIOStreamWebMixin.test_future_interface _________________________________________________________________________

self = <tornado.test.iostream_test.TestIOStreamWebMixin object at 0x7f4b4c0b8310>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestIOStreamWebMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
___________________________________________________________________ TestIOStreamWebMixin.test_future_close_while_reading ____________________________________________________________________

self = <tornado.test.iostream_test.TestIOStreamWebMixin object at 0x7f4b4c0b84c0>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestIOStreamWebMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
_____________________________________________________________________ TestIOStreamWebMixin.test_future_read_until_close _____________________________________________________________________

self = <tornado.test.iostream_test.TestIOStreamWebMixin object at 0x7f4b4c0b8670>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestIOStreamWebMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
_________________________________________________________________________ TestReadWriteMixin.test_write_zero_bytes __________________________________________________________________________

self = <tornado.test.iostream_test.TestReadWriteMixin object at 0x7f4b4c0b8a60>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
___________________________________________________________________ TestReadWriteMixin.test_future_delayed_close_callback ___________________________________________________________________

self = <tornado.test.iostream_test.TestReadWriteMixin object at 0x7f4b4c0b8c10>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
________________________________________________________________________ TestReadWriteMixin.test_close_buffered_data ________________________________________________________________________

self = <tornado.test.iostream_test.TestReadWriteMixin object at 0x7f4b4c0b8dc0>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
___________________________________________________________________ TestReadWriteMixin.test_read_until_close_after_close ____________________________________________________________________

self = <tornado.test.iostream_test.TestReadWriteMixin object at 0x7f4b4c0b88b0>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
_________________________________________________________________________ TestReadWriteMixin.test_large_read_until __________________________________________________________________________

self = <tornado.test.iostream_test.TestReadWriteMixin object at 0x7f4b4c0b8a30>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
_____________________________________________________________ TestReadWriteMixin.test_read_until_with_close_after_second_packet _____________________________________________________________

self = <tornado.test.iostream_test.TestReadWriteMixin object at 0x7f4b4c0b82e0>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
________________________________________________________________ TestReadWriteMixin.test_read_until_unsatisfied_after_close _________________________________________________________________

self = <tornado.test.iostream_test.TestReadWriteMixin object at 0x7f4b4c0b8f70>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
_________________________________________________________________ TestReadWriteMixin.test_close_callback_with_pending_read __________________________________________________________________

self = <tornado.test.iostream_test.TestReadWriteMixin object at 0x7f4b4c0b9120>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
_______________________________________________________________________ TestReadWriteMixin.test_future_close_callback _______________________________________________________________________

self = <tornado.test.iostream_test.TestReadWriteMixin object at 0x7f4b4c0b92d0>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
_________________________________________________________________________ TestReadWriteMixin.test_write_memoryview __________________________________________________________________________

self = <tornado.test.iostream_test.TestReadWriteMixin object at 0x7f4b4c0b9480>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
________________________________________________________________________ TestReadWriteMixin.test_read_bytes_partial _________________________________________________________________________

self = <tornado.test.iostream_test.TestReadWriteMixin object at 0x7f4b4c0b9630>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
_______________________________________________________________________ TestReadWriteMixin.test_read_until_max_bytes ________________________________________________________________________

self = <tornado.test.iostream_test.TestReadWriteMixin object at 0x7f4b4c0b97e0>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
____________________________________________________________________ TestReadWriteMixin.test_read_until_max_bytes_inline ____________________________________________________________________

self = <tornado.test.iostream_test.TestReadWriteMixin object at 0x7f4b4c0b9990>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
________________________________________________________________ TestReadWriteMixin.test_read_until_max_bytes_ignores_extra _________________________________________________________________

self = <tornado.test.iostream_test.TestReadWriteMixin object at 0x7f4b4c0b9b40>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
____________________________________________________________________ TestReadWriteMixin.test_read_until_regex_max_bytes _____________________________________________________________________

self = <tornado.test.iostream_test.TestReadWriteMixin object at 0x7f4b4c0b9cf0>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
_________________________________________________________________ TestReadWriteMixin.test_read_until_regex_max_bytes_inline _________________________________________________________________

self = <tornado.test.iostream_test.TestReadWriteMixin object at 0x7f4b4c0b9ea0>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
_____________________________________________________________ TestReadWriteMixin.test_read_until_regex_max_bytes_ignores_extra ______________________________________________________________

self = <tornado.test.iostream_test.TestReadWriteMixin object at 0x7f4b4c0ba050>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
___________________________________________________________________ TestReadWriteMixin.test_small_reads_from_large_buffer ___________________________________________________________________

self = <tornado.test.iostream_test.TestReadWriteMixin object at 0x7f4b4c0ba230>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
________________________________________________________________ TestReadWriteMixin.test_small_read_untils_from_large_buffer ________________________________________________________________

self = <tornado.test.iostream_test.TestReadWriteMixin object at 0x7f4b4c0ba3e0>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
___________________________________________________________________________ TestReadWriteMixin.test_flow_control ____________________________________________________________________________

self = <tornado.test.iostream_test.TestReadWriteMixin object at 0x7f4b4c0ba5c0>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
_____________________________________________________________________________ TestReadWriteMixin.test_read_into _____________________________________________________________________________

self = <tornado.test.iostream_test.TestReadWriteMixin object at 0x7f4b4c0ba770>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
_________________________________________________________________________ TestReadWriteMixin.test_read_into_partial _________________________________________________________________________

self = <tornado.test.iostream_test.TestReadWriteMixin object at 0x7f4b4c0ba950>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
_______________________________________________________________________ TestReadWriteMixin.test_read_into_zero_bytes ________________________________________________________________________

self = <tornado.test.iostream_test.TestReadWriteMixin object at 0x7f4b4c0bab00>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
_________________________________________________________________________ TestReadWriteMixin.test_many_mixed_reads __________________________________________________________________________

self = <tornado.test.iostream_test.TestReadWriteMixin object at 0x7f4b4c0bad10>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
__________________________________________________________________________ TestIOStreamMixin.test_write_zero_bytes __________________________________________________________________________

self = <tornado.test.iostream_test.TestIOStreamMixin object at 0x7f4b4c0bafe0>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
___________________________________________________________________ TestIOStreamMixin.test_future_delayed_close_callback ____________________________________________________________________

self = <tornado.test.iostream_test.TestIOStreamMixin object at 0x7f4b4c0bb1c0>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
________________________________________________________________________ TestIOStreamMixin.test_close_buffered_data _________________________________________________________________________

self = <tornado.test.iostream_test.TestIOStreamMixin object at 0x7f4b4c0bb370>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
____________________________________________________________________ TestIOStreamMixin.test_read_until_close_after_close ____________________________________________________________________

self = <tornado.test.iostream_test.TestIOStreamMixin object at 0x7f4b4c0bb520>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
__________________________________________________________________________ TestIOStreamMixin.test_large_read_until __________________________________________________________________________

self = <tornado.test.iostream_test.TestIOStreamMixin object at 0x7f4b4c0bb6d0>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
_____________________________________________________________ TestIOStreamMixin.test_read_until_with_close_after_second_packet ______________________________________________________________

self = <tornado.test.iostream_test.TestIOStreamMixin object at 0x7f4b4c0bb8e0>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
_________________________________________________________________ TestIOStreamMixin.test_read_until_unsatisfied_after_close _________________________________________________________________

self = <tornado.test.iostream_test.TestIOStreamMixin object at 0x7f4b4c0bba90>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
__________________________________________________________________ TestIOStreamMixin.test_close_callback_with_pending_read __________________________________________________________________

self = <tornado.test.iostream_test.TestIOStreamMixin object at 0x7f4b4c0bbc70>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
_______________________________________________________________________ TestIOStreamMixin.test_future_close_callback ________________________________________________________________________

self = <tornado.test.iostream_test.TestIOStreamMixin object at 0x7f4b4c0bbe20>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
__________________________________________________________________________ TestIOStreamMixin.test_write_memoryview __________________________________________________________________________

self = <tornado.test.iostream_test.TestIOStreamMixin object at 0x7f4b4bef8040>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
_________________________________________________________________________ TestIOStreamMixin.test_read_bytes_partial _________________________________________________________________________

self = <tornado.test.iostream_test.TestIOStreamMixin object at 0x7f4b4bef81f0>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
________________________________________________________________________ TestIOStreamMixin.test_read_until_max_bytes ________________________________________________________________________

self = <tornado.test.iostream_test.TestIOStreamMixin object at 0x7f4b4bef83a0>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
____________________________________________________________________ TestIOStreamMixin.test_read_until_max_bytes_inline _____________________________________________________________________

self = <tornado.test.iostream_test.TestIOStreamMixin object at 0x7f4b4bef8550>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
_________________________________________________________________ TestIOStreamMixin.test_read_until_max_bytes_ignores_extra _________________________________________________________________

self = <tornado.test.iostream_test.TestIOStreamMixin object at 0x7f4b4bef8700>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
_____________________________________________________________________ TestIOStreamMixin.test_read_until_regex_max_bytes _____________________________________________________________________

self = <tornado.test.iostream_test.TestIOStreamMixin object at 0x7f4b4bef88b0>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
_________________________________________________________________ TestIOStreamMixin.test_read_until_regex_max_bytes_inline __________________________________________________________________

self = <tornado.test.iostream_test.TestIOStreamMixin object at 0x7f4b4bef8a60>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
______________________________________________________________ TestIOStreamMixin.test_read_until_regex_max_bytes_ignores_extra ______________________________________________________________

self = <tornado.test.iostream_test.TestIOStreamMixin object at 0x7f4b4c0bbd60>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
___________________________________________________________________ TestIOStreamMixin.test_small_reads_from_large_buffer ____________________________________________________________________

self = <tornado.test.iostream_test.TestIOStreamMixin object at 0x7f4b4c0bb7f0>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
________________________________________________________________ TestIOStreamMixin.test_small_read_untils_from_large_buffer _________________________________________________________________

self = <tornado.test.iostream_test.TestIOStreamMixin object at 0x7f4b4c0bb2b0>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
____________________________________________________________________________ TestIOStreamMixin.test_flow_control ____________________________________________________________________________

self = <tornado.test.iostream_test.TestIOStreamMixin object at 0x7f4b4c0b8f40>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
_____________________________________________________________________________ TestIOStreamMixin.test_read_into ______________________________________________________________________________

self = <tornado.test.iostream_test.TestIOStreamMixin object at 0x7f4b4c0b9e70>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
_________________________________________________________________________ TestIOStreamMixin.test_read_into_partial __________________________________________________________________________

self = <tornado.test.iostream_test.TestIOStreamMixin object at 0x7f4b4bef8880>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
________________________________________________________________________ TestIOStreamMixin.test_read_into_zero_bytes ________________________________________________________________________

self = <tornado.test.iostream_test.TestIOStreamMixin object at 0x7f4b4bef8370>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
__________________________________________________________________________ TestIOStreamMixin.test_many_mixed_reads __________________________________________________________________________

self = <tornado.test.iostream_test.TestIOStreamMixin object at 0x7f4b4bef8c10>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
_________________________________________________________________________ TestIOStreamMixin.test_connection_refused _________________________________________________________________________

self = <tornado.test.iostream_test.TestIOStreamMixin object at 0x7f4b4c0ba6b0>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
______________________________________________________________________________ TestIOStreamMixin.test_gaierror ______________________________________________________________________________

self = <tornado.test.iostream_test.TestIOStreamMixin object at 0x7f4b4c0ba140>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
____________________________________________________________________ TestIOStreamMixin.test_read_until_close_with_error _____________________________________________________________________

self = <tornado.test.iostream_test.TestIOStreamMixin object at 0x7f4b4c0b9c30>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
_________________________________________________________________________ TestIOStreamMixin.test_inline_read_error __________________________________________________________________________

self = <tornado.test.iostream_test.TestIOStreamMixin object at 0x7f4b4c0b9720>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
______________________________________________________________________ TestIOStreamMixin.test_async_read_error_logging ______________________________________________________________________

self = <tornado.test.iostream_test.TestIOStreamMixin object at 0x7f4b4c0b9210>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
____________________________________________________________________________ TestIOStreamMixin.test_future_write ____________________________________________________________________________

self = <tornado.test.iostream_test.TestIOStreamMixin object at 0x7f4b4c0b8460>, args = (), kwargs = {}

    @functools.wraps(coro)
    def post_coroutine(self, *args, **kwargs):
        # type: (AsyncTestCase, *Any, **Any) -> None
        try:
>           return self.io_loop.run_sync(
                functools.partial(coro, self, *args, **kwargs), timeout=timeout
            )
E           AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'

../../BUILDROOT/python-tornado-6.4.1-2.fc37.x86_64/usr/lib64/python3.10/site-packages/tornado/testing.py:604: AttributeError
===================================================================================== warnings summary ======================================================================================
tornado/test/tcpclient_test.py:41
  /home/tkloczko/rpmbuild/BUILD/tornado-6.4.1/tornado/test/tcpclient_test.py:41: PytestCollectionWarning: cannot collect test class 'TestTCPServer' because it has a __init__ constructor (from: tornado/test/tcpclient_test.py)
    class TestTCPServer(TCPServer):

tornado/test/util_test.py:48
  /home/tkloczko/rpmbuild/BUILD/tornado-6.4.1/tornado/test/util_test.py:48: PytestCollectionWarning: cannot collect test class 'TestConfigurable' because it has a __new__ constructor (from: tornado/test/util_test.py)
    class TestConfigurable(Configurable):

tornado/test/util_test.py:58
  /home/tkloczko/rpmbuild/BUILD/tornado-6.4.1/tornado/test/util_test.py:58: PytestCollectionWarning: cannot collect test class 'TestConfig1' because it has a __new__ constructor (from: tornado/test/util_test.py)
    class TestConfig1(TestConfigurable):

tornado/test/util_test.py:64
  /home/tkloczko/rpmbuild/BUILD/tornado-6.4.1/tornado/test/util_test.py:64: PytestCollectionWarning: cannot collect test class 'TestConfig2' because it has a __new__ constructor (from: tornado/test/util_test.py)
    class TestConfig2(TestConfigurable):

tornado/test/util_test.py:70
  /home/tkloczko/rpmbuild/BUILD/tornado-6.4.1/tornado/test/util_test.py:70: PytestCollectionWarning: cannot collect test class 'TestConfig3' because it has a __new__ constructor (from: tornado/test/util_test.py)
    class TestConfig3(TestConfigurable):

tornado/test/util_test.py:81
  /home/tkloczko/rpmbuild/BUILD/tornado-6.4.1/tornado/test/util_test.py:81: PytestCollectionWarning: cannot collect test class 'TestConfig3A' because it has a __new__ constructor (from: tornado/test/util_test.py)
    class TestConfig3A(TestConfig3):

tornado/test/util_test.py:86
  /home/tkloczko/rpmbuild/BUILD/tornado-6.4.1/tornado/test/util_test.py:86: PytestCollectionWarning: cannot collect test class 'TestConfig3B' because it has a __new__ constructor (from: tornado/test/util_test.py)
    class TestConfig3B(TestConfig3):

tornado/test/websocket_test.py:44
  /home/tkloczko/rpmbuild/BUILD/tornado-6.4.1/tornado/test/websocket_test.py:44: PytestCollectionWarning: cannot collect test class 'TestWebSocketHandler' because it has a __init__ constructor (from: tornado/test/websocket_test.py)
    class TestWebSocketHandler(WebSocketHandler):

-- Docs: https://docs.pytest.org/en/stable/how-to/capture-warnings.html
================================================================================== short test summary info ==================================================================================
SKIPPED [1] tornado/test/httpclient_test.py:556: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:611: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:265: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:274: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:285: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:599: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:382: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:625: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:219: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:228: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:486: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:377: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:714: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:314: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:570: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:579: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:565: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:425: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:455: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:728: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:546: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:497: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:194: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:442: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:347: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:514: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:680: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:188: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:214: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:673: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:332: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:338: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:324: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:686: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:586: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:206: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:418: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:300: pycurl module not present
SKIPPED [1] tornado/test/httpclient_test.py:704: pycurl module not present
SKIPPED [1] tornado/test/curl_httpclient_test.py:114: pycurl module not present
SKIPPED [1] tornado/test/curl_httpclient_test.py:108: pycurl module not present
SKIPPED [1] tornado/test/curl_httpclient_test.py:122: pycurl module not present
SKIPPED [1] tornado/test/curl_httpclient_test.py:118: pycurl module not present
SKIPPED [1] tornado/test/netutil_test.py:44: pycares module not present
SKIPPED [1] tornado/test/netutil_test.py:44: twisted module not present
SKIPPED [1] tornado/test/template_test.py:184: no testable future imports
SKIPPED [1] tornado/test/twisted_test.py:51: twisted module not present
SKIPPED [1] tornado/test/twisted_test.py:38: twisted module not present
SKIPPED [1] tornado/test/util_test.py:223: no testable future imports
SKIPPED [1] tornado/test/web_test.py:2119: needs fix
FAILED tornado/test/iostream_test.py::TestIOStreamWebMixin::test_connection_closed - AttributeError: 'TestIOStreamWebMixin' object has no attribute 'fetch'
FAILED tornado/test/iostream_test.py::TestIOStreamWebMixin::test_read_until_close - AttributeError: 'TestIOStreamWebMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestIOStreamWebMixin::test_read_zero_bytes - AttributeError: 'TestIOStreamWebMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestIOStreamWebMixin::test_write_while_connecting - AttributeError: 'TestIOStreamWebMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestIOStreamWebMixin::test_future_interface - AttributeError: 'TestIOStreamWebMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestIOStreamWebMixin::test_future_close_while_reading - AttributeError: 'TestIOStreamWebMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestIOStreamWebMixin::test_future_read_until_close - AttributeError: 'TestIOStreamWebMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestReadWriteMixin::test_write_zero_bytes - AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestReadWriteMixin::test_future_delayed_close_callback - AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestReadWriteMixin::test_close_buffered_data - AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestReadWriteMixin::test_read_until_close_after_close - AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestReadWriteMixin::test_large_read_until - AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestReadWriteMixin::test_read_until_with_close_after_second_packet - AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestReadWriteMixin::test_read_until_unsatisfied_after_close - AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestReadWriteMixin::test_close_callback_with_pending_read - AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestReadWriteMixin::test_future_close_callback - AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestReadWriteMixin::test_write_memoryview - AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestReadWriteMixin::test_read_bytes_partial - AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestReadWriteMixin::test_read_until_max_bytes - AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestReadWriteMixin::test_read_until_max_bytes_inline - AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestReadWriteMixin::test_read_until_max_bytes_ignores_extra - AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestReadWriteMixin::test_read_until_regex_max_bytes - AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestReadWriteMixin::test_read_until_regex_max_bytes_inline - AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestReadWriteMixin::test_read_until_regex_max_bytes_ignores_extra - AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestReadWriteMixin::test_small_reads_from_large_buffer - AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestReadWriteMixin::test_small_read_untils_from_large_buffer - AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestReadWriteMixin::test_flow_control - AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestReadWriteMixin::test_read_into - AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestReadWriteMixin::test_read_into_partial - AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestReadWriteMixin::test_read_into_zero_bytes - AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestReadWriteMixin::test_many_mixed_reads - AttributeError: 'TestReadWriteMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestIOStreamMixin::test_write_zero_bytes - AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestIOStreamMixin::test_future_delayed_close_callback - AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestIOStreamMixin::test_close_buffered_data - AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestIOStreamMixin::test_read_until_close_after_close - AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestIOStreamMixin::test_large_read_until - AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestIOStreamMixin::test_read_until_with_close_after_second_packet - AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestIOStreamMixin::test_read_until_unsatisfied_after_close - AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestIOStreamMixin::test_close_callback_with_pending_read - AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestIOStreamMixin::test_future_close_callback - AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestIOStreamMixin::test_write_memoryview - AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestIOStreamMixin::test_read_bytes_partial - AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestIOStreamMixin::test_read_until_max_bytes - AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestIOStreamMixin::test_read_until_max_bytes_inline - AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestIOStreamMixin::test_read_until_max_bytes_ignores_extra - AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestIOStreamMixin::test_read_until_regex_max_bytes - AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestIOStreamMixin::test_read_until_regex_max_bytes_inline - AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestIOStreamMixin::test_read_until_regex_max_bytes_ignores_extra - AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestIOStreamMixin::test_small_reads_from_large_buffer - AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestIOStreamMixin::test_small_read_untils_from_large_buffer - AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestIOStreamMixin::test_flow_control - AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestIOStreamMixin::test_read_into - AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestIOStreamMixin::test_read_into_partial - AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestIOStreamMixin::test_read_into_zero_bytes - AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestIOStreamMixin::test_many_mixed_reads - AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestIOStreamMixin::test_connection_refused - AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestIOStreamMixin::test_gaierror - AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestIOStreamMixin::test_read_until_close_with_error - AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestIOStreamMixin::test_inline_read_error - AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestIOStreamMixin::test_async_read_error_logging - AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'
FAILED tornado/test/iostream_test.py::TestIOStreamMixin::test_future_write - AttributeError: 'TestIOStreamMixin' object has no attribute 'io_loop'
================================================================= 61 failed, 1151 passed, 50 skipped, 8 warnings in 25.84s ==================================================================
List of installed modules in build env:
Package            Version
------------------ -----------
attrs              23.2.0
build              1.2.1
cffi               1.16.0
cryptography       42.0.8
exceptiongroup     1.1.3
importlib_metadata 7.1.0
iniconfig          2.0.0
installer          0.7.0
packaging          24.0
pluggy             1.5.0
ply                3.11
pyasn1             0.6.0
pyasn1_modules     0.4.0
pycparser          2.22
pyproject_hooks    1.0.0
pytest             8.2.2
python-dateutil    2.9.0.post0
service-identity   24.1.0
setuptools         69.4.0
tokenize_rt        5.2.0
tomli              2.0.1
wheel              0.43.0
zipp               3.19.2

kloczek avatar Jun 06 '24 19:06 kloczek

Pytest is not a supported way to run Tornado's test suite. My preferred way to run the tests is with python -m tornado.test; it also works with python -m unittest discover (with some additional args I can't remember).

Duplicate of #3095. If someone who cares about pytest wants to figure out what's going on and submit a PR to make it possible to use pytest as a test runner for tornado, I'd consider it, but I don't use pytest myself.

bdarnell avatar Jun 06 '24 19:06 bdarnell

#3413 fixes all the mixin-related errors. There are still some PytestCollectionWarnings, but they're harmless - they come from the fact that pytest looks for anything with "test" in its name instead of looking at the type like standard unittest discovery. So I think it's possible to run tornado's tests in pytest now if that's something you want to do. (but the unittest module will remain the "official" way to run tornado's tests)

bdarnell avatar Jul 11 '24 19:07 bdarnell