diff options
author | Matthew Holt <mholt@users.noreply.github.com> | 2022-07-25 17:28:20 -0600 |
---|---|---|
committer | Matthew Holt <mholt@users.noreply.github.com> | 2022-07-25 17:28:20 -0600 |
commit | 1e18afb5c862d62be130d563785de5c58f08ae8e (patch) | |
tree | 08fe81f7042bd93293ab2034e27836171b8bc3f2 /listeners_test.go | |
parent | 0bebea0d4c0321b9cd59be4b355020a3e28c0bcd (diff) |
httpcaddyfile: Detect ambiguous site definitions (fix #4635)
Previously, our "duplicate key in server block" logic was flawed because
it did not account for the site's bind address. We defer this check to
when the listener addresses have been assigned, but before we commit
a server block to its listener.
Also refined how network address parsing and joining works, which was
necessary for a less convoluted fix.
Diffstat (limited to 'listeners_test.go')
-rw-r--r-- | listeners_test.go | 34 |
1 files changed, 29 insertions, 5 deletions
diff --git a/listeners_test.go b/listeners_test.go index b75e2dc..6b0f440 100644 --- a/listeners_test.go +++ b/listeners_test.go @@ -32,10 +32,25 @@ func TestSplitNetworkAddress(t *testing.T) { expectErr: true, }, { - input: "foo", + input: "foo", + expectHost: "foo", + }, + { + input: ":", // empty host & empty port + }, + { + input: "::", expectErr: true, }, { + input: "[::]", + expectHost: "::", + }, + { + input: ":1234", + expectPort: "1234", + }, + { input: "foo:1234", expectHost: "foo", expectPort: "1234", @@ -80,10 +95,10 @@ func TestSplitNetworkAddress(t *testing.T) { } { actualNetwork, actualHost, actualPort, err := SplitNetworkAddress(tc.input) if tc.expectErr && err == nil { - t.Errorf("Test %d: Expected error but got: %v", i, err) + t.Errorf("Test %d: Expected error but got %v", i, err) } if !tc.expectErr && err != nil { - t.Errorf("Test %d: Expected no error but got: %v", i, err) + t.Errorf("Test %d: Expected no error but got %v", i, err) } if actualNetwork != tc.expectNetwork { t.Errorf("Test %d: Expected network '%s' but got '%s'", i, tc.expectNetwork, actualNetwork) @@ -169,8 +184,17 @@ func TestParseNetworkAddress(t *testing.T) { expectErr: true, }, { - input: ":", - expectErr: true, + input: ":", + expectAddr: NetworkAddress{ + Network: "tcp", + }, + }, + { + input: "[::]", + expectAddr: NetworkAddress{ + Network: "tcp", + Host: "::", + }, }, { input: ":1234", |