diff --git a/tests/slack_sdk/socket_mode/mock_socket_mode_server.py b/tests/slack_sdk/socket_mode/mock_socket_mode_server.py index 02f9b84a..0159696d 100644 --- a/tests/slack_sdk/socket_mode/mock_socket_mode_server.py +++ b/tests/slack_sdk/socket_mode/mock_socket_mode_server.py @@ -159,3 +159,37 @@ def run_server(): loop.close() return run_server + +def start_bad_socket_mode_server(self, port: int): + logger = logging.getLogger(__name__) + state = {} + + def reset_server_state(): + self.state = {} + + self.reset_server_state = reset_server_state + + async def link(request): + return web.Response(status=409) + + app = web.Application() + app.add_routes([web.get("/link", link)]) + runner = web.AppRunner(app) + + def run_server(): + reset_server_state() + + self.loop = loop = asyncio.new_event_loop() + asyncio.set_event_loop(loop) + loop.run_until_complete(runner.setup()) + site = web.TCPSite(runner, "127.0.0.1", port, reuse_port=True) + loop.run_until_complete(site.start()) + + # run until it's stopped from the main thread + loop.run_forever() + + loop.run_until_complete(runner.cleanup()) + loop.run_until_complete(asyncio.sleep(1)) + loop.close() + + return run_server diff --git a/tests/slack_sdk/socket_mode/test_interactions_websocket_client.py b/tests/slack_sdk/socket_mode/test_interactions_websocket_client.py index a1d27ad3..bc8810b7 100644 --- a/tests/slack_sdk/socket_mode/test_interactions_websocket_client.py +++ b/tests/slack_sdk/socket_mode/test_interactions_websocket_client.py @@ -14,6 +14,7 @@ from slack_sdk.socket_mode.websocket_client import SocketModeClient from tests.helpers import is_ci_unstable_test_skip_enabled from tests.slack_sdk.socket_mode.mock_socket_mode_server import ( + start_bad_socket_mode_server, start_socket_mode_server, socket_mode_envelopes, socket_mode_hello_message, @@ -133,3 +134,28 @@ def test_send_message_while_disconnection(self): client.close() self.loop.stop() t.join(timeout=5) + + def test_wss_craps_itself(self): + if is_ci_unstable_test_skip_enabled(): + # this test tends to fail on the GitHub Actions platform + return + t = Thread(target=start_bad_socket_mode_server(self, 3012)) + t.daemon = True + t.start() + time.sleep(2) # wait for the server + + try: + client = SocketModeClient( + app_token="xapp-A111-222-xyz", + web_client=self.web_client, + auto_reconnect_enabled=False, + trace_enabled=True, + ) + client.wss_uri = "ws://0.0.0.0:3012/link" + client.connect() + time.sleep(1) # wait for the connection + assert client.is_connected() is True + finally: + client.close() + self.loop.stop() + t.join(timeout=5)