Skip to content

Commit f298c9b

Browse files
Fix formatting of client connection error (Fixes #1507)
1 parent 2ffdd55 commit f298c9b

File tree

4 files changed

+112
-2
lines changed

4 files changed

+112
-2
lines changed

src/socketio/async_client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,7 +175,7 @@ async def connect(self, url, headers={}, auth=None, transports=None,
175175
if set(self.namespaces) != set(self.connection_namespaces):
176176
await self.disconnect()
177177
raise exceptions.ConnectionError(
178-
'One or more namespaces failed to connect'
178+
'One or more namespaces failed to connect: ' +
179179
', '.join(self.failed_namespaces))
180180

181181
self.connected = True

src/socketio/client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ def connect(self, url, headers={}, auth=None, transports=None,
168168
if set(self.namespaces) != set(self.connection_namespaces):
169169
self.disconnect()
170170
raise exceptions.ConnectionError(
171-
'One or more namespaces failed to connect: '
171+
'One or more namespaces failed to connect: ' +
172172
', '.join(self.failed_namespaces))
173173

174174
self.connected = True

tests/async/test_client.py

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -203,6 +203,60 @@ async def mock_connect():
203203
assert c.connected is True
204204
assert c.namespaces == {'/bar': '123', '/foo': '456'}
205205

206+
async def test_connect_wait_one_namespaces_error(self):
207+
c = async_client.AsyncClient()
208+
c.eio.connect = mock.AsyncMock()
209+
c._connect_event = mock.MagicMock()
210+
211+
async def mock_connect():
212+
if c.failed_namespaces == []:
213+
c.failed_namespaces = ['/foo']
214+
return True
215+
return False
216+
217+
c._connect_event.wait = mock_connect
218+
with pytest.raises(exceptions.ConnectionError,
219+
match='failed to connect: /foo'):
220+
await c.connect(
221+
'url',
222+
namespaces=['/foo'],
223+
wait=True,
224+
wait_timeout=0.01,
225+
)
226+
assert c.connected is False
227+
assert c.namespaces == {}
228+
assert c.failed_namespaces == ['/foo']
229+
230+
async def test_connect_wait_three_namespaces_error(self):
231+
c = async_client.AsyncClient()
232+
c.eio.connect = mock.AsyncMock()
233+
c._connect_event = mock.MagicMock()
234+
235+
async def mock_connect():
236+
if c.namespaces == {}:
237+
c.namespaces = {'/bar': '123'}
238+
return True
239+
elif c.namespaces == {'/bar': '123'} and c.failed_namespaces == []:
240+
c.failed_namespaces = ['/baz']
241+
return True
242+
elif c.failed_namespaces == ['/baz']:
243+
c.failed_namespaces = ['/baz', '/foo']
244+
return True
245+
return False
246+
247+
c._connect_event.wait = mock_connect
248+
with pytest.raises(exceptions.ConnectionError,
249+
match='failed to connect: /baz, /foo'):
250+
await c.connect(
251+
'url',
252+
namespaces=['/foo', '/bar', '/baz'],
253+
wait=True,
254+
wait_timeout=0.01,
255+
)
256+
assert c.connected is False
257+
assert c.namespaces == {'/bar': '123'}
258+
assert c.failed_namespaces == ['/baz', '/foo']
259+
206260
async def test_connect_timeout(self):
207261
c = async_client.AsyncClient()
208262
c.eio.connect = mock.AsyncMock()

tests/common/test_client.py

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -350,6 +350,62 @@ def mock_connect(timeout):
350350
assert c.connected is True
351351
assert c.namespaces == {'/bar': '123', '/foo': '456'}
352352

353+
def test_connect_wait_one_namespaces_error(self):
354+
c = client.Client()
355+
c.eio.connect = mock.MagicMock()
356+
c._connect_event = mock.MagicMock()
357+
358+
def mock_connect(timeout):
359+
assert timeout == 0.01
360+
if c.failed_namespaces == []:
361+
c.failed_namespaces = ['/foo']
362+
return True
363+
return False
364+
365+
c._connect_event.wait = mock_connect
366+
with pytest.raises(exceptions.ConnectionError,
367+
match='failed to connect: /foo'):
368+
c.connect(
369+
'url',
370+
namespaces=['/foo'],
371+
wait=True,
372+
wait_timeout=0.01,
373+
)
374+
assert c.connected is False
375+
assert c.namespaces == {}
376+
assert c.failed_namespaces == ['/foo']
377+
378+
def test_connect_wait_three_namespaces_error(self):
379+
c = client.Client()
380+
c.eio.connect = mock.MagicMock()
381+
c._connect_event = mock.MagicMock()
382+
383+
def mock_connect(timeout):
384+
assert timeout == 0.01
385+
if c.namespaces == {}:
386+
c.namespaces = {'/bar': '123'}
387+
return True
388+
elif c.namespaces == {'/bar': '123'} and c.failed_namespaces == []:
389+
c.failed_namespaces = ['/baz']
390+
return True
391+
elif c.failed_namespaces == ['/baz']:
392+
c.failed_namespaces = ['/baz', '/foo']
393+
return True
394+
return False
395+
396+
c._connect_event.wait = mock_connect
397+
with pytest.raises(exceptions.ConnectionError,
398+
match='failed to connect: /baz, /foo'):
399+
c.connect(
400+
'url',
401+
namespaces=['/foo', '/bar', '/baz'],
402+
wait=True,
403+
wait_timeout=0.01,
404+
)
405+
assert c.connected is False
406+
assert c.namespaces == {'/bar': '123'}
407+
assert c.failed_namespaces == ['/baz', '/foo']
408+
353409
def test_connect_timeout(self):
354410
c = client.Client()
355411
c.eio.connect = mock.MagicMock()

0 commit comments

Comments
 (0)