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

     1  import pytest
     2  import requests
     3  from kubernetes.client.rest import ApiException
     4  from suite.resources_utils import wait_before_test
     5  from suite.custom_resources_utils import (
     6      read_custom_resource,
     7      patch_virtual_server_from_yaml,
     8      patch_v_s_route_from_yaml,
     9      delete_virtual_server,
    10      create_virtual_server_from_yaml,
    11  )
    12  from settings import TEST_DATA
    13  
    14  @pytest.mark.vsr
    15  @pytest.mark.parametrize(
    16      "crd_ingress_controller, v_s_route_setup",
    17      [
    18          (
    19              {"type": "complete", "extra_args": [f"-enable-custom-resources"],},
    20              {"example": "virtual-server-route"},
    21          )
    22      ],
    23      indirect=True,
    24  )
    25  @pytest.mark.rewrite
    26  class TestVirtualServerRouteRewrite:
    27      def patch_standard_vsr(self, kube_apis, v_s_route_setup) -> None:
    28          """
    29          Function to revert vsr deployments to valid state
    30          """
    31          patch_src_m = f"{TEST_DATA}/virtual-server-route/route-multiple.yaml"
    32          patch_v_s_route_from_yaml(
    33              kube_apis.custom_objects,
    34              v_s_route_setup.route_m.name,
    35              patch_src_m,
    36              v_s_route_setup.route_m.namespace,
    37          )
    38          wait_before_test()
    39          patch_src_s = f"{TEST_DATA}/virtual-server-route/route-single.yaml"
    40          patch_v_s_route_from_yaml(
    41              kube_apis.custom_objects,
    42              v_s_route_setup.route_s.name,
    43              patch_src_s,
    44              v_s_route_setup.route_s.namespace,
    45          )
    46          wait_before_test()
    47  
    48      def test_prefix_rewrite(
    49          self, kube_apis, crd_ingress_controller, v_s_route_setup, v_s_route_app_setup
    50      ):
    51          """
    52          Test VirtualServerRoute URI rewrite using prefix
    53          """
    54          req_url = f"http://{v_s_route_setup.public_endpoint.public_ip}:{v_s_route_setup.public_endpoint.port}"
    55          patch_src_m = f"{TEST_DATA}/virtual-server-route-rewrites/route-multiple-prefix-regex.yaml"
    56          patch_v_s_route_from_yaml(
    57              kube_apis.custom_objects,
    58              v_s_route_setup.route_m.name,
    59              patch_src_m,
    60              v_s_route_setup.route_m.namespace,
    61          )
    62          wait_before_test()
    63          patch_src_s = f"{TEST_DATA}/virtual-server-route-rewrites/route-single-prefix.yaml"
    64          patch_v_s_route_from_yaml(
    65              kube_apis.custom_objects,
    66              v_s_route_setup.route_s.name,
    67              patch_src_s,
    68              v_s_route_setup.route_s.namespace,
    69          )
    70          wait_before_test()
    71          resp1 = requests.get(f"{req_url}{v_s_route_setup.route_m.paths[0]}/",
    72                                headers={"host": v_s_route_setup.vs_host})
    73          resp2 = requests.get(f"{req_url}{v_s_route_setup.route_m.paths[0]}/abc",
    74                                headers={"host": v_s_route_setup.vs_host})
    75          resp3 = requests.get(f"{req_url}{v_s_route_setup.route_s.paths[0]}",
    76                                headers={"host": v_s_route_setup.vs_host})
    77          resp4 = requests.get(f"{req_url}{v_s_route_setup.route_s.paths[0]}/",
    78                                headers={"host": v_s_route_setup.vs_host})
    79          resp5 = requests.get(f"{req_url}{v_s_route_setup.route_s.paths[0]}/abc",
    80                                headers={"host": v_s_route_setup.vs_host})
    81          self.patch_standard_vsr(kube_apis, v_s_route_setup)
    82  
    83          assert ( "URI: /\nRequest" in resp1.text
    84          and "URI: /abc\nRequest" in resp2.text
    85          and "URI: /backend2_1\nRequest" in resp3.text
    86          and "URI: /backend2_1/\nRequest" in resp4.text
    87          and "URI: /backend2_1/abc\nRequest" in resp5.text
    88          )
    89  
    90      def test_regex_rewrite(
    91          self, kube_apis, crd_ingress_controller, v_s_route_setup, v_s_route_app_setup
    92      ):
    93          """
    94          Test VirtualServerRoute URI rewrite using regex
    95          """
    96          req_url = f"http://{v_s_route_setup.public_endpoint.public_ip}:{v_s_route_setup.public_endpoint.port}"
    97          patch_src_m = f"{TEST_DATA}/virtual-server-route-rewrites/route-multiple-prefix-regex.yaml"
    98          patch_v_s_route_from_yaml(
    99              kube_apis.custom_objects,
   100              v_s_route_setup.route_m.name,
   101              patch_src_m,
   102              v_s_route_setup.route_m.namespace,
   103          )
   104  
   105          wait_before_test()
   106          resp1 = requests.get(f"{req_url}{v_s_route_setup.route_m.paths[1]}",
   107                                headers={"host": v_s_route_setup.vs_host})
   108          resp2 = requests.get(f"{req_url}{v_s_route_setup.route_m.paths[1]}/",
   109                                headers={"host": v_s_route_setup.vs_host})                   
   110          resp3 = requests.get(f"{req_url}{v_s_route_setup.route_m.paths[1]}/abc",
   111                                headers={"host": v_s_route_setup.vs_host})
   112  
   113          self.patch_standard_vsr(kube_apis, v_s_route_setup)
   114  
   115          assert ( "URI: /\nRequest" in resp1.text
   116          and "URI: /\nRequest" in resp2.text
   117          and "URI: /abc\nRequest" in resp3.text
   118          )
   119