Skip to content

Commit 9bcf656

Browse files
[Feat]: add retry testing
Signed-off-by: Peng Gao <[email protected]>
1 parent 274393c commit 9bcf656

File tree

1 file changed

+36
-13
lines changed

1 file changed

+36
-13
lines changed

src/tests/test_session_router.py

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,10 @@ def test_route_request_with_session_id():
3636
request = Request(headers={"session_id": "abc123"})
3737

3838
router = SessionRouter(session_key="session_id")
39-
url = router.route_request(endpoints, None, request_stats, request)
39+
url = router.route_request(endpoints, None, request_stats, request)[0]
4040

4141
# Ensure the same session ID always maps to the same endpoint
42-
assert url == router.route_request(endpoints, None, request_stats, request)
42+
assert url == router.route_request(endpoints, None, request_stats, request)[0]
4343

4444

4545
def test_route_request_without_session_id():
@@ -57,7 +57,7 @@ def test_route_request_without_session_id():
5757
request = Request(headers={}) # No session ID
5858

5959
router = SessionRouter(session_key="session_id")
60-
url = router.route_request(endpoints, None, request_stats, request)
60+
url = router.route_request(endpoints, None, request_stats, request)[0]
6161

6262
# Ensure the endpoint with the lowest QPS is selected
6363
assert url == "http://engine2.com"
@@ -78,12 +78,12 @@ def test_route_request_with_dynamic_endpoints():
7878
request = Request(headers={"session_id": "abc123"})
7979

8080
router = SessionRouter(session_key="session_id")
81-
url1 = router.route_request(endpoints, None, request_stats, request)
81+
url1 = router.route_request(endpoints, None, request_stats, request)[0]
8282

8383
# Add a new endpoint
8484
endpoints.append(EndpointInfo(url="http://engine3.com"))
8585
request_stats["http://engine3.com"] = RequestStats(qps=2)
86-
url2 = router.route_request(endpoints, None, request_stats, request)
86+
url2 = router.route_request(endpoints, None, request_stats, request)[0]
8787

8888
# Ensure the session ID is still mapped to a valid endpoint
8989
assert url2 in [endpoint.url for endpoint in endpoints]
@@ -110,7 +110,7 @@ def test_consistent_hashing_remove_node_multiple_sessions():
110110

111111
# Route with initial endpoints
112112
urls_before = [
113-
router.route_request(endpoints, None, request_stats, req) for req in requests
113+
router.route_request(endpoints, None, request_stats, req)[0] for req in requests
114114
]
115115

116116
# Remove an endpoint
@@ -119,9 +119,8 @@ def test_consistent_hashing_remove_node_multiple_sessions():
119119

120120
# Route with the updated endpoints
121121
urls_after = [
122-
router.route_request(endpoints, None, request_stats, req) for req in requests
122+
router.route_request(endpoints, None, request_stats, req)[0] for req in requests
123123
]
124-
125124
# Ensure all session IDs are still mapped to valid endpoints
126125
assert all(url in [endpoint.url for endpoint in endpoints] for url in urls_after)
127126

@@ -155,7 +154,7 @@ def test_consistent_hashing_add_node_multiple_sessions():
155154

156155
# Route with initial endpoints
157156
urls_before = [
158-
router.route_request(endpoints, None, request_stats, req) for req in requests
157+
router.route_request(endpoints, None, request_stats, req)[0] for req in requests
159158
]
160159

161160
# Add a new endpoint
@@ -165,7 +164,7 @@ def test_consistent_hashing_add_node_multiple_sessions():
165164

166165
# Route with the updated endpoints
167166
urls_after = [
168-
router.route_request(endpoints, None, request_stats, req) for req in requests
167+
router.route_request(endpoints, None, request_stats, req)[0] for req in requests
169168
]
170169

171170
# Ensure all session IDs are still mapped to valid endpoints
@@ -201,7 +200,7 @@ def test_consistent_hashing_add_then_remove_node():
201200

202201
# Route with initial endpoints
203202
urls_before_add = [
204-
router.route_request(endpoints, None, request_stats, req) for req in requests
203+
router.route_request(endpoints, None, request_stats, req)[0] for req in requests
205204
]
206205

207206
# Add a new endpoint
@@ -211,7 +210,7 @@ def test_consistent_hashing_add_then_remove_node():
211210

212211
# Route with the updated endpoints (after adding)
213212
urls_after_add = [
214-
router.route_request(endpoints, None, request_stats, req) for req in requests
213+
router.route_request(endpoints, None, request_stats, req)[0] for req in requests
215214
]
216215

217216
# Ensure all session IDs are still mapped to valid endpoints
@@ -233,7 +232,7 @@ def test_consistent_hashing_add_then_remove_node():
233232

234233
# Route with the updated endpoints (after removing)
235234
urls_after_remove = [
236-
router.route_request(endpoints, None, request_stats, req) for req in requests
235+
router.route_request(endpoints, None, request_stats, req)[0] for req in requests
237236
]
238237

239238
# Ensure all session IDs are still mapped to valid endpoints
@@ -258,3 +257,27 @@ def test_consistent_hashing_add_then_remove_node():
258257
print(
259258
f"{unaffected_count} out of {len(session_ids)} session IDs were unaffected by adding and removing a node."
260259
)
260+
261+
262+
def test_n_candidates():
263+
"""
264+
Test the candidates returned by the router without session id should be sorted.
265+
"""
266+
endpoints = [
267+
EndpointInfo(url="http://engine1.com"),
268+
EndpointInfo(url="http://engine2.com"),
269+
EndpointInfo(url="http://engine3.com"),
270+
]
271+
request_stats = {
272+
"http://engine1.com": RequestStats(qps=10),
273+
"http://engine2.com": RequestStats(qps=5),
274+
"http://engine3.com": RequestStats(qps=2),
275+
}
276+
request = Request(headers={}) # No session ID
277+
278+
router = SessionRouter(session_key="session_id")
279+
# Route with 2 candidates.
280+
candidates = router.route_request(endpoints, None, request_stats, request, 2)
281+
282+
# Ensure the candidates are sorted by QPS
283+
assert candidates == ["http://engine3.com", "http://engine2.com"]

0 commit comments

Comments
 (0)