4
4
import pytest
5
5
import requests
6
6
from settings import TEST_DATA
7
- from suite .utils .custom_assertions import assert_event
8
7
from suite .utils .custom_resources_utils import read_custom_resource
9
8
from suite .utils .policy_resources_utils import apply_and_assert_valid_policy , create_policy_from_yaml , delete_policy
10
9
from suite .utils .resources_utils import (
11
- get_events ,
12
10
get_pod_list ,
13
11
get_vs_nginx_template_conf ,
14
12
scale_deployment ,
15
13
wait_before_test ,
14
+ wait_for_event ,
16
15
)
17
16
from suite .utils .vs_vsr_resources_utils import (
18
17
apply_and_assert_valid_vs ,
@@ -86,7 +85,7 @@ def restore_default_vs(self, kube_apis, virtual_server_setup) -> None:
86
85
create_virtual_server_from_yaml (kube_apis .custom_objects , std_vs_src , virtual_server_setup .namespace )
87
86
wait_before_test ()
88
87
89
- def check_rate_limit (self , url , code , counter , headers = {}):
88
+ def check_rate_limit_eq (self , url , code , counter , delay = 0.01 , headers = {}):
90
89
occur = []
91
90
t_end = time .perf_counter () + 1
92
91
while time .perf_counter () < t_end :
@@ -95,7 +94,24 @@ def check_rate_limit(self, url, code, counter, headers={}):
95
94
headers = headers ,
96
95
)
97
96
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 )
99
115
100
116
@pytest .mark .smoke
101
117
@pytest .mark .parametrize ("src" , [rl_vs_pri_src ])
@@ -121,7 +137,7 @@ def test_rl_policy_1rs(
121
137
)
122
138
123
139
# Run rate limit test 1r/s
124
- self .check_rate_limit (
140
+ self .check_rate_limit_nearly_eq (
125
141
virtual_server_setup .backend_1_url ,
126
142
200 ,
127
143
1 ,
@@ -154,7 +170,7 @@ def test_rl_policy_5rs(
154
170
)
155
171
156
172
# Run rate limit test 5r/s
157
- self .check_rate_limit (
173
+ self .check_rate_limit_nearly_eq (
158
174
virtual_server_setup .backend_1_url ,
159
175
200 ,
160
176
5 ,
@@ -262,7 +278,7 @@ def test_rl_override(
262
278
)
263
279
264
280
# Run rate limit test 1r/s
265
- self .check_rate_limit (
281
+ self .check_rate_limit_nearly_eq (
266
282
virtual_server_setup .backend_1_url ,
267
283
200 ,
268
284
1 ,
@@ -299,7 +315,7 @@ def test_rl_override_spec_route(
299
315
)
300
316
301
317
# Run rate limit test 5r/s
302
- self .check_rate_limit (
318
+ self .check_rate_limit_nearly_eq (
303
319
virtual_server_setup .backend_1_url ,
304
320
200 ,
305
321
5 ,
@@ -382,7 +398,7 @@ def test_rl_policy_jwt_claim_sub(
382
398
algorithm = "HS256" ,
383
399
)
384
400
385
- self .check_rate_limit (
401
+ self .check_rate_limit_nearly_eq (
386
402
virtual_server_setup .backend_1_url ,
387
403
200 ,
388
404
1 ,
@@ -435,7 +451,7 @@ def test_speclevel_rl_policy_tiered_basic_premium_no_default_jwt_claim_sub(
435
451
)
436
452
437
453
## Test Basic Rate Limit 1r/s
438
- self .check_rate_limit (
454
+ self .check_rate_limit_nearly_eq (
439
455
virtual_server_setup .backend_1_url ,
440
456
200 ,
441
457
1 ,
@@ -444,7 +460,7 @@ def test_speclevel_rl_policy_tiered_basic_premium_no_default_jwt_claim_sub(
444
460
wait_before_test (1 )
445
461
446
462
## Test Premium Rate Limit 5r/s
447
- self .check_rate_limit (
463
+ self .check_rate_limit_nearly_eq (
448
464
virtual_server_setup .backend_1_url ,
449
465
200 ,
450
466
5 ,
@@ -453,7 +469,7 @@ def test_speclevel_rl_policy_tiered_basic_premium_no_default_jwt_claim_sub(
453
469
wait_before_test (1 )
454
470
455
471
## Test Default Rate Limit unlimited
456
- self .check_rate_limit (
472
+ self .check_rate_limit_eq (
457
473
virtual_server_setup .backend_1_url , 503 , 0 , headers = {"host" : virtual_server_setup .vs_host }
458
474
)
459
475
@@ -505,7 +521,7 @@ def test_speclevel_rl_policy_tiered_basic_premium_with_default_jwt_claim_sub(
505
521
)
506
522
507
523
## Test Default Rate Limit 1r/s
508
- self .check_rate_limit (
524
+ self .check_rate_limit_nearly_eq (
509
525
virtual_server_setup .backend_1_url ,
510
526
200 ,
511
527
1 ,
@@ -514,7 +530,7 @@ def test_speclevel_rl_policy_tiered_basic_premium_with_default_jwt_claim_sub(
514
530
wait_before_test (1 )
515
531
516
532
## Test Premium Rate Limit 5r/s
517
- self .check_rate_limit (
533
+ self .check_rate_limit_nearly_eq (
518
534
virtual_server_setup .backend_1_url ,
519
535
200 ,
520
536
5 ,
@@ -523,7 +539,7 @@ def test_speclevel_rl_policy_tiered_basic_premium_with_default_jwt_claim_sub(
523
539
wait_before_test (1 )
524
540
525
541
## Test Default Rate Limit 1r/s
526
- self .check_rate_limit (
542
+ self .check_rate_limit_nearly_eq (
527
543
virtual_server_setup .backend_1_url , 200 , 1 , headers = {"host" : virtual_server_setup .vs_host }
528
544
)
529
545
@@ -576,7 +592,7 @@ def test_routelevel_rl_policy_tiered_basic_premium_with_default_jwt_claim_sub(
576
592
)
577
593
578
594
## Test Basic Rate Limit 1r/s
579
- self .check_rate_limit (
595
+ self .check_rate_limit_nearly_eq (
580
596
virtual_server_setup .backend_1_url ,
581
597
200 ,
582
598
1 ,
@@ -585,7 +601,7 @@ def test_routelevel_rl_policy_tiered_basic_premium_with_default_jwt_claim_sub(
585
601
wait_before_test (1 )
586
602
587
603
## Test Premium Rate Limit 5r/s
588
- self .check_rate_limit (
604
+ self .check_rate_limit_nearly_eq (
589
605
virtual_server_setup .backend_1_url ,
590
606
200 ,
591
607
5 ,
@@ -594,13 +610,13 @@ def test_routelevel_rl_policy_tiered_basic_premium_with_default_jwt_claim_sub(
594
610
wait_before_test (1 )
595
611
596
612
## Test Default Rate Limit 1r/s
597
- self .check_rate_limit (
613
+ self .check_rate_limit_nearly_eq (
598
614
virtual_server_setup .backend_1_url , 200 , 1 , headers = {"host" : virtual_server_setup .vs_host }
599
615
)
600
616
wait_before_test (1 )
601
617
602
618
## Test different backend route
603
- self .check_rate_limit (
619
+ self .check_rate_limit_eq (
604
620
virtual_server_setup .backend_2_url , 503 , 0 , headers = {"host" : virtual_server_setup .vs_host }
605
621
)
606
622
@@ -650,7 +666,7 @@ def test_routelevel_rl_policy_tiered_basic_premium_no_default_jwt_claim_sub(
650
666
algorithm = "HS256" ,
651
667
)
652
668
653
- self .check_rate_limit (
669
+ self .check_rate_limit_nearly_eq (
654
670
virtual_server_setup .backend_1_url ,
655
671
200 ,
656
672
1 ,
@@ -659,7 +675,7 @@ def test_routelevel_rl_policy_tiered_basic_premium_no_default_jwt_claim_sub(
659
675
wait_before_test (1 )
660
676
661
677
## Test Premium Rate Limit 5r/s
662
- self .check_rate_limit (
678
+ self .check_rate_limit_nearly_eq (
663
679
virtual_server_setup .backend_1_url ,
664
680
200 ,
665
681
5 ,
@@ -668,13 +684,13 @@ def test_routelevel_rl_policy_tiered_basic_premium_no_default_jwt_claim_sub(
668
684
wait_before_test (1 )
669
685
670
686
## Test Default Rate Limit unlimited
671
- self .check_rate_limit (
687
+ self .check_rate_limit_eq (
672
688
virtual_server_setup .backend_1_url , 503 , 0 , headers = {"host" : virtual_server_setup .vs_host }
673
689
)
674
690
wait_before_test (1 )
675
691
676
692
## Test different backend route
677
- self .check_rate_limit (
693
+ self .check_rate_limit_eq (
678
694
virtual_server_setup .backend_2_url , 503 , 0 , headers = {"host" : virtual_server_setup .vs_host }
679
695
)
680
696
wait_before_test (1 )
@@ -714,11 +730,16 @@ def test_rl_duplicate_default_policy_tiered_basic_premium_with_default_jwt_claim
714
730
src ,
715
731
)
716
732
717
- wait_before_test (60 )
718
733
# 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
722
743
)
723
744
724
745
delete_policy (kube_apis .custom_objects , basic_pol_name , test_namespace )
0 commit comments