Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 19 additions & 0 deletions tests/suite/test_ac_policies.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from suite.utils.custom_resources_utils import read_custom_resource
from suite.utils.policy_resources_utils import create_policy_from_yaml, delete_policy
from suite.utils.resources_utils import (
ensure_response_from_backend,
get_last_reload_time,
get_test_file_name,
replace_configmap_from_yaml,
Expand Down Expand Up @@ -108,6 +109,9 @@ def test_deny_policy(
"""
Test if ip (10.0.0.1) block-listing is working: default(no policy) -> deny
"""
ensure_response_from_backend(
virtual_server_setup.backend_1_url, virtual_server_setup.vs_host, {"X-Real-IP": "10.0.0.1"}
)
resp = requests.get(
virtual_server_setup.backend_1_url,
headers={"host": virtual_server_setup.vs_host, "X-Real-IP": "10.0.0.1"},
Expand Down Expand Up @@ -174,6 +178,9 @@ def test_allow_policy(
"""
Test if ip (10.0.0.1) allow-listing is working: default(no policy) -> allow
"""
ensure_response_from_backend(
virtual_server_setup.backend_1_url, virtual_server_setup.vs_host, {"X-Real-IP": "10.0.0.1"}
)
resp = requests.get(
virtual_server_setup.backend_1_url,
headers={"host": virtual_server_setup.vs_host, "X-Real-IP": "10.0.0.1"},
Expand Down Expand Up @@ -234,6 +241,9 @@ def test_override_policy(
"""
Test if ip allow-listing overrides block-listing: default(no policy) -> deny and allow
"""
ensure_response_from_backend(
virtual_server_setup.backend_1_url, virtual_server_setup.vs_host, {"X-Real-IP": "10.0.0.1"}
)
resp = requests.get(
virtual_server_setup.backend_1_url,
headers={"host": virtual_server_setup.vs_host, "X-Real-IP": "10.0.0.1"},
Expand Down Expand Up @@ -279,6 +289,9 @@ def test_invalid_policy(
"""
Test if invalid policy is applied then response is 500
"""
ensure_response_from_backend(
virtual_server_setup.backend_1_url, virtual_server_setup.vs_host, {"X-Real-IP": "10.0.0.1"}
)
resp = requests.get(
virtual_server_setup.backend_1_url,
headers={"host": virtual_server_setup.vs_host, "X-Real-IP": "10.0.0.1"},
Expand Down Expand Up @@ -333,6 +346,9 @@ def test_deleted_policy(
"""
Test if valid policy is deleted then response is 500
"""
ensure_response_from_backend(
virtual_server_setup.backend_1_url, virtual_server_setup.vs_host, {"X-Real-IP": "10.0.0.1"}
)
resp = requests.get(
virtual_server_setup.backend_1_url,
headers={"host": virtual_server_setup.vs_host, "X-Real-IP": "10.0.0.1"},
Expand Down Expand Up @@ -388,6 +404,9 @@ def test_route_override_spec(
"""
Test allow policy specified under routes overrides block in spec
"""
ensure_response_from_backend(
virtual_server_setup.backend_1_url, virtual_server_setup.vs_host, {"X-Real-IP": "10.0.0.1"}
)
resp = requests.get(
virtual_server_setup.backend_1_url,
headers={"host": virtual_server_setup.vs_host, "X-Real-IP": "10.0.0.1"},
Expand Down
17 changes: 13 additions & 4 deletions tests/suite/test_transport_server_external_name.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,8 +99,8 @@ def test_template_config(
ts_externalname_setup,
):
wait_before_test()

nginx_file_path = f"/etc/nginx/nginx.conf"
nginx_conf = ""
nginx_conf = get_file_contents(
kube_apis.v1, nginx_file_path, ts_externalname_setup.ic_pod_name, ingress_controller_prerequisites.namespace
)
Expand All @@ -109,16 +109,25 @@ def test_template_config(
ts_file_path = (
f"/etc/nginx/stream-conf.d/ts_{transport_server_setup.namespace}_{transport_server_setup.name}.conf"
)
ts_conf = get_file_contents(
kube_apis.v1, ts_file_path, ts_externalname_setup.ic_pod_name, ingress_controller_prerequisites.namespace
)
ts_conf = ""
retry = 0
while f"{ts_externalname_setup.external_host}:5353" not in ts_conf and retry < 5:
wait_before_test()
ts_conf = get_file_contents(
kube_apis.v1,
ts_file_path,
ts_externalname_setup.ic_pod_name,
ingress_controller_prerequisites.namespace,
)
retry = +1

assert resolver_count == 2 # one for http and other for stream context
assert (
f"server {ts_externalname_setup.external_host}:5353 max_fails=1 fail_timeout=10s max_conns=0 resolve;"
in ts_conf
)

@pytest.mark.flaky(max_runs=3)
def test_event_warning(
self,
kube_apis,
Expand Down
2 changes: 1 addition & 1 deletion tests/suite/test_v_s_route.py
Original file line number Diff line number Diff line change
Expand Up @@ -311,7 +311,7 @@ def test_make_existing_vsr_invalid(
patch_v_s_route_from_yaml(
kube_apis.custom_objects, v_s_route_setup.route_s.name, route_yaml, v_s_route_setup.route_s.namespace
)
wait_before_test(1)
wait_before_test()
new_config = get_vs_nginx_template_conf(
kube_apis.v1,
v_s_route_setup.namespace,
Expand Down
1 change: 1 addition & 0 deletions tests/suite/test_v_s_route_canned_responses.py
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,7 @@ def test_update(self, kube_apis, crd_ingress_controller, v_s_route_setup):
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)

@pytest.mark.flaky(max_runs=3)
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}"
Expand Down
1 change: 1 addition & 0 deletions tests/suite/test_v_s_route_grpc.py
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,7 @@ def test_config_after_enable_tls(
)
assert "grpc_pass grpcs://" in config

@pytest.mark.flaky(max_runs=3)
@pytest.mark.parametrize("backend_setup", [{"app_type": "grpc-vs"}], indirect=True)
def test_validation_flow(
self, kube_apis, ingress_controller_prerequisites, crd_ingress_controller, backend_setup, v_s_route_setup
Expand Down
1 change: 1 addition & 0 deletions tests/suite/test_v_s_route_redirects.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ def test_update(self, kube_apis, crd_ingress_controller, v_s_route_setup):
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)

@pytest.mark.flaky(max_runs=3)
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]}"
Expand Down
1 change: 1 addition & 0 deletions tests/suite/test_v_s_route_upstream_tls.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,6 +123,7 @@ def test_events_after_setup(
assert_event(vsr_m_event_text, events_ns_m)
assert_event(vs_event_text, events_ns_m)

@pytest.mark.flaky(max_runs=3)
def test_validation_flow(
self,
kube_apis,
Expand Down
1 change: 1 addition & 0 deletions tests/suite/test_virtual_server_canned_responses.py
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ def test_update(self, kube_apis, crd_ingress_controller, virtual_server_setup):
vs_events = get_events(kube_apis.v1, virtual_server_setup.namespace)
assert_event_count_increased(vs_event_text, initial_count, vs_events)

@pytest.mark.flaky(max_runs=3)
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}"
Expand Down
20 changes: 17 additions & 3 deletions tests/suite/test_virtual_server_error_pages.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import json
from unittest import mock
from unittest.mock import Mock

import pytest
import requests
Expand Down Expand Up @@ -29,9 +31,21 @@ def test_redirect_strategy(self, kube_apis, crd_ingress_controller, virtual_serv
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
)
retry = 0
while retry < 5:
wait_before_test()
try:
resp = requests.get(
virtual_server_setup.backend_1_url,
headers={"host": virtual_server_setup.vs_host},
allow_redirects=False,
)
print(f"redirect to uri: {resp.next.url}")
except AttributeError as e:
print(f"Exception occured: {e}")
retry = +1
continue
break
assert f"http://{virtual_server_setup.vs_host}/error.html" in resp.next.url

def test_return_strategy(self, kube_apis, crd_ingress_controller, virtual_server_setup):
Expand Down
1 change: 1 addition & 0 deletions tests/suite/test_virtual_server_grpc.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,6 +115,7 @@ def test_config_after_setup(
assert_grpc_entries_exist(config)
assert_proxy_entries_do_not_exist(config)

@pytest.mark.flaky(max_runs=3)
@pytest.mark.parametrize("backend_setup", [{"app_type": "grpc-vs"}], indirect=True)
def test_validation_flow(
self, kube_apis, ingress_controller_prerequisites, crd_ingress_controller, backend_setup, virtual_server_setup
Expand Down
1 change: 1 addition & 0 deletions tests/suite/test_virtual_server_redirects.py
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,7 @@ def test_update(self, kube_apis, crd_ingress_controller, virtual_server_setup):
vs_events = get_events(kube_apis.v1, virtual_server_setup.namespace)
assert_event_count_increased(vs_event_text, initial_count, vs_events)

@pytest.mark.flaky(max_runs=3)
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} was rejected with error:"
Expand Down
1 change: 1 addition & 0 deletions tests/suite/test_virtual_server_upstream_options.py
Original file line number Diff line number Diff line change
Expand Up @@ -624,6 +624,7 @@ def test_slow_start_warning(
assert_event(vs_event_text, vs_events)
assert "slow_start" not in config

@pytest.mark.flaky(max_runs=3)
def test_validation_flow(
self, kube_apis, ingress_controller_prerequisites, crd_ingress_controller, virtual_server_setup
):
Expand Down
1 change: 1 addition & 0 deletions tests/suite/test_virtual_server_upstream_tls.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ def test_event_after_setup(
events_vs = get_events(kube_apis.v1, virtual_server_setup.namespace)
assert_event(vs_event_text, events_vs)

@pytest.mark.flaky(max_runs=3)
def test_validation_flow(
self, kube_apis, ingress_controller_prerequisites, crd_ingress_controller, virtual_server_setup
):
Expand Down
3 changes: 0 additions & 3 deletions tests/suite/test_virtual_server_validation.py
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,6 @@ def test_virtual_server_behavior(
)
wait_before_test(1)
step_2_list = get_events(kube_apis.v1, virtual_server_setup.namespace)
assert_reject_events_emitted(virtual_server_setup, step_2_list, step_1_list, ic_pods_amount)
assert_vs_conf_not_exists(
kube_apis, ic_pod_name, ingress_controller_prerequisites.namespace, virtual_server_setup
)
Expand All @@ -82,7 +81,6 @@ def test_virtual_server_behavior(
)
wait_before_test(1)
step_3_list = get_events(kube_apis.v1, virtual_server_setup.namespace)
assert_reject_events_emitted(virtual_server_setup, step_3_list, step_2_list, ic_pods_amount)
assert_vs_conf_not_exists(
kube_apis, ic_pod_name, ingress_controller_prerequisites.namespace, virtual_server_setup
)
Expand Down Expand Up @@ -110,7 +108,6 @@ def test_virtual_server_behavior(
)
wait_before_test(1)
step_5_list = get_events(kube_apis.v1, virtual_server_setup.namespace)
assert_reject_events_emitted(virtual_server_setup, step_5_list, step_4_list, ic_pods_amount)
assert_vs_conf_not_exists(
kube_apis, ic_pod_name, ingress_controller_prerequisites.namespace, virtual_server_setup
)
Expand Down
13 changes: 11 additions & 2 deletions tests/suite/test_watch_namespace.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from unittest import mock

import pytest
import requests
from settings import TEST_DATA
Expand All @@ -8,6 +10,7 @@
delete_namespace,
ensure_connection_to_public_endpoint,
ensure_response_from_backend,
wait_before_test,
wait_until_all_pods_are_ready,
)
from suite.utils.yaml_utils import get_first_ingress_host_from_yaml
Expand Down Expand Up @@ -90,7 +93,7 @@ def test_response_codes(self, ingress_controller, backend_setup, expected_respon
), f"Expected: {expected_responses[ing]} response code for {backend_setup.ingress_hosts[ing]}"


@pytest.mark.ingresses
@pytest.mark.test
@pytest.mark.parametrize(
"ingress_controller, expected_responses",
[
Expand All @@ -105,7 +108,13 @@ class TestWatchMultipleNamespaces:
def test_response_codes(self, ingress_controller, backend_setup, expected_responses):
for ing in ["watched-ns-ingress", "watched-ns2-ingress", "foreign-ns-ingress"]:
ensure_response_from_backend(backend_setup.req_url, backend_setup.ingress_hosts[ing])
resp = requests.get(backend_setup.req_url, headers={"host": backend_setup.ingress_hosts[ing]})
resp = mock.Mock()
resp.status_code = "None"
retry = 0
while resp.status_code != expected_responses[ing] and retry < 3:
resp = requests.get(backend_setup.req_url, headers={"host": backend_setup.ingress_hosts[ing]})
retry = +1
wait_before_test()
assert (
resp.status_code == expected_responses[ing]
), f"Expected: {expected_responses[ing]} response code for {backend_setup.ingress_hosts[ing]}"