def test_event_message_and_config(self, kube_apis, ingress_controller_prerequisites,
                                      crd_ingress_controller, virtual_server_setup):
        invalid_fields = [
            "upstreams[0].lb-method", "upstreams[0].fail-timeout",
            "upstreams[0].max-fails", "upstreams[0].connect-timeout",
            "upstreams[0].read-timeout", "upstreams[0].send-timeout",
            "upstreams[0].keepalive", "upstreams[0].max-conns",
            "upstreams[0].next-upstream",
            "upstreams[0].next-upstream-timeout", "upstreams[0].next-upstream-tries",
            "upstreams[0].client-max-body-size",
            "upstreams[0].buffers.number", "upstreams[0].buffers.size", "upstreams[0].buffer-size",
            "upstreams[1].lb-method", "upstreams[1].fail-timeout",
            "upstreams[1].max-fails", "upstreams[1].connect-timeout",
            "upstreams[1].read-timeout", "upstreams[1].send-timeout",
            "upstreams[1].keepalive", "upstreams[1].max-conns",
            "upstreams[1].next-upstream",
            "upstreams[1].next-upstream-timeout", "upstreams[1].next-upstream-tries",
            "upstreams[1].client-max-body-size",
            "upstreams[1].buffers.number", "upstreams[1].buffers.size", "upstreams[1].buffer-size"
        ]
        text = f"{virtual_server_setup.namespace}/{virtual_server_setup.vs_name}"
        vs_event_text = f"VirtualServer {text} was rejected with error:"
        vs_file = f"{TEST_DATA}/virtual-server-upstream-options/virtual-server-with-invalid-keys.yaml"
        patch_virtual_server_from_yaml(kube_apis.custom_objects,
                                       virtual_server_setup.vs_name,
                                       vs_file,
                                       virtual_server_setup.namespace)
        wait_before_test(2)
        ic_pod_name = get_first_pod_name(kube_apis.v1, ingress_controller_prerequisites.namespace)
        vs_events = get_events(kube_apis.v1, virtual_server_setup.namespace)

        assert_event_starts_with_text_and_contains_errors(vs_event_text, vs_events, invalid_fields)
        assert_vs_conf_not_exists(kube_apis, ic_pod_name, ingress_controller_prerequisites.namespace,
                                  virtual_server_setup)
コード例 #2
0
    def test_validation_event_flow(self, kube_apis,
                                   ingress_controller_prerequisites,
                                   crd_ingress_controller,
                                   virtual_server_setup):
        invalid_fields = [
            "spec.routes[0].errorPages[0].redirect.url: Invalid value",
            "spec.routes[0].errorPages[0].redirect.code: Invalid value: 101",
            "spec.routes[1].errorPages[0].return.body: Invalid value: \"status\"",
            "spec.routes[1].errorPages[0].return.code: Invalid value: 100",
            "spec.routes[1].errorPages[0].return.headers[0].value: Invalid value: \"schema\""
        ]
        text = f"{virtual_server_setup.namespace}/{virtual_server_setup.vs_name}"
        vs_event_text = f"VirtualServer {text} was rejected with error:"
        vs_file = f"{TEST_DATA}/virtual-server-error-pages/virtual-server-invalid.yaml"
        patch_virtual_server_from_yaml(kube_apis.custom_objects,
                                       virtual_server_setup.vs_name, vs_file,
                                       virtual_server_setup.namespace)
        wait_before_test(2)
        ic_pod_name = get_first_pod_name(
            kube_apis.v1, ingress_controller_prerequisites.namespace)
        vs_events = get_events(kube_apis.v1, virtual_server_setup.namespace)

        assert_event_starts_with_text_and_contains_errors(
            vs_event_text, vs_events, invalid_fields)
        assert_vs_conf_not_exists(kube_apis, ic_pod_name,
                                  ingress_controller_prerequisites.namespace,
                                  virtual_server_setup)
コード例 #3
0
 def test_grpc_healthcheck_validation(self, kube_apis,
                                      ingress_controller_prerequisites,
                                      crd_ingress_controller, backend_setup,
                                      virtual_server_setup):
     invalid_fields = [
         "upstreams[0].healthCheck.path",
         "upstreams[0].healthCheck.statusMatch",
         "upstreams[0].healthCheck.grpcStatus",
         "upstreams[0].healthCheck.grpcService"
     ]
     text = f"{virtual_server_setup.namespace}/{virtual_server_setup.vs_name}"
     vs_event_text = f"VirtualServer {text} was rejected with error:"
     patch_virtual_server_from_yaml(
         kube_apis.custom_objects, virtual_server_setup.vs_name,
         f"{TEST_DATA}/virtual-server-grpc/virtual-server-healthcheck-invalid.yaml",
         virtual_server_setup.namespace)
     wait_before_test(2)
     ic_pod_name = get_first_pod_name(
         kube_apis.v1, ingress_controller_prerequisites.namespace)
     vs_events = get_events(kube_apis.v1, virtual_server_setup.namespace)
     print(vs_events)
     assert_event_starts_with_text_and_contains_errors(
         vs_event_text, vs_events, invalid_fields)
     assert_vs_conf_not_exists(kube_apis, ic_pod_name,
                               ingress_controller_prerequisites.namespace,
                               virtual_server_setup)
コード例 #4
0
    def test_event_message_and_config(self, kube_apis,
                                      ingress_controller_prerequisites,
                                      crd_ingress_controller, v_s_route_setup):
        invalid_fields_s = [
            "upstreams[0].lb-method", "upstreams[0].fail-timeout",
            "upstreams[0].max-fails", "upstreams[0].connect-timeout",
            "upstreams[0].read-timeout", "upstreams[0].send-timeout",
            "upstreams[0].keepalive", "upstreams[0].max-conns",
            "upstreams[0].next-upstream", "upstreams[0].next-upstream-timeout",
            "upstreams[0].next-upstream-tries",
            "upstreams[0].client-max-body-size", "upstreams[0].buffers.number",
            "upstreams[0].buffers.size", "upstreams[0].buffer-size"
        ]
        invalid_fields_m = [
            "upstreams[0].lb-method", "upstreams[0].fail-timeout",
            "upstreams[0].max-fails", "upstreams[0].connect-timeout",
            "upstreams[0].read-timeout", "upstreams[0].send-timeout",
            "upstreams[0].keepalive", "upstreams[0].max-conns",
            "upstreams[0].next-upstream", "upstreams[0].next-upstream-timeout",
            "upstreams[0].next-upstream-tries",
            "upstreams[0].client-max-body-size", "upstreams[0].buffers.number",
            "upstreams[0].buffers.size", "upstreams[0].buffer-size",
            "upstreams[1].lb-method", "upstreams[1].fail-timeout",
            "upstreams[1].max-fails", "upstreams[1].connect-timeout",
            "upstreams[1].read-timeout", "upstreams[1].send-timeout",
            "upstreams[1].keepalive", "upstreams[1].max-conns",
            "upstreams[1].next-upstream", "upstreams[1].next-upstream-timeout",
            "upstreams[1].next-upstream-tries",
            "upstreams[1].client-max-body-size", "upstreams[1].buffers.number",
            "upstreams[1].buffers.size", "upstreams[1].buffer-size"
        ]
        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"VirtualServerRoute {text_s} is invalid and was rejected: "
        vsr_m_event_text = f"VirtualServerRoute {text_m} is invalid and was rejected: "
        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-invalid-keys.yaml",
            v_s_route_setup.route_s.namespace)
        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-invalid-keys.yaml",
            v_s_route_setup.route_m.namespace)
        wait_before_test(2)
        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)
        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_starts_with_text_and_contains_errors(
            vsr_s_event_text, vsr_s_events, invalid_fields_s)
        assert_event_starts_with_text_and_contains_errors(
            vsr_m_event_text, vsr_m_events, invalid_fields_m)
        assert "upstream" not in config
コード例 #5
0
    def test_validation_flow(self, kube_apis, ingress_controller_prerequisites,
                             crd_ingress_controller, virtual_server_setup):
        invalid_fields = [
            "upstreams[0].healthCheck.path",
            "upstreams[0].healthCheck.interval",
            "upstreams[0].healthCheck.jitter",
            "upstreams[0].healthCheck.fails",
            "upstreams[0].healthCheck.passes",
            "upstreams[0].healthCheck.connect-timeout",
            "upstreams[0].healthCheck.read-timeout",
            "upstreams[0].healthCheck.send-timeout",
            "upstreams[0].healthCheck.headers[0].name",
            "upstreams[0].healthCheck.headers[0].value",
            "upstreams[0].healthCheck.statusMatch", "upstreams[0].slow-start",
            "upstreams[0].queue.size", "upstreams[0].queue.timeout",
            "upstreams[0].sessionCookie.name",
            "upstreams[0].sessionCookie.path",
            "upstreams[0].sessionCookie.expires",
            "upstreams[0].sessionCookie.domain",
            "upstreams[1].healthCheck.path",
            "upstreams[1].healthCheck.interval",
            "upstreams[1].healthCheck.jitter",
            "upstreams[1].healthCheck.fails",
            "upstreams[1].healthCheck.passes",
            "upstreams[1].healthCheck.connect-timeout",
            "upstreams[1].healthCheck.read-timeout",
            "upstreams[1].healthCheck.send-timeout",
            "upstreams[1].healthCheck.headers[0].name",
            "upstreams[1].healthCheck.headers[0].value",
            "upstreams[1].healthCheck.statusMatch", "upstreams[1].slow-start",
            "upstreams[1].queue.size", "upstreams[1].queue.timeout",
            "upstreams[1].sessionCookie.name",
            "upstreams[1].sessionCookie.path",
            "upstreams[1].sessionCookie.expires",
            "upstreams[1].sessionCookie.domain"
        ]
        text = f"{virtual_server_setup.namespace}/{virtual_server_setup.vs_name}"
        vs_event_text = f"VirtualServer {text} was rejected with error:"
        vs_file = f"{TEST_DATA}/virtual-server-upstream-options/plus-virtual-server-with-invalid-keys.yaml"
        patch_virtual_server_from_yaml(kube_apis.custom_objects,
                                       virtual_server_setup.vs_name, vs_file,
                                       virtual_server_setup.namespace)
        wait_before_test(2)
        ic_pod_name = get_first_pod_name(
            kube_apis.v1, ingress_controller_prerequisites.namespace)
        vs_events = get_events(kube_apis.v1, virtual_server_setup.namespace)

        assert_event_starts_with_text_and_contains_errors(
            vs_event_text, vs_events, invalid_fields)
        assert_vs_conf_not_exists(kube_apis, ic_pod_name,
                                  ingress_controller_prerequisites.namespace,
                                  virtual_server_setup)
コード例 #6
0
    def test_validation_flow(self, kube_apis, crd_ingress_controller, virtual_server_setup):
        text = f"{virtual_server_setup.namespace}/{virtual_server_setup.vs_name}"
        event_text = f"VirtualServer {text} is invalid and was rejected: "
        invalid_fields = ["spec.routes[0].action.redirect.code", "spec.routes[1].action.redirect.url"]
        vs_src = f"{TEST_DATA}/virtual-server-redirects/virtual-server-invalid.yaml"
        patch_virtual_server_from_yaml(kube_apis.custom_objects, virtual_server_setup.vs_name, vs_src,
                                       virtual_server_setup.namespace)
        wait_before_test(2)

        wait_and_assert_status_code(404, virtual_server_setup.backend_1_url,
                                    virtual_server_setup.vs_host, allow_redirects=False)
        vs_events = get_events(kube_apis.v1, virtual_server_setup.namespace)
        assert_event_starts_with_text_and_contains_errors(event_text, vs_events, invalid_fields)
    def test_validation_flow(self, kube_apis, crd_ingress_controller, v_s_route_setup):
        invalid_fields = [
            "spec.subroutes[0].action.return.code", "spec.subroutes[0].action.return.body"
        ]
        req_host = f"{v_s_route_setup.public_endpoint.public_ip}:{v_s_route_setup.public_endpoint.port}"
        req_url = f"http://{req_host}{v_s_route_setup.route_s.paths[0]}"
        text = f"{v_s_route_setup.namespace}/{v_s_route_setup.route_m.name}"
        vsr_m_event_text = f"VirtualServerRoute {text} was rejected with error:"
        vsr_src = f"{TEST_DATA}/virtual-server-route-canned-responses/route-multiple-invalid.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_before_test(1)

        wait_and_assert_status_code(404, req_url, v_s_route_setup.vs_host)
        events = get_events(kube_apis.v1, v_s_route_setup.route_m.namespace)
        assert_event_starts_with_text_and_contains_errors(vsr_m_event_text, events, invalid_fields)
コード例 #8
0
    def test_validation_flow(self, kube_apis, ingress_controller_prerequisites,
                             crd_ingress_controller, backend_setup, virtual_server_setup):
        print("\nTest 1: Wrong type")
        patch_virtual_server_from_yaml(kube_apis.custom_objects,
                                        virtual_server_setup.vs_name,
                                        f"{TEST_DATA}/virtual-server-grpc/virtual-server-invalid-type.yaml",
                                        virtual_server_setup.namespace)
        wait_before_test()
        text = f"{virtual_server_setup.namespace}/{virtual_server_setup.vs_name}"
        event_text1 = f"VirtualServer {text} was rejected with error:"
        invalid_fields1 = ["spec.upstreams[0].type"]
        vs_events1 = get_events(kube_apis.v1, virtual_server_setup.namespace)
        assert_event_starts_with_text_and_contains_errors(event_text1, vs_events1, invalid_fields1)

        self.patch_valid_vs(kube_apis, virtual_server_setup)
        wait_before_test()
コード例 #9
0
    def test_validation_flow(self, kube_apis, crd_ingress_controller,
                             virtual_server_setup):
        invalid_fields = [
            "spec.routes[0].action.return.code",
            "spec.routes[0].action.return.body"
        ]
        text = f"{virtual_server_setup.namespace}/{virtual_server_setup.vs_name}"
        vs_event_text = f"VirtualServer {text} was rejected with error:"
        vs_src = f"{TEST_DATA}/virtual-server-canned-responses/virtual-server-invalid.yaml"
        patch_virtual_server_from_yaml(kube_apis.custom_objects,
                                       virtual_server_setup.vs_name, vs_src,
                                       virtual_server_setup.namespace)
        wait_before_test(1)

        wait_and_assert_status_code(404, virtual_server_setup.backend_1_url,
                                    virtual_server_setup.vs_host)
        vs_events = get_events(kube_apis.v1, virtual_server_setup.namespace)
        assert_event_starts_with_text_and_contains_errors(
            vs_event_text, vs_events, invalid_fields)
コード例 #10
0
    def test_validation_flow(self, kube_apis, ingress_controller_prerequisites,
                             crd_ingress_controller, backend_setup,
                             v_s_route_setup):
        print("\nTest 1: Wrong type")
        patch_v_s_route_from_yaml(
            kube_apis.custom_objects, v_s_route_setup.route_m.name,
            f"{TEST_DATA}/virtual-server-route-grpc/route-invalid-type.yaml",
            v_s_route_setup.route_m.namespace)
        wait_before_test()
        text_m = f"{v_s_route_setup.route_m.namespace}/{v_s_route_setup.route_m.name}"
        vsr_m_event_text = f"VirtualServerRoute {text_m} was rejected with error:"
        invalid_fields_m = ["spec.upstreams[0].type", "spec.upstreams[1].type"]
        vsr_m_events = get_events(kube_apis.v1,
                                  v_s_route_setup.route_m.namespace)
        assert_event_starts_with_text_and_contains_errors(
            vsr_m_event_text, vsr_m_events, invalid_fields_m)

        self.patch_valid_vs_route(kube_apis, v_s_route_setup)
        wait_before_test()
コード例 #11
0
    def test_validation_event_flow(self, kube_apis,
                                   ingress_controller_prerequisites,
                                   crd_ingress_controller, v_s_route_setup):
        invalid_fields_m = [
            "spec.subroutes[0].errorPages[0].redirect.url: Invalid value",
            "spec.subroutes[0].errorPages[0].redirect.code: Invalid value: 101",
            "spec.subroutes[1].errorPages[0].return.body: Invalid value: \"status\"",
            "spec.subroutes[1].errorPages[0].return.code: Invalid value: 100",
            "spec.subroutes[1].errorPages[0].return.headers[0].value: Invalid value: \"schema\""
        ]
        invalid_fields_s = [
            "spec.subroutes[0].errorPages[0].redirect.url: Required value: must specify a url"
        ]
        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"VirtualServerRoute {text_s} is invalid and was rejected: "
        vsr_m_event_text = f"VirtualServerRoute {text_m} is invalid and was rejected: "
        patch_v_s_route_from_yaml(
            kube_apis.custom_objects, v_s_route_setup.route_s.name,
            f"{TEST_DATA}/virtual-server-route-error-pages/route-single-invalid.yaml",
            v_s_route_setup.route_s.namespace)
        patch_v_s_route_from_yaml(
            kube_apis.custom_objects, v_s_route_setup.route_m.name,
            f"{TEST_DATA}/virtual-server-route-error-pages/route-multiple-invalid.yaml",
            v_s_route_setup.route_m.namespace)
        wait_before_test(2)
        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)
        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_starts_with_text_and_contains_errors(
            vsr_s_event_text, vsr_s_events, invalid_fields_s)
        assert_event_starts_with_text_and_contains_errors(
            vsr_m_event_text, vsr_m_events, invalid_fields_m)
        assert "upstream" not in config
コード例 #12
0
    def test_validation_flow(self, kube_apis, ingress_controller_prerequisites,
                             crd_ingress_controller, v_s_route_setup):
        invalid_fields_s = [
            "upstreams[0].healthCheck.path", "upstreams[0].healthCheck.interval", "upstreams[0].healthCheck.jitter",
            "upstreams[0].healthCheck.fails", "upstreams[0].healthCheck.passes",
            "upstreams[0].healthCheck.connect-timeout",
            "upstreams[0].healthCheck.read-timeout", "upstreams[0].healthCheck.send-timeout",
            "upstreams[0].healthCheck.headers[0].name", "upstreams[0].healthCheck.headers[0].value",
            "upstreams[0].healthCheck.statusMatch",
            "upstreams[0].slow-start",
            "upstreams[0].queue.size", "upstreams[0].queue.timeout",
            "upstreams[0].sessionCookie.name", "upstreams[0].sessionCookie.path",
            "upstreams[0].sessionCookie.expires", "upstreams[0].sessionCookie.domain"
        ]
        invalid_fields_m = [
            "upstreams[0].healthCheck.path", "upstreams[0].healthCheck.interval", "upstreams[0].healthCheck.jitter",
            "upstreams[0].healthCheck.fails", "upstreams[0].healthCheck.passes",
            "upstreams[0].healthCheck.connect-timeout",
            "upstreams[0].healthCheck.read-timeout", "upstreams[0].healthCheck.send-timeout",
            "upstreams[0].healthCheck.headers[0].name", "upstreams[0].healthCheck.headers[0].value",
            "upstreams[0].healthCheck.statusMatch",
            "upstreams[0].slow-start",
            "upstreams[0].queue.size", "upstreams[0].queue.timeout",
            "upstreams[0].sessionCookie.name", "upstreams[0].sessionCookie.path",
            "upstreams[0].sessionCookie.expires", "upstreams[0].sessionCookie.domain",
            "upstreams[1].healthCheck.path", "upstreams[1].healthCheck.interval", "upstreams[1].healthCheck.jitter",
            "upstreams[1].healthCheck.fails", "upstreams[1].healthCheck.passes",
            "upstreams[1].healthCheck.connect-timeout",
            "upstreams[1].healthCheck.read-timeout", "upstreams[1].healthCheck.send-timeout",
            "upstreams[1].healthCheck.headers[0].name", "upstreams[0].healthCheck.headers[0].value",
            "upstreams[1].healthCheck.statusMatch",
            "upstreams[1].slow-start",
            "upstreams[1].queue.size", "upstreams[1].queue.timeout",
            "upstreams[1].sessionCookie.name", "upstreams[1].sessionCookie.path",
            "upstreams[1].sessionCookie.expires", "upstreams[1].sessionCookie.domain"
        ]
        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"VirtualServerRoute {text_s} is invalid and was rejected: "
        vsr_m_event_text = f"VirtualServerRoute {text_m} is invalid and was rejected: "
        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/plus-route-s-invalid-keys.yaml",
                                  v_s_route_setup.route_s.namespace)
        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/plus-route-m-invalid-keys.yaml",
                                  v_s_route_setup.route_m.namespace)
        wait_before_test(2)
        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)
        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_starts_with_text_and_contains_errors(vsr_s_event_text, vsr_s_events, invalid_fields_s)
        assert_event_starts_with_text_and_contains_errors(vsr_m_event_text, vsr_m_events, invalid_fields_m)
        assert "upstream" not in config