Browse Source

Fix formatting of client connection error (Fixes #1507)

pull/1505/merge
Miguel Grinberg 2 weeks ago
parent
commit
f298c9b54d
Failed to extract signature
  1. 2
      src/socketio/async_client.py
  2. 2
      src/socketio/client.py
  3. 54
      tests/async/test_client.py
  4. 56
      tests/common/test_client.py

2
src/socketio/async_client.py

@ -175,7 +175,7 @@ class AsyncClient(base_client.BaseClient):
if set(self.namespaces) != set(self.connection_namespaces): if set(self.namespaces) != set(self.connection_namespaces):
await self.disconnect() await self.disconnect()
raise exceptions.ConnectionError( raise exceptions.ConnectionError(
'One or more namespaces failed to connect' 'One or more namespaces failed to connect: ' +
', '.join(self.failed_namespaces)) ', '.join(self.failed_namespaces))
self.connected = True self.connected = True

2
src/socketio/client.py

@ -168,7 +168,7 @@ class Client(base_client.BaseClient):
if set(self.namespaces) != set(self.connection_namespaces): if set(self.namespaces) != set(self.connection_namespaces):
self.disconnect() self.disconnect()
raise exceptions.ConnectionError( raise exceptions.ConnectionError(
'One or more namespaces failed to connect: ' 'One or more namespaces failed to connect: ' +
', '.join(self.failed_namespaces)) ', '.join(self.failed_namespaces))
self.connected = True self.connected = True

54
tests/async/test_client.py

@ -203,6 +203,60 @@ class TestAsyncClient:
assert c.connected is True assert c.connected is True
assert c.namespaces == {'/bar': '123', '/foo': '456'} assert c.namespaces == {'/bar': '123', '/foo': '456'}
async def test_connect_wait_one_namespaces_error(self):
c = async_client.AsyncClient()
c.eio.connect = mock.AsyncMock()
c._connect_event = mock.MagicMock()
async def mock_connect():
if c.failed_namespaces == []:
c.failed_namespaces = ['/foo']
return True
return False
c._connect_event.wait = mock_connect
with pytest.raises(exceptions.ConnectionError,
match='failed to connect: /foo'):
await c.connect(
'url',
namespaces=['/foo'],
wait=True,
wait_timeout=0.01,
)
assert c.connected is False
assert c.namespaces == {}
assert c.failed_namespaces == ['/foo']
async def test_connect_wait_three_namespaces_error(self):
c = async_client.AsyncClient()
c.eio.connect = mock.AsyncMock()
c._connect_event = mock.MagicMock()
async def mock_connect():
if c.namespaces == {}:
c.namespaces = {'/bar': '123'}
return True
elif c.namespaces == {'/bar': '123'} and c.failed_namespaces == []:
c.failed_namespaces = ['/baz']
return True
elif c.failed_namespaces == ['/baz']:
c.failed_namespaces = ['/baz', '/foo']
return True
return False
c._connect_event.wait = mock_connect
with pytest.raises(exceptions.ConnectionError,
match='failed to connect: /baz, /foo'):
await c.connect(
'url',
namespaces=['/foo', '/bar', '/baz'],
wait=True,
wait_timeout=0.01,
)
assert c.connected is False
assert c.namespaces == {'/bar': '123'}
assert c.failed_namespaces == ['/baz', '/foo']
async def test_connect_timeout(self): async def test_connect_timeout(self):
c = async_client.AsyncClient() c = async_client.AsyncClient()
c.eio.connect = mock.AsyncMock() c.eio.connect = mock.AsyncMock()

56
tests/common/test_client.py

@ -350,6 +350,62 @@ class TestClient:
assert c.connected is True assert c.connected is True
assert c.namespaces == {'/bar': '123', '/foo': '456'} assert c.namespaces == {'/bar': '123', '/foo': '456'}
def test_connect_wait_one_namespaces_error(self):
c = client.Client()
c.eio.connect = mock.MagicMock()
c._connect_event = mock.MagicMock()
def mock_connect(timeout):
assert timeout == 0.01
if c.failed_namespaces == []:
c.failed_namespaces = ['/foo']
return True
return False
c._connect_event.wait = mock_connect
with pytest.raises(exceptions.ConnectionError,
match='failed to connect: /foo'):
c.connect(
'url',
namespaces=['/foo'],
wait=True,
wait_timeout=0.01,
)
assert c.connected is False
assert c.namespaces == {}
assert c.failed_namespaces == ['/foo']
def test_connect_wait_three_namespaces_error(self):
c = client.Client()
c.eio.connect = mock.MagicMock()
c._connect_event = mock.MagicMock()
def mock_connect(timeout):
assert timeout == 0.01
if c.namespaces == {}:
c.namespaces = {'/bar': '123'}
return True
elif c.namespaces == {'/bar': '123'} and c.failed_namespaces == []:
c.failed_namespaces = ['/baz']
return True
elif c.failed_namespaces == ['/baz']:
c.failed_namespaces = ['/baz', '/foo']
return True
return False
c._connect_event.wait = mock_connect
with pytest.raises(exceptions.ConnectionError,
match='failed to connect: /baz, /foo'):
c.connect(
'url',
namespaces=['/foo', '/bar', '/baz'],
wait=True,
wait_timeout=0.01,
)
assert c.connected is False
assert c.namespaces == {'/bar': '123'}
assert c.failed_namespaces == ['/baz', '/foo']
def test_connect_timeout(self): def test_connect_timeout(self):
c = client.Client() c = client.Client()
c.eio.connect = mock.MagicMock() c.eio.connect = mock.MagicMock()

Loading…
Cancel
Save