def test_when_option_in_v_s_only(self, kube_apis, ingress_controller_prerequisites, crd_ingress_controller, virtual_server_setup, options, expected_strings): text = f"{virtual_server_setup.namespace}/{virtual_server_setup.vs_name}" vs_event_text = f"Configuration for {text} was added or updated" events_vs = get_events(kube_apis.v1, virtual_server_setup.namespace) initial_count = assert_event_and_get_count(vs_event_text, events_vs) print(f"Case 2: no key in ConfigMap , option specified in VS") new_body = generate_item_with_upstream_options( f"{TEST_DATA}/virtual-server-upstream-options/standard/virtual-server.yaml", options) patch_virtual_server(kube_apis.custom_objects, virtual_server_setup.vs_name, virtual_server_setup.namespace, new_body) 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_count_increased(vs_event_text, initial_count, vs_events) for _ in expected_strings: assert _ in config assert_response_codes(resp_1, resp_2)
def test_update(self, kube_apis, crd_ingress_controller, virtual_server_setup): wait_before_test(1) text = f"{virtual_server_setup.namespace}/{virtual_server_setup.vs_name}" vs_event_text = f"Configuration for {text} was added or updated" events_vs = get_events(kube_apis.v1, virtual_server_setup.namespace) initial_count = assert_event_and_get_count(vs_event_text, events_vs) vs_src = f"{TEST_DATA}/virtual-server-canned-responses/virtual-server-updated.yaml" patch_virtual_server_from_yaml(kube_apis.custom_objects, virtual_server_setup.vs_name, vs_src, virtual_server_setup.namespace) wait_and_assert_status_code(501, virtual_server_setup.backend_1_url, virtual_server_setup.vs_host) resp = requests.get(virtual_server_setup.backend_1_url, headers={"host": virtual_server_setup.vs_host}) resp_content = resp.content.decode('utf-8') assert resp.headers[ 'content-type'] == 'some/type' and resp_content == "{}" wait_and_assert_status_code(201, virtual_server_setup.backend_2_url, virtual_server_setup.vs_host) resp = requests.get(virtual_server_setup.backend_2_url, headers={"host": virtual_server_setup.vs_host}) resp_content = resp.content.decode('utf-8') assert resp.headers[ 'content-type'] == 'user-type' and resp_content == "line1\nline2" vs_events = get_events(kube_apis.v1, virtual_server_setup.namespace) assert_event_count_increased(vs_event_text, initial_count, vs_events)
def test_responses_and_config_after_disable_tls( self, kube_apis, ingress_controller_prerequisites, crd_ingress_controller, virtual_server_setup): ic_pod_name = get_first_pod_name( kube_apis.v1, ingress_controller_prerequisites.namespace) text = f"{virtual_server_setup.namespace}/{virtual_server_setup.vs_name}" vs_event_text = f"Configuration for {text} was added or updated" initial_events_vs = get_events(kube_apis.v1, virtual_server_setup.namespace) initial_count = assert_event_and_get_count(vs_event_text, initial_events_vs) patch_virtual_server_from_yaml( kube_apis.custom_objects, virtual_server_setup.vs_name, f"{TEST_DATA}/virtual-server-upstream-tls/virtual-server-disable-tls.yaml", virtual_server_setup.namespace) wait_before_test(1) 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}) new_events_vs = get_events(kube_apis.v1, virtual_server_setup.namespace) assert 'proxy_pass https://' not in config assert_response_codes(resp_1, resp_2, 200, 400) assert_event_count_increased(vs_event_text, initial_count, new_events_vs)
def test_grpc_flow(self, kube_apis, annotations_grpc_setup, ingress_controller_prerequisites, annotations, expected_strings, unexpected_strings): initial_events = get_events(kube_apis.v1, annotations_grpc_setup.namespace) initial_count = get_event_count( annotations_grpc_setup.ingress_event_text, initial_events) print("Case 5: grpc annotations override http ones") new_ing = generate_ingresses_with_annotation( annotations_grpc_setup.ingress_src_file, annotations) for ing in new_ing: if ing['metadata']['name'] == annotations_grpc_setup.ingress_name: replace_ingress(kube_apis.extensions_v1_beta1, annotations_grpc_setup.ingress_name, annotations_grpc_setup.namespace, ing) wait_before_test(1) result_conf = get_ingress_nginx_template_conf( kube_apis.v1, annotations_grpc_setup.namespace, annotations_grpc_setup.ingress_name, annotations_grpc_setup.ingress_pod_name, ingress_controller_prerequisites.namespace) new_events = get_events(kube_apis.v1, annotations_grpc_setup.namespace) assert_event_count_increased(annotations_grpc_setup.ingress_event_text, initial_count, new_events) for _ in expected_strings: assert _ in result_conf for _ in unexpected_strings: assert _ not in result_conf
def test_update(self, kube_apis, crd_ingress_controller, virtual_server_setup): wait_before_test(1) text = f"{virtual_server_setup.namespace}/{virtual_server_setup.vs_name}" vs_event_text = f"Configuration for {text} was added or updated" events_vs = get_events(kube_apis.v1, virtual_server_setup.namespace) initial_count = assert_event_and_get_count(vs_event_text, events_vs) vs_src = f"{TEST_DATA}/virtual-server-redirects/virtual-server-updated.yaml" patch_virtual_server_from_yaml(kube_apis.custom_objects, virtual_server_setup.vs_name, vs_src, virtual_server_setup.namespace) wait_and_assert_status_code(301, virtual_server_setup.backend_1_url, virtual_server_setup.vs_host, allow_redirects=False) resp = requests.get(virtual_server_setup.backend_1_url, headers={"host": virtual_server_setup.vs_host}, allow_redirects=False) assert resp.headers['location'] == "http://demo.nginx.com" wait_and_assert_status_code(302, virtual_server_setup.backend_2_url, virtual_server_setup.vs_host, allow_redirects=False) resp = requests.get(virtual_server_setup.backend_2_url, headers={"host": virtual_server_setup.vs_host}, allow_redirects=False) assert resp.headers['location'] == "http://demo.nginx.com" vs_events = get_events(kube_apis.v1, virtual_server_setup.namespace) assert_event_count_increased(vs_event_text, initial_count, vs_events)
def test_upstream_zone_size_0(self, cli_arguments, kube_apis, annotations_setup, ingress_controller_prerequisites, annotations): initial_events = get_events(kube_apis.v1, annotations_setup.namespace) initial_count = get_event_count(annotations_setup.ingress_event_text, initial_events) print("Edge Case: upstream-zone-size is 0") new_ing = generate_ingresses_with_annotation( annotations_setup.ingress_src_file, annotations) for ing in new_ing: # in mergeable case this will update master ingress only if ing['metadata']['name'] == annotations_setup.ingress_name: replace_ingress(kube_apis.extensions_v1_beta1, annotations_setup.ingress_name, annotations_setup.namespace, ing) wait_before_test(1) result_conf = get_ingress_nginx_template_conf( kube_apis.v1, annotations_setup.namespace, annotations_setup.ingress_name, annotations_setup.ingress_pod_name, ingress_controller_prerequisites.namespace) new_events = get_events(kube_apis.v1, annotations_setup.namespace) assert_event_count_increased(annotations_setup.ingress_event_text, initial_count, new_events) if cli_arguments["ic-type"] == "nginx-plus-ingress": print("Run assertions for Nginx Plus case") assert "zone " in result_conf assert " 256k;" in result_conf elif cli_arguments["ic-type"] == "nginx-ingress": print("Run assertions for Nginx OSS case") assert "zone " not in result_conf assert " 256k;" not in result_conf
def test_validation(self, kube_apis, annotations_setup, ingress_controller_prerequisites, annotations, expected_strings, unexpected_strings): initial_events = get_events(kube_apis.v1, annotations_setup.namespace) print("Case 6: IC doesn't validate, only nginx validates") initial_count = get_event_count( annotations_setup.ingress_error_event_text, initial_events) new_ing = generate_ingresses_with_annotation( annotations_setup.ingress_src_file, annotations) for ing in new_ing: # in mergeable case this will update master ingress only if ing['metadata']['name'] == annotations_setup.ingress_name: replace_ingress(kube_apis.extensions_v1_beta1, annotations_setup.ingress_name, annotations_setup.namespace, ing) wait_before_test(1) result_conf = get_ingress_nginx_template_conf( kube_apis.v1, annotations_setup.namespace, annotations_setup.ingress_name, annotations_setup.ingress_pod_name, ingress_controller_prerequisites.namespace) new_events = get_events(kube_apis.v1, annotations_setup.namespace) assert_event_count_increased( annotations_setup.ingress_error_event_text, initial_count, new_events) for _ in expected_strings: assert _ in result_conf for _ in unexpected_strings: assert _ not in result_conf
def test_when_annotation_in_configmap_only( self, kube_apis, annotations_setup, ingress_controller_prerequisites, configmap_file, expected_strings, unexpected_strings): initial_events = get_events(kube_apis.v1, annotations_setup.namespace) initial_count = get_event_count(annotations_setup.ingress_event_text, initial_events) print("Case 3: keys in ConfigMap, no annotations in Ingress") replace_ingresses_from_yaml(kube_apis.extensions_v1_beta1, annotations_setup.namespace, annotations_setup.ingress_src_file) replace_configmap_from_yaml( kube_apis.v1, ingress_controller_prerequisites.config_map['metadata']['name'], ingress_controller_prerequisites.namespace, configmap_file) wait_before_test(1) result_conf = get_ingress_nginx_template_conf( kube_apis.v1, annotations_setup.namespace, annotations_setup.ingress_name, annotations_setup.ingress_pod_name, ingress_controller_prerequisites.namespace) new_events = get_events(kube_apis.v1, annotations_setup.namespace) assert_event_count_increased(annotations_setup.ingress_event_text, initial_count, new_events) for _ in expected_strings: assert _ in result_conf for _ in unexpected_strings: assert _ not in result_conf
def test_ing_overrides_configmap(self, kube_apis, annotations_setup, ingress_controller_prerequisites, annotations, configmap_file, expected_strings, unexpected_strings): initial_events = get_events(kube_apis.v1, annotations_setup.namespace) initial_count = get_event_count(annotations_setup.ingress_event_text, initial_events) print("Case 4: keys in ConfigMap, annotations in Ingress") new_ing = generate_ingresses_with_annotation( annotations_setup.ingress_src_file, annotations) for ing in new_ing: # in mergeable case this will update master ingress only if ing['metadata']['name'] == annotations_setup.ingress_name: replace_ingress(kube_apis.extensions_v1_beta1, annotations_setup.ingress_name, annotations_setup.namespace, ing) replace_configmap_from_yaml( kube_apis.v1, ingress_controller_prerequisites.config_map['metadata']['name'], ingress_controller_prerequisites.namespace, configmap_file) wait_before_test(1) result_conf = get_ingress_nginx_template_conf( kube_apis.v1, annotations_setup.namespace, annotations_setup.ingress_name, annotations_setup.ingress_pod_name, ingress_controller_prerequisites.namespace) new_events = get_events(kube_apis.v1, annotations_setup.namespace) assert_event_count_increased(annotations_setup.ingress_event_text, initial_count, new_events) for _ in expected_strings: assert _ in result_conf for _ in unexpected_strings: assert _ not in result_conf
def test_update(self, kube_apis, crd_ingress_controller, v_s_route_setup): req_host = f"{v_s_route_setup.public_endpoint.public_ip}:{v_s_route_setup.public_endpoint.port}" req_url_1 = f"http://{req_host}{v_s_route_setup.route_m.paths[0]}" req_url_2 = f"http://{req_host}{v_s_route_setup.route_m.paths[1]}" wait_before_test(1) vs_name = f"{v_s_route_setup.namespace}/{v_s_route_setup.vs_name}" vsr_name = f"{v_s_route_setup.namespace}/{v_s_route_setup.route_m.name}" vsr_event_text = f"Configuration for {vsr_name} was added or updated" vs_event_text = f"Configuration for {vs_name} was added or updated" events_ns = get_events(kube_apis.v1, v_s_route_setup.namespace) initial_count_vs = assert_event_and_get_count(vs_event_text, events_ns) initial_count_vsr = assert_event_and_get_count(vsr_event_text, events_ns) vsr_src = f"{TEST_DATA}/virtual-server-route-canned-responses/route-multiple-updated.yaml" patch_v_s_route_from_yaml(kube_apis.custom_objects, v_s_route_setup.route_m.name, vsr_src, v_s_route_setup.namespace) wait_and_assert_status_code(501, req_url_1, v_s_route_setup.vs_host) resp = requests.get(req_url_1, headers={"host": v_s_route_setup.vs_host}) resp_content = resp.content.decode('utf-8') assert resp.headers['content-type'] == 'some/type' and resp_content == "{}" wait_and_assert_status_code(201, req_url_2, v_s_route_setup.vs_host) resp = requests.get(req_url_2, headers={"host": v_s_route_setup.vs_host}) resp_content = resp.content.decode('utf-8') assert resp.headers['content-type'] == 'user-type' and resp_content == "line1\nline2" new_events_ns = get_events(kube_apis.v1, v_s_route_setup.namespace) assert_event_count_increased(vs_event_text, initial_count_vs, new_events_ns) assert_event_count_increased(vsr_event_text, initial_count_vsr, new_events_ns)
def test_validation(self, kube_apis, annotations_setup, ingress_controller_prerequisites, annotations): initial_events = get_events(kube_apis.v1, annotations_setup.namespace) print("Case 6: IC doesn't validate, only nginx validates") initial_count = get_event_count( annotations_setup.ingress_error_event_text, initial_events) new_ing = generate_ingresses_with_annotation( annotations_setup.ingress_src_file, annotations) for ing in new_ing: # in mergeable case this will update master ingress only if ing['metadata']['name'] == annotations_setup.ingress_name: replace_ingress(kube_apis.networking_v1, annotations_setup.ingress_name, annotations_setup.namespace, ing) wait_before_test() result_conf = get_ingress_nginx_template_conf( kube_apis.v1, annotations_setup.namespace, annotations_setup.ingress_name, annotations_setup.ingress_pod_name, ingress_controller_prerequisites.namespace) new_events = get_events(kube_apis.v1, annotations_setup.namespace) assert "server {" not in result_conf assert "No such file or directory" in result_conf assert_event_count_increased( annotations_setup.ingress_error_event_text, initial_count, new_events)
def test_when_annotation_in_ing_only(self, kube_apis, annotations_setup, ingress_controller_prerequisites, annotations, expected_strings, unexpected_strings): initial_events = get_events(kube_apis.v1, annotations_setup.namespace) initial_count = get_event_count(annotations_setup.ingress_event_text, initial_events) print("Case 2: no ConfigMap keys, annotations in Ingress only") new_ing = generate_ingresses_with_annotation( annotations_setup.ingress_src_file, annotations) for ing in new_ing: # in mergeable case this will update master ingress only if ing['metadata']['name'] == annotations_setup.ingress_name: replace_ingress(kube_apis.networking_v1, annotations_setup.ingress_name, annotations_setup.namespace, ing) wait_before_test(1) result_conf = get_ingress_nginx_template_conf( kube_apis.v1, annotations_setup.namespace, annotations_setup.ingress_name, annotations_setup.ingress_pod_name, ingress_controller_prerequisites.namespace) new_events = get_events(kube_apis.v1, annotations_setup.namespace) assert_event_count_increased(annotations_setup.ingress_event_text, initial_count, new_events) for _ in expected_strings: assert _ in result_conf for _ in unexpected_strings: assert _ not in result_conf
def test_config_and_events(self, kube_apis, ingress_controller_prerequisites, crd_ingress_controller, v_s_route_setup, v_s_route_app_setup, options, expected_strings): expected_strings.append( f"location @hc-vs_{v_s_route_setup.namespace}_{v_s_route_setup.vs_name}" f"_vsr_{v_s_route_setup.route_m.namespace}_{v_s_route_setup.route_m.name}" ) expected_strings.append( f"location @hc-vs_{v_s_route_setup.namespace}_{v_s_route_setup.vs_name}" f"_vsr_{v_s_route_setup.route_s.namespace}_{v_s_route_setup.route_s.name}" ) 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 added or updated" vsr_m_event_text = f"Configuration for {text_m} was added or updated" events_ns_m = get_events(kube_apis.v1, v_s_route_setup.route_m.namespace) events_ns_s = get_events(kube_apis.v1, v_s_route_setup.route_s.namespace) initial_count_vsr_m = assert_event_and_get_count( vsr_m_event_text, events_ns_m) initial_count_vsr_s = assert_event_and_get_count( vsr_s_event_text, events_ns_s) print(f"Case 2: no key in ConfigMap, option specified in VSR") new_body_m = generate_item_with_upstream_options( f"{TEST_DATA}/virtual-server-route-upstream-options/route-multiple.yaml", options) new_body_s = generate_item_with_upstream_options( f"{TEST_DATA}/virtual-server-route-upstream-options/route-single.yaml", options) patch_v_s_route(kube_apis.custom_objects, v_s_route_setup.route_m.name, v_s_route_setup.route_m.namespace, new_body_m) patch_v_s_route(kube_apis.custom_objects, v_s_route_setup.route_s.name, v_s_route_setup.route_s.namespace, new_body_s) 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_count_increased(vsr_m_event_text, initial_count_vsr_m, vsr_m_events) assert_event_count_increased(vsr_s_event_text, initial_count_vsr_s, vsr_s_events) for _ in expected_strings: assert _ in config assert_response_codes(resp_1, resp_2)
def test_minion_overrides_master(self, kube_apis, annotations_setup, ingress_controller_prerequisites, yaml_file, expected_strings, unexpected_strings): initial_events = get_events(kube_apis.v1, annotations_setup.namespace) initial_count = get_event_count(annotations_setup.ingress_event_text, initial_events) print("Case 7: minion annotation overrides master") replace_ingresses_from_yaml(kube_apis.extensions_v1_beta1, annotations_setup.namespace, yaml_file) wait_before_test(1) result_conf = get_ingress_nginx_template_conf(kube_apis.v1, annotations_setup.namespace, annotations_setup.ingress_name, annotations_setup.ingress_pod_name, ingress_controller_prerequisites.namespace) new_events = get_events(kube_apis.v1, annotations_setup.namespace) assert_event_count_increased(annotations_setup.ingress_event_text, initial_count, new_events) for _ in expected_strings: assert _ in result_conf for _ in unexpected_strings: assert _ not in result_conf
def test_update(self, kube_apis, crd_ingress_controller, v_s_route_setup): req_host = f"{v_s_route_setup.public_endpoint.public_ip}:{v_s_route_setup.public_endpoint.port}" req_url_1 = f"http://{req_host}{v_s_route_setup.route_m.paths[0]}" req_url_2 = f"http://{req_host}{v_s_route_setup.route_m.paths[1]}" vs_name = f"{v_s_route_setup.namespace}/{v_s_route_setup.vs_name}" vsr_name = f"{v_s_route_setup.namespace}/{v_s_route_setup.route_m.name}" vs_event_text = f"Configuration for {vs_name} was added or updated" vsr_event_text = f"Configuration for {vsr_name} was added or updated" wait_before_test(1) events_ns = get_events(kube_apis.v1, v_s_route_setup.namespace) initial_count_vs = assert_event_and_get_count(vs_event_text, events_ns) initial_count_vsr = assert_event_and_get_count(vsr_event_text, events_ns) vsr_src = f"{TEST_DATA}/virtual-server-route-redirects/route-multiple-updated.yaml" patch_v_s_route_from_yaml(kube_apis.custom_objects, v_s_route_setup.route_m.name, vsr_src, v_s_route_setup.namespace) wait_and_assert_status_code(301, req_url_1, v_s_route_setup.vs_host, allow_redirects=False) resp = requests.get(req_url_1, headers={"host": v_s_route_setup.vs_host}, allow_redirects=False) assert resp.headers['location'] == "http://demo.nginx.com" wait_and_assert_status_code(302, req_url_2, v_s_route_setup.vs_host, allow_redirects=False) resp = requests.get(req_url_2, headers={"host": v_s_route_setup.vs_host}, allow_redirects=False) assert resp.headers['location'] == "http://demo.nginx.com" new_events_ns = get_events(kube_apis.v1, v_s_route_setup.namespace) assert_event_count_increased(vs_event_text, initial_count_vs, new_events_ns) assert_event_count_increased(vsr_event_text, initial_count_vsr, new_events_ns)
def test_responses_and_config_after_disable_tls( self, kube_apis, ingress_controller_prerequisites, crd_ingress_controller, v_s_route_setup, v_s_route_secure_app_setup): ic_pod_name = get_first_pod_name( kube_apis.v1, ingress_controller_prerequisites.namespace) 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}" text_vs = f"{v_s_route_setup.namespace}/{v_s_route_setup.vs_name}" vsr_s_event_text = f"Configuration for {text_s} was added or updated" vsr_m_event_text = f"Configuration for {text_m} was added or updated" vs_event_text = f"Configuration for {text_vs} was added or updated" initial_events_ns_m = get_events(kube_apis.v1, v_s_route_setup.route_m.namespace) initial_events_ns_s = get_events(kube_apis.v1, v_s_route_setup.route_s.namespace) initial_count_vsr_m = assert_event_and_get_count( vsr_m_event_text, initial_events_ns_m) initial_count_vsr_s = assert_event_and_get_count( vsr_s_event_text, initial_events_ns_s) initial_count_vs = assert_event_and_get_count(vs_event_text, initial_events_ns_m) patch_v_s_route_from_yaml( kube_apis.custom_objects, v_s_route_setup.route_s.name, f"{TEST_DATA}/virtual-server-route-upstream-tls/route-single-disable-tls.yaml", v_s_route_setup.route_s.namespace) wait_before_test(1) 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) req_url = f"http://{v_s_route_setup.public_endpoint.public_ip}:{v_s_route_setup.public_endpoint.port}" 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}) new_events_ns_m = get_events(kube_apis.v1, v_s_route_setup.route_m.namespace) new_events_ns_s = get_events(kube_apis.v1, v_s_route_setup.route_s.namespace) assert 'proxy_pass https://' not in config assert_response_codes(resp_1, resp_2, 200, 400) assert_event_count_increased(vsr_m_event_text, initial_count_vsr_m, new_events_ns_m) assert_event_count_increased(vs_event_text, initial_count_vs, new_events_ns_m) assert_event_count_increased(vsr_s_event_text, initial_count_vsr_s, new_events_ns_s)