Skip to content

Commit

Permalink
Add tests for TransportServer UDP load balancing
Browse files Browse the repository at this point in the history
  • Loading branch information
soneillf5 committed May 10, 2021
1 parent 61f0032 commit edeffc0
Show file tree
Hide file tree
Showing 15 changed files with 404 additions and 16 deletions.
4 changes: 4 additions & 0 deletions tests/data/common/service/nodeport-with-additional-ports.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,5 +26,9 @@ spec:
targetPort: 3333
protocol: TCP
name: tcp-server
- port: 3334
targetPort: 3334
protocol: UDP
name: udp-server
selector:
app: nginx-ingress
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
apiVersion: k8s.nginx.org/v1alpha1
kind: TransportServer
metadata:
name: transport-server
spec:
listener:
name: udp-server
protocol: UDP
upstreams:
- name: udp-app
service: missing-service
port: 3334
action:
pass: udp-app
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
apiVersion: k8s.nginx.org/v1alpha1
kind: TransportServer
metadata:
name: transport-server-two
spec:
listener:
name: udp-server
protocol: UDP
upstreams:
- name: udp-app
service: udp-service
port: 3334
action:
pass: udp-app
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
apiVersion: k8s.nginx.org/v1alpha1
kind: GlobalConfiguration
metadata:
name: nginx-configuration
spec:
listeners:
- name: udp-server
port: 3334
protocol: UDP
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: udp-service
spec:
replicas: 3
selector:
matchLabels:
app: udp-service
template:
metadata:
labels:
app: udp-service
spec:
containers:
- name: udp-service
image: seanoneillf5/udp-server:1.1
ports:
- containerPort: 3334
name: udp-server
protocol: UDP
env:
- name: POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
---
apiVersion: v1
kind: Service
metadata:
name: udp-service
spec:
selector:
app: udp-service
ports:
- name: udp-server
targetPort: 3334
port: 3334
protocol: UDP
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
apiVersion: k8s.nginx.org/v1alpha1
kind: TransportServer
metadata:
name: transport-server
spec:
listener:
name: udp-server
protocol: UDP
upstreams:
- name: udp-app
service: udp-service
port: 3334
action:
pass: udp-app
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
apiVersion: k8s.nginx.org/v1alpha1
kind: TransportServer
metadata:
name: transport-server
spec:
listener:
name: udp-server
protocol: UDP
upstreams:
- name: udp-app
service: udp-service
port: 2222
action:
pass: udp-app
7 changes: 4 additions & 3 deletions tests/suite/fixtures.py
Original file line number Diff line number Diff line change
Expand Up @@ -121,13 +121,14 @@ class PublicEndpoint:
port_ssl (int):
"""

def __init__(self, public_ip, port=80, port_ssl=443, api_port=8080, metrics_port=9113, tcp_server_port=3333):
def __init__(self, public_ip, port=80, port_ssl=443, api_port=8080, metrics_port=9113, tcp_server_port=3333, udp_server_port=3334):
self.public_ip = public_ip
self.port = port
self.port_ssl = port_ssl
self.api_port = api_port
self.metrics_port = metrics_port
self.tcp_server_port = tcp_server_port
self.udp_server_port = udp_server_port


class IngressControllerPrerequisites:
Expand Down Expand Up @@ -254,10 +255,10 @@ def ingress_controller_endpoint(
namespace,
f"{TEST_DATA}/common/service/nodeport-with-additional-ports.yaml",
)
port, port_ssl, api_port, metrics_port, tcp_server_port = get_service_node_ports(
port, port_ssl, api_port, metrics_port, tcp_server_port, udp_server_port = get_service_node_ports(
kube_apis.v1, service_name, namespace
)
return PublicEndpoint(public_ip, port, port_ssl, api_port, metrics_port, tcp_server_port)
return PublicEndpoint(public_ip, port, port_ssl, api_port, metrics_port, tcp_server_port, udp_server_port)
else:
create_service_from_yaml(
kube_apis.v1,
Expand Down
8 changes: 5 additions & 3 deletions tests/suite/resources_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -342,7 +342,7 @@ def create_service_with_name(v1: CoreV1Api, namespace, name) -> str:
return create_service(v1, namespace, dep)


def get_service_node_ports(v1: CoreV1Api, name, namespace) -> (int, int, int, int, int):
def get_service_node_ports(v1: CoreV1Api, name, namespace) -> (int, int, int, int, int, int):
"""
Get service allocated node_ports.
Expand All @@ -352,11 +352,13 @@ def get_service_node_ports(v1: CoreV1Api, name, namespace) -> (int, int, int, in
:return: (plain_port, ssl_port, api_port, exporter_port)
"""
resp = v1.read_namespaced_service(name, namespace)
assert len(resp.spec.ports) == 5, "An unexpected amount of ports in a service. Check the configuration"
if len(resp.spec.ports) == 6:
print("An unexpected amount of ports in a service. Check the configuration")
print(f"Service with an API port: {resp.spec.ports[2].node_port}")
print(f"Service with an Exporter port: {resp.spec.ports[3].node_port}")
return resp.spec.ports[0].node_port, resp.spec.ports[1].node_port,\
resp.spec.ports[2].node_port, resp.spec.ports[3].node_port, resp.spec.ports[4].node_port
resp.spec.ports[2].node_port, resp.spec.ports[3].node_port, resp.spec.ports[4].node_port,\
resp.spec.ports[5].node_port


def wait_for_public_ip(v1: CoreV1Api, namespace: str) -> str:
Expand Down
6 changes: 3 additions & 3 deletions tests/suite/test_transport_server_tcp_load_balance.py
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ def test_tcp_request_load_balanced(
assert found

def test_tcp_request_load_balanced_multiple(
self, kube_apis, crd_ingress_controller, transport_server_setup, ingress_controller_prerequisites
self, kube_apis, crd_ingress_controller, transport_server_setup
):
"""
Requests to the load balanced TCP service should result in responses from 3 different endpoints.
Expand Down Expand Up @@ -194,7 +194,7 @@ def test_tcp_request_load_balanced_multiple(
wait_before_test()

def test_tcp_request_load_balanced_wrong_port(
self, kube_apis, crd_ingress_controller, transport_server_setup, ingress_controller_prerequisites
self, kube_apis, crd_ingress_controller, transport_server_setup
):
"""
Requests to the load balanced TCP service should result in responses from 3 different endpoints.
Expand Down Expand Up @@ -225,7 +225,7 @@ def test_tcp_request_load_balanced_wrong_port(
self.restore_ts(kube_apis, transport_server_setup)

def test_tcp_request_load_balanced_missing_service(
self, kube_apis, crd_ingress_controller, transport_server_setup, ingress_controller_prerequisites
self, kube_apis, crd_ingress_controller, transport_server_setup
):
"""
Requests to the load balanced TCP service should result in responses from 3 different endpoints.
Expand Down
Loading

0 comments on commit edeffc0

Please sign in to comment.