Skip to content

Commit e4cfa01

Browse files
committed
Add python tests for cert-manager and external-dns
1 parent a86d7b6 commit e4cfa01

File tree

3 files changed

+115
-3
lines changed

3 files changed

+115
-3
lines changed

tests/suite/test_app_protect_watch_namespace_label.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ def fin():
123123

124124

125125
@pytest.mark.skip_for_nginx_oss
126-
@pytest.mark.cs
126+
@pytest.mark.appprotect
127127
@pytest.mark.parametrize(
128128
"crd_ingress_controller_with_ap",
129129
[

tests/suite/test_virtual_server_certmanager.py

Lines changed: 56 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
11
import pytest
22
from settings import TEST_DATA
33
from suite.utils.custom_assertions import wait_and_assert_status_code
4-
from suite.utils.resources_utils import create_secret_from_yaml, is_secret_present, wait_before_test
4+
from suite.utils.resources_utils import (
5+
create_secret_from_yaml,
6+
is_secret_present,
7+
patch_namespace_with_label,
8+
wait_before_test,
9+
)
510
from suite.utils.vs_vsr_resources_utils import patch_virtual_server_from_yaml
611
from suite.utils.yaml_utils import get_secret_name_from_vs_yaml
712

@@ -94,3 +99,53 @@ def test_virtual_server_no_cm(self, kube_apis, crd_ingress_controller, create_ce
9499
)
95100
wait_and_assert_status_code(200, virtual_server_setup.backend_1_url, virtual_server_setup.vs_host)
96101
wait_and_assert_status_code(200, virtual_server_setup.backend_2_url, virtual_server_setup.vs_host)
102+
103+
104+
@pytest.mark.vs
105+
@pytest.mark.smoke
106+
@pytest.mark.parametrize(
107+
"crd_ingress_controller, create_certmanager, virtual_server_setup",
108+
[
109+
(
110+
{
111+
"type": "complete",
112+
"extra_args": [
113+
f"-enable-custom-resources",
114+
f"-enable-cert-manager",
115+
f"-watch-namespace-label=app=watch",
116+
],
117+
},
118+
{"issuer_name": "self-signed"},
119+
{"example": "virtual-server-certmanager", "app_type": "simple"},
120+
)
121+
],
122+
indirect=True,
123+
)
124+
class TestCertManagerVirtualServerWatchLabel:
125+
def test_responses_after_setup(
126+
self, kube_apis, crd_ingress_controller, create_certmanager, virtual_server_setup, test_namespace
127+
):
128+
print("\nStep 1: Not watching namespace - verify secret does not exist")
129+
secret_name = get_secret_name_from_vs_yaml(
130+
f"{TEST_DATA}/virtual-server-certmanager/standard/virtual-server.yaml"
131+
)
132+
# add a wait to avoid a false negative
133+
wait_before_test(10)
134+
check = is_secret_present(kube_apis.v1, secret_name, virtual_server_setup.namespace)
135+
assert check == False
136+
137+
print("\nStep 2: Add label to namespace - Verify secret exists now")
138+
patch_namespace_with_label(kube_apis.v1, test_namespace, "watch", f"{TEST_DATA}/common/ns-patch.yaml")
139+
wait_before_test()
140+
secret_name = get_secret_name_from_vs_yaml(
141+
f"{TEST_DATA}/virtual-server-certmanager/standard/virtual-server.yaml"
142+
)
143+
retry = 0
144+
while (not is_secret_present(kube_apis.v1, secret_name, virtual_server_setup.namespace)) and retry <= 10:
145+
wait_before_test(1)
146+
retry += 1
147+
print(f"Retrying {retry}")
148+
149+
print("\nStep 2: verify connectivity")
150+
wait_and_assert_status_code(200, virtual_server_setup.backend_1_url, virtual_server_setup.vs_host)
151+
wait_and_assert_status_code(200, virtual_server_setup.backend_2_url, virtual_server_setup.vs_host)

tests/suite/test_virtual_server_externaldns.py

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
from settings import TEST_DATA
33
from suite.utils.custom_assertions import assert_event
44
from suite.utils.custom_resources_utils import is_dnsendpoint_present
5-
from suite.utils.resources_utils import get_events, wait_before_test
5+
from suite.utils.resources_utils import get_events, patch_namespace_with_label, wait_before_test
66
from suite.utils.vs_vsr_resources_utils import patch_virtual_server_from_yaml
77
from suite.utils.yaml_utils import get_name_from_yaml, get_namespace_from_yaml
88

@@ -65,3 +65,60 @@ def test_update_to_ed_in_vs(
6565
wait_before_test(5)
6666
events = get_events(kube_apis.v1, virtual_server_setup.namespace)
6767
assert_event(vs_event_update_text, events)
68+
69+
70+
@pytest.mark.vs
71+
@pytest.mark.smoke
72+
@pytest.mark.parametrize(
73+
"crd_ingress_controller_with_ed, create_externaldns, virtual_server_setup",
74+
[
75+
(
76+
{
77+
"type": "complete",
78+
"extra_args": [
79+
f"-enable-custom-resources",
80+
f"-enable-external-dns",
81+
f"-watch-namespace-label=app=watch",
82+
],
83+
},
84+
{},
85+
{"example": "virtual-server-external-dns", "app_type": "simple"},
86+
)
87+
],
88+
indirect=True,
89+
)
90+
class TestExternalDNSVirtualServerWatchLabel:
91+
def test_responses_after_setup(
92+
self, kube_apis, crd_ingress_controller_with_ed, create_externaldns, virtual_server_setup, test_namespace
93+
):
94+
dns_ep_name = get_name_from_yaml(VS_YAML)
95+
print("\nStep 0: Verify DNSEndpoint is not created without watched label")
96+
retry = 0
97+
dep = is_dnsendpoint_present(kube_apis.custom_objects, dns_ep_name, virtual_server_setup.namespace)
98+
# add a wait to avoid a false negative
99+
wait_before_test(30)
100+
dep = is_dnsendpoint_present(kube_apis.custom_objects, dns_ep_name, virtual_server_setup.namespace)
101+
assert dep is False
102+
print("\nStep 1: Verify DNSEndpoint exists after label is added to namespace")
103+
patch_namespace_with_label(kube_apis.v1, test_namespace, "watch", f"{TEST_DATA}/common/ns-patch.yaml")
104+
wait_before_test()
105+
retry = 0
106+
dep = is_dnsendpoint_present(kube_apis.custom_objects, dns_ep_name, virtual_server_setup.namespace)
107+
while dep == False and retry <= 60:
108+
dep = is_dnsendpoint_present(kube_apis.custom_objects, dns_ep_name, virtual_server_setup.namespace)
109+
retry += 1
110+
wait_before_test(1)
111+
print(f"DNSEndpoint not created, retrying... #{retry}")
112+
assert dep is True
113+
print("\nStep 2: Verify external-dns picked up the record")
114+
pod_ns = get_namespace_from_yaml(f"{TEST_DATA}/virtual-server-external-dns/external-dns.yaml")
115+
pod_name = kube_apis.v1.list_namespaced_pod(pod_ns).items[0].metadata.name
116+
log_contents = kube_apis.v1.read_namespaced_pod_log(pod_name, pod_ns)
117+
wanted_string = "CREATE: virtual-server.example.com 0 IN A"
118+
retry = 0
119+
while wanted_string not in log_contents and retry <= 60:
120+
log_contents = kube_apis.v1.read_namespaced_pod_log(pod_name, pod_ns)
121+
retry += 1
122+
wait_before_test(1)
123+
print(f"External DNS not updated, retrying... #{retry}")
124+
assert wanted_string in log_contents

0 commit comments

Comments
 (0)