Skip to content

Commit 2e7dc79

Browse files
author
Filip Maj
committed
test: try to implement websocket server 409 integration test
1 parent f2bb2d2 commit 2e7dc79

File tree

2 files changed

+77
-0
lines changed

2 files changed

+77
-0
lines changed

tests/adapter_tests/socket_mode/mock_socket_mode_server.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@ def reset_server_state():
2626

2727
test.reset_server_state = reset_server_state
2828

29+
async def error(request: web.Request):
30+
return web.Response(status=409, text="Unexpected server response: 409")
31+
2932
async def health(request: web.Request):
3033
wr = web.Response()
3134
await wr.prepare(request)
@@ -56,6 +59,7 @@ async def link(request: web.Request):
5659
app.add_routes(
5760
[
5861
web.get("/link", link),
62+
web.get("/error", error),
5963
web.get("/health", health),
6064
]
6165
)
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
import logging
2+
import time
3+
4+
from slack_sdk import WebClient
5+
6+
from slack_bolt import App
7+
from slack_bolt.adapter.socket_mode.websocket_client import SocketModeHandler
8+
from .mock_socket_mode_server import (
9+
start_socket_mode_server,
10+
stop_socket_mode_server,
11+
)
12+
from .mock_web_api_server import (
13+
setup_mock_web_api_server,
14+
cleanup_mock_web_api_server,
15+
)
16+
from ...utils import remove_os_env_temporarily, restore_os_env
17+
18+
19+
class TestSocketModeServerFailures:
20+
logger = logging.getLogger(__name__)
21+
22+
def setup_method(self):
23+
self.old_os_env = remove_os_env_temporarily()
24+
setup_mock_web_api_server(self)
25+
self.web_client = WebClient(
26+
token="xoxb-api_test",
27+
base_url="http://localhost:8888",
28+
)
29+
start_socket_mode_server(self, 3012)
30+
31+
def teardown_method(self):
32+
cleanup_mock_web_api_server(self)
33+
restore_os_env(self.old_os_env)
34+
stop_socket_mode_server(self)
35+
36+
def test_interactions(self):
37+
38+
app = App(client=self.web_client)
39+
40+
result = {"shortcut": False, "command": False}
41+
42+
@app.shortcut("do-something")
43+
def shortcut_handler(ack):
44+
result["shortcut"] = True
45+
ack()
46+
47+
@app.command("/hello-socket-mode")
48+
def command_handler(ack):
49+
result["command"] = True
50+
ack()
51+
52+
handler = SocketModeHandler(
53+
app_token="xapp-A111-222-xyz",
54+
app=app,
55+
trace_enabled=True,
56+
)
57+
try:
58+
handler.client.wss_uri = "ws://localhost:3012/error"
59+
handler.client.default_auto_reconnect_enabled = True
60+
61+
handler.connect()
62+
time.sleep(2) # wait for the message receiver
63+
assert handler.client.is_connected() is True
64+
logging.info("is client connected?")
65+
logging.info(handler.client.is_connected())
66+
67+
# handler.client.send_message("foo")
68+
69+
# time.sleep(2)
70+
# assert result["shortcut"] is True
71+
# assert result["command"] is True
72+
finally:
73+
handler.client.close()

0 commit comments

Comments
 (0)