github.com/nginxinc/kubernetes-ingress@v1.12.5/tests/suite/test_virtual_server_validation.py (about) 1 import pytest 2 import requests 3 4 from settings import TEST_DATA 5 from suite.custom_assertions import assert_vs_conf_not_exists, assert_vs_conf_exists 6 from suite.custom_resources_utils import patch_virtual_server_from_yaml,\ 7 delete_virtual_server, create_virtual_server_from_yaml 8 from suite.resources_utils import wait_before_test, get_events, get_first_pod_name, get_pods_amount 9 10 11 def assert_reject_events_emitted(virtual_server_setup, new_list, previous_list, expected_amount): 12 item_name = f"{virtual_server_setup.namespace}/{virtual_server_setup.vs_name}" 13 text_invalid = f"VirtualServer {item_name} was rejected with error" 14 new_event = new_list[len(new_list) - 1] 15 assert len(new_list) - len(previous_list) == expected_amount 16 assert text_invalid in new_event.message 17 18 19 def assert_event_count_increased_in_list(virtual_server_setup, new_list, previous_list): 20 item_name = f"{virtual_server_setup.namespace}/{virtual_server_setup.vs_name}" 21 text_valid = f"Configuration for {item_name} was added or updated" 22 for i in range(len(previous_list)-1, 0, -1): 23 if text_valid in previous_list[i].message: 24 assert new_list[i].count - previous_list[i].count == 1, "We expect the counter to increase" 25 26 27 def assert_response_200(virtual_server_setup): 28 resp = requests.get(virtual_server_setup.backend_1_url, headers={"host": virtual_server_setup.vs_host}) 29 assert resp.status_code == 200 30 resp = requests.get(virtual_server_setup.backend_2_url, headers={"host": virtual_server_setup.vs_host}) 31 assert resp.status_code == 200 32 33 34 def assert_response_404(virtual_server_setup): 35 resp = requests.get(virtual_server_setup.backend_1_url, headers={"host": virtual_server_setup.vs_host}) 36 assert resp.status_code == 404 37 resp = requests.get(virtual_server_setup.backend_2_url, headers={"host": virtual_server_setup.vs_host}) 38 assert resp.status_code == 404 39 40 41 @pytest.mark.vs 42 @pytest.mark.parametrize('crd_ingress_controller, virtual_server_setup', 43 [({"type": "complete", "extra_args": [f"-enable-custom-resources"]}, 44 {"example": "virtual-server-validation", "app_type": "advanced-routing"})], 45 indirect=True) 46 class TestVirtualServerValidation: 47 def test_virtual_server_behavior(self, 48 kube_apis, cli_arguments, 49 ingress_controller_prerequisites, 50 crd_ingress_controller, 51 virtual_server_setup): 52 ic_pods_amount = get_pods_amount(kube_apis.v1, ingress_controller_prerequisites.namespace) 53 ic_pod_name = get_first_pod_name(kube_apis.v1, ingress_controller_prerequisites.namespace) 54 55 print("Step 1: initial check") 56 step_1_list = get_events(kube_apis.v1, virtual_server_setup.namespace) 57 assert_vs_conf_exists(kube_apis, ic_pod_name, ingress_controller_prerequisites.namespace, 58 virtual_server_setup) 59 assert_response_200(virtual_server_setup) 60 61 print("Step 2: make a valid VirtualServer invalid and check") 62 patch_virtual_server_from_yaml(kube_apis.custom_objects, 63 virtual_server_setup.vs_name, 64 f"{TEST_DATA}/virtual-server-validation/virtual-server-invalid-cookie.yaml", 65 virtual_server_setup.namespace) 66 wait_before_test(1) 67 step_2_list = get_events(kube_apis.v1, virtual_server_setup.namespace) 68 assert_reject_events_emitted(virtual_server_setup, step_2_list, step_1_list, ic_pods_amount) 69 assert_vs_conf_not_exists(kube_apis, ic_pod_name, ingress_controller_prerequisites.namespace, 70 virtual_server_setup) 71 assert_response_404(virtual_server_setup) 72 73 print("Step 3: update an invalid VirtualServer with another invalid and check") 74 patch_virtual_server_from_yaml(kube_apis.custom_objects, 75 virtual_server_setup.vs_name, 76 f"{TEST_DATA}/virtual-server-validation/virtual-server-no-default-action.yaml", 77 virtual_server_setup.namespace) 78 wait_before_test(1) 79 step_3_list = get_events(kube_apis.v1, virtual_server_setup.namespace) 80 assert_reject_events_emitted(virtual_server_setup, step_3_list, step_2_list, ic_pods_amount) 81 assert_vs_conf_not_exists(kube_apis, ic_pod_name, ingress_controller_prerequisites.namespace, 82 virtual_server_setup) 83 assert_response_404(virtual_server_setup) 84 85 print("Step 4: make an invalid VirtualServer valid and check") 86 patch_virtual_server_from_yaml(kube_apis.custom_objects, 87 virtual_server_setup.vs_name, 88 f"{TEST_DATA}/virtual-server-validation/standard/virtual-server.yaml", 89 virtual_server_setup.namespace) 90 wait_before_test(1) 91 step_4_list = get_events(kube_apis.v1, virtual_server_setup.namespace) 92 assert_vs_conf_exists(kube_apis, ic_pod_name, ingress_controller_prerequisites.namespace, 93 virtual_server_setup) 94 assert_event_count_increased_in_list(virtual_server_setup, step_4_list, step_3_list) 95 assert_response_200(virtual_server_setup) 96 97 print("Step 5: delete VS and then create an invalid and check") 98 delete_virtual_server(kube_apis.custom_objects, virtual_server_setup.vs_name, virtual_server_setup.namespace) 99 create_virtual_server_from_yaml(kube_apis.custom_objects, 100 f"{TEST_DATA}/virtual-server-validation/virtual-server-invalid-cookie.yaml", 101 virtual_server_setup.namespace) 102 wait_before_test(1) 103 step_5_list = get_events(kube_apis.v1, virtual_server_setup.namespace) 104 assert_reject_events_emitted(virtual_server_setup, step_5_list, step_4_list, ic_pods_amount) 105 assert_vs_conf_not_exists(kube_apis, ic_pod_name, ingress_controller_prerequisites.namespace, 106 virtual_server_setup) 107 assert_response_404(virtual_server_setup)