Skip to content

Commit a4d9be4

Browse files
committed
allow +1 request in rate limit tests
1 parent 1138160 commit a4d9be4

File tree

5 files changed

+131
-65
lines changed

5 files changed

+131
-65
lines changed

tests/suite/test_rl_policies.py

Lines changed: 48 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,14 @@
44
import pytest
55
import requests
66
from settings import TEST_DATA
7-
from suite.utils.custom_assertions import assert_event
87
from suite.utils.custom_resources_utils import read_custom_resource
98
from suite.utils.policy_resources_utils import apply_and_assert_valid_policy, create_policy_from_yaml, delete_policy
109
from suite.utils.resources_utils import (
11-
get_events,
1210
get_pod_list,
1311
get_vs_nginx_template_conf,
1412
scale_deployment,
1513
wait_before_test,
14+
wait_for_event,
1615
)
1716
from suite.utils.vs_vsr_resources_utils import (
1817
apply_and_assert_valid_vs,
@@ -86,7 +85,7 @@ def restore_default_vs(self, kube_apis, virtual_server_setup) -> None:
8685
create_virtual_server_from_yaml(kube_apis.custom_objects, std_vs_src, virtual_server_setup.namespace)
8786
wait_before_test()
8887

89-
def check_rate_limit(self, url, code, counter, headers={}):
88+
def check_rate_limit_eq(self, url, code, counter, delay=0.01, headers={}):
9089
occur = []
9190
t_end = time.perf_counter() + 1
9291
while time.perf_counter() < t_end:
@@ -95,7 +94,24 @@ def check_rate_limit(self, url, code, counter, headers={}):
9594
headers=headers,
9695
)
9796
occur.append(resp.status_code)
98-
assert occur.count(code) == counter
97+
wait_before_test(delay)
98+
assert occur.count(code) in range(counter, counter + 2)
99+
100+
def check_rate_limit_nearly_eq(self, url, code, counter, plus_minus=1, delay=0.01, headers={}):
101+
occur = []
102+
t_end = time.perf_counter() + 1
103+
while time.perf_counter() < t_end:
104+
resp = requests.get(
105+
url,
106+
headers=headers,
107+
)
108+
occur.append(resp.status_code)
109+
wait_before_test(delay)
110+
lower_range = counter
111+
if counter > 1:
112+
lower_range = counter - plus_minus
113+
upper_range = counter + plus_minus + 1 # add an extra 1 to account for range
114+
assert occur.count(code) in range(lower_range, upper_range)
99115

100116
@pytest.mark.smoke
101117
@pytest.mark.parametrize("src", [rl_vs_pri_src])
@@ -121,7 +137,7 @@ def test_rl_policy_1rs(
121137
)
122138

123139
# Run rate limit test 1r/s
124-
self.check_rate_limit(
140+
self.check_rate_limit_nearly_eq(
125141
virtual_server_setup.backend_1_url,
126142
200,
127143
1,
@@ -154,7 +170,7 @@ def test_rl_policy_5rs(
154170
)
155171

156172
# Run rate limit test 5r/s
157-
self.check_rate_limit(
173+
self.check_rate_limit_nearly_eq(
158174
virtual_server_setup.backend_1_url,
159175
200,
160176
5,
@@ -262,7 +278,7 @@ def test_rl_override(
262278
)
263279

264280
# Run rate limit test 1r/s
265-
self.check_rate_limit(
281+
self.check_rate_limit_nearly_eq(
266282
virtual_server_setup.backend_1_url,
267283
200,
268284
1,
@@ -299,7 +315,7 @@ def test_rl_override_spec_route(
299315
)
300316

301317
# Run rate limit test 5r/s
302-
self.check_rate_limit(
318+
self.check_rate_limit_nearly_eq(
303319
virtual_server_setup.backend_1_url,
304320
200,
305321
5,
@@ -382,7 +398,7 @@ def test_rl_policy_jwt_claim_sub(
382398
algorithm="HS256",
383399
)
384400

385-
self.check_rate_limit(
401+
self.check_rate_limit_nearly_eq(
386402
virtual_server_setup.backend_1_url,
387403
200,
388404
1,
@@ -435,7 +451,7 @@ def test_speclevel_rl_policy_tiered_basic_premium_no_default_jwt_claim_sub(
435451
)
436452

437453
##  Test Basic Rate Limit 1r/s
438-
self.check_rate_limit(
454+
self.check_rate_limit_nearly_eq(
439455
virtual_server_setup.backend_1_url,
440456
200,
441457
1,
@@ -444,7 +460,7 @@ def test_speclevel_rl_policy_tiered_basic_premium_no_default_jwt_claim_sub(
444460
wait_before_test(1)
445461

446462
##  Test Premium Rate Limit 5r/s
447-
self.check_rate_limit(
463+
self.check_rate_limit_nearly_eq(
448464
virtual_server_setup.backend_1_url,
449465
200,
450466
5,
@@ -453,7 +469,7 @@ def test_speclevel_rl_policy_tiered_basic_premium_no_default_jwt_claim_sub(
453469
wait_before_test(1)
454470

455471
##  Test Default Rate Limit unlimited
456-
self.check_rate_limit(
472+
self.check_rate_limit_eq(
457473
virtual_server_setup.backend_1_url, 503, 0, headers={"host": virtual_server_setup.vs_host}
458474
)
459475

@@ -505,7 +521,7 @@ def test_speclevel_rl_policy_tiered_basic_premium_with_default_jwt_claim_sub(
505521
)
506522

507523
##  Test Default Rate Limit 1r/s
508-
self.check_rate_limit(
524+
self.check_rate_limit_nearly_eq(
509525
virtual_server_setup.backend_1_url,
510526
200,
511527
1,
@@ -514,7 +530,7 @@ def test_speclevel_rl_policy_tiered_basic_premium_with_default_jwt_claim_sub(
514530
wait_before_test(1)
515531

516532
##  Test Premium Rate Limit 5r/s
517-
self.check_rate_limit(
533+
self.check_rate_limit_nearly_eq(
518534
virtual_server_setup.backend_1_url,
519535
200,
520536
5,
@@ -523,7 +539,7 @@ def test_speclevel_rl_policy_tiered_basic_premium_with_default_jwt_claim_sub(
523539
wait_before_test(1)
524540

525541
##  Test Default Rate Limit 1r/s
526-
self.check_rate_limit(
542+
self.check_rate_limit_nearly_eq(
527543
virtual_server_setup.backend_1_url, 200, 1, headers={"host": virtual_server_setup.vs_host}
528544
)
529545

@@ -576,7 +592,7 @@ def test_routelevel_rl_policy_tiered_basic_premium_with_default_jwt_claim_sub(
576592
)
577593

578594
##  Test Basic Rate Limit 1r/s
579-
self.check_rate_limit(
595+
self.check_rate_limit_nearly_eq(
580596
virtual_server_setup.backend_1_url,
581597
200,
582598
1,
@@ -585,7 +601,7 @@ def test_routelevel_rl_policy_tiered_basic_premium_with_default_jwt_claim_sub(
585601
wait_before_test(1)
586602

587603
##  Test Premium Rate Limit 5r/s
588-
self.check_rate_limit(
604+
self.check_rate_limit_nearly_eq(
589605
virtual_server_setup.backend_1_url,
590606
200,
591607
5,
@@ -594,13 +610,13 @@ def test_routelevel_rl_policy_tiered_basic_premium_with_default_jwt_claim_sub(
594610
wait_before_test(1)
595611

596612
##  Test Default Rate Limit 1r/s
597-
self.check_rate_limit(
613+
self.check_rate_limit_nearly_eq(
598614
virtual_server_setup.backend_1_url, 200, 1, headers={"host": virtual_server_setup.vs_host}
599615
)
600616
wait_before_test(1)
601617

602618
##  Test different backend route
603-
self.check_rate_limit(
619+
self.check_rate_limit_eq(
604620
virtual_server_setup.backend_2_url, 503, 0, headers={"host": virtual_server_setup.vs_host}
605621
)
606622

@@ -650,7 +666,7 @@ def test_routelevel_rl_policy_tiered_basic_premium_no_default_jwt_claim_sub(
650666
algorithm="HS256",
651667
)
652668

653-
self.check_rate_limit(
669+
self.check_rate_limit_nearly_eq(
654670
virtual_server_setup.backend_1_url,
655671
200,
656672
1,
@@ -659,7 +675,7 @@ def test_routelevel_rl_policy_tiered_basic_premium_no_default_jwt_claim_sub(
659675
wait_before_test(1)
660676

661677
##  Test Premium Rate Limit 5r/s
662-
self.check_rate_limit(
678+
self.check_rate_limit_nearly_eq(
663679
virtual_server_setup.backend_1_url,
664680
200,
665681
5,
@@ -668,13 +684,13 @@ def test_routelevel_rl_policy_tiered_basic_premium_no_default_jwt_claim_sub(
668684
wait_before_test(1)
669685

670686
##  Test Default Rate Limit unlimited
671-
self.check_rate_limit(
687+
self.check_rate_limit_eq(
672688
virtual_server_setup.backend_1_url, 503, 0, headers={"host": virtual_server_setup.vs_host}
673689
)
674690
wait_before_test(1)
675691

676692
##  Test different backend route
677-
self.check_rate_limit(
693+
self.check_rate_limit_eq(
678694
virtual_server_setup.backend_2_url, 503, 0, headers={"host": virtual_server_setup.vs_host}
679695
)
680696
wait_before_test(1)
@@ -714,11 +730,16 @@ def test_rl_duplicate_default_policy_tiered_basic_premium_with_default_jwt_claim
714730
src,
715731
)
716732

717-
wait_before_test(60)
718733
# Assert that the 'AddedOrUpdatedWithWarning' event is present
719-
assert_event(
720-
f"Tiered rate-limit Policies on [{virtual_server_setup.namespace}/{virtual_server_setup.vs_name}] contain conflicting default values",
721-
get_events(kube_apis.v1, virtual_server_setup.namespace),
734+
assert (
735+
wait_for_event(
736+
kube_apis.v1,
737+
f"Tiered rate-limit Policies on [{virtual_server_setup.namespace}/{virtual_server_setup.vs_name}] contain conflicting default values",
738+
virtual_server_setup.namespace,
739+
virtual_server_setup.vs_name,
740+
30,
741+
)
742+
is True
722743
)
723744

724745
delete_policy(kube_apis.custom_objects, basic_pol_name, test_namespace)

0 commit comments

Comments
 (0)