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)