Skip to content

Commit 51af748

Browse files
author
Jim Ryan
authored
Chore/refactor transport server listens (#6315)
* add makeTransportListener function * add snap update
1 parent 6f720bd commit 51af748

File tree

5 files changed

+118
-16
lines changed

5 files changed

+118
-16
lines changed

internal/configs/version2/__snapshots__/templates_test.snap

+1
Original file line numberDiff line numberDiff line change
@@ -5708,6 +5708,7 @@ match match_udp-upstream {
57085708
server {
57095709
listen 1234 ssl udp;
57105710
listen [::]:1234 ssl udp;
5711+
57115712
ssl_certificate cafe-secret.pem;
57125713
ssl_certificate_key cafe-secret.pem;
57135714

internal/configs/version2/nginx-plus.transportserver.tmpl

+1-2
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,7 @@ server {
3939
listen {{ $s.UnixSocket }} proxy_protocol;
4040
set_real_ip_from unix:;
4141
{{- else }}
42-
listen {{ $s.Port }}{{ if $ssl.Enabled }} ssl{{ end }}{{ if $s.UDP }} udp{{ end }};
43-
{{if not $s.DisableIPV6}}listen [::]:{{ $s.Port }}{{ if $ssl.Enabled }} ssl{{ end }}{{ if $s.UDP }} udp{{ end }};{{end}}
42+
{{ makeTransportListener $s | printf }}
4443
{{- end }}
4544

4645
{{- if $ssl.Enabled }}

internal/configs/version2/nginx.transportserver.tmpl

+1-2
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,7 @@ server {
2323
listen {{ $s.UnixSocket }} proxy_protocol;
2424
set_real_ip_from unix:;
2525
{{- else }}
26-
listen {{ $s.Port }}{{ if $ssl.Enabled }} ssl{{ end }}{{ if $s.UDP }} udp{{ end }};
27-
{{if not $s.DisableIPV6}}listen [::]:{{ $s.Port }}{{ if $ssl.Enabled }} ssl{{ end }}{{ if $s.UDP }} udp{{ end }};{{end}}
26+
{{ makeTransportListener $s | printf }}
2827
{{- end }}
2928

3029
{{- if $ssl.Enabled }}

internal/configs/version2/template_helper.go

+49-12
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,28 @@ func buildListenDirective(port string, proxyProtocol bool, listenType listenerTy
114114
return directive
115115
}
116116

117+
func buildTransportListenDirective(listenType listenerType, port string, ssl *StreamSSL, udp bool) string {
118+
base := "listen"
119+
var directive string
120+
121+
if listenType == ipv6 {
122+
directive = base + " [::]:" + port
123+
} else {
124+
directive = base + " " + port
125+
}
126+
127+
if ssl.Enabled {
128+
directive += " ssl"
129+
}
130+
131+
if udp {
132+
directive += " udp"
133+
}
134+
135+
directive += ";\n"
136+
return directive
137+
}
138+
117139
func makeHTTPListener(s Server) string {
118140
return makeListener(http, s)
119141
}
@@ -122,6 +144,20 @@ func makeHTTPSListener(s Server) string {
122144
return makeListener(https, s)
123145
}
124146

147+
func makeTransportListener(s StreamServer) string {
148+
var directives string
149+
port := strconv.Itoa(s.Port)
150+
151+
directives += buildTransportListenDirective(ipv4, port, s.SSL, s.UDP)
152+
153+
if !s.DisableIPV6 {
154+
directives += spacing
155+
directives += buildTransportListenDirective(ipv6, port, s.SSL, s.UDP)
156+
}
157+
158+
return directives
159+
}
160+
125161
func makeHeaderQueryValue(apiKey APIKey) string {
126162
var parts []string
127163

@@ -140,16 +176,17 @@ func makeHeaderQueryValue(apiKey APIKey) string {
140176
}
141177

142178
var helperFunctions = template.FuncMap{
143-
"headerListToCIMap": headerListToCIMap,
144-
"hasCIKey": hasCIKey,
145-
"contains": strings.Contains,
146-
"hasPrefix": strings.HasPrefix,
147-
"hasSuffix": strings.HasSuffix,
148-
"toLower": strings.ToLower,
149-
"toUpper": strings.ToUpper,
150-
"replaceAll": strings.ReplaceAll,
151-
"makeHTTPListener": makeHTTPListener,
152-
"makeHTTPSListener": makeHTTPSListener,
153-
"makeSecretPath": commonhelpers.MakeSecretPath,
154-
"makeHeaderQueryValue": makeHeaderQueryValue,
179+
"headerListToCIMap": headerListToCIMap,
180+
"hasCIKey": hasCIKey,
181+
"contains": strings.Contains,
182+
"hasPrefix": strings.HasPrefix,
183+
"hasSuffix": strings.HasSuffix,
184+
"toLower": strings.ToLower,
185+
"toUpper": strings.ToUpper,
186+
"replaceAll": strings.ReplaceAll,
187+
"makeHTTPListener": makeHTTPListener,
188+
"makeHTTPSListener": makeHTTPSListener,
189+
"makeSecretPath": commonhelpers.MakeSecretPath,
190+
"makeHeaderQueryValue": makeHeaderQueryValue,
191+
"makeTransportListener": makeTransportListener,
155192
}

internal/configs/version2/template_helper_test.go

+66
Original file line numberDiff line numberDiff line change
@@ -268,6 +268,72 @@ func TestMakeHTTPSListener(t *testing.T) {
268268
}
269269
}
270270

271+
func TestMakeTransportListener(t *testing.T) {
272+
t.Parallel()
273+
274+
testCases := []struct {
275+
server StreamServer
276+
expected string
277+
}{
278+
{server: StreamServer{
279+
UDP: false,
280+
SSL: &StreamSSL{
281+
Enabled: false,
282+
},
283+
DisableIPV6: true,
284+
Port: 5353,
285+
}, expected: "listen 5353;\n"},
286+
{server: StreamServer{
287+
UDP: true,
288+
SSL: &StreamSSL{
289+
Enabled: false,
290+
},
291+
DisableIPV6: true,
292+
Port: 5353,
293+
}, expected: "listen 5353 udp;\n"},
294+
{server: StreamServer{
295+
UDP: true,
296+
SSL: &StreamSSL{
297+
Enabled: true,
298+
},
299+
DisableIPV6: true,
300+
Port: 5353,
301+
}, expected: "listen 5353 ssl udp;\n"},
302+
303+
{server: StreamServer{
304+
UDP: false,
305+
SSL: &StreamSSL{
306+
Enabled: false,
307+
},
308+
DisableIPV6: false,
309+
Port: 5353,
310+
}, expected: "listen 5353;\n listen [::]:5353;\n"},
311+
{server: StreamServer{
312+
UDP: true,
313+
SSL: &StreamSSL{
314+
Enabled: false,
315+
},
316+
DisableIPV6: false,
317+
Port: 5353,
318+
}, expected: "listen 5353 udp;\n listen [::]:5353 udp;\n"},
319+
{server: StreamServer{
320+
UDP: true,
321+
SSL: &StreamSSL{
322+
Enabled: true,
323+
},
324+
DisableIPV6: false,
325+
Port: 5353,
326+
}, expected: "listen 5353 ssl udp;\n listen [::]:5353 ssl udp;\n"},
327+
}
328+
329+
for _, tc := range testCases {
330+
got := makeTransportListener(tc.server)
331+
if got != tc.expected {
332+
t.Errorf("Function generated wrong config, got %q but expected %q.", got, tc.expected)
333+
}
334+
}
335+
}
336+
271337
func newContainsTemplate(t *testing.T) *template.Template {
272338
t.Helper()
273339
tmpl, err := template.New("testTemplate").Funcs(helperFunctions).Parse(`{{contains .InputString .Substring}}`)

0 commit comments

Comments
 (0)