aiohttp icon indicating copy to clipboard operation
aiohttp copied to clipboard

Error using aiohttp server in pytest

Open sonic182 opened this issue 4 years ago • 1 comments

🐞 Describe the bug

Running this test with PyPy3 it gets stuck, with CPython>=3.6 it works ok, doing Ctrl-C while stuck it shows this error

/home/sonic182/.asdf/installs/python/pypy3.7-7.3.3/lib-python/3/selectors.py:468: KeyboardInterrupt
(to show a full traceback on KeyboardInterrupt use --full-trace)
Traceback (most recent call last):
  File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/bin/pytest", line 8, in <module>
    sys.exit(console_main())
  File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/_pytest/config/__init__.py", line 185, in console_main
    code = main()
  File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/_pytest/config/__init__.py", line 163, in main
    config=config
  File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/pluggy/hooks.py", line 286, in __call__
    return self._hookexec(self, self.get_hookimpls(), kwargs)
  File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/pluggy/manager.py", line 93, in _hookexec
    return self._inner_hookexec(hook, methods, kwargs)
  File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/pluggy/manager.py", line 87, in <lambda>
    firstresult=hook.spec.opts.get("firstresult") if hook.spec else False,
  File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/pluggy/callers.py", line 208, in _multicall
    return outcome.get_result()
  File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/pluggy/callers.py", line 80, in get_result
    raise ex[1].with_traceback(ex[2])
  File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/pluggy/callers.py", line 187, in _multicall
    res = hook_impl.function(*args)
  File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/_pytest/main.py", line 316, in pytest_cmdline_main
    return wrap_session(config, _main)
  File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/_pytest/main.py", line 305, in wrap_session
    session=session, exitstatus=session.exitstatus
  File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/pluggy/hooks.py", line 286, in __call__
    return self._hookexec(self, self.get_hookimpls(), kwargs)
  File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/pluggy/manager.py", line 93, in _hookexec
    return self._inner_hookexec(hook, methods, kwargs)
  File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/pluggy/manager.py", line 87, in <lambda>
    firstresult=hook.spec.opts.get("firstresult") if hook.spec else False,
  File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/pluggy/callers.py", line 203, in _multicall
    gen.send(outcome)
  File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/_pytest/terminal.py", line 803, in pytest_sessionfinish
    outcome.get_result()
  File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/pluggy/callers.py", line 80, in get_result
    raise ex[1].with_traceback(ex[2])
  File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/pluggy/callers.py", line 187, in _multicall
    res = hook_impl.function(*args)
  File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/_pytest/runner.py", line 103, in pytest_sessionfinish
    session._setupstate.teardown_all()
  File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/_pytest/runner.py", line 412, in teardown_all
    self._pop_and_teardown()
  File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/_pytest/runner.py", line 387, in _pop_and_teardown
    self._teardown_with_finalization(colitem)
  File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/_pytest/runner.py", line 405, in _teardown_with_finalization
    self._callfinalizers(colitem)
  File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/_pytest/runner.py", line 402, in _callfinalizers
    raise exc
  File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/_pytest/runner.py", line 395, in _callfinalizers
    fin()
  File "/home/sonic182/.asdf/installs/python/pypy3.7-7.3.3/lib_pypy/_functools.py", line 80, in __call__
    return self._func(*(self._args + fargs), **fkeywords)
  File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/_pytest/fixtures.py", line 1034, in finish
    raise exc
  File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/_pytest/fixtures.py", line 1027, in finish
    func()
  File "/home/sonic182/.asdf/installs/python/pypy3.7-7.3.3/lib_pypy/_functools.py", line 80, in __call__
    return self._func(*(self._args + fargs), **fkeywords)
  File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/_pytest/fixtures.py", line 941, in _teardown_yield_fixture
    next(it)
  File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/aiohttp/pytest_plugin.py", line 285, in aiohttp_server
    loop.run_until_complete(finalize())
  File "/home/sonic182/.asdf/installs/python/pypy3.7-7.3.3/lib-python/3/asyncio/base_events.py", line 587, in run_until_complete
    return future.result()
  File "/home/sonic182/.asdf/installs/python/pypy3.7-7.3.3/lib-python/3/asyncio/futures.py", line 181, in result
    raise self._exception
  File "/home/sonic182/.asdf/installs/python/pypy3.7-7.3.3/lib-python/3/asyncio/tasks.py", line 251, in __step
    result = coro.throw(exc)
  File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/aiohttp/pytest_plugin.py", line 283, in finalize
    await servers.pop().close()
  File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/aiohttp/test_utils.py", line 171, in close
    await self.runner.cleanup()
  File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/aiohttp/web_runner.py", line 293, in cleanup
    await site.stop()
  File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/aiohttp/web_runner.py", line 78, in stop
    await self._runner.server.shutdown(self._shutdown_timeout)
  File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/aiohttp/web_server.py", line 58, in shutdown
    await asyncio.gather(*coros)
  File "/home/sonic182/.asdf/installs/python/pypy3.7-7.3.3/lib-python/3/asyncio/futures.py", line 263, in __await__
    yield self  # This tells Task to wait for completion.
  File "/home/sonic182/.asdf/installs/python/pypy3.7-7.3.3/lib-python/3/asyncio/tasks.py", line 318, in __wakeup
    future.result()
  File "/home/sonic182/.asdf/installs/python/pypy3.7-7.3.3/lib-python/3/asyncio/futures.py", line 181, in result
    raise self._exception
  File "/home/sonic182/.asdf/installs/python/pypy3.7-7.3.3/lib-python/3/asyncio/tasks.py", line 249, in __step
    result = coro.send(None)
  File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/aiohttp/web_protocol.py", line 231, in shutdown
    with CeilTimeout(timeout, loop=self._loop):
  File "/home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages/aiohttp/helpers.py", line 673, in __enter__
    "Timeout context manager should be used inside a task"
RuntimeError: Timeout context manager should be used inside a task

💡 To Reproduce You could run py.test in aiosonic repo, with a pypy3 venv, eg: pip install -e ".[test]" && pytest

💡 Expected behavior Not to get stuck

📋 Your version of the Python

$ python --version
Python 3.7.9 (7e6e2bb30ac5, Nov 18 2020, 10:55:52)
[PyPy 7.3.3-beta0 with GCC 7.3.1 20180303 (Red Hat 7.3.1-5)]

📋 Your version of the aiohttp distributions

$ python -m pip show aiohttp
Name: aiohttp
Version: 3.7.3
Summary: Async http client/server framework (asyncio)
Home-page: https://github.com/aio-libs/aiohttp
Author: Nikolay Kim
Author-email: [email protected]
License: Apache 2
Location: /home/sonic182/sandbox/proyectos/aiosonic/pypyvenv/site-packages
Requires: attrs, chardet, multidict, async-timeout, yarl, typing-extensions
Required-by: pytest-aiohttp

📋 Additional context server

sonic182 avatar Jan 27 '21 19:01 sonic182

@sonic182 could you come up with a small reproducer using only aiohttp?

webknjaz avatar Feb 11 '21 18:02 webknjaz