Skip to content

Commit

Permalink
add initial functional test
Browse files Browse the repository at this point in the history
  • Loading branch information
vepatel committed Aug 18, 2023
1 parent 45606fa commit 8f2738d
Show file tree
Hide file tree
Showing 8 changed files with 196 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,14 @@ spec:
targetPort: 8443
protocol: TCP
name: custom-tls-port
- port: 8085
targetPort: 8085
protocol: TCP
name: custom-http
- port: 8445
targetPort: 8445
protocol: TCP
name: custom-https
- port: 9113
targetPort: 9113
protocol: TCP
Expand Down
8 changes: 8 additions & 0 deletions tests/data/common/service/nodeport-with-additional-ports.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -38,5 +38,13 @@ spec:
targetPort: 8443
protocol: TCP
name: custom-ssl-port
- port: 8085
targetPort: 8085
protocol: TCP
name: custom-http
- port: 8445
targetPort: 8445
protocol: TCP
name: custom-https
selector:
app: nginx-ingress
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
apiVersion: k8s.nginx.org/v1alpha1
kind: GlobalConfiguration
metadata:
name: nginx-configuration
namespace: nginx-ingress
spec:
listeners:
- name: dns-udp
port: 5353
protocol: UDP
- name: dns-tcp
port: 5353
protocol: TCP
- name: http-8085
port: 8085
protocol: HTTP
- name: https-8445
port: 8445
protocol: HTTP
ssl: true
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
apiVersion: k8s.nginx.org/v1
kind: VirtualServer
metadata:
name: virtual-server-status
spec:
host: virtual-server-status.example.com
tls:
secret: virtual-server-tls-secret
upstreams:
- name: backend2
service: backend2-svc
port: 80
- name: backend1
service: backend1-svc
port: 80
routes:
- path: /backend1
action:
pass: backend1
- path: /backend2
action:
pass: backend2
25 changes: 25 additions & 0 deletions tests/data/virtual-server-custom-listeners/virtual-server.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
apiVersion: k8s.nginx.org/v1
kind: VirtualServer
metadata:
name: virtual-server-status
spec:
listener:
http: http-8085
https: https-8445
host: virtual-server-status.example.com
tls:
secret: virtual-server-tls-secret
upstreams:
- name: backend2
service: backend2-svc
port: 80
- name: backend1
service: backend1-svc
port: 80
routes:
- path: /backend1
action:
pass: backend1
- path: /backend2
action:
pass: backend2
8 changes: 8 additions & 0 deletions tests/suite/fixtures/custom_resource_fixtures.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,14 @@ def __init__(self, public_endpoint: PublicEndpoint, namespace, vs_host, vs_name,
self.backend_2_url = f"http://{public_endpoint.public_ip}:{public_endpoint.port}{vs_paths[1]}"
self.backend_1_url_ssl = f"https://{public_endpoint.public_ip}:{public_endpoint.port_ssl}{vs_paths[0]}"
self.backend_2_url_ssl = f"https://{public_endpoint.public_ip}:{public_endpoint.port_ssl}{vs_paths[1]}"
self.backend_1_url_custom = f"http://{public_endpoint.public_ip}:{public_endpoint.custom_http}{vs_paths[0]}"
self.backend_2_url_custom = f"http://{public_endpoint.public_ip}:{public_endpoint.custom_http}{vs_paths[1]}"
self.backend_1_url_custom_ssl = (
f"https://{public_endpoint.public_ip}:{public_endpoint.custom_https}{vs_paths[0]}"
)
self.backend_2_url_custom_ssl = (
f"https://{public_endpoint.public_ip}:{public_endpoint.custom_https}{vs_paths[1]}"
)
self.metrics_url = f"http://{public_endpoint.public_ip}:{public_endpoint.metrics_port}/metrics"


Expand Down
8 changes: 8 additions & 0 deletions tests/suite/fixtures/fixtures.py
Original file line number Diff line number Diff line change
Expand Up @@ -87,6 +87,8 @@ def __init__(
udp_server_port=3334,
service_insight_port=9114,
custom_ssl_port=8443,
custom_http=8085,
custom_https=8445,
):
self.public_ip = public_ip
self.port = port
Expand All @@ -97,6 +99,8 @@ def __init__(
self.udp_server_port = udp_server_port
self.service_insight_port = service_insight_port
self.custom_ssl_port = custom_ssl_port
self.custom_http = custom_http
self.custom_https = custom_https


class IngressControllerPrerequisites:
Expand Down Expand Up @@ -185,6 +189,8 @@ def ingress_controller_endpoint(cli_arguments, kube_apis, ingress_controller_pre
udp_server_port,
service_insight_port,
custom_ssl_port,
custom_http,
custom_https,
) = get_service_node_ports(kube_apis.v1, service_name, namespace)
return PublicEndpoint(
public_ip,
Expand All @@ -196,6 +202,8 @@ def ingress_controller_endpoint(cli_arguments, kube_apis, ingress_controller_pre
udp_server_port,
service_insight_port,
custom_ssl_port,
custom_http,
custom_https,
)
else:
create_service_from_yaml(
Expand Down
97 changes: 97 additions & 0 deletions tests/suite/test_virtual_server_custom_listeners.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
import pytest
import requests
from settings import TEST_DATA
from suite.utils.custom_resources_utils import create_gc_from_yaml, delete_gc
from suite.utils.resources_utils import create_secret_from_yaml, delete_secret, wait_before_test
from suite.utils.vs_vsr_resources_utils import patch_virtual_server_from_yaml


@pytest.mark.test
@pytest.mark.parametrize(
"crd_ingress_controller, virtual_server_setup",
[
(
{
"type": "complete",
"extra_args": [
f"-global-configuration=nginx-ingress/nginx-configuration",
f"-enable-leader-election=false",
],
},
{
"example": "virtual-server-custom-listeners",
"app_type": "simple",
},
)
],
indirect=True,
)
class TestVirtualServerCustomListeners:
def restore_default_vs(self, kube_apis, virtual_server_setup) -> None:
"""
Function to revert vs deployment to valid state
"""
patch_src = f"{TEST_DATA}/virtual-server-status/standard/virtual-server.yaml"
patch_virtual_server_from_yaml(
kube_apis.custom_objects,
virtual_server_setup.vs_name,
patch_src,
virtual_server_setup.namespace,
)
wait_before_test()

def test_custom_listeners(self, kube_apis, crd_ingress_controller, virtual_server_setup) -> None:
print("\nStep 1: Create GC resource")
secret_name = create_secret_from_yaml(
kube_apis.v1, virtual_server_setup.namespace, f"{TEST_DATA}/virtual-server-tls/tls-secret.yaml"
)
global_config_file = f"{TEST_DATA}/virtual-server-custom-listeners/global-configuration.yaml"
gc_resource = create_gc_from_yaml(kube_apis.custom_objects, global_config_file, "nginx-ingress")
patch_src = f"{TEST_DATA}/virtual-server-custom-listeners/virtual-server.yaml"
patch_virtual_server_from_yaml(
kube_apis.custom_objects,
virtual_server_setup.vs_name,
patch_src,
virtual_server_setup.namespace,
)
wait_before_test()
print(virtual_server_setup.backend_1_url_custom_ssl)
resp1 = requests.get(
virtual_server_setup.backend_1_url_custom_ssl,
headers={"host": virtual_server_setup.vs_host},
allow_redirects=False,
verify=False,
)
print(virtual_server_setup.backend_1_url_custom)
resp2 = requests.get(
virtual_server_setup.backend_1_url_custom,
headers={"host": virtual_server_setup.vs_host},
)
print(resp1.status_code)
print(resp1.text)
print(resp2.status_code)
print(resp2.text)

print(virtual_server_setup.backend_1_url_ssl)
resp3 = requests.get(
virtual_server_setup.backend_1_url_ssl,
headers={"host": virtual_server_setup.vs_host},
allow_redirects=False,
verify=False,
)
print(virtual_server_setup.backend_1_url)
resp4 = requests.get(
virtual_server_setup.backend_1_url,
headers={"host": virtual_server_setup.vs_host},
)
print(resp3.status_code)
print(resp3.text)
print(resp4.status_code)
print(resp4.text)

delete_secret(kube_apis.v1, secret_name, virtual_server_setup.namespace)
delete_gc(kube_apis.custom_objects, gc_resource, "nginx-ingress")
self.restore_default_vs(kube_apis, virtual_server_setup)

assert resp1.status_code == 200 and resp2.status_code == 200
assert resp3.status_code == 404 and resp4.status_code == 404

0 comments on commit 8f2738d

Please sign in to comment.