예제 #1
0
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)
예제 #2
0
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)
예제 #4
0
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)
예제 #5
0
    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
예제 #6
0
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)
예제 #7
0
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)