Skip to content

Commit 9d05e0d

Browse files
committed
add python tests
1 parent b50a229 commit 9d05e0d

File tree

3 files changed

+147
-0
lines changed

3 files changed

+147
-0
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
apiVersion: networking.k8s.io/v1
2+
kind: Ingress
3+
metadata:
4+
name: rewrite-regex-ingress
5+
annotations:
6+
nginx.org/rewrite-target: "/api/$1/$2"
7+
nginx.org/path-regex: "case_sensitive"
8+
spec:
9+
ingressClassName: nginx
10+
rules:
11+
- host: rewrite.example.com
12+
http:
13+
paths:
14+
- path: /v1/([^/]+)/([^/]+)
15+
pathType: ImplementationSpecific
16+
backend:
17+
service:
18+
name: backend1-svc
19+
port:
20+
number: 80
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
apiVersion: networking.k8s.io/v1
2+
kind: Ingress
3+
metadata:
4+
name: rewrite-static-ingress
5+
annotations:
6+
nginx.org/rewrite-target: "/backend"
7+
spec:
8+
ingressClassName: nginx
9+
rules:
10+
- host: rewrite.example.com
11+
http:
12+
paths:
13+
- path: /app
14+
pathType: Prefix
15+
backend:
16+
service:
17+
name: backend1-svc
18+
port:
19+
number: 80

tests/suite/test_rewrite_target.py

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
import pytest
2+
import requests
3+
from settings import TEST_DATA
4+
from suite.fixtures.fixtures import PublicEndpoint
5+
from suite.utils.resources_utils import (
6+
create_example_app,
7+
create_items_from_yaml,
8+
delete_common_app,
9+
delete_items_from_yaml,
10+
ensure_connection_to_public_endpoint,
11+
wait_before_test,
12+
wait_until_all_pods_are_ready,
13+
)
14+
from suite.utils.yaml_utils import get_first_ingress_host_from_yaml, get_name_from_yaml
15+
16+
17+
class RewriteTargetSetup:
18+
"""Encapsulate Rewrite Target example details."""
19+
20+
def __init__(
21+
self,
22+
public_endpoint: PublicEndpoint,
23+
ingress_src_file,
24+
ingress_name,
25+
ingress_host,
26+
namespace,
27+
request_url,
28+
):
29+
self.public_endpoint = public_endpoint
30+
self.ingress_name = ingress_name
31+
self.namespace = namespace
32+
self.ingress_host = ingress_host
33+
self.ingress_src_file = ingress_src_file
34+
self.request_url = request_url
35+
36+
37+
@pytest.fixture(scope="function")
38+
def rewrite_target_setup(
39+
request,
40+
kube_apis,
41+
ingress_controller_prerequisites,
42+
ingress_controller_endpoint,
43+
ingress_controller,
44+
test_namespace,
45+
) -> RewriteTargetSetup:
46+
print("------------------------- Deploy Ingress with rewrite-target annotations -----------------------------------")
47+
src = f"{TEST_DATA}/rewrite-target/{request.param}.yaml"
48+
create_items_from_yaml(kube_apis, src, test_namespace)
49+
ingress_name = get_name_from_yaml(src)
50+
ingress_host = get_first_ingress_host_from_yaml(src)
51+
request_url = f"http://{ingress_controller_endpoint.public_ip}:{ingress_controller_endpoint.port}/backend1"
52+
53+
create_example_app(kube_apis, "simple", test_namespace)
54+
wait_until_all_pods_are_ready(kube_apis.v1, test_namespace)
55+
56+
ensure_connection_to_public_endpoint(
57+
ingress_controller_endpoint.public_ip, ingress_controller_endpoint.port, ingress_controller_endpoint.port_ssl
58+
)
59+
60+
def fin():
61+
if request.config.getoption("--skip-fixture-teardown") == "no":
62+
print("Clean up:")
63+
delete_common_app(kube_apis, "simple", test_namespace)
64+
delete_items_from_yaml(kube_apis, src, test_namespace)
65+
66+
request.addfinalizer(fin)
67+
68+
return RewriteTargetSetup(
69+
ingress_controller_endpoint,
70+
src,
71+
ingress_name,
72+
ingress_host,
73+
test_namespace,
74+
request_url,
75+
)
76+
77+
78+
@pytest.mark.annotations
79+
class TestRewriteTarget:
80+
@pytest.mark.parametrize("rewrite_target_setup", ["rewrite-static"], indirect=True)
81+
def test_static_rewrite_target(self, rewrite_target_setup):
82+
"""
83+
Test static rewrite target functionality.
84+
Request to /app should be rewritten to /backend.
85+
"""
86+
request_url = f"http://{rewrite_target_setup.public_endpoint.public_ip}:{rewrite_target_setup.public_endpoint.port}/app"
87+
resp = requests.get(
88+
request_url,
89+
headers={"host": rewrite_target_setup.ingress_host},
90+
)
91+
92+
assert resp.status_code == 200
93+
assert "URI: /backend" in resp.text
94+
95+
@pytest.mark.parametrize("rewrite_target_setup", ["rewrite-regex"], indirect=True)
96+
def test_regex_rewrite_target(self, rewrite_target_setup):
97+
"""
98+
Test regex rewrite target functionality with capture groups.
99+
Request to /v1/users/123 should be rewritten to /api/users/123.
100+
"""
101+
request_url = f"http://{rewrite_target_setup.public_endpoint.public_ip}:{rewrite_target_setup.public_endpoint.port}/v1/users/123"
102+
resp = requests.get(
103+
request_url,
104+
headers={"host": rewrite_target_setup.ingress_host},
105+
)
106+
107+
assert resp.status_code == 200
108+
assert "URI: /api/users/123" in resp.text

0 commit comments

Comments
 (0)