Skip to content

Commit 2325aff

Browse files
committed
add test cases for the should_ratelimit function
1 parent b2596e2 commit 2325aff

File tree

1 file changed

+163
-0
lines changed

1 file changed

+163
-0
lines changed

aikido_zen/ratelimiting/init_test.py

Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,3 +348,166 @@ def test_rate_limiting_bypassed_ip_with_user():
348348
assert should_ratelimit_request(metadata, "1.2.3.4", {"id": "123"}, cm) == {
349349
"block": False
350350
}
351+
352+
353+
def test_rate_limits_by_user_with_different_ips():
354+
user = {"id": "123"}
355+
cm = create_connection_manager(
356+
[
357+
{
358+
"method": "POST",
359+
"route": "/login",
360+
"forceProtectionOff": False,
361+
"rateLimiting": {
362+
"enabled": True,
363+
"maxRequests": 3,
364+
"windowSizeInMS": 1000,
365+
},
366+
},
367+
]
368+
)
369+
route_metadata = create_route_metadata()
370+
# First request from user 123, IP 1.2.3.4
371+
assert should_ratelimit_request(route_metadata, "1.2.3.4", user, cm, "group1") == {
372+
"block": False
373+
}
374+
# First request from user 123, IP 4.3.2.1
375+
assert should_ratelimit_request(route_metadata, "4.3.2.1", user, cm, "group1") == {
376+
"block": False
377+
}
378+
# Second request from user 123, IP 1.2.3.4
379+
assert should_ratelimit_request(route_metadata, "1.2.3.4", user, cm, "group1") == {
380+
"block": False
381+
}
382+
# This request should trigger the rate limit by group
383+
assert should_ratelimit_request(route_metadata, "4.3.2.1", user, cm, "group1") == {
384+
"block": True,
385+
"trigger": "group",
386+
}
387+
388+
389+
def test_rate_limits_different_users_in_same_group():
390+
cm = create_connection_manager(
391+
[
392+
{
393+
"method": "POST",
394+
"route": "/login",
395+
"forceProtectionOff": False,
396+
"rateLimiting": {
397+
"enabled": True,
398+
"maxRequests": 3,
399+
"windowSizeInMS": 1000,
400+
},
401+
},
402+
]
403+
)
404+
route_metadata = create_route_metadata()
405+
# First request from user 123, IP 1.2.3.4
406+
assert should_ratelimit_request(
407+
route_metadata, "1.2.3.4", {"id": "123"}, cm, "group1"
408+
) == {"block": False}
409+
# First request from user 456, IP 4.3.2.1
410+
assert should_ratelimit_request(
411+
route_metadata, "4.3.2.1", {"id": "456"}, cm, "group1"
412+
) == {"block": False}
413+
# Second request from user 789, IP 1.2.3.4
414+
assert should_ratelimit_request(
415+
route_metadata, "1.2.3.4", {"id": "789"}, cm, "group1"
416+
) == {"block": False}
417+
# This request should trigger the rate limit by group
418+
assert should_ratelimit_request(
419+
route_metadata, "4.3.2.1", {"id": "101112"}, cm, "group1"
420+
) == {
421+
"block": True,
422+
"trigger": "group",
423+
}
424+
425+
426+
def test_works_with_multiple_rate_limit_groups_and_different_users():
427+
cm = create_connection_manager(
428+
[
429+
{
430+
"method": "POST",
431+
"route": "/login",
432+
"forceProtectionOff": False,
433+
"rateLimiting": {
434+
"enabled": True,
435+
"maxRequests": 2,
436+
"windowSizeInMS": 1000,
437+
},
438+
},
439+
]
440+
)
441+
route_metadata = create_route_metadata()
442+
# First request from user 123, group1
443+
assert should_ratelimit_request(
444+
route_metadata, "1.2.3.4", {"id": "123"}, cm, "group1"
445+
) == {"block": False}
446+
# Second request from user 789, group1
447+
assert should_ratelimit_request(
448+
route_metadata, "1.2.3.4", {"id": "789"}, cm, "group1"
449+
) == {"block": False}
450+
# First request from user 101112, group2
451+
assert should_ratelimit_request(
452+
route_metadata, "4.3.2.1", {"id": "101112"}, cm, "group2"
453+
) == {"block": False}
454+
# This request should trigger the rate limit for group1
455+
assert should_ratelimit_request(
456+
route_metadata, "1.2.3.4", {"id": "789"}, cm, "group1"
457+
) == {
458+
"block": True,
459+
"trigger": "group",
460+
}
461+
# This request should also trigger the rate limit for group1
462+
assert should_ratelimit_request(
463+
route_metadata, "1.2.3.4", {"id": "4321"}, cm, "group1"
464+
) == {
465+
"block": True,
466+
"trigger": "group",
467+
}
468+
# First request from user 953, group2
469+
assert should_ratelimit_request(
470+
route_metadata, "4.3.2.1", {"id": "953"}, cm, "group2"
471+
) == {"block": False}
472+
# This request should trigger the rate limit for group2
473+
assert should_ratelimit_request(
474+
route_metadata, "4.3.2.1", {"id": "1563"}, cm, "group2"
475+
) == {
476+
"block": True,
477+
"trigger": "group",
478+
}
479+
480+
481+
def test_rate_limits_by_group_if_user_is_not_set():
482+
cm = create_connection_manager(
483+
[
484+
{
485+
"method": "POST",
486+
"route": "/login",
487+
"forceProtectionOff": False,
488+
"rateLimiting": {
489+
"enabled": True,
490+
"maxRequests": 3,
491+
"windowSizeInMS": 1000,
492+
},
493+
},
494+
]
495+
)
496+
route_metadata = create_route_metadata()
497+
# First request, no user, IP 1.2.3.4
498+
assert should_ratelimit_request(route_metadata, "1.2.3.4", None, cm, "group1") == {
499+
"block": False
500+
}
501+
# Second request, no user, IP 4.3.2.1
502+
assert should_ratelimit_request(route_metadata, "4.3.2.1", None, cm, "group1") == {
503+
"block": False
504+
}
505+
# Third request, no user, IP 1.2.3.4
506+
assert should_ratelimit_request(route_metadata, "1.2.3.4", None, cm, "group1") == {
507+
"block": False
508+
}
509+
# This request should trigger the rate limit by group
510+
assert should_ratelimit_request(route_metadata, "4.3.2.1", None, cm, "group1") == {
511+
"block": True,
512+
"trigger": "group",
513+
}

0 commit comments

Comments
 (0)