def virtual_server_setup(request, kube_apis, crd_ingress_controller, ingress_controller_endpoint, test_namespace) -> VirtualServerSetup: """ Prepare Virtual Server Example. :param request: internal pytest fixture to parametrize this method: {example: virtual-server|virtual-server-tls|..., app_type: simple|split|...} 'example' is a directory name in TEST_DATA, 'app_type' is a directory name in TEST_DATA/common/app :param kube_apis: client apis :param crd_ingress_controller: :param ingress_controller_endpoint: :param test_namespace: :return: VirtualServerSetup """ print("------------------------- Deploy Virtual Server Example -----------------------------------") vs_source = f"{TEST_DATA}/{request.param['example']}/standard/virtual-server.yaml" vs_name = create_virtual_server_from_yaml(kube_apis.custom_objects, vs_source, test_namespace) vs_host = get_first_vs_host_from_yaml(vs_source) vs_paths = get_paths_from_vs_yaml(vs_source) if request.param['app_type']: create_example_app(kube_apis, request.param['app_type'], test_namespace) wait_until_all_pods_are_ready(kube_apis.v1, test_namespace) def fin(): print("Clean up Virtual Server Example:") delete_virtual_server(kube_apis.custom_objects, vs_name, test_namespace) if request.param['app_type']: delete_common_app(kube_apis, request.param['app_type'], test_namespace) request.addfinalizer(fin) return VirtualServerSetup(ingress_controller_endpoint, test_namespace, vs_host, vs_name, vs_paths)
def ap_vs_setup(kube_apis, test_namespace, policy_method) -> tuple: src_pol_name, vs_name = ap_generic_setup(kube_apis, test_namespace, test_namespace, policy_method, waf_spec_vs_src) vs_host = get_first_host_from_yaml(waf_spec_vs_src) vs_paths = get_paths_from_vs_yaml(waf_spec_vs_src) return (src_pol_name, vs_name, vs_host, vs_paths)
def test_responses_after_virtual_server_update(self, kube_apis, crd_ingress_controller, virtual_server_setup): print("Step 2: update host and paths in the VS and check") patch_virtual_server_from_yaml( kube_apis.custom_objects, virtual_server_setup.vs_name, f"{TEST_DATA}/virtual-server/standard/virtual-server-updated.yaml", virtual_server_setup.namespace) new_paths = get_paths_from_vs_yaml( f"{TEST_DATA}/virtual-server/standard/virtual-server-updated.yaml") new_backend_1_url = f"http://{virtual_server_setup.public_endpoint.public_ip}" \ f":{virtual_server_setup.public_endpoint.port}/{new_paths[0]}" new_backend_2_url = f"http://{virtual_server_setup.public_endpoint.public_ip}" \ f":{virtual_server_setup.public_endpoint.port}/{new_paths[1]}" new_host = get_first_vs_host_from_yaml( f"{TEST_DATA}/virtual-server/standard/virtual-server-updated.yaml") wait_before_test(1) resp = requests.get(virtual_server_setup.backend_1_url, headers={"host": virtual_server_setup.vs_host}) assert resp.status_code == 404 resp = requests.get(virtual_server_setup.backend_2_url, headers={"host": virtual_server_setup.vs_host}) assert resp.status_code == 404 resp = requests.get(new_backend_1_url, headers={"host": new_host}) assert resp.status_code == 200 resp = requests.get(new_backend_2_url, headers={"host": new_host}) assert resp.status_code == 200 print("Step 3: restore VS and check") patch_virtual_server_from_yaml( kube_apis.custom_objects, virtual_server_setup.vs_name, f"{TEST_DATA}/virtual-server/standard/virtual-server.yaml", virtual_server_setup.namespace) wait_before_test(1) resp = requests.get(new_backend_1_url, headers={"host": new_host}) assert resp.status_code == 404 resp = requests.get(new_backend_2_url, headers={"host": new_host}) assert resp.status_code == 404 resp = requests.get(virtual_server_setup.backend_1_url, headers={"host": virtual_server_setup.vs_host}) assert resp.status_code == 200 resp = requests.get(virtual_server_setup.backend_2_url, headers={"host": virtual_server_setup.vs_host}) assert resp.status_code == 200