33import pytest
44import requests
55import responses
6+ from mock import patch
67from slackclient .user import User
78from slackclient .server import Server , SlackLoginError , SlackConnectionError
89from slackclient .channel import Channel
@@ -51,25 +52,23 @@ def test_server_is_hashable(server):
5152 assert (server_map [server ] == 'foo' ) is False
5253
5354
54- def test_response_headers (server ):
55+ @patch ('time.sleep' , return_value = None )
56+ def test_rate_limiting (patched_time_sleep , server ):
5557 # Testing for rate limit retry headers
5658 with responses .RequestsMock () as rsps :
5759 rsps .add (
5860 responses .POST ,
59- "https://slack.com/api/auth.test " ,
61+ "https://slack.com/api/rtm.start " ,
6062 status = 429 ,
6163 json = {"ok" : False },
6264 headers = {'Retry-After' : "1" }
6365 )
6466
65- res = json .loads (server .api_call ("auth.test" ))
66-
67- for call in rsps .calls :
68- assert call .request .url in [
69- "https://slack.com/api/auth.test"
70- ]
71- assert call .response .status_code == 429
72- assert res ["headers" ]['Retry-After' ] == "1"
67+ with pytest .raises (SlackConnectionError ) as e :
68+ server .rtm_connect ()
69+ for call in rsps .calls :
70+ assert call .response .status_code == 429
71+ assert e .message == "RTM connection attempt was rate limited 10 times."
7372
7473
7574def test_custom_agent (server ):
@@ -147,6 +146,23 @@ def test_rtm_reconnect(server, rtm_start_fixture):
147146 ]
148147
149148
149+ @patch ('time.sleep' , return_value = None )
150+ def test_rtm_max_reconnect_timeout (patched_time_sleep , server , rtm_start_fixture ):
151+ with responses .RequestsMock () as rsps :
152+ rsps .add (
153+ responses .POST ,
154+ "https://slack.com/api/rtm.connect" ,
155+ status = 200 ,
156+ json = rtm_start_fixture
157+ )
158+
159+ server .reconnect_count = 4
160+ server .last_connected_at = time .time ()
161+ server .rtm_connect (auto_reconnect = True , reconnect = True , use_rtm_start = False )
162+
163+ assert server .reconnect_count == 5
164+
165+
150166def test_rtm_reconnect_timeout_recently_connected (server , rtm_start_fixture ):
151167 # If reconnected recently, server must wait to reconnect and increment the counter
152168 with responses .RequestsMock () as rsps :
@@ -157,11 +173,11 @@ def test_rtm_reconnect_timeout_recently_connected(server, rtm_start_fixture):
157173 json = rtm_start_fixture
158174 )
159175
160- server .reconnect_attempt = 0
176+ server .reconnect_count = 0
161177 server .last_connected_at = time .time ()
162178 server .rtm_connect (auto_reconnect = True , reconnect = True , use_rtm_start = False )
163179
164- assert server .reconnect_attempt == 1
180+ assert server .reconnect_count == 1
165181 for call in rsps .calls :
166182 assert call .request .url in [
167183 "https://slack.com/api/rtm.connect"
@@ -178,20 +194,21 @@ def test_rtm_reconnect_timeout_not_recently_connected(server, rtm_start_fixture)
178194 json = rtm_start_fixture
179195 )
180196
181- server .reconnect_attempt = 1
197+ server .reconnect_count = 1
182198 server .last_connected_at = time .time () - 180
183199 server .rtm_connect (auto_reconnect = True , reconnect = True , use_rtm_start = False )
184200
185- assert server .reconnect_attempt == 0
201+ assert server .reconnect_count == 0
186202 for call in rsps .calls :
187203 assert call .request .url in [
188204 "https://slack.com/api/rtm.connect"
189205 ]
190206
191207
192- def test_max_rtm_reconnect_attempts (server ):
208+ def test_max_rtm_reconnects (server , monkeypatch ):
209+ monkeypatch .setattr ("time.sleep" , None )
193210 with pytest .raises (SlackConnectionError ) as e :
194- server .reconnect_attempt = 5
211+ server .reconnect_count = 5
195212 server .rtm_connect (auto_reconnect = True , reconnect = True , use_rtm_start = False )
196213 assert e .message == "RTM connection failed, reached max reconnects."
197214
0 commit comments