Skip to content

Commit 90a6427

Browse files
committed
add python tests for rate limit with jwt claim
1 parent fad03be commit 90a6427

File tree

3 files changed

+86
-0
lines changed

3 files changed

+86
-0
lines changed
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
apiVersion: k8s.nginx.org/v1
2+
kind: Policy
3+
metadata:
4+
name: rate-limit-jwt-claim-sub
5+
spec:
6+
rateLimit:
7+
rate: 1r/s
8+
key: ${jwt_claim_sub}
9+
zoneSize: 10M
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
apiVersion: k8s.nginx.org/v1
2+
kind: VirtualServer
3+
metadata:
4+
name: virtual-server
5+
spec:
6+
host: virtual-server.example.com
7+
policies:
8+
- name: rate-limit-jwt-claim-sub
9+
upstreams:
10+
- name: backend2
11+
service: backend2-svc
12+
port: 80
13+
- name: backend1
14+
service: backend1-svc
15+
port: 80
16+
routes:
17+
- path: "/backend1"
18+
action:
19+
pass: backend1
20+
- path: "/backend2"
21+
action:
22+
pass: backend2

tests/suite/test_rl_policies.py

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,9 @@
2424
rl_vs_override_spec = f"{TEST_DATA}/rate-limit/spec/virtual-server-override.yaml"
2525
rl_vs_override_route = f"{TEST_DATA}/rate-limit/route-subroute/virtual-server-override-route.yaml"
2626
rl_vs_override_spec_route = f"{TEST_DATA}/rate-limit/route-subroute/virtual-server-override-spec-route.yaml"
27+
rl_vs_jwt_claim_sub = f"{TEST_DATA}/rate-limit/spec/virtual-server-jwt-claim-sub.yaml"
28+
rl_pol_jwt_claim_sub = f"{TEST_DATA}/rate-limit/policies/rate-limit-jwt-claim-sub.yaml"
29+
token = f"{TEST_DATA}/jwt-policy/token.jwt"
2730

2831

2932
@pytest.mark.policies
@@ -357,3 +360,55 @@ def test_rl_policy_scaled(
357360
and policy_info["status"]["reason"] == "AddedOrUpdated"
358361
and policy_info["status"]["state"] == "Valid"
359362
)
363+
364+
@pytest.mark.skip_for_nginx_oss
365+
@pytest.mark.parametrize("src", [rl_vs_jwt_claim_sub])
366+
def test_rl_policy_jwt_claim_sub(
367+
self,
368+
kube_apis,
369+
ingress_controller_prerequisites,
370+
crd_ingress_controller,
371+
virtual_server_setup,
372+
test_namespace,
373+
src,
374+
):
375+
"""
376+
Test if rate-limiting policy is working with 1 rps using $jwt_claim_sub as the rate limit key
377+
"""
378+
print(f"Create rl policy")
379+
pol_name = create_policy_from_yaml(kube_apis.custom_objects, rl_pol_jwt_claim_sub, test_namespace)
380+
print(f"Patch vs with policy: {src}")
381+
patch_virtual_server_from_yaml(
382+
kube_apis.custom_objects,
383+
virtual_server_setup.vs_name,
384+
src,
385+
virtual_server_setup.namespace,
386+
)
387+
wait_before_test(10)
388+
389+
policy_info = read_custom_resource(kube_apis.custom_objects, test_namespace, "policies", pol_name)
390+
occur = []
391+
t_end = time.perf_counter() + 1
392+
resp = requests.get(
393+
virtual_server_setup.backend_1_url,
394+
headers={"host": virtual_server_setup.vs_host, "Authorization": f"Bearer {token}"},
395+
)
396+
# wait_before_test(120)
397+
print(resp.status_code)
398+
assert resp.status_code == 200
399+
while time.perf_counter() < t_end:
400+
resp = requests.get(
401+
virtual_server_setup.backend_1_url,
402+
headers={"host": virtual_server_setup.vs_host, "Authorization": f"Bearer {token}"},
403+
)
404+
print(resp.status_code)
405+
occur.append(resp.status_code)
406+
wait_before_test(300)
407+
delete_policy(kube_apis.custom_objects, pol_name, test_namespace)
408+
self.restore_default_vs(kube_apis, virtual_server_setup)
409+
assert (
410+
policy_info["status"]
411+
and policy_info["status"]["reason"] == "AddedOrUpdated"
412+
and policy_info["status"]["state"] == "Valid"
413+
)
414+
assert occur.count(200) <= 1

0 commit comments

Comments
 (0)