github.com/nginxinc/kubernetes-ingress@v1.12.5/tests/suite/test_virtual_server_upstream_tls.py (about) 1 import requests 2 import pytest 3 from kubernetes.client.rest import ApiException 4 5 from settings import TEST_DATA 6 from suite.custom_assertions import assert_event_and_get_count, assert_event_count_increased, assert_response_codes, \ 7 assert_event, assert_no_new_events 8 from suite.custom_resources_utils import get_vs_nginx_template_conf, patch_virtual_server_from_yaml 9 from suite.resources_utils import get_first_pod_name, wait_before_test, get_events 10 11 12 @pytest.mark.vs 13 @pytest.mark.parametrize('crd_ingress_controller, virtual_server_setup', 14 [({"type": "complete", "extra_args": [f"-enable-custom-resources"]}, 15 {"example": "virtual-server-upstream-tls", "app_type": "secure"})], 16 indirect=True) 17 class TestVirtualServerUpstreamTls: 18 def test_responses_and_config_after_setup(self, kube_apis, ingress_controller_prerequisites, 19 crd_ingress_controller, virtual_server_setup): 20 ic_pod_name = get_first_pod_name(kube_apis.v1, ingress_controller_prerequisites.namespace) 21 config = get_vs_nginx_template_conf(kube_apis.v1, 22 virtual_server_setup.namespace, 23 virtual_server_setup.vs_name, 24 ic_pod_name, 25 ingress_controller_prerequisites.namespace) 26 resp_1 = requests.get(virtual_server_setup.backend_1_url, 27 headers={"host": virtual_server_setup.vs_host}) 28 resp_2 = requests.get(virtual_server_setup.backend_2_url, 29 headers={"host": virtual_server_setup.vs_host}) 30 31 proxy_host = f"vs_{virtual_server_setup.namespace}_{virtual_server_setup.vs_name}" 32 assert f'proxy_pass https://{proxy_host}_backend1' not in config 33 assert f'proxy_pass https://{proxy_host}_backend2' in config 34 assert_response_codes(resp_1, resp_2) 35 36 def test_event_after_setup(self, kube_apis, ingress_controller_prerequisites, 37 crd_ingress_controller, virtual_server_setup): 38 text = f"{virtual_server_setup.namespace}/{virtual_server_setup.vs_name}" 39 vs_event_text = f"Configuration for {text} was added or updated" 40 events_vs = get_events(kube_apis.v1, virtual_server_setup.namespace) 41 assert_event(vs_event_text, events_vs) 42 43 def test_validation_flow(self, kube_apis, ingress_controller_prerequisites, 44 crd_ingress_controller, virtual_server_setup): 45 ic_pod_name = get_first_pod_name(kube_apis.v1, ingress_controller_prerequisites.namespace) 46 initial_events_vs = get_events(kube_apis.v1, virtual_server_setup.namespace) 47 try: 48 patch_virtual_server_from_yaml(kube_apis.custom_objects, 49 virtual_server_setup.vs_name, 50 f"{TEST_DATA}/virtual-server-upstream-tls/virtual-server-invalid.yaml", 51 virtual_server_setup.namespace) 52 except ApiException as ex: 53 assert ex.status == 422 and "spec.upstreams.tls.enable" in ex.body 54 except Exception as ex: 55 pytest.fail(f"An unexpected exception is raised: {ex}") 56 else: 57 pytest.fail("Expected an exception but there was none") 58 59 wait_before_test(1) 60 config = get_vs_nginx_template_conf(kube_apis.v1, 61 virtual_server_setup.namespace, 62 virtual_server_setup.vs_name, 63 ic_pod_name, 64 ingress_controller_prerequisites.namespace) 65 resp_1 = requests.get(virtual_server_setup.backend_1_url, 66 headers={"host": virtual_server_setup.vs_host}) 67 resp_2 = requests.get(virtual_server_setup.backend_2_url, 68 headers={"host": virtual_server_setup.vs_host}) 69 new_events_vs = get_events(kube_apis.v1, virtual_server_setup.namespace) 70 71 proxy_host = f"vs_{virtual_server_setup.namespace}_{virtual_server_setup.vs_name}" 72 assert f'proxy_pass https://{proxy_host}_backend1' not in config 73 assert f'proxy_pass https://{proxy_host}_backend2' in config 74 assert_response_codes(resp_1, resp_2) 75 assert_no_new_events(initial_events_vs, new_events_vs) 76 77 def test_responses_and_config_after_disable_tls(self, kube_apis, ingress_controller_prerequisites, 78 crd_ingress_controller, virtual_server_setup): 79 ic_pod_name = get_first_pod_name(kube_apis.v1, ingress_controller_prerequisites.namespace) 80 text = f"{virtual_server_setup.namespace}/{virtual_server_setup.vs_name}" 81 vs_event_text = f"Configuration for {text} was added or updated" 82 initial_events_vs = get_events(kube_apis.v1, virtual_server_setup.namespace) 83 initial_count = assert_event_and_get_count(vs_event_text, initial_events_vs) 84 patch_virtual_server_from_yaml(kube_apis.custom_objects, 85 virtual_server_setup.vs_name, 86 f"{TEST_DATA}/virtual-server-upstream-tls/virtual-server-disable-tls.yaml", 87 virtual_server_setup.namespace) 88 wait_before_test(1) 89 config = get_vs_nginx_template_conf(kube_apis.v1, 90 virtual_server_setup.namespace, 91 virtual_server_setup.vs_name, 92 ic_pod_name, 93 ingress_controller_prerequisites.namespace) 94 resp_1 = requests.get(virtual_server_setup.backend_1_url, 95 headers={"host": virtual_server_setup.vs_host}) 96 resp_2 = requests.get(virtual_server_setup.backend_2_url, 97 headers={"host": virtual_server_setup.vs_host}) 98 new_events_vs = get_events(kube_apis.v1, virtual_server_setup.namespace) 99 100 assert 'proxy_pass https://' not in config 101 assert_response_codes(resp_1, resp_2, 200, 400) 102 assert_event_count_increased(vs_event_text, initial_count, new_events_vs)