github.com/nginxinc/kubernetes-ingress@v1.12.5/tests/suite/test_v_s_route_rewrites.py (about) 1 import pytest 2 import requests 3 from kubernetes.client.rest import ApiException 4 from suite.resources_utils import wait_before_test 5 from suite.custom_resources_utils import ( 6 read_custom_resource, 7 patch_virtual_server_from_yaml, 8 patch_v_s_route_from_yaml, 9 delete_virtual_server, 10 create_virtual_server_from_yaml, 11 ) 12 from settings import TEST_DATA 13 14 @pytest.mark.vsr 15 @pytest.mark.parametrize( 16 "crd_ingress_controller, v_s_route_setup", 17 [ 18 ( 19 {"type": "complete", "extra_args": [f"-enable-custom-resources"],}, 20 {"example": "virtual-server-route"}, 21 ) 22 ], 23 indirect=True, 24 ) 25 @pytest.mark.rewrite 26 class TestVirtualServerRouteRewrite: 27 def patch_standard_vsr(self, kube_apis, v_s_route_setup) -> None: 28 """ 29 Function to revert vsr deployments to valid state 30 """ 31 patch_src_m = f"{TEST_DATA}/virtual-server-route/route-multiple.yaml" 32 patch_v_s_route_from_yaml( 33 kube_apis.custom_objects, 34 v_s_route_setup.route_m.name, 35 patch_src_m, 36 v_s_route_setup.route_m.namespace, 37 ) 38 wait_before_test() 39 patch_src_s = f"{TEST_DATA}/virtual-server-route/route-single.yaml" 40 patch_v_s_route_from_yaml( 41 kube_apis.custom_objects, 42 v_s_route_setup.route_s.name, 43 patch_src_s, 44 v_s_route_setup.route_s.namespace, 45 ) 46 wait_before_test() 47 48 def test_prefix_rewrite( 49 self, kube_apis, crd_ingress_controller, v_s_route_setup, v_s_route_app_setup 50 ): 51 """ 52 Test VirtualServerRoute URI rewrite using prefix 53 """ 54 req_url = f"http://{v_s_route_setup.public_endpoint.public_ip}:{v_s_route_setup.public_endpoint.port}" 55 patch_src_m = f"{TEST_DATA}/virtual-server-route-rewrites/route-multiple-prefix-regex.yaml" 56 patch_v_s_route_from_yaml( 57 kube_apis.custom_objects, 58 v_s_route_setup.route_m.name, 59 patch_src_m, 60 v_s_route_setup.route_m.namespace, 61 ) 62 wait_before_test() 63 patch_src_s = f"{TEST_DATA}/virtual-server-route-rewrites/route-single-prefix.yaml" 64 patch_v_s_route_from_yaml( 65 kube_apis.custom_objects, 66 v_s_route_setup.route_s.name, 67 patch_src_s, 68 v_s_route_setup.route_s.namespace, 69 ) 70 wait_before_test() 71 resp1 = requests.get(f"{req_url}{v_s_route_setup.route_m.paths[0]}/", 72 headers={"host": v_s_route_setup.vs_host}) 73 resp2 = requests.get(f"{req_url}{v_s_route_setup.route_m.paths[0]}/abc", 74 headers={"host": v_s_route_setup.vs_host}) 75 resp3 = requests.get(f"{req_url}{v_s_route_setup.route_s.paths[0]}", 76 headers={"host": v_s_route_setup.vs_host}) 77 resp4 = requests.get(f"{req_url}{v_s_route_setup.route_s.paths[0]}/", 78 headers={"host": v_s_route_setup.vs_host}) 79 resp5 = requests.get(f"{req_url}{v_s_route_setup.route_s.paths[0]}/abc", 80 headers={"host": v_s_route_setup.vs_host}) 81 self.patch_standard_vsr(kube_apis, v_s_route_setup) 82 83 assert ( "URI: /\nRequest" in resp1.text 84 and "URI: /abc\nRequest" in resp2.text 85 and "URI: /backend2_1\nRequest" in resp3.text 86 and "URI: /backend2_1/\nRequest" in resp4.text 87 and "URI: /backend2_1/abc\nRequest" in resp5.text 88 ) 89 90 def test_regex_rewrite( 91 self, kube_apis, crd_ingress_controller, v_s_route_setup, v_s_route_app_setup 92 ): 93 """ 94 Test VirtualServerRoute URI rewrite using regex 95 """ 96 req_url = f"http://{v_s_route_setup.public_endpoint.public_ip}:{v_s_route_setup.public_endpoint.port}" 97 patch_src_m = f"{TEST_DATA}/virtual-server-route-rewrites/route-multiple-prefix-regex.yaml" 98 patch_v_s_route_from_yaml( 99 kube_apis.custom_objects, 100 v_s_route_setup.route_m.name, 101 patch_src_m, 102 v_s_route_setup.route_m.namespace, 103 ) 104 105 wait_before_test() 106 resp1 = requests.get(f"{req_url}{v_s_route_setup.route_m.paths[1]}", 107 headers={"host": v_s_route_setup.vs_host}) 108 resp2 = requests.get(f"{req_url}{v_s_route_setup.route_m.paths[1]}/", 109 headers={"host": v_s_route_setup.vs_host}) 110 resp3 = requests.get(f"{req_url}{v_s_route_setup.route_m.paths[1]}/abc", 111 headers={"host": v_s_route_setup.vs_host}) 112 113 self.patch_standard_vsr(kube_apis, v_s_route_setup) 114 115 assert ( "URI: /\nRequest" in resp1.text 116 and "URI: /\nRequest" in resp2.text 117 and "URI: /abc\nRequest" in resp3.text 118 ) 119