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)