0.15.0: help to run tests on Debian #1231
Replies: 8 comments 9 replies
-
that could be the issue imho, the first failing test is So if I get it correctly, the error actually happens in httpx, it fails to process the request, though I'm not familiar enough with its internals to understand the message, any idea @tomchristie ? :
|
Beta Was this translation helpful? Give feedback.
-
when you say |
Beta Was this translation helpful? Give feedback.
-
So I think a good possible explanation is that you may have an incompatibility in versions between httpx / httpcore, I'm not sure which debian version you're trying to package to but from what i see, all versions from bullseye to sid have httpx 0.16.1, which pins httpcore to 0.12.* |
Beta Was this translation helpful? Give feedback.
-
The full trace would be greatly appreciated yes
…On Sat, Nov 6, 2021, 3:50 AM Sandro Tosi ***@***.***> wrote:
i've upgraded them to
httpcore==0.13.7
httpx==0.20.0
but got a pretty exact copy of the original failure
___________________________________________________________________________________ test_send_binary_data_to_server_bigger_than_default[max=10 sent=11-HttpToolsProtocol-WebSocketProtocol] ____________________________________________________________________________________
config = <uvicorn.config.Config object at 0x7f44a13cb7c0>, sockets = None
@asynccontextmanager
async def run_server(config: Config, sockets=None):
server = Server(config=config)
cancel_handle = asyncio.ensure_future(server.serve(sockets=sockets))
await asyncio.sleep(0.1)
try:
> yield server
tests/utils.py:20:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
ws_protocol_cls = <class 'uvicorn.protocols.websockets.websockets_impl.WebSocketProtocol'>, http_protocol_cls = <class 'uvicorn.protocols.http.httptools_impl.HttpToolsProtocol'>, client_size_sent = 11, server_size_max = 10, expected_result = 1009
@pytest.mark.asyncio
@pytest.mark.parametrize("ws_protocol_cls", ONLY_WEBSOCKETPROTOCOL)
@pytest.mark.parametrize("http_protocol_cls", HTTP_PROTOCOLS)
@pytest.mark.parametrize(
"client_size_sent, server_size_max, expected_result",
[
(MAX_WS_BYTES, MAX_WS_BYTES, 0),
(MAX_WS_BYTES_PLUS1, MAX_WS_BYTES, 1009),
(10, 10, 0),
(11, 10, 1009),
],
ids=[
"max=defaults sent=defaults",
"max=defaults sent=defaults+1",
"max=10 sent=10",
"max=10 sent=11",
],
)
async def test_send_binary_data_to_server_bigger_than_default(
ws_protocol_cls,
http_protocol_cls,
client_size_sent,
server_size_max,
expected_result,
):
class App(WebSocketResponse):
async def websocket_connect(self, message):
await self.send({"type": "websocket.accept"})
async def websocket_receive(self, message):
_bytes = message.get("bytes")
await self.send({"type": "websocket.send", "bytes": _bytes})
async def send_text(url):
async with websockets.connect(url, max_size=client_size_sent) as websocket:
await websocket.send(b"\x01" * client_size_sent)
return await websocket.recv()
config = Config(
app=App,
ws=ws_protocol_cls,
http=http_protocol_cls,
lifespan="off",
ws_max_size=server_size_max,
)
async with run_server(config):
if expected_result == 0:
data = await send_text("ws://127.0.0.1:8000")
assert data == b"\x01" * client_size_sent
else:
with pytest.raises(websockets.ConnectionClosedError) as e:
> data = await send_text("ws://127.0.0.1:8000")
tests/protocols/test_websocket.py:540:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
url = 'ws://127.0.0.1:8000'
async def send_text(url):
> async with websockets.connect(url, max_size=client_size_sent) as websocket:
tests/protocols/test_websocket.py:523:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <websockets.legacy.client.Connect object at 0x7f44a15bcd30>
async def __aenter__(self) -> WebSocketClientProtocol:
> return await self
/usr/lib/python3/dist-packages/websockets/legacy/client.py:604:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <websockets.legacy.client.Connect object at 0x7f44a15bcd30>
async def __await_impl__(self) -> WebSocketClientProtocol:
for redirects in range(self.MAX_REDIRECTS_ALLOWED):
> transport, protocol = await self._create_connection()
/usr/lib/python3/dist-packages/websockets/legacy/client.py:622:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <_UnixSelectorEventLoop running=False closed=False debug=False>
protocol_factory = functools.partial(<class 'websockets.legacy.client.WebSocketClientProtocol'>, ping_interval=20, ping_timeout=20, close...ns.permessage_deflate.ClientPerMessageDeflateFactory object at 0x7f44a15bcdf0>], subprotocols=None, extra_headers=None)
host = '127.0.0.1', port = 8000
async def create_connection(
self, protocol_factory, host=None, port=None,
*, ssl=None, family=0,
proto=0, flags=0, sock=None,
local_addr=None, server_hostname=None,
ssl_handshake_timeout=None,
happy_eyeballs_delay=None, interleave=None):
"""Connect to a TCP server.
Create a streaming transport connection to a given Internet host and
port: socket family AF_INET or socket.AF_INET6 depending on host (or
family if specified), socket type SOCK_STREAM. protocol_factory must be
a callable returning a protocol instance.
This method is a coroutine which will try to establish the connection
in the background. When successful, the coroutine returns a
(transport, protocol) pair.
"""
if server_hostname is not None and not ssl:
raise ValueError('server_hostname is only meaningful with ssl')
if server_hostname is None and ssl:
# Use host as default for server_hostname. It is an error
# if host is empty or not set, e.g. when an
# already-connected socket was passed or when only a port
# is given. To avoid this error, you can pass
# server_hostname='' -- this will bypass the hostname
# check. (This also means that if host is a numeric
# IP/IPv6 address, we will attempt to verify that exact
# address; this will probably fail, but it is possible to
# create a certificate for a specific IP address, so we
# don't judge it here.)
if not host:
raise ValueError('You must set server_hostname '
'when using ssl without a host')
server_hostname = host
if ssl_handshake_timeout is not None and not ssl:
raise ValueError(
'ssl_handshake_timeout is only meaningful with ssl')
if happy_eyeballs_delay is not None and interleave is None:
# If using happy eyeballs, default to interleave addresses by family
interleave = 1
if host is not None or port is not None:
if sock is not None:
raise ValueError(
'host/port and sock can not be specified at the same time')
infos = await self._ensure_resolved(
(host, port), family=family,
type=socket.SOCK_STREAM, proto=proto, flags=flags, loop=self)
if not infos:
raise OSError('getaddrinfo() returned empty list')
if local_addr is not None:
laddr_infos = await self._ensure_resolved(
local_addr, family=family,
type=socket.SOCK_STREAM, proto=proto,
flags=flags, loop=self)
if not laddr_infos:
raise OSError('getaddrinfo() returned empty list')
else:
laddr_infos = None
if interleave:
infos = _interleave_addrinfos(infos, interleave)
exceptions = []
if happy_eyeballs_delay is None:
# not using happy eyeballs
for addrinfo in infos:
try:
sock = await self._connect_sock(
exceptions, addrinfo, laddr_infos)
break
except OSError:
continue
else: # using happy eyeballs
sock, _, _ = await staggered.staggered_race(
(functools.partial(self._connect_sock,
exceptions, addrinfo, laddr_infos)
for addrinfo in infos),
happy_eyeballs_delay, loop=self)
if sock is None:
exceptions = [exc for sub in exceptions for exc in sub]
if len(exceptions) == 1:
> raise exceptions[0]
/usr/lib/python3.9/asyncio/base_events.py:1056:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <_UnixSelectorEventLoop running=False closed=False debug=False>
protocol_factory = functools.partial(<class 'websockets.legacy.client.WebSocketClientProtocol'>, ping_interval=20, ping_timeout=20, close...ns.permessage_deflate.ClientPerMessageDeflateFactory object at 0x7f44a15bcdf0>], subprotocols=None, extra_headers=None)
host = '127.0.0.1', port = 8000
async def create_connection(
self, protocol_factory, host=None, port=None,
*, ssl=None, family=0,
proto=0, flags=0, sock=None,
local_addr=None, server_hostname=None,
ssl_handshake_timeout=None,
happy_eyeballs_delay=None, interleave=None):
"""Connect to a TCP server.
Create a streaming transport connection to a given Internet host and
port: socket family AF_INET or socket.AF_INET6 depending on host (or
family if specified), socket type SOCK_STREAM. protocol_factory must be
a callable returning a protocol instance.
This method is a coroutine which will try to establish the connection
in the background. When successful, the coroutine returns a
(transport, protocol) pair.
"""
if server_hostname is not None and not ssl:
raise ValueError('server_hostname is only meaningful with ssl')
if server_hostname is None and ssl:
# Use host as default for server_hostname. It is an error
# if host is empty or not set, e.g. when an
# already-connected socket was passed or when only a port
# is given. To avoid this error, you can pass
# server_hostname='' -- this will bypass the hostname
# check. (This also means that if host is a numeric
# IP/IPv6 address, we will attempt to verify that exact
# address; this will probably fail, but it is possible to
# create a certificate for a specific IP address, so we
# don't judge it here.)
if not host:
raise ValueError('You must set server_hostname '
'when using ssl without a host')
server_hostname = host
if ssl_handshake_timeout is not None and not ssl:
raise ValueError(
'ssl_handshake_timeout is only meaningful with ssl')
if happy_eyeballs_delay is not None and interleave is None:
# If using happy eyeballs, default to interleave addresses by family
interleave = 1
if host is not None or port is not None:
if sock is not None:
raise ValueError(
'host/port and sock can not be specified at the same time')
infos = await self._ensure_resolved(
(host, port), family=family,
type=socket.SOCK_STREAM, proto=proto, flags=flags, loop=self)
if not infos:
raise OSError('getaddrinfo() returned empty list')
if local_addr is not None:
laddr_infos = await self._ensure_resolved(
local_addr, family=family,
type=socket.SOCK_STREAM, proto=proto,
flags=flags, loop=self)
if not laddr_infos:
raise OSError('getaddrinfo() returned empty list')
else:
laddr_infos = None
if interleave:
infos = _interleave_addrinfos(infos, interleave)
exceptions = []
if happy_eyeballs_delay is None:
# not using happy eyeballs
for addrinfo in infos:
try:
> sock = await self._connect_sock(
exceptions, addrinfo, laddr_infos)
/usr/lib/python3.9/asyncio/base_events.py:1041:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <_UnixSelectorEventLoop running=False closed=False debug=False>, exceptions = [[ConnectionRefusedError(111, "Connect call failed ('127.0.0.1', 8000)")]], addr_info = (<AddressFamily.AF_INET: 2>, <SocketKind.SOCK_STREAM: 1>, 6, '', ('127.0.0.1', 8000))
local_addr_infos = None
async def _connect_sock(self, exceptions, addr_info, local_addr_infos=None):
"""Create, bind and connect one socket."""
my_exceptions = []
exceptions.append(my_exceptions)
family, type_, proto, _, address = addr_info
sock = None
try:
sock = socket.socket(family=family, type=type_, proto=proto)
sock.setblocking(False)
if local_addr_infos is not None:
for _, _, _, _, laddr in local_addr_infos:
try:
sock.bind(laddr)
break
except OSError as exc:
msg = (
f'error while attempting to bind on '
f'address {laddr!r}: '
f'{exc.strerror.lower()}'
)
exc = OSError(exc.errno, msg)
my_exceptions.append(exc)
else: # all bind attempts failed
raise my_exceptions.pop()
> await self.sock_connect(sock, address)
/usr/lib/python3.9/asyncio/base_events.py:955:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <_UnixSelectorEventLoop running=False closed=False debug=False>, sock = <socket.socket [closed] fd=-1, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=6>, address = ('127.0.0.1', 8000)
async def sock_connect(self, sock, address):
"""Connect to a remote socket at address.
This method is a coroutine.
"""
_check_ssl_socket(sock)
if self._debug and sock.gettimeout() != 0:
raise ValueError("the socket must be non-blocking")
if not hasattr(socket, 'AF_UNIX') or sock.family != socket.AF_UNIX:
resolved = await self._ensure_resolved(
address, family=sock.family, proto=sock.proto, loop=self)
_, _, _, _, address = resolved[0]
fut = self.create_future()
self._sock_connect(fut, sock, address)
> return await fut
/usr/lib/python3.9/asyncio/selector_events.py:502:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <_UnixSelectorEventLoop running=False closed=False debug=False>, fut = <Future finished exception=ConnectionRefusedError(111, "Connect call failed ('127.0.0.1', 8000)")>
sock = <socket.socket [closed] fd=-1, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=6>, address = ('127.0.0.1', 8000)
def _sock_connect_cb(self, fut, sock, address):
if fut.done():
return
try:
err = sock.getsockopt(socket.SOL_SOCKET, socket.SO_ERROR)
if err != 0:
# Jump to any except clause below.
> raise OSError(err, f'Connect call failed {address}')
E ConnectionRefusedError: [Errno 111] Connect call failed ('127.0.0.1', 8000)
/usr/lib/python3.9/asyncio/selector_events.py:537: ConnectionRefusedError
During handling of the above exception, another exception occurred:
ws_protocol_cls = <class 'uvicorn.protocols.websockets.websockets_impl.WebSocketProtocol'>, http_protocol_cls = <class 'uvicorn.protocols.http.httptools_impl.HttpToolsProtocol'>, client_size_sent = 11, server_size_max = 10, expected_result = 1009
@pytest.mark.asyncio
@pytest.mark.parametrize("ws_protocol_cls", ONLY_WEBSOCKETPROTOCOL)
@pytest.mark.parametrize("http_protocol_cls", HTTP_PROTOCOLS)
@pytest.mark.parametrize(
"client_size_sent, server_size_max, expected_result",
[
(MAX_WS_BYTES, MAX_WS_BYTES, 0),
(MAX_WS_BYTES_PLUS1, MAX_WS_BYTES, 1009),
(10, 10, 0),
(11, 10, 1009),
],
ids=[
"max=defaults sent=defaults",
"max=defaults sent=defaults+1",
"max=10 sent=10",
"max=10 sent=11",
],
)
async def test_send_binary_data_to_server_bigger_than_default(
ws_protocol_cls,
http_protocol_cls,
client_size_sent,
server_size_max,
expected_result,
):
class App(WebSocketResponse):
async def websocket_connect(self, message):
await self.send({"type": "websocket.accept"})
async def websocket_receive(self, message):
_bytes = message.get("bytes")
await self.send({"type": "websocket.send", "bytes": _bytes})
async def send_text(url):
async with websockets.connect(url, max_size=client_size_sent) as websocket:
await websocket.send(b"\x01" * client_size_sent)
return await websocket.recv()
config = Config(
app=App,
ws=ws_protocol_cls,
http=http_protocol_cls,
lifespan="off",
ws_max_size=server_size_max,
)
async with run_server(config):
if expected_result == 0:
data = await send_text("ws://127.0.0.1:8000")
assert data == b"\x01" * client_size_sent
else:
with pytest.raises(websockets.ConnectionClosedError) as e:
data = await send_text("ws://127.0.0.1:8000")
> assert e.value.code == expected_result
tests/protocols/test_websocket.py:541:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
/usr/lib/python3.9/contextlib.py:199: in __aexit__
await self.gen.athrow(typ, value, traceback)
tests/utils.py:22: in run_server
await server.shutdown()
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
self = <uvicorn.server.Server object at 0x7f44a13cb160>, sockets = None
async def shutdown(self, sockets: Optional[List[socket.socket]] = None) -> None:
logger.info("Shutting down")
# Stop accepting new connections.
> for server in self.servers:
E AttributeError: 'Server' object has no attribute 'servers'
uvicorn/server.py:266: AttributeError
----------------------------------------------------------------------------------------------------------------------------- Captured stderr call -----------------------------------------------------------------------------------------------------------------------------
INFO: Started server process [1364914]
INFO: Shutting down
------------------------------------------------------------------------------------------------------------------------------ Captured log call -------------------------------------------------------------------------------------------------------------------------------
INFO uvicorn.error:server.py:84 Started server process [1364914]
INFO uvicorn.error:server.py:263 Shutting down
=============================================================================================================== 111 failed, 213 passed, 24 deselected in 32.92s ================================================================================================================
i can run anything you may find useful to debug this issue, just let me
know (setting up this env takes 5 minutes)
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
<#1231 (reply in thread)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AAINSPRZQYM6IF3FTEQALJTUKSQYFANCNFSM5HFPFVKA>
.
|
Beta Was this translation helpful? Give feedback.
-
ok the issue is on the same 1st test as described above @sandrotosi But this time httpcore spits interesting info but I dont get how this is possible : the test tries to connect to port 8000, and if you read carefully the debug log, it seems it tries to do it through a proxy on port 9 ? is that possible in your setup ? then the connection times out. in any case, it seems to me the issue you have here is httpx not able to connect properly to the spawned server on port 8000, I'm myself a debian user, I'd be keen on looking at it |
Beta Was this translation helpful? Give feedback.
-
I just pushed a draft PR here to try help you, it just tries to use an open port instead of the I dont see a way to simply test if the server is indeed listening, apart from pausing the test suite with pdb and sending a |
Beta Was this translation helpful? Give feedback.
-
I'm at a loss ;( |
Beta Was this translation helpful? Give feedback.
-
Nothing I can think of, all the issues share the very same connection issue, either when with use httpx Most failures are indeed in the ws tests, but i think this is just a because we have more of them. In all cases it fails to connect to the spawned server on port 8000. At first I thought it was specific to port 8000 being inaccessible, but the patch I sent should spawn the server on any unused port, so I really dont get it. I think there is something specific network-wise in your installation that leads to that, but cant figure like that what it could be. |
Beta Was this translation helpful? Give feedback.
-
Hello,
i'm trying to upgrade uvicorn in Debian to fix this bug, but when running tests a staggering number of them fails, for example:
the full build log is here:
python-uvicorn_0.15.0-1_amd64.build.txt
Can you help me figure out what's the reason for these failures? i'm happy to provide any information you may deem relevant, i think one important details is that we try to block internet access.
thanks!
Beta Was this translation helpful? Give feedback.
All reactions