Skip to content

Commit 14d1bb9

Browse files
authored
add tls unit tests (#10665)
1 parent b5fc159 commit 14d1bb9

File tree

10 files changed

+365
-0
lines changed

10 files changed

+365
-0
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
changelog:
2+
- type: NON_USER_FACING
3+
description: >-
4+
"add unit tests for tls gateway and tls route"

projects/gateway2/translator/gateway_translator_test.go

+85
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,91 @@ var _ = DescribeTable("Basic GatewayTranslator Tests",
266266
Name: "example-tcp-gateway",
267267
},
268268
}),
269+
Entry(
270+
"tls gateway with basic routing",
271+
translatorTestCase{
272+
inputFile: "tls-routing/basic.yaml",
273+
outputFile: "tls-routing/basic-proxy.yaml",
274+
gwNN: types.NamespacedName{
275+
Namespace: "default",
276+
Name: "example-gateway",
277+
},
278+
assertReports: func(gwNN types.NamespacedName, reportsMap reports.ReportMap) {
279+
route := &gwv1a2.TLSRoute{
280+
ObjectMeta: metav1.ObjectMeta{
281+
Name: "example-tls-route",
282+
Namespace: "default",
283+
},
284+
}
285+
routeStatus := reportsMap.BuildRouteStatus(context.TODO(), route, "")
286+
Expect(routeStatus).NotTo(BeNil())
287+
Expect(routeStatus.Parents).To(HaveLen(1))
288+
resolvedRefs := meta.FindStatusCondition(routeStatus.Parents[0].Conditions, string(gwv1.RouteConditionResolvedRefs))
289+
Expect(resolvedRefs).NotTo(BeNil())
290+
Expect(resolvedRefs.Status).To(Equal(metav1.ConditionTrue))
291+
Expect(resolvedRefs.Reason).To(Equal(string(gwv1.RouteReasonResolvedRefs)))
292+
},
293+
}),
294+
Entry(
295+
"tlsroute with missing backend reports correctly",
296+
translatorTestCase{
297+
inputFile: "tls-routing/missing-backend.yaml",
298+
outputFile: "tls-routing/missing-backend.yaml",
299+
gwNN: types.NamespacedName{
300+
Namespace: "default",
301+
Name: "example-gateway",
302+
},
303+
assertReports: func(gwNN types.NamespacedName, reportsMap reports.ReportMap) {
304+
route := &gwv1a2.TLSRoute{
305+
ObjectMeta: metav1.ObjectMeta{
306+
Name: "example-tls-route",
307+
Namespace: "default",
308+
},
309+
}
310+
routeStatus := reportsMap.BuildRouteStatus(context.TODO(), route, "")
311+
Expect(routeStatus).NotTo(BeNil())
312+
Expect(routeStatus.Parents).To(HaveLen(1))
313+
resolvedRefs := meta.FindStatusCondition(routeStatus.Parents[0].Conditions, string(gwv1.RouteConditionResolvedRefs))
314+
Expect(resolvedRefs).NotTo(BeNil())
315+
Expect(resolvedRefs.Status).To(Equal(metav1.ConditionFalse))
316+
Expect(resolvedRefs.Message).To(Equal("services \"example-tls-svc\" not found"))
317+
},
318+
}),
319+
Entry(
320+
"tlsroute with invalid backend reports correctly",
321+
translatorTestCase{
322+
inputFile: "tls-routing/invalid-backend.yaml",
323+
outputFile: "tls-routing/invalid-backend.yaml",
324+
gwNN: types.NamespacedName{
325+
Namespace: "default",
326+
Name: "example-gateway",
327+
},
328+
assertReports: func(gwNN types.NamespacedName, reportsMap reports.ReportMap) {
329+
route := &gwv1a2.TLSRoute{
330+
ObjectMeta: metav1.ObjectMeta{
331+
Name: "example-tls-route",
332+
Namespace: "default",
333+
},
334+
}
335+
routeStatus := reportsMap.BuildRouteStatus(context.TODO(), route, "")
336+
Expect(routeStatus).NotTo(BeNil())
337+
Expect(routeStatus.Parents).To(HaveLen(1))
338+
resolvedRefs := meta.FindStatusCondition(routeStatus.Parents[0].Conditions, string(gwv1.RouteConditionResolvedRefs))
339+
Expect(resolvedRefs).NotTo(BeNil())
340+
Expect(resolvedRefs.Status).To(Equal(metav1.ConditionFalse))
341+
Expect(resolvedRefs.Message).To(Equal("unknown backend kind"))
342+
},
343+
}),
344+
Entry(
345+
"tls gateway with multiple backend services",
346+
translatorTestCase{
347+
inputFile: "tls-routing/multi-backend.yaml",
348+
outputFile: "tls-routing/multi-backend-proxy.yaml",
349+
gwNN: types.NamespacedName{
350+
Namespace: "default",
351+
Name: "example-gateway",
352+
},
353+
}),
269354
Entry("Plugin Backend", translatorTestCase{
270355
inputFile: "backend-plugin/gateway.yaml",
271356
outputFile: "backend-plugin-proxy.yaml",
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
apiVersion: gateway.networking.k8s.io/v1alpha2
2+
kind: TLSRoute
3+
metadata:
4+
name: example-tls-route
5+
spec:
6+
parentRefs:
7+
- name: example-gateway
8+
hostnames:
9+
- "example.com"
10+
rules:
11+
- backendRefs:
12+
- name: example-tls-svc
13+
port: 443
14+
---
15+
apiVersion: gateway.networking.k8s.io/v1
16+
kind: Gateway
17+
metadata:
18+
name: example-gateway
19+
spec:
20+
gatewayClassName: example-gateway-class
21+
listeners:
22+
- name: tls
23+
protocol: TLS
24+
hostname: "example.com"
25+
tls:
26+
mode: Passthrough
27+
port: 8443
28+
---
29+
apiVersion: v1
30+
kind: Service
31+
metadata:
32+
name: example-tls-svc
33+
spec:
34+
selector:
35+
app: example
36+
ports:
37+
- protocol: TCP
38+
port: 443
39+
targetPort: 8443
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
apiVersion: gateway.networking.k8s.io/v1alpha2
2+
kind: TLSRoute
3+
metadata:
4+
name: example-tls-route
5+
spec:
6+
parentRefs:
7+
- name: example-gateway
8+
hostnames:
9+
- "example.com"
10+
rules:
11+
- backendRefs:
12+
- name: example-tls-svc
13+
port: 443
14+
group: unknown
15+
kind: unknown
16+
---
17+
apiVersion: gateway.networking.k8s.io/v1
18+
kind: Gateway
19+
metadata:
20+
name: example-gateway
21+
spec:
22+
gatewayClassName: example-gateway-class
23+
listeners:
24+
- name: tls
25+
protocol: TLS
26+
hostname: "example.com"
27+
tls:
28+
mode: Passthrough
29+
port: 8443
30+
---
31+
apiVersion: v1
32+
kind: Service
33+
metadata:
34+
name: example-tls-svc
35+
spec:
36+
selector:
37+
app: example
38+
ports:
39+
- protocol: TCP
40+
port: 443
41+
targetPort: 8443
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
apiVersion: gateway.networking.k8s.io/v1alpha2
2+
kind: TLSRoute
3+
metadata:
4+
name: example-tls-route
5+
spec:
6+
parentRefs:
7+
- name: example-gateway
8+
hostnames:
9+
- "example.com"
10+
rules:
11+
- backendRefs:
12+
- name: example-tls-svc
13+
port: 443
14+
---
15+
apiVersion: gateway.networking.k8s.io/v1
16+
kind: Gateway
17+
metadata:
18+
name: example-gateway
19+
spec:
20+
gatewayClassName: example-gateway-class
21+
listeners:
22+
- name: tls
23+
protocol: TLS
24+
hostname: "example.com"
25+
tls:
26+
mode: Passthrough
27+
port: 8443
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
apiVersion: gateway.networking.k8s.io/v1alpha2
2+
kind: TLSRoute
3+
metadata:
4+
name: example-tls-route
5+
spec:
6+
parentRefs:
7+
- name: example-gateway
8+
hostnames:
9+
- "example.com"
10+
rules:
11+
- backendRefs:
12+
- name: example-tls-svc
13+
port: 443
14+
weight: 65
15+
- name: example-tls-svc-2
16+
port: 443
17+
weight: 35
18+
---
19+
apiVersion: gateway.networking.k8s.io/v1
20+
kind: Gateway
21+
metadata:
22+
name: example-gateway
23+
spec:
24+
gatewayClassName: example-gateway-class
25+
listeners:
26+
- name: tls
27+
protocol: TLS
28+
hostname: "example.com"
29+
tls:
30+
mode: Passthrough
31+
port: 8443
32+
---
33+
apiVersion: v1
34+
kind: Service
35+
metadata:
36+
name: example-tls-svc
37+
spec:
38+
selector:
39+
app: example
40+
ports:
41+
- protocol: TCP
42+
port: 443
43+
targetPort: 8443
44+
---
45+
apiVersion: v1
46+
kind: Service
47+
metadata:
48+
name: example-tls-svc-2
49+
spec:
50+
selector:
51+
app: example2
52+
ports:
53+
- protocol: TCP
54+
port: 443
55+
targetPort: 8443
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
---
2+
listeners:
3+
- aggregateListener:
4+
httpResources: {}
5+
tcpListeners:
6+
- tcpListener:
7+
tcpHosts:
8+
- destination:
9+
single:
10+
kube:
11+
port: 443
12+
ref:
13+
name: example-tls-svc
14+
namespace: default
15+
name: example-tls-route-rule-0
16+
sslConfig:
17+
sniDomains:
18+
- example.com
19+
bindAddress: '::'
20+
bindPort: 8443
21+
metadataStatic:
22+
sources:
23+
- resourceKind: gateway.networking.k8s.io/Gateway
24+
resourceRef:
25+
name: tls
26+
namespace: default
27+
name: tls
28+
metadata:
29+
labels:
30+
created_by: gloo-kube-gateway-api
31+
gateway_namespace: default
32+
name: default-example-gateway
33+
namespace: gloo-system
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
---
2+
listeners:
3+
- aggregateListener:
4+
httpResources: {}
5+
bindAddress: '::'
6+
bindPort: 8443
7+
metadataStatic:
8+
sources:
9+
- resourceKind: gateway.networking.k8s.io/Gateway
10+
resourceRef:
11+
name: tls
12+
namespace: default
13+
name: tls
14+
metadata:
15+
labels:
16+
created_by: gloo-kube-gateway-api
17+
gateway_namespace: default
18+
name: default-example-gateway
19+
namespace: gloo-system
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
---
2+
listeners:
3+
- aggregateListener:
4+
httpResources: {}
5+
bindAddress: '::'
6+
bindPort: 8443
7+
metadataStatic:
8+
sources:
9+
- resourceKind: gateway.networking.k8s.io/Gateway
10+
resourceRef:
11+
name: tls
12+
namespace: default
13+
name: tls
14+
metadata:
15+
labels:
16+
created_by: gloo-kube-gateway-api
17+
gateway_namespace: default
18+
name: default-example-gateway
19+
namespace: gloo-system
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
---
2+
listeners:
3+
- aggregateListener:
4+
httpResources: {}
5+
tcpListeners:
6+
- tcpListener:
7+
tcpHosts:
8+
- destination:
9+
multi:
10+
destinations:
11+
- destination:
12+
kube:
13+
port: 443
14+
ref:
15+
name: example-tls-svc
16+
namespace: default
17+
weight: 65
18+
- destination:
19+
kube:
20+
port: 443
21+
ref:
22+
name: example-tls-svc-2
23+
namespace: default
24+
weight: 35
25+
name: example-tls-route-rule-0
26+
sslConfig:
27+
sniDomains:
28+
- example.com
29+
bindAddress: '::'
30+
bindPort: 8443
31+
metadataStatic:
32+
sources:
33+
- resourceKind: gateway.networking.k8s.io/Gateway
34+
resourceRef:
35+
name: tls
36+
namespace: default
37+
name: tls
38+
metadata:
39+
labels:
40+
created_by: gloo-kube-gateway-api
41+
gateway_namespace: default
42+
name: default-example-gateway
43+
namespace: gloo-system

0 commit comments

Comments
 (0)