def test_virtual_server_after_update(self, kube_apis, ingress_controller_prerequisites, crd_ingress_controller, v_s_route_setup): req_url = f"http://{v_s_route_setup.public_endpoint.public_ip}:{v_s_route_setup.public_endpoint.port}" patch_v_s_route_from_yaml( kube_apis.custom_objects, v_s_route_setup.route_m.name, f"{TEST_DATA}/virtual-server-route-error-pages/route-multiple-updated.yaml", v_s_route_setup.route_m.namespace) wait_and_assert_status_code( 301, f"{req_url}{v_s_route_setup.route_m.paths[0]}", v_s_route_setup.vs_host, allow_redirects=False) resp = requests.get(f"{req_url}{v_s_route_setup.route_m.paths[0]}", headers={ "host": v_s_route_setup.vs_host, "x-forwarded-proto": "http" }, allow_redirects=False) assert f'http://{v_s_route_setup.vs_host}/error_http.html' in resp.next.url wait_and_assert_status_code( 502, f"{req_url}{v_s_route_setup.route_m.paths[1]}", v_s_route_setup.vs_host, allow_redirects=False) resp = requests.get(f"{req_url}{v_s_route_setup.route_m.paths[1]}", headers={"host": v_s_route_setup.vs_host}) resp_content = resp.content.decode('utf-8') assert resp_content == 'Hello World!\n'
def test_update(self, kube_apis, crd_ingress_controller, v_s_route_setup): req_host = f"{v_s_route_setup.public_endpoint.public_ip}:{v_s_route_setup.public_endpoint.port}" req_url_1 = f"http://{req_host}{v_s_route_setup.route_m.paths[0]}" req_url_2 = f"http://{req_host}{v_s_route_setup.route_m.paths[1]}" wait_before_test(1) vs_name = f"{v_s_route_setup.namespace}/{v_s_route_setup.vs_name}" vsr_name = f"{v_s_route_setup.namespace}/{v_s_route_setup.route_m.name}" vsr_event_text = f"Configuration for {vsr_name} was added or updated" vs_event_text = f"Configuration for {vs_name} was added or updated" events_ns = get_events(kube_apis.v1, v_s_route_setup.namespace) initial_count_vs = assert_event_and_get_count(vs_event_text, events_ns) initial_count_vsr = assert_event_and_get_count(vsr_event_text, events_ns) vsr_src = f"{TEST_DATA}/virtual-server-route-canned-responses/route-multiple-updated.yaml" patch_v_s_route_from_yaml(kube_apis.custom_objects, v_s_route_setup.route_m.name, vsr_src, v_s_route_setup.namespace) wait_and_assert_status_code(501, req_url_1, v_s_route_setup.vs_host) resp = requests.get(req_url_1, headers={"host": v_s_route_setup.vs_host}) resp_content = resp.content.decode('utf-8') assert resp.headers['content-type'] == 'some/type' and resp_content == "{}" wait_and_assert_status_code(201, req_url_2, v_s_route_setup.vs_host) resp = requests.get(req_url_2, headers={"host": v_s_route_setup.vs_host}) resp_content = resp.content.decode('utf-8') assert resp.headers['content-type'] == 'user-type' and resp_content == "line1\nline2" new_events_ns = get_events(kube_apis.v1, v_s_route_setup.namespace) assert_event_count_increased(vs_event_text, initial_count_vs, new_events_ns) assert_event_count_increased(vsr_event_text, initial_count_vsr, new_events_ns)
def test_default_canned_response(self, kube_apis, crd_ingress_controller, v_s_route_setup): req_host = f"{v_s_route_setup.public_endpoint.public_ip}:{v_s_route_setup.public_endpoint.port}" req_url = f"http://{req_host}{v_s_route_setup.route_m.paths[1]}" wait_and_assert_status_code(200, req_url, v_s_route_setup.vs_host) resp = requests.get(req_url, headers={"host": v_s_route_setup.vs_host}) resp_content = resp.content.decode('utf-8') assert resp.headers['content-type'] == 'text/plain' and resp_content == "line1\nline2\nline3"
def test_custom_canned_response(self, kube_apis, crd_ingress_controller, virtual_server_setup): req_url = f"{virtual_server_setup.backend_1_url}?arg1=arg" wait_and_assert_status_code(407, req_url, virtual_server_setup.vs_host) resp = requests.get(req_url, headers={"host": virtual_server_setup.vs_host}) resp_content = json.loads(resp.content) assert resp.headers['content-type'] == 'application/json' \ and resp_content['host'] == virtual_server_setup.vs_host \ and resp_content['request_time'] != "" \ and resp_content['pid'] != "" \ and resp_content['server_protocol'] == "HTTP/1.1" \ and resp_content['connections_active'] != "" \ and resp_content['connections_writing'] != "" \ and resp_content['request_uri'] == "/canned-response?arg1=arg" \ and resp_content['remote_addr'] != "" \ and resp_content['remote_port'] != "" \ and resp_content['server_addr'] != "" \ and resp_content['request_method'] == "GET" \ and resp_content['scheme'] == "http" \ and resp_content['request_length'] != "" \ and resp_content['nginx_version'] != "" \ and resp_content['connection'] != "" \ and resp_content['time_local'] != "" \ and resp_content['server_port'] != "" \ and resp_content['server_name'] == virtual_server_setup.vs_host \ and resp_content['connections_waiting'] != "" \ and resp_content['request_body'] == "" \ and resp_content['args'] == "arg1=arg" \ and resp_content['time_iso8601'] != "" \ and resp_content['connections_reading'] != ""
def test_update(self, kube_apis, crd_ingress_controller, virtual_server_setup): wait_before_test(1) text = f"{virtual_server_setup.namespace}/{virtual_server_setup.vs_name}" vs_event_text = f"Configuration for {text} was added or updated" events_vs = get_events(kube_apis.v1, virtual_server_setup.namespace) initial_count = assert_event_and_get_count(vs_event_text, events_vs) vs_src = f"{TEST_DATA}/virtual-server-canned-responses/virtual-server-updated.yaml" patch_virtual_server_from_yaml(kube_apis.custom_objects, virtual_server_setup.vs_name, vs_src, virtual_server_setup.namespace) wait_and_assert_status_code(501, virtual_server_setup.backend_1_url, virtual_server_setup.vs_host) resp = requests.get(virtual_server_setup.backend_1_url, headers={"host": virtual_server_setup.vs_host}) resp_content = resp.content.decode('utf-8') assert resp.headers[ 'content-type'] == 'some/type' and resp_content == "{}" wait_and_assert_status_code(201, virtual_server_setup.backend_2_url, virtual_server_setup.vs_host) resp = requests.get(virtual_server_setup.backend_2_url, headers={"host": virtual_server_setup.vs_host}) resp_content = resp.content.decode('utf-8') assert resp.headers[ 'content-type'] == 'user-type' and resp_content == "line1\nline2" vs_events = get_events(kube_apis.v1, virtual_server_setup.namespace) assert_event_count_increased(vs_event_text, initial_count, vs_events)
def test_virtual_server_after_update(self, kube_apis, crd_ingress_controller, virtual_server_setup): patch_virtual_server_from_yaml( kube_apis.custom_objects, virtual_server_setup.vs_name, f"{TEST_DATA}/virtual-server-error-pages/virtual-server-updated.yaml", virtual_server_setup.namespace) wait_and_assert_status_code(301, virtual_server_setup.backend_1_url, virtual_server_setup.vs_host, allow_redirects=False) resp = requests.get(virtual_server_setup.backend_1_url, headers={ "host": virtual_server_setup.vs_host, "x-forwarded-proto": "http" }, allow_redirects=False) assert f'http://{virtual_server_setup.vs_host}/error_http.html' in resp.next.url wait_and_assert_status_code(502, virtual_server_setup.backend_2_url, virtual_server_setup.vs_host) resp = requests.get(virtual_server_setup.backend_2_url, headers={"host": virtual_server_setup.vs_host}) resp_content = resp.content.decode('utf-8') assert resp_content == 'Hello World!\n'
def test_responses(self, kube_apis, crd_ingress_controller, vsr_externalname_setup): req_url = f"http://{vsr_externalname_setup.public_endpoint.public_ip}:" \ f"{vsr_externalname_setup.public_endpoint.port}" wait_and_assert_status_code(200, f"{req_url}{vsr_externalname_setup.route.paths[0]}", vsr_externalname_setup.vs_host)
def test_update(self, kube_apis, crd_ingress_controller, virtual_server_setup): wait_before_test(1) text = f"{virtual_server_setup.namespace}/{virtual_server_setup.vs_name}" vs_event_text = f"Configuration for {text} was added or updated" events_vs = get_events(kube_apis.v1, virtual_server_setup.namespace) initial_count = assert_event_and_get_count(vs_event_text, events_vs) vs_src = f"{TEST_DATA}/virtual-server-redirects/virtual-server-updated.yaml" patch_virtual_server_from_yaml(kube_apis.custom_objects, virtual_server_setup.vs_name, vs_src, virtual_server_setup.namespace) wait_and_assert_status_code(301, virtual_server_setup.backend_1_url, virtual_server_setup.vs_host, allow_redirects=False) resp = requests.get(virtual_server_setup.backend_1_url, headers={"host": virtual_server_setup.vs_host}, allow_redirects=False) assert resp.headers['location'] == "http://demo.nginx.com" wait_and_assert_status_code(302, virtual_server_setup.backend_2_url, virtual_server_setup.vs_host, allow_redirects=False) resp = requests.get(virtual_server_setup.backend_2_url, headers={"host": virtual_server_setup.vs_host}, allow_redirects=False) assert resp.headers['location'] == "http://demo.nginx.com" vs_events = get_events(kube_apis.v1, virtual_server_setup.namespace) assert_event_count_increased(vs_event_text, initial_count, vs_events)
def test_redirect_strategy(self, kube_apis, ingress_controller_prerequisites, crd_ingress_controller, v_s_route_setup): req_url = f"http://{v_s_route_setup.public_endpoint.public_ip}:{v_s_route_setup.public_endpoint.port}" wait_and_assert_status_code(307, f"{req_url}{v_s_route_setup.route_m.paths[0]}", v_s_route_setup.vs_host, allow_redirects=False) resp = requests.get(f"{req_url}{v_s_route_setup.route_m.paths[0]}", headers={"host": v_s_route_setup.vs_host}, allow_redirects=False) assert f'http://{v_s_route_setup.vs_host}/error.html' in resp.next.url
def test_return_strategy(self, kube_apis, crd_ingress_controller, virtual_server_setup): wait_and_assert_status_code(207, virtual_server_setup.backend_2_url, virtual_server_setup.vs_host) resp = requests.get(virtual_server_setup.backend_2_url, headers={"host": virtual_server_setup.vs_host}) resp_content = json.loads(resp.content) assert resp_content['status'] == '502' \ and resp_content['message'] == 'Forbidden' \ and resp.headers.get('x-debug-original-status') == '502'
def test_default_canned_response(self, kube_apis, crd_ingress_controller, virtual_server_setup): wait_and_assert_status_code(200, virtual_server_setup.backend_2_url, virtual_server_setup.vs_host) resp = requests.get(virtual_server_setup.backend_2_url, headers={"host": virtual_server_setup.vs_host}) resp_content = resp.content.decode('utf-8') assert resp.headers[ 'content-type'] == 'text/plain' and resp_content == "line1\nline2\nline3"
def test_splits_and_matches(self, kube_apis, crd_ingress_controller, virtual_server_setup, v_s_data): patch_virtual_server_from_yaml(kube_apis.custom_objects, virtual_server_setup.vs_name, f"{TEST_DATA}/virtual-server-error-pages/{v_s_data['src']}", virtual_server_setup.namespace) wait_and_assert_status_code(v_s_data['expected_code'], virtual_server_setup.backend_1_url, virtual_server_setup.vs_host, allow_redirects=False) resp = requests.get(virtual_server_setup.backend_1_url, headers={"host": virtual_server_setup.vs_host}, allow_redirects=False) assert f'http://{virtual_server_setup.vs_host}/error.html' in resp.next.url
def test_redirect_strategy(self, kube_apis, crd_ingress_controller, virtual_server_setup): wait_and_assert_status_code(307, virtual_server_setup.backend_1_url, virtual_server_setup.vs_host, allow_redirects=False) resp = requests.get(virtual_server_setup.backend_1_url, headers={"host": virtual_server_setup.vs_host}, allow_redirects=False) assert f'http://{virtual_server_setup.vs_host}/error.html' in resp.next.url
def test_return_strategy(self, kube_apis, ingress_controller_prerequisites, crd_ingress_controller, v_s_route_setup): req_url = f"http://{v_s_route_setup.public_endpoint.public_ip}:{v_s_route_setup.public_endpoint.port}" wait_and_assert_status_code(207, f"{req_url}{v_s_route_setup.route_m.paths[1]}", v_s_route_setup.vs_host) resp = requests.get(f"{req_url}{v_s_route_setup.route_m.paths[1]}", headers={"host": v_s_route_setup.vs_host}) resp_content = json.loads(resp.content) assert resp_content['status'] == '502' \ and resp_content['message'] == 'Forbidden' \ and resp.headers.get('x-debug-original-status') == '502'
def test_custom_redirect(self, kube_apis, crd_ingress_controller, virtual_server_setup): req_url = f"{virtual_server_setup.backend_1_url}" wait_and_assert_status_code(307, req_url, virtual_server_setup.vs_host, allow_redirects=False) resp = requests.get(req_url, headers={"host": virtual_server_setup.vs_host}, allow_redirects=False) assert resp.headers['location'] == "http://example.com"
def test_default_redirect(self, kube_apis, crd_ingress_controller, virtual_server_setup): wait_and_assert_status_code(301, virtual_server_setup.backend_2_url, virtual_server_setup.vs_host, allow_redirects=False) resp = requests.get(virtual_server_setup.backend_2_url, headers={"host": virtual_server_setup.vs_host}, allow_redirects=False) assert resp.headers[ 'location'] == f"http://{virtual_server_setup.vs_host}/default-redirect?arg="
def test_custom_redirect(self, kube_apis, crd_ingress_controller, v_s_route_setup): req_host = f"{v_s_route_setup.public_endpoint.public_ip}:{v_s_route_setup.public_endpoint.port}" req_url = f"http://{req_host}{v_s_route_setup.route_m.paths[0]}?arg1=arg" wait_and_assert_status_code(307, req_url, v_s_route_setup.vs_host, allow_redirects=False) resp = requests.get(req_url, headers={"host": v_s_route_setup.vs_host}, allow_redirects=False) assert resp.headers['location'] == "http://example.com"
def test_splits_and_matches(self, kube_apis, ingress_controller_prerequisites, crd_ingress_controller, v_s_route_setup, v_s_r_data): req_url = f"http://{v_s_route_setup.public_endpoint.public_ip}:{v_s_route_setup.public_endpoint.port}" patch_v_s_route_from_yaml(kube_apis.custom_objects, v_s_route_setup.route_m.name, f"{TEST_DATA}/virtual-server-route-error-pages/{v_s_r_data['src']}", v_s_route_setup.route_m.namespace) wait_and_assert_status_code(v_s_r_data["expected_code"], f"{req_url}{v_s_route_setup.route_m.paths[0]}", v_s_route_setup.vs_host, allow_redirects=False) resp = requests.get(f"{req_url}{v_s_route_setup.route_m.paths[0]}", headers={"host": v_s_route_setup.vs_host}, allow_redirects=False) assert f'http://{v_s_route_setup.vs_host}/error.html' in resp.next.url
def test_responses_after_rbac_misconfiguration(self, kube_apis, crd_ingress_controller, virtual_server_setup): print("\nStep 1: rbac misconfiguration from the very start") resp = requests.get(virtual_server_setup.backend_1_url, headers={"host": virtual_server_setup.vs_host}) assert resp.status_code == 404 resp = requests.get(virtual_server_setup.backend_2_url, headers={"host": virtual_server_setup.vs_host}) assert resp.status_code == 404 print("Step 2: configure RBAC and check") patch_rbac(kube_apis.rbac_v1_beta1, f"{DEPLOYMENTS}/rbac/rbac.yaml") wait_and_assert_status_code(200, virtual_server_setup.backend_1_url, virtual_server_setup.vs_host) wait_and_assert_status_code(200, virtual_server_setup.backend_2_url, virtual_server_setup.vs_host)
def test_default_redirect(self, kube_apis, crd_ingress_controller, v_s_route_setup): req_host = f"{v_s_route_setup.public_endpoint.public_ip}:{v_s_route_setup.public_endpoint.port}" req_url = f"http://{req_host}{v_s_route_setup.route_m.paths[1]}" wait_and_assert_status_code(301, req_url, v_s_route_setup.vs_host, allow_redirects=False) resp = requests.get(req_url, headers={"host": v_s_route_setup.vs_host}, allow_redirects=False) assert resp.headers[ 'location'] == f"http://{v_s_route_setup.vs_host}/backends/default-redirect?arg="
def test_validation_flow(self, kube_apis, crd_ingress_controller, virtual_server_setup): text = f"{virtual_server_setup.namespace}/{virtual_server_setup.vs_name}" event_text = f"VirtualServer {text} is invalid and was rejected: " invalid_fields = ["spec.routes[0].action.redirect.code", "spec.routes[1].action.redirect.url"] vs_src = f"{TEST_DATA}/virtual-server-redirects/virtual-server-invalid.yaml" patch_virtual_server_from_yaml(kube_apis.custom_objects, virtual_server_setup.vs_name, vs_src, virtual_server_setup.namespace) wait_before_test(2) wait_and_assert_status_code(404, virtual_server_setup.backend_1_url, virtual_server_setup.vs_host, allow_redirects=False) vs_events = get_events(kube_apis.v1, virtual_server_setup.namespace) assert_event_starts_with_text_and_contains_errors(event_text, vs_events, invalid_fields)
def test_responses_after_crd_removal_on_the_fly(self, kube_apis, crd_ingress_controller, virtual_server_setup): print("\nStep 12: remove CRD and check") crd_name = get_name_from_yaml( f"{DEPLOYMENTS}/common/crds-v1beta1/k8s.nginx.org_virtualservers.yaml" ) delete_crd(kube_apis.api_extensions_v1_beta1, crd_name) wait_and_assert_status_code(404, virtual_server_setup.backend_1_url, virtual_server_setup.vs_host) wait_and_assert_status_code(404, virtual_server_setup.backend_2_url, virtual_server_setup.vs_host) print("Step 13: restore CRD and VS and check") create_crd_from_yaml( kube_apis.api_extensions_v1_beta1, crd_name, f"{DEPLOYMENTS}/common/crds-v1beta1/k8s.nginx.org_virtualservers.yaml" ) wait_before_test(1) create_virtual_server_from_yaml( kube_apis.custom_objects, f"{TEST_DATA}/virtual-server/standard/virtual-server.yaml", virtual_server_setup.namespace) wait_and_assert_status_code(200, virtual_server_setup.backend_1_url, virtual_server_setup.vs_host) wait_and_assert_status_code(200, virtual_server_setup.backend_2_url, virtual_server_setup.vs_host)
def test_validation_flow(self, kube_apis, crd_ingress_controller, v_s_route_setup): req_host = f"{v_s_route_setup.public_endpoint.public_ip}:{v_s_route_setup.public_endpoint.port}" req_url = f"http://{req_host}{v_s_route_setup.route_s.paths[0]}" text = f"{v_s_route_setup.namespace}/{v_s_route_setup.route_m.name}" event_text = f"VirtualServerRoute {text} is invalid and was rejected: " \ f"spec.subroutes[0].action.return.body: Required value" vsr_src = f"{TEST_DATA}/virtual-server-route-canned-responses/route-multiple-invalid.yaml" patch_v_s_route_from_yaml(kube_apis.custom_objects, v_s_route_setup.route_m.name, vsr_src, v_s_route_setup.namespace) wait_before_test(1) wait_and_assert_status_code(404, req_url, v_s_route_setup.vs_host) events = get_events(kube_apis.v1, v_s_route_setup.route_m.namespace) assert_event(event_text, events)
def test_validation_flow(self, kube_apis, crd_ingress_controller, virtual_server_setup): text = f"{virtual_server_setup.namespace}/{virtual_server_setup.vs_name}" event_text = f"VirtualServer {text} is invalid and was rejected: " \ f"spec.routes[0].action.return.body: Required value" vs_src = f"{TEST_DATA}/virtual-server-canned-responses/virtual-server-invalid.yaml" patch_virtual_server_from_yaml(kube_apis.custom_objects, virtual_server_setup.vs_name, vs_src, virtual_server_setup.namespace) wait_before_test(1) wait_and_assert_status_code(404, virtual_server_setup.backend_1_url, virtual_server_setup.vs_host) vs_events = get_events(kube_apis.v1, virtual_server_setup.namespace) assert_event(event_text, vs_events)
def test_vsr_overrides_vs(self, kube_apis, ingress_controller_prerequisites, crd_ingress_controller, v_s_route_setup): req_url = f"http://{v_s_route_setup.public_endpoint.public_ip}:{v_s_route_setup.public_endpoint.port}" vs_src = f"{TEST_DATA}/virtual-server-route-error-pages/standard/virtual-server-updated.yaml" patch_virtual_server_from_yaml(kube_apis.custom_objects, v_s_route_setup.vs_name, vs_src, v_s_route_setup.namespace) patch_v_s_route_from_yaml(kube_apis.custom_objects, v_s_route_setup.route_m.name, f"{TEST_DATA}/virtual-server-route-error-pages/route-multiple.yaml", v_s_route_setup.route_m.namespace) wait_and_assert_status_code(307, f"{req_url}{v_s_route_setup.route_m.paths[0]}", v_s_route_setup.vs_host, allow_redirects=False) resp = requests.get(f"{req_url}{v_s_route_setup.route_m.paths[0]}", headers={"host": v_s_route_setup.vs_host}, allow_redirects=False) assert f'http://{v_s_route_setup.vs_host}/error.html' in resp.next.url
def test_validation_flow(self, kube_apis, crd_ingress_controller, virtual_server_setup): invalid_fields = [ "spec.routes[0].action.return.code", "spec.routes[0].action.return.body" ] text = f"{virtual_server_setup.namespace}/{virtual_server_setup.vs_name}" vs_event_text = f"VirtualServer {text} was rejected with error:" vs_src = f"{TEST_DATA}/virtual-server-canned-responses/virtual-server-invalid.yaml" patch_virtual_server_from_yaml(kube_apis.custom_objects, virtual_server_setup.vs_name, vs_src, virtual_server_setup.namespace) wait_before_test(1) wait_and_assert_status_code(404, virtual_server_setup.backend_1_url, virtual_server_setup.vs_host) vs_events = get_events(kube_apis.v1, virtual_server_setup.namespace) assert_event_starts_with_text_and_contains_errors( vs_event_text, vs_events, invalid_fields)
def test_update(self, kube_apis, crd_ingress_controller, v_s_route_setup): req_host = f"{v_s_route_setup.public_endpoint.public_ip}:{v_s_route_setup.public_endpoint.port}" req_url_1 = f"http://{req_host}{v_s_route_setup.route_m.paths[0]}" req_url_2 = f"http://{req_host}{v_s_route_setup.route_m.paths[1]}" vs_name = f"{v_s_route_setup.namespace}/{v_s_route_setup.vs_name}" vsr_name = f"{v_s_route_setup.namespace}/{v_s_route_setup.route_m.name}" vs_event_text = f"Configuration for {vs_name} was added or updated" vsr_event_text = f"Configuration for {vsr_name} was added or updated" wait_before_test(1) events_ns = get_events(kube_apis.v1, v_s_route_setup.namespace) initial_count_vs = assert_event_and_get_count(vs_event_text, events_ns) initial_count_vsr = assert_event_and_get_count(vsr_event_text, events_ns) vsr_src = f"{TEST_DATA}/virtual-server-route-redirects/route-multiple-updated.yaml" patch_v_s_route_from_yaml(kube_apis.custom_objects, v_s_route_setup.route_m.name, vsr_src, v_s_route_setup.namespace) wait_and_assert_status_code(301, req_url_1, v_s_route_setup.vs_host, allow_redirects=False) resp = requests.get(req_url_1, headers={"host": v_s_route_setup.vs_host}, allow_redirects=False) assert resp.headers['location'] == "http://demo.nginx.com" wait_and_assert_status_code(302, req_url_2, v_s_route_setup.vs_host, allow_redirects=False) resp = requests.get(req_url_2, headers={"host": v_s_route_setup.vs_host}, allow_redirects=False) assert resp.headers['location'] == "http://demo.nginx.com" new_events_ns = get_events(kube_apis.v1, v_s_route_setup.namespace) assert_event_count_increased(vs_event_text, initial_count_vs, new_events_ns) assert_event_count_increased(vsr_event_text, initial_count_vsr, new_events_ns)
def test_validation_flow(self, kube_apis, crd_ingress_controller, v_s_route_setup): req_host = f"{v_s_route_setup.public_endpoint.public_ip}:{v_s_route_setup.public_endpoint.port}" req_url = f"http://{req_host}{v_s_route_setup.route_s.paths[0]}" text = f"{v_s_route_setup.namespace}/{v_s_route_setup.route_m.name}" event_text = f"VirtualServerRoute {text} is invalid and was rejected: " invalid_fields = [ "spec.subroutes[0].action.redirect.code", "spec.subroutes[1].action.redirect.url" ] vsr_src = f"{TEST_DATA}/virtual-server-route-redirects/route-multiple-invalid.yaml" patch_v_s_route_from_yaml(kube_apis.custom_objects, v_s_route_setup.route_m.name, vsr_src, v_s_route_setup.namespace) wait_before_test(2) wait_and_assert_status_code(404, req_url, v_s_route_setup.vs_host, allow_redirects=False) events = get_events(kube_apis.v1, v_s_route_setup.route_m.namespace) assert_event_starts_with_text_and_contains_errors( event_text, events, invalid_fields)
def test_response(self, kube_apis, crd_ingress_controller, virtual_server_setup, vs_externalname_setup): wait_and_assert_status_code(200, virtual_server_setup.backend_1_url, virtual_server_setup.vs_host)