github.com/nginxinc/kubernetes-ingress@v1.12.5/tests/suite/test_virtual_server_advanced_routing.py (about)

     1  import pytest
     2  import requests
     3  
     4  from settings import TEST_DATA
     5  from suite.custom_resources_utils import patch_virtual_server_from_yaml
     6  from suite.resources_utils import wait_before_test, ensure_response_from_backend
     7  
     8  
     9  def execute_assertions(resp_1, resp_2, resp_3):
    10      assert resp_1.status_code == 200
    11      assert "Server name: backend1-" in resp_1.text
    12      assert resp_2.status_code == 200
    13      assert "Server name: backend3-" in resp_2.text
    14      assert resp_3.status_code == 200
    15      assert "Server name: backend4-" in resp_3.text
    16  
    17  
    18  def ensure_responses_from_backends(req_url, host) -> None:
    19      ensure_response_from_backend(req_url, host, {"x-version": "future"})
    20      ensure_response_from_backend(req_url, host, {"x-version": "deprecated"})
    21      ensure_response_from_backend(req_url, host, {"x-version-invalid": "deprecated"})
    22  
    23  
    24  @pytest.mark.vs
    25  @pytest.mark.smoke
    26  @pytest.mark.parametrize('crd_ingress_controller, virtual_server_setup',
    27                           [({"type": "complete", "extra_args": [f"-enable-custom-resources"]},
    28                             {"example": "virtual-server-advanced-routing", "app_type": "advanced-routing"})],
    29                           indirect=True)
    30  class TestAdvancedRouting:
    31      def test_flow_with_header(self, kube_apis, crd_ingress_controller, virtual_server_setup):
    32          ensure_responses_from_backends(virtual_server_setup.backend_1_url, virtual_server_setup.vs_host)
    33  
    34          resp_1 = requests.get(virtual_server_setup.backend_1_url,
    35                                headers={"host": virtual_server_setup.vs_host, "x-version": "future"})
    36          resp_2 = requests.get(virtual_server_setup.backend_1_url,
    37                                headers={"host": virtual_server_setup.vs_host, "x-version": "deprecated"})
    38          resp_3 = requests.get(virtual_server_setup.backend_1_url,
    39                                headers={"host": virtual_server_setup.vs_host, "x-version-invalid": "deprecated"})
    40          execute_assertions(resp_1, resp_2, resp_3)
    41  
    42      def test_flow_with_argument(self, kube_apis, crd_ingress_controller, virtual_server_setup):
    43          patch_virtual_server_from_yaml(kube_apis.custom_objects,
    44                                         virtual_server_setup.vs_name,
    45                                         f"{TEST_DATA}/virtual-server-advanced-routing/virtual-server-argument.yaml",
    46                                         virtual_server_setup.namespace)
    47          wait_before_test(1)
    48  
    49          resp_1 = requests.get(virtual_server_setup.backend_1_url + "?arg1=v1",
    50                                headers={"host": virtual_server_setup.vs_host})
    51          resp_2 = requests.get(virtual_server_setup.backend_1_url + "?arg1=v2",
    52                                headers={"host": virtual_server_setup.vs_host})
    53          resp_3 = requests.get(virtual_server_setup.backend_1_url + "?argument1=v1",
    54                                headers={"host": virtual_server_setup.vs_host})
    55          execute_assertions(resp_1, resp_2, resp_3)
    56  
    57      def test_flow_with_cookie(self, kube_apis, crd_ingress_controller, virtual_server_setup):
    58          patch_virtual_server_from_yaml(kube_apis.custom_objects,
    59                                         virtual_server_setup.vs_name,
    60                                         f"{TEST_DATA}/virtual-server-advanced-routing/virtual-server-cookie.yaml",
    61                                         virtual_server_setup.namespace)
    62          wait_before_test(1)
    63  
    64          resp_1 = requests.get(virtual_server_setup.backend_1_url,
    65                                headers={"host": virtual_server_setup.vs_host}, cookies={"user": "some"})
    66          resp_2 = requests.get(virtual_server_setup.backend_1_url,
    67                                headers={"host": virtual_server_setup.vs_host}, cookies={"user": "bad"})
    68          resp_3 = requests.get(virtual_server_setup.backend_1_url,
    69                                headers={"host": virtual_server_setup.vs_host}, cookies={"user": "anonymous"})
    70          execute_assertions(resp_1, resp_2, resp_3)
    71  
    72      def test_flow_with_variable(self, kube_apis, crd_ingress_controller, virtual_server_setup):
    73          patch_virtual_server_from_yaml(kube_apis.custom_objects,
    74                                         virtual_server_setup.vs_name,
    75                                         f"{TEST_DATA}/virtual-server-advanced-routing/virtual-server-variable.yaml",
    76                                         virtual_server_setup.namespace)
    77          wait_before_test(1)
    78  
    79          resp_1 = requests.get(virtual_server_setup.backend_1_url, headers={"host": virtual_server_setup.vs_host})
    80          resp_2 = requests.post(virtual_server_setup.backend_1_url, headers={"host": virtual_server_setup.vs_host})
    81          resp_3 = requests.put(virtual_server_setup.backend_1_url, headers={"host": virtual_server_setup.vs_host})
    82          execute_assertions(resp_1, resp_2, resp_3)
    83  
    84      def test_flow_with_complex_conditions(self, kube_apis, crd_ingress_controller, virtual_server_setup):
    85          patch_virtual_server_from_yaml(kube_apis.custom_objects,
    86                                         virtual_server_setup.vs_name,
    87                                         f"{TEST_DATA}/virtual-server-advanced-routing/virtual-server-complex.yaml",
    88                                         virtual_server_setup.namespace)
    89          wait_before_test(1)
    90  
    91          resp_1 = requests.get(virtual_server_setup.backend_1_url + "?arg1=v1",
    92                                headers={"host": virtual_server_setup.vs_host,
    93                                         "x-version": "future"}, cookies={"user": "some"})
    94          resp_2 = requests.post(virtual_server_setup.backend_1_url + "?arg1=v2",
    95                                 headers={"host": virtual_server_setup.vs_host,
    96                                          "x-version": "deprecated"}, cookies={"user": "bad"})
    97          resp_3 = requests.get(virtual_server_setup.backend_1_url + "?arg1=v2",
    98                                headers={"host": virtual_server_setup.vs_host,
    99                                         "x-version": "deprecated"}, cookies={"user": "bad"})
   100          execute_assertions(resp_1, resp_2, resp_3)