def create_example_app(kube_apis, app_type, namespace) -> CommonApp: """ Create a backend application. An application consists of 3 backend services. :param kube_apis: client apis :param app_type: type of the application (simple|split) :param namespace: namespace name :param app_type: type of the application (simple|split) :return: CommonApp """ create_items_from_yaml(kube_apis, f"{TEST_DATA}/common/app/{app_type}/app.yaml", namespace) all_names = get_names_from_yaml( f"{TEST_DATA}/common/app/{app_type}/app.yaml") service_names = [] dep_names = [] for _ in all_names: if "svc" in _: service_names.append(_) else: dep_names.append(_) return CommonApp(service_names, dep_names)
def annotations_grpc_setup(request, kube_apis, ingress_controller_prerequisites, ingress_controller_endpoint, ingress_controller, test_namespace) -> AnnotationsSetup: print("------------------------- Deploy gRPC Annotations-Example -----------------------------------") create_items_from_yaml(kube_apis, f"{TEST_DATA}/annotations/grpc/annotations-ingress.yaml", test_namespace) ingress_name = get_names_from_yaml(f"{TEST_DATA}/annotations/grpc/annotations-ingress.yaml")[0] ingress_host = get_first_ingress_host_from_yaml(f"{TEST_DATA}/annotations/grpc/annotations-ingress.yaml") replace_configmap_from_yaml(kube_apis.v1, ingress_controller_prerequisites.config_map['metadata']['name'], ingress_controller_prerequisites.namespace, f"{TEST_DATA}/common/configmap-with-grpc.yaml") ic_pod_name = get_first_pod_name(kube_apis.v1, ingress_controller_prerequisites.namespace) event_text = f"Configuration for {test_namespace}/{ingress_name} was added or updated" error_text = f"{event_text}, but not applied: Error reloading NGINX" def fin(): print("Clean up gRPC Annotations Example:") delete_items_from_yaml(kube_apis, f"{TEST_DATA}/annotations/grpc/annotations-ingress.yaml", test_namespace) request.addfinalizer(fin) return AnnotationsSetup(ingress_controller_endpoint, f"{TEST_DATA}/annotations/grpc/annotations-ingress.yaml", ingress_name, ingress_host, ic_pod_name, test_namespace, event_text, error_text)
def test_responses_after_crd_removal_on_the_fly(self, kube_apis, crd_ingress_controller, virtual_server_setup): print("\nStep 12: remove CRD and check") crd_name = get_names_from_yaml( f"{DEPLOYMENTS}/common/custom-resource-definitions.yaml")[0] delete_crd(kube_apis.api_extensions_v1_beta1, crd_name) wait_and_assert_status_code(404, virtual_server_setup.backend_1_url, virtual_server_setup.vs_host) wait_and_assert_status_code(404, virtual_server_setup.backend_2_url, virtual_server_setup.vs_host) print("Step 13: restore CRD and VS and check") create_crd_from_yaml( kube_apis.api_extensions_v1_beta1, crd_name, f"{DEPLOYMENTS}/common/custom-resource-definitions.yaml") wait_before_test(1) create_virtual_server_from_yaml( kube_apis.custom_objects, f"{TEST_DATA}/virtual-server/standard/virtual-server.yaml", virtual_server_setup.namespace) wait_and_assert_status_code(200, virtual_server_setup.backend_1_url, virtual_server_setup.vs_host) wait_and_assert_status_code(200, virtual_server_setup.backend_2_url, virtual_server_setup.vs_host)
def hsts_setup(request, kube_apis, ingress_controller_prerequisites, ingress_controller_endpoint, ingress_controller, test_namespace) -> HSTSSetup: print( "------------------------- Deploy HSTS-Example -----------------------------------" ) create_items_from_yaml( kube_apis, f"{TEST_DATA}/hsts/{request.param}/hsts-ingress.yaml", test_namespace) ingress_name = get_names_from_yaml( f"{TEST_DATA}/hsts/{request.param}/hsts-ingress.yaml")[0] ingress_host = get_first_ingress_host_from_yaml( f"{TEST_DATA}/hsts/{request.param}/hsts-ingress.yaml") create_example_app(kube_apis, "simple", test_namespace) wait_until_all_pods_are_ready(kube_apis.v1, test_namespace) ensure_connection_to_public_endpoint(ingress_controller_endpoint.public_ip, ingress_controller_endpoint.port, ingress_controller_endpoint.port_ssl) req_https_url = f"https://{ingress_controller_endpoint.public_ip}:" \ f"{ingress_controller_endpoint.port_ssl}/backend1" ensure_response_from_backend(req_https_url, ingress_host) def fin(): print("Clean up HSTS Example:") delete_common_app(kube_apis, "simple", test_namespace) delete_items_from_yaml( kube_apis, f"{TEST_DATA}/hsts/{request.param}/hsts-ingress.yaml", test_namespace) request.addfinalizer(fin) return HSTSSetup(ingress_controller_endpoint, f"{TEST_DATA}/hsts/{request.param}/hsts-ingress.yaml", ingress_name, ingress_host, test_namespace)
def test_responses_after_crd_removal_on_the_fly(self, kube_apis, crd_ingress_controller, virtual_server_setup): print("\nStep 12: remove CRD and check") crd_name = get_names_from_yaml( f"{TEST_DATA}/virtual-server/virtualserver.yaml")[0] delete_crd(kube_apis.api_extensions_v1_beta1, crd_name) 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 print("Step 13: restore CRD and VS and check") create_crds_from_yaml( kube_apis.api_extensions_v1_beta1, f"{TEST_DATA}/virtual-server/virtualserver.yaml") create_virtual_server_from_yaml( kube_apis.custom_objects, f"{TEST_DATA}/virtual-server/standard/virtual-server.yaml", virtual_server_setup.namespace) wait_before_test(1) 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
def annotations_setup(request, kube_apis, ingress_controller_prerequisites, ingress_controller_endpoint, ingress_controller, test_namespace) -> AnnotationsSetup: print( "------------------------- Deploy Annotations-Example -----------------------------------" ) create_items_from_yaml( kube_apis, f"{TEST_DATA}/annotations/{request.param}/annotations-ingress.yaml", test_namespace) ingress_name = get_names_from_yaml( f"{TEST_DATA}/annotations/{request.param}/annotations-ingress.yaml")[0] ingress_host = get_first_ingress_host_from_yaml( f"{TEST_DATA}/annotations/{request.param}/annotations-ingress.yaml") common_app = create_example_app(kube_apis, "simple", test_namespace) wait_until_all_pods_are_ready(kube_apis.v1, test_namespace) ensure_connection_to_public_endpoint(ingress_controller_endpoint.public_ip, ingress_controller_endpoint.port, ingress_controller_endpoint.port_ssl) ic_pod_name = get_first_pod_name( kube_apis.v1, ingress_controller_prerequisites.namespace) if request.param == 'mergeable': event_text = f"Configuration for {test_namespace}/{ingress_name}(Master) was added or updated" error_text = f"{event_text} but was not applied: Error reloading NGINX" else: event_text = f"Configuration for {test_namespace}/{ingress_name} was added or updated" error_text = f"{event_text}, but not applied: Error reloading NGINX" def fin(): print("Clean up Annotations Example:") replace_configmap_from_yaml( kube_apis.v1, ingress_controller_prerequisites.config_map['metadata']['name'], ingress_controller_prerequisites.namespace, f"{DEPLOYMENTS}/common/nginx-config.yaml") delete_common_app(kube_apis.v1, kube_apis.apps_v1_api, common_app, test_namespace) delete_items_from_yaml( kube_apis, f"{TEST_DATA}/annotations/{request.param}/annotations-ingress.yaml", test_namespace) request.addfinalizer(fin) return AnnotationsSetup( ingress_controller_endpoint, f"{TEST_DATA}/annotations/{request.param}/annotations-ingress.yaml", ingress_name, ingress_host, ic_pod_name, test_namespace, event_text, error_text)
def clean_up(request, kube_apis, test_namespace) -> None: """ Clean up test data. :param request: internal pytest fixture :param kube_apis: client apis :param test_namespace: str :return: """ secret_name = get_names_from_yaml( f"{TEST_DATA}/virtual-server-tls/tls-secret.yaml")[0] def fin(): print("Clean up after test:") if is_secret_present(kube_apis.v1, secret_name, test_namespace): delete_secret(kube_apis.v1, secret_name, test_namespace) request.addfinalizer(fin)
def custom_annotations_setup(request, kube_apis, ingress_controller_prerequisites, ingress_controller_endpoint, test_namespace) -> CustomAnnotationsSetup: ing_type = request.param print( "------------------------- Deploy ConfigMap with custom template -----------------------------------" ) replace_configmap_from_yaml( kube_apis.v1, ingress_controller_prerequisites.config_map['metadata']['name'], ingress_controller_prerequisites.namespace, f"{TEST_DATA}/custom-annotations/{ing_type}/nginx-config.yaml") print( "------------------------- Deploy Custom Annotations Ingress -----------------------------------" ) ing_src = f"{TEST_DATA}/custom-annotations/{ing_type}/annotations-ingress.yaml" create_items_from_yaml(kube_apis, ing_src, test_namespace) host = get_first_ingress_host_from_yaml(ing_src) ingress_name = get_names_from_yaml(ing_src)[0] wait_before_test(1) ic_pod_name = get_first_pod_name( kube_apis.v1, ingress_controller_prerequisites.namespace) def fin(): print("Clean up Custom Annotations Example:") replace_configmap_from_yaml( kube_apis.v1, ingress_controller_prerequisites.config_map['metadata']['name'], ingress_controller_prerequisites.namespace, f"{DEPLOYMENTS}/common/nginx-config.yaml") delete_items_from_yaml(kube_apis, ing_src, test_namespace) request.addfinalizer(fin) return CustomAnnotationsSetup(ingress_controller_endpoint, ingress_name, test_namespace, host, ic_pod_name)