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)
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)