Skip to content
File

Blob: cmd/internal/listen/listen_test.go

go91 lines
1package listen
2 
3import (
4 "net"
5 "testing"
6 
7 "github.com/stretchr/testify/require"
8)
9 
10func TestParseAddressesUsesBaseWhenOverridesEmpty(t *testing.T) {
11 addrs, err := ParseAddresses("udp", []string{"0.0.0.0:53"}, nil)
12 require.NoError(t, err)
13 require.Len(t, addrs, 1)
14 
15 addr := addrs[0]
16 require.Equal(t, "0.0.0.0:53", addr.Address)
17 require.Equal(t, "0.0.0.0", addr.Host)
18 require.Equal(t, "udp4", addr.Network)
19 require.Equal(t, IPV4, addr.Version)
20}
21 
22func TestParseAddressesDedupAndTrims(t *testing.T) {
23 addrs, err := ParseAddresses("tcp", []string{"127.0.0.1:80"}, []string{" 127.0.0.1:80 ", "[::1]:80", "127.0.0.1:80"})
24 require.NoError(t, err)
25 require.Len(t, addrs, 2)
26 
27 require.Equal(t, "127.0.0.1:80", addrs[0].Address)
28 require.Equal(t, "tcp4", addrs[0].Network)
29 require.Equal(t, IPV4, addrs[0].Version)
30 
31 require.Equal(t, "[::1]:80", addrs[1].Address)
32 require.Equal(t, "tcp6", addrs[1].Network)
33 require.Equal(t, IPV6, addrs[1].Version)
34}
35 
36func TestParseAddressesMultipleBase(t *testing.T) {
37 addrs, err := ParseAddresses("udp", []string{"0.0.0.0:53", "[::]:53"}, nil)
38 require.NoError(t, err)
39 require.Len(t, addrs, 2)
40 require.Equal(t, "udp4", addrs[0].Network)
41 require.Equal(t, "udp6", addrs[1].Network)
42}
43 
44func TestParseAddressesOverridesReplaceBase(t *testing.T) {
45 addrs, err := ParseAddresses("tcp", []string{"0.0.0.0:80", "[::]:80"}, []string{"127.0.0.1:8080"})
46 require.NoError(t, err)
47 require.Len(t, addrs, 1)
48 require.Equal(t, "127.0.0.1:8080", addrs[0].Address)
49}
50 
51func TestParseAddressesInvalid(t *testing.T) {
52 _, err := ParseAddresses("tcp", []string{"127.0.0.1:80"}, []string{"missing-port"})
53 require.Error(t, err)
54 
55 require.Equal(t, IPAny, ClassifyIPVersion("example.com"))
56 require.Equal(t, IPV4, ClassifyIPVersion(net.IPv4(127, 0, 0, 1).String()))
57}
58 
59func TestParseAddressesAllowsWildcardHost(t *testing.T) {
60 addrs, err := ParseAddresses("tcp", []string{":443"}, nil)
61 require.NoError(t, err)
62 require.Len(t, addrs, 1)
63 
64 addr := addrs[0]
65 require.Equal(t, ":443", addr.Address)
66 require.Equal(t, "", addr.Host)
67 require.Equal(t, IPAny, addr.Version)
68 require.Equal(t, "tcp", addr.Network)
69}
70 
71func TestParseAddressesRejectsEmptyAfterTrim(t *testing.T) {
72 _, err := ParseAddresses("udp", []string{" "}, nil)
73 require.Error(t, err)
74}
75 
76func TestParseAddressesFlyGlobalServicesForcesIPv4(t *testing.T) {
77 addrs, err := ParseAddresses("udp", []string{FlyGlobalServicesHost + ":53"}, nil)
78 require.NoError(t, err)
79 require.Len(t, addrs, 1)
80 
81 addr := addrs[0]
82 require.Equal(t, FlyGlobalServicesHost+":53", addr.Address)
83 require.Equal(t, IPV4, addr.Version, "fly-global-services must force IPv4 for UDP")
84 require.Equal(t, "udp4", addr.Network)
85}
86 
87func TestParseAddressesRejectsHostname(t *testing.T) {
88 _, err := ParseAddresses("tcp", []string{"example.com:80"}, nil)
89 require.Error(t, err)
90}