def test_keys_in_main_config(self, cli_arguments, kube_apis, ingress_controller_prerequisites,
                                 crd_ingress_controller, virtual_server_setup, clean_up):
        wait_before_test(1)
        ic_pod_name = get_first_pod_name(kube_apis.v1, ingress_controller_prerequisites.namespace)
        initial_list = get_events(kube_apis.v1, virtual_server_setup.namespace)
        data_file = f"{TEST_DATA}/virtual-server-configmap-keys/configmap-validation-keys.yaml"
        data_file_invalid = f"{TEST_DATA}/virtual-server-configmap-keys/configmap-validation-keys-invalid.yaml"
        config_path = "/etc/nginx/nginx.conf"

        print("Step 5: main config: update ConfigMap with valid keys with validation rules")
        replace_configmap_from_yaml(kube_apis.v1,
                                    ingress_controller_prerequisites.config_map['metadata']['name'],
                                    ingress_controller_prerequisites.namespace,
                                    data_file)
        expected_values = get_configmap_fields_from_yaml(data_file)
        wait_before_test(1)
        step_5_config = get_file_contents(kube_apis.v1,
                                          config_path, ic_pod_name, ingress_controller_prerequisites.namespace)
        step_5_events = get_events(kube_apis.v1, virtual_server_setup.namespace)
        assert_update_event_count_increased(virtual_server_setup, step_5_events, initial_list)
        assert_keys_with_validation_in_main_config(step_5_config, expected_values)

        print("Step 6: main config: update ConfigMap with invalid keys")
        replace_configmap_from_yaml(kube_apis.v1,
                                    ingress_controller_prerequisites.config_map['metadata']['name'],
                                    ingress_controller_prerequisites.namespace,
                                    data_file_invalid)
        unexpected_values = get_configmap_fields_from_yaml(data_file_invalid)
        wait_before_test(1)
        step_6_config = get_file_contents(kube_apis.v1,
                                          config_path, ic_pod_name, ingress_controller_prerequisites.namespace)
        step_6_events = get_events(kube_apis.v1, virtual_server_setup.namespace)
        assert_update_event_count_increased(virtual_server_setup, step_6_events, step_5_events)
        assert_defaults_of_keys_with_validation_in_main_config(step_6_config, unexpected_values)

        print("Step 7: main config: special case for hash variables")
        data_file = f"{TEST_DATA}/virtual-server-configmap-keys/configmap-global-variables.yaml"
        expected_values = get_configmap_fields_from_yaml(data_file)
        replace_configmap_from_yaml(kube_apis.v1,
                                    ingress_controller_prerequisites.config_map['metadata']['name'],
                                    ingress_controller_prerequisites.namespace,
                                    data_file)
        wait_before_test(1)
        step_7_config = get_file_contents(kube_apis.v1,
                                          config_path, ic_pod_name, ingress_controller_prerequisites.namespace)
        step_7_events = get_events(kube_apis.v1, virtual_server_setup.namespace)
        assert_not_applied_event_emitted(virtual_server_setup, step_7_events, step_6_events)
        assert_keys_with_validation_in_main_config(step_7_config, expected_values)
    def test_keys(self, cli_arguments, kube_apis, ingress_controller_prerequisites,
                  crd_ingress_controller, virtual_server_setup, clean_up):
        ic_pod_name = get_first_pod_name(kube_apis.v1, ingress_controller_prerequisites.namespace)
        initial_list = get_events(kube_apis.v1, virtual_server_setup.namespace)

        print("Step 1: update ConfigMap with valid keys without validation rules")
        replace_configmap_from_yaml(kube_apis.v1,
                                    ingress_controller_prerequisites.config_map['metadata']['name'],
                                    ingress_controller_prerequisites.namespace,
                                    f"{TEST_DATA}/virtual-server-configmap-keys/configmap-no-validation-keys.yaml")
        expected_values = get_configmap_fields_from_yaml(
            f"{TEST_DATA}/virtual-server-configmap-keys/configmap-no-validation-keys.yaml")
        wait_before_test(1)
        step_1_events = get_events(kube_apis.v1, virtual_server_setup.namespace)
        step_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)
        assert_valid_event_emitted(virtual_server_setup, step_1_events, initial_list)
        assert_keys_without_validation(step_1_config, expected_values)

        print("Step 2: update ConfigMap with invalid keys without validation rules")
        replace_configmap_from_yaml(kube_apis.v1,
                                    ingress_controller_prerequisites.config_map['metadata']['name'],
                                    ingress_controller_prerequisites.namespace,
                                    f"{TEST_DATA}/virtual-server-configmap-keys/configmap-no-validation-keys-invalid.yaml")
        expected_values = get_configmap_fields_from_yaml(
            f"{TEST_DATA}/virtual-server-configmap-keys/configmap-no-validation-keys-invalid.yaml")
        wait_before_test(1)
        step_2_events = get_events(kube_apis.v1, virtual_server_setup.namespace)
        step_2_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)
        assert_invalid_event_emitted(virtual_server_setup, step_2_events, step_1_events)
        assert_keys_without_validation(step_2_config, expected_values)

        # to cover the OSS case, this will be changed in the future
        if cli_arguments['ic-type'] == "nginx-ingress":
            data_file = f"{TEST_DATA}/virtual-server-configmap-keys/configmap-validation-keys-oss.yaml"
            data_file_invalid = f"{TEST_DATA}/virtual-server-configmap-keys/configmap-validation-keys-invalid-oss.yaml"
        else:
            data_file = f"{TEST_DATA}/virtual-server-configmap-keys/configmap-validation-keys.yaml"
            data_file_invalid = f"{TEST_DATA}/virtual-server-configmap-keys/configmap-validation-keys-invalid.yaml"

        print("Step 3: update ConfigMap with valid keys with validation rules")
        replace_configmap_from_yaml(kube_apis.v1,
                                    ingress_controller_prerequisites.config_map['metadata']['name'],
                                    ingress_controller_prerequisites.namespace,
                                    data_file)
        expected_values = get_configmap_fields_from_yaml(data_file)
        wait_before_test(1)
        step_3_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)
        step_3_events = get_events(kube_apis.v1, virtual_server_setup.namespace)
        assert_valid_event_count_increased(virtual_server_setup, step_3_events, step_2_events)
        assert_keys_with_validation(step_3_config, expected_values)
        # to cover the OSS case, this will be changed in the future
        if cli_arguments['ic-type'] == "nginx-ingress":
            assert_specific_keys_for_nginx_oss(step_3_config, expected_values)
        else:
            assert_specific_keys_for_nginx_plus(step_3_config, expected_values)

        print("Step 4: update ConfigMap with invalid keys")
        replace_configmap_from_yaml(kube_apis.v1,
                                    ingress_controller_prerequisites.config_map['metadata']['name'],
                                    ingress_controller_prerequisites.namespace,
                                    data_file_invalid)
        expected_values = get_configmap_fields_from_yaml(data_file_invalid)
        wait_before_test(1)
        step_4_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)
        step_4_events = get_events(kube_apis.v1, virtual_server_setup.namespace)
        assert_valid_event_count_increased(virtual_server_setup, step_4_events, step_3_events)
        assert_defaults_of_keys_with_validation(step_4_config, expected_values)