Skip to content

Commit e4855e4

Browse files
authored
Merge pull request #691 from cpruijsen/fix/issue-567
fix: include the configured port in realtime websocket URLs
2 parents 2d4f17f + 19bb366 commit e4855e4

3 files changed

Lines changed: 46 additions & 3 deletions

File tree

‎ably/transport/websockettransport.py‎

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import msgpack
1212

1313
from ably.http.httputils import HttpUtils
14+
from ably.transport.defaults import Defaults
1415
from ably.types.connectiondetails import ConnectionDetails
1516
from ably.types.operations import PublishResult
1617
from ably.util.eventemitter import EventEmitter
@@ -81,7 +82,8 @@ def connect(self):
8182
headers = HttpUtils.default_headers()
8283
query_params = urllib.parse.urlencode(self.params)
8384
scheme = 'wss' if self.options.tls else 'ws'
84-
ws_url = f'{scheme}://{self.host}?{query_params}'
85+
port = Defaults.get_port(self.options)
86+
ws_url = f'{scheme}://{self.host}:{port}?{query_params}'
8587
log.info(f'connect(): attempting to connect to {ws_url}')
8688
self.ws_connect_task = asyncio.create_task(self.ws_connect(ws_url, headers))
8789
self.ws_connect_task.add_done_callback(self.on_ws_connect_done)

‎test/ably/realtime/realtimeconnection_test.py‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,8 @@ async def close_active_connection(self):
6767

6868
@property
6969
def endpoint(self) -> str:
70-
"""Endpoint string to pass to AblyRealtime (combine with tls=False)."""
71-
return f"127.0.0.1:{self.port}"
70+
"""Host to pass to AblyRealtime (combine with tls=False and port=self.port)."""
71+
return "127.0.0.1"
7272

7373
async def __aenter__(self):
7474
self.server = await ws_serve(self._handler, "127.0.0.1", 0, ping_interval=None)
@@ -242,6 +242,7 @@ async def test_ping_survives_connection_drop(self):
242242
realtime_request_timeout=20000,
243243
tls=False,
244244
endpoint=proxy.endpoint,
245+
port=proxy.port,
245246
)
246247
try:
247248
await asyncio.wait_for(ably.connection.once_async(ConnectionState.CONNECTED), timeout=10)
@@ -654,6 +655,7 @@ async def test_normal_ws_close_triggers_immediate_reconnection(self):
654655
suspended_retry_timeout=500_000,
655656
tls=False,
656657
endpoint=proxy.endpoint,
658+
port=proxy.port,
657659
)
658660

659661
try:
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
from unittest.mock import MagicMock, patch
2+
3+
from ably.transport.websockettransport import WebSocketTransport
4+
from ably.types.options import Options
5+
6+
7+
def _connect_url(host='example.com', **option_kwargs):
8+
connection_manager = MagicMock()
9+
connection_manager.options = Options(auth_token='foo', **option_kwargs)
10+
transport = WebSocketTransport(connection_manager, host, {'format': 'json'})
11+
with patch.object(transport, 'ws_connect', MagicMock()) as mock_ws_connect:
12+
with patch('ably.transport.websockettransport.asyncio.create_task') as mock_create_task:
13+
mock_create_task.return_value = MagicMock()
14+
transport.connect()
15+
return mock_ws_connect.call_args[0][0]
16+
17+
18+
# TO3d, TO3o
19+
def test_websocket_url_uses_wss_and_tls_port_when_tls_enabled():
20+
url = _connect_url(tls=True, tls_port=9999)
21+
assert url == 'wss://example.com:9999?format=json'
22+
23+
24+
# TO3d, TO3n
25+
def test_websocket_url_uses_ws_and_port_when_tls_disabled():
26+
url = _connect_url(tls=False, port=9998)
27+
assert url == 'ws://example.com:9998?format=json'
28+
29+
30+
# TO3d, TO3o
31+
def test_websocket_url_defaults_to_wss_and_443():
32+
url = _connect_url()
33+
assert url == 'wss://example.com:443?format=json'
34+
35+
36+
# TO3d, TO3n
37+
def test_websocket_url_defaults_to_ws_and_80_when_tls_disabled():
38+
url = _connect_url(tls=False)
39+
assert url == 'ws://example.com:80?format=json'

0 commit comments

Comments
 (0)