예제 #1
0
    def test_virtual_server_after_update(self, kube_apis,
                                         ingress_controller_prerequisites,
                                         crd_ingress_controller,
                                         v_s_route_setup):
        req_url = f"http://{v_s_route_setup.public_endpoint.public_ip}:{v_s_route_setup.public_endpoint.port}"
        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-updated.yaml",
            v_s_route_setup.route_m.namespace)
        wait_and_assert_status_code(
            301,
            f"{req_url}{v_s_route_setup.route_m.paths[0]}",
            v_s_route_setup.vs_host,
            allow_redirects=False)
        resp = requests.get(f"{req_url}{v_s_route_setup.route_m.paths[0]}",
                            headers={
                                "host": v_s_route_setup.vs_host,
                                "x-forwarded-proto": "http"
                            },
                            allow_redirects=False)
        assert f'http://{v_s_route_setup.vs_host}/error_http.html' in resp.next.url

        wait_and_assert_status_code(
            502,
            f"{req_url}{v_s_route_setup.route_m.paths[1]}",
            v_s_route_setup.vs_host,
            allow_redirects=False)
        resp = requests.get(f"{req_url}{v_s_route_setup.route_m.paths[1]}",
                            headers={"host": v_s_route_setup.vs_host})
        resp_content = resp.content.decode('utf-8')
        assert resp_content == 'Hello World!\n'
    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_default_canned_response(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 = f"http://{req_host}{v_s_route_setup.route_m.paths[1]}"
     wait_and_assert_status_code(200, req_url, v_s_route_setup.vs_host)
     resp = requests.get(req_url, headers={"host": v_s_route_setup.vs_host})
     resp_content = resp.content.decode('utf-8')
     assert resp.headers['content-type'] == 'text/plain' and resp_content == "line1\nline2\nline3"
예제 #4
0
 def test_custom_canned_response(self, kube_apis, crd_ingress_controller,
                                 virtual_server_setup):
     req_url = f"{virtual_server_setup.backend_1_url}?arg1=arg"
     wait_and_assert_status_code(407, req_url, virtual_server_setup.vs_host)
     resp = requests.get(req_url,
                         headers={"host": virtual_server_setup.vs_host})
     resp_content = json.loads(resp.content)
     assert resp.headers['content-type'] == 'application/json' \
         and resp_content['host'] == virtual_server_setup.vs_host \
         and resp_content['request_time'] != "" \
         and resp_content['pid'] != "" \
         and resp_content['server_protocol'] == "HTTP/1.1" \
         and resp_content['connections_active'] != "" \
         and resp_content['connections_writing'] != "" \
         and resp_content['request_uri'] == "/canned-response?arg1=arg" \
         and resp_content['remote_addr'] != "" \
         and resp_content['remote_port'] != "" \
         and resp_content['server_addr'] != "" \
         and resp_content['request_method'] == "GET" \
         and resp_content['scheme'] == "http" \
         and resp_content['request_length'] != "" \
         and resp_content['nginx_version'] != "" \
         and resp_content['connection'] != "" \
         and resp_content['time_local'] != "" \
         and resp_content['server_port'] != "" \
         and resp_content['server_name'] == virtual_server_setup.vs_host \
         and resp_content['connections_waiting'] != "" \
         and resp_content['request_body'] == "" \
         and resp_content['args'] == "arg1=arg" \
         and resp_content['time_iso8601'] != "" \
         and resp_content['connections_reading'] != ""
예제 #5
0
    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_virtual_server_after_update(self, kube_apis,
                                         crd_ingress_controller,
                                         virtual_server_setup):
        patch_virtual_server_from_yaml(
            kube_apis.custom_objects, virtual_server_setup.vs_name,
            f"{TEST_DATA}/virtual-server-error-pages/virtual-server-updated.yaml",
            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,
                                "x-forwarded-proto": "http"
                            },
                            allow_redirects=False)
        assert f'http://{virtual_server_setup.vs_host}/error_http.html' in resp.next.url

        wait_and_assert_status_code(502, 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_content == 'Hello World!\n'
예제 #7
0
 def test_responses(self, kube_apis,
                    crd_ingress_controller,
                    vsr_externalname_setup):
     req_url = f"http://{vsr_externalname_setup.public_endpoint.public_ip}:" \
         f"{vsr_externalname_setup.public_endpoint.port}"
     wait_and_assert_status_code(200, f"{req_url}{vsr_externalname_setup.route.paths[0]}",
                                 vsr_externalname_setup.vs_host)
    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)
예제 #9
0
 def test_redirect_strategy(self, kube_apis, ingress_controller_prerequisites, crd_ingress_controller,
                            v_s_route_setup):
     req_url = f"http://{v_s_route_setup.public_endpoint.public_ip}:{v_s_route_setup.public_endpoint.port}"
     wait_and_assert_status_code(307, f"{req_url}{v_s_route_setup.route_m.paths[0]}",
                                 v_s_route_setup.vs_host, allow_redirects=False)
     resp = requests.get(f"{req_url}{v_s_route_setup.route_m.paths[0]}",
                         headers={"host": v_s_route_setup.vs_host}, allow_redirects=False)
     assert f'http://{v_s_route_setup.vs_host}/error.html' in resp.next.url
 def test_return_strategy(self, kube_apis, crd_ingress_controller, virtual_server_setup):
     wait_and_assert_status_code(207, 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 = json.loads(resp.content)
     assert resp_content['status'] == '502' \
         and resp_content['message'] == 'Forbidden' \
         and resp.headers.get('x-debug-original-status') == '502'
예제 #11
0
 def test_default_canned_response(self, kube_apis, crd_ingress_controller,
                                  virtual_server_setup):
     wait_and_assert_status_code(200, 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'] == 'text/plain' and resp_content == "line1\nline2\nline3"
 def test_splits_and_matches(self, kube_apis, crd_ingress_controller, virtual_server_setup, v_s_data):
     patch_virtual_server_from_yaml(kube_apis.custom_objects, virtual_server_setup.vs_name,
                                    f"{TEST_DATA}/virtual-server-error-pages/{v_s_data['src']}",
                                    virtual_server_setup.namespace)
     wait_and_assert_status_code(v_s_data['expected_code'], 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 f'http://{virtual_server_setup.vs_host}/error.html' in resp.next.url
 def test_redirect_strategy(self, kube_apis, crd_ingress_controller,
                            virtual_server_setup):
     wait_and_assert_status_code(307,
                                 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 f'http://{virtual_server_setup.vs_host}/error.html' in resp.next.url
예제 #14
0
 def test_return_strategy(self, kube_apis, ingress_controller_prerequisites, crd_ingress_controller,
                          v_s_route_setup):
     req_url = f"http://{v_s_route_setup.public_endpoint.public_ip}:{v_s_route_setup.public_endpoint.port}"
     wait_and_assert_status_code(207, f"{req_url}{v_s_route_setup.route_m.paths[1]}", v_s_route_setup.vs_host)
     resp = requests.get(f"{req_url}{v_s_route_setup.route_m.paths[1]}",
                         headers={"host": v_s_route_setup.vs_host})
     resp_content = json.loads(resp.content)
     assert resp_content['status'] == '502' \
         and resp_content['message'] == 'Forbidden' \
         and resp.headers.get('x-debug-original-status') == '502'
 def test_custom_redirect(self, kube_apis, crd_ingress_controller,
                          virtual_server_setup):
     req_url = f"{virtual_server_setup.backend_1_url}"
     wait_and_assert_status_code(307,
                                 req_url,
                                 virtual_server_setup.vs_host,
                                 allow_redirects=False)
     resp = requests.get(req_url,
                         headers={"host": virtual_server_setup.vs_host},
                         allow_redirects=False)
     assert resp.headers['location'] == "http://example.com"
 def test_default_redirect(self, kube_apis, crd_ingress_controller,
                           virtual_server_setup):
     wait_and_assert_status_code(301,
                                 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'] == f"http://{virtual_server_setup.vs_host}/default-redirect?arg="
예제 #17
0
 def test_custom_redirect(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 = f"http://{req_host}{v_s_route_setup.route_m.paths[0]}?arg1=arg"
     wait_and_assert_status_code(307,
                                 req_url,
                                 v_s_route_setup.vs_host,
                                 allow_redirects=False)
     resp = requests.get(req_url,
                         headers={"host": v_s_route_setup.vs_host},
                         allow_redirects=False)
     assert resp.headers['location'] == "http://example.com"
예제 #18
0
 def test_splits_and_matches(self, kube_apis, ingress_controller_prerequisites, crd_ingress_controller,
                             v_s_route_setup, v_s_r_data):
     req_url = f"http://{v_s_route_setup.public_endpoint.public_ip}:{v_s_route_setup.public_endpoint.port}"
     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/{v_s_r_data['src']}",
                               v_s_route_setup.route_m.namespace)
     wait_and_assert_status_code(v_s_r_data["expected_code"], f"{req_url}{v_s_route_setup.route_m.paths[0]}",
                                 v_s_route_setup.vs_host, allow_redirects=False)
     resp = requests.get(f"{req_url}{v_s_route_setup.route_m.paths[0]}",
                         headers={"host": v_s_route_setup.vs_host}, allow_redirects=False)
     assert f'http://{v_s_route_setup.vs_host}/error.html' in resp.next.url
    def test_responses_after_rbac_misconfiguration(self, kube_apis, crd_ingress_controller, virtual_server_setup):
        print("\nStep 1: rbac misconfiguration from the very start")
        resp = requests.get(virtual_server_setup.backend_1_url,
                            headers={"host": virtual_server_setup.vs_host})
        assert resp.status_code == 404
        resp = requests.get(virtual_server_setup.backend_2_url,
                            headers={"host": virtual_server_setup.vs_host})
        assert resp.status_code == 404

        print("Step 2: configure RBAC and check")
        patch_rbac(kube_apis.rbac_v1_beta1, f"{DEPLOYMENTS}/rbac/rbac.yaml")
        wait_and_assert_status_code(200, virtual_server_setup.backend_1_url, virtual_server_setup.vs_host)
        wait_and_assert_status_code(200, virtual_server_setup.backend_2_url, virtual_server_setup.vs_host)
예제 #20
0
 def test_default_redirect(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 = f"http://{req_host}{v_s_route_setup.route_m.paths[1]}"
     wait_and_assert_status_code(301,
                                 req_url,
                                 v_s_route_setup.vs_host,
                                 allow_redirects=False)
     resp = requests.get(req_url,
                         headers={"host": v_s_route_setup.vs_host},
                         allow_redirects=False)
     assert resp.headers[
         'location'] == f"http://{v_s_route_setup.vs_host}/backends/default-redirect?arg="
예제 #21
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)
예제 #22
0
    def test_responses_after_crd_removal_on_the_fly(self, kube_apis,
                                                    crd_ingress_controller,
                                                    virtual_server_setup):
        print("\nStep 12: remove CRD and check")
        crd_name = get_name_from_yaml(
            f"{DEPLOYMENTS}/common/crds-v1beta1/k8s.nginx.org_virtualservers.yaml"
        )
        delete_crd(kube_apis.api_extensions_v1_beta1, crd_name)
        wait_and_assert_status_code(404, virtual_server_setup.backend_1_url,
                                    virtual_server_setup.vs_host)
        wait_and_assert_status_code(404, virtual_server_setup.backend_2_url,
                                    virtual_server_setup.vs_host)

        print("Step 13: restore CRD and VS and check")
        create_crd_from_yaml(
            kube_apis.api_extensions_v1_beta1, crd_name,
            f"{DEPLOYMENTS}/common/crds-v1beta1/k8s.nginx.org_virtualservers.yaml"
        )
        wait_before_test(1)
        create_virtual_server_from_yaml(
            kube_apis.custom_objects,
            f"{TEST_DATA}/virtual-server/standard/virtual-server.yaml",
            virtual_server_setup.namespace)
        wait_and_assert_status_code(200, virtual_server_setup.backend_1_url,
                                    virtual_server_setup.vs_host)
        wait_and_assert_status_code(200, virtual_server_setup.backend_2_url,
                                    virtual_server_setup.vs_host)
예제 #23
0
    def test_validation_flow(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 = 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}"
        event_text = f"VirtualServerRoute {text} is invalid and was rejected: " \
                     f"spec.subroutes[0].action.return.body: Required value"
        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(event_text, events)
예제 #24
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: " \
                     f"spec.routes[0].action.return.body: Required value"
        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(event_text, vs_events)
예제 #25
0
 def test_vsr_overrides_vs(self, kube_apis, ingress_controller_prerequisites, crd_ingress_controller,
                           v_s_route_setup):
     req_url = f"http://{v_s_route_setup.public_endpoint.public_ip}:{v_s_route_setup.public_endpoint.port}"
     vs_src = f"{TEST_DATA}/virtual-server-route-error-pages/standard/virtual-server-updated.yaml"
     patch_virtual_server_from_yaml(kube_apis.custom_objects,
                                    v_s_route_setup.vs_name,
                                    vs_src,
                                    v_s_route_setup.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.yaml",
                               v_s_route_setup.route_m.namespace)
     wait_and_assert_status_code(307, f"{req_url}{v_s_route_setup.route_m.paths[0]}",
                                 v_s_route_setup.vs_host, allow_redirects=False)
     resp = requests.get(f"{req_url}{v_s_route_setup.route_m.paths[0]}",
                         headers={"host": v_s_route_setup.vs_host}, allow_redirects=False)
     assert f'http://{v_s_route_setup.vs_host}/error.html' in resp.next.url
예제 #26
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)
예제 #27
0
    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)
예제 #28
0
    def test_validation_flow(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 = 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}"
        event_text = f"VirtualServerRoute {text} is invalid and was rejected: "
        invalid_fields = [
            "spec.subroutes[0].action.redirect.code",
            "spec.subroutes[1].action.redirect.url"
        ]
        vsr_src = f"{TEST_DATA}/virtual-server-route-redirects/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(2)

        wait_and_assert_status_code(404,
                                    req_url,
                                    v_s_route_setup.vs_host,
                                    allow_redirects=False)
        events = get_events(kube_apis.v1, v_s_route_setup.route_m.namespace)
        assert_event_starts_with_text_and_contains_errors(
            event_text, events, invalid_fields)
 def test_response(self, kube_apis, crd_ingress_controller, virtual_server_setup, vs_externalname_setup):
     wait_and_assert_status_code(200, virtual_server_setup.backend_1_url,
                                 virtual_server_setup.vs_host)