def test_events_flows(self, kube_apis, ingress_controller_prerequisites,
                          crd_ingress_controller, virtual_server_setup, vs_externalname_setup):
        text = f"{virtual_server_setup.namespace}/{virtual_server_setup.vs_name}"
        vs_event_text = f"Configuration for {text} was added or updated"
        vs_event_update_text = f"Configuration for {text} was updated"
        events_vs = get_events(kube_apis.v1, virtual_server_setup.namespace)
        initial_count = assert_event_and_get_count(vs_event_text, events_vs)
        initial_count_up = assert_event_and_get_count(vs_event_update_text, events_vs)

        print("Step 1: Update external host in externalName service")
        external_svc = read_service(kube_apis.v1, vs_externalname_setup.external_svc, virtual_server_setup.namespace)
        external_svc.spec.external_name = "demo.nginx.com"
        replace_service(kube_apis.v1, vs_externalname_setup.external_svc, virtual_server_setup.namespace, external_svc)
        wait_before_test(1)

        wait_for_event_count_increases(kube_apis, vs_event_text, initial_count, virtual_server_setup.namespace)
        events_step_1 = get_events(kube_apis.v1, virtual_server_setup.namespace)
        assert_event_and_count(vs_event_text, initial_count + 1, events_step_1)
        assert_event_and_count(vs_event_update_text, initial_count_up, events_step_1)

        print("Step 2: Remove resolver from ConfigMap to trigger an error")
        config_map_name = ingress_controller_prerequisites.config_map["metadata"]["name"]
        vs_event_warning_text = f"Configuration for {text} was updated with warning(s):"
        replace_configmap(kube_apis.v1, config_map_name,
                          ingress_controller_prerequisites.namespace,
                          ingress_controller_prerequisites.config_map)
        wait_before_test(1)

        events_step_2 = get_events(kube_apis.v1, virtual_server_setup.namespace)
        assert_event_and_count(vs_event_warning_text, 1, events_step_2)
        assert_event_and_count(vs_event_update_text, initial_count_up, events_step_2)
示例#2
0
    def test_when_option_in_config_map_only(self, kube_apis, ingress_controller_prerequisites,
                                            crd_ingress_controller, virtual_server_setup,
                                            option, option_value, expected_string, unexpected_string):
        text = f"{virtual_server_setup.namespace}/{virtual_server_setup.vs_name}"
        vs_event_text = f"Configuration for {text} was updated"
        print(f"Case 3: {option} specified in ConfigMap, no {option} in VS")
        patch_virtual_server_from_yaml(kube_apis.custom_objects, virtual_server_setup.vs_name,
                                       f"{TEST_DATA}/virtual-server-upstream-options/standard/virtual-server.yaml",
                                       virtual_server_setup.namespace)
        config_map_name = ingress_controller_prerequisites.config_map["metadata"]["name"]
        new_configmap = create_configmap_from_yaml_with_overriden_key(
            f"{DEPLOYMENTS}/common/nginx-config.yaml", option, option_value)
        replace_configmap(kube_apis.v1, config_map_name,
                          ingress_controller_prerequisites.namespace,
                          new_configmap)
        wait_before_test(1)
        ic_pod_name = get_first_pod_name(kube_apis.v1, ingress_controller_prerequisites.namespace)
        config = get_vs_nginx_template_conf(kube_apis.v1,
                                            virtual_server_setup.namespace,
                                            virtual_server_setup.vs_name,
                                            ic_pod_name,
                                            ingress_controller_prerequisites.namespace)
        resp_1 = requests.get(virtual_server_setup.backend_1_url,
                              headers={"host": virtual_server_setup.vs_host})
        resp_2 = requests.get(virtual_server_setup.backend_2_url,
                              headers={"host": virtual_server_setup.vs_host})
        vs_events = get_events(kube_apis.v1, virtual_server_setup.namespace)

        assert_event(vs_event_text, vs_events)
        for _ in expected_string:
            assert _ in config
        for _ in unexpected_string:
            assert _ not in config
        assert_response_codes(resp_1, resp_2)
 def fin():
     print("Clean up External-Name-Example:")
     replace_configmap(kube_apis.v1, config_map_name,
                       ingress_controller_prerequisites.namespace,
                       ingress_controller_prerequisites.config_map)
     delete_ingress(kube_apis.extensions_v1_beta1, ingress_name,
                    test_namespace)
     delete_service(kube_apis.v1, svc_name, test_namespace)
    def test_when_option_in_config_map_only(
            self, kube_apis, ingress_controller_prerequisites,
            crd_ingress_controller, v_s_route_setup, v_s_route_app_setup,
            option, option_value, expected_string, unexpected_string):
        req_url = f"http://{v_s_route_setup.public_endpoint.public_ip}:{v_s_route_setup.public_endpoint.port}"
        text_s = f"{v_s_route_setup.route_s.namespace}/{v_s_route_setup.route_s.name}"
        text_m = f"{v_s_route_setup.route_m.namespace}/{v_s_route_setup.route_m.name}"
        vsr_s_event_text = f"Configuration for {text_s} was updated"
        vsr_m_event_text = f"Configuration for {text_m} was updated"
        print(f"Case 3: {option} specified in ConfigMap, no {option} in VS")
        patch_v_s_route_from_yaml(
            kube_apis.custom_objects, v_s_route_setup.route_m.name,
            f"{TEST_DATA}/virtual-server-route-upstream-options/route-multiple.yaml",
            v_s_route_setup.route_m.namespace)
        patch_v_s_route_from_yaml(
            kube_apis.custom_objects, v_s_route_setup.route_s.name,
            f"{TEST_DATA}/virtual-server-route-upstream-options/route-single.yaml",
            v_s_route_setup.route_s.namespace)
        config_map_name = ingress_controller_prerequisites.config_map[
            "metadata"]["name"]
        new_configmap = create_configmap_from_yaml_with_overriden_key(
            f"{DEPLOYMENTS}/common/nginx-config.yaml", option, option_value)
        replace_configmap(kube_apis.v1, config_map_name,
                          ingress_controller_prerequisites.namespace,
                          new_configmap)
        wait_before_test(1)
        ic_pod_name = get_first_pod_name(
            kube_apis.v1, ingress_controller_prerequisites.namespace)
        config = get_vs_nginx_template_conf(
            kube_apis.v1, v_s_route_setup.namespace, v_s_route_setup.vs_name,
            ic_pod_name, ingress_controller_prerequisites.namespace)
        resp_1 = requests.get(f"{req_url}{v_s_route_setup.route_m.paths[0]}",
                              headers={"host": v_s_route_setup.vs_host})
        resp_2 = requests.get(f"{req_url}{v_s_route_setup.route_s.paths[0]}",
                              headers={"host": v_s_route_setup.vs_host})
        vsr_s_events = get_events(kube_apis.v1,
                                  v_s_route_setup.route_s.namespace)
        vsr_m_events = get_events(kube_apis.v1,
                                  v_s_route_setup.route_m.namespace)

        assert_event(vsr_m_event_text, vsr_m_events)
        assert_event(vsr_s_event_text, vsr_s_events)
        for _ in expected_string:
            assert _ in config
        for _ in unexpected_string:
            assert _ not in config
        assert_response_codes(resp_1, resp_2)
 def fin():
     print("Clean up ExternalName Setup:")
     delete_namespace(kube_apis.v1, external_ns)
     replace_configmap(kube_apis.v1, config_map_name,
                       ingress_controller_prerequisites.namespace,
                       ingress_controller_prerequisites.config_map)