133 lines
3.7 KiB
Go
133 lines
3.7 KiB
Go
// +build !rpctest
|
|
|
|
package lncfg
|
|
|
|
import (
|
|
"net"
|
|
"testing"
|
|
)
|
|
|
|
// addressTest defines a test vector for an address that contains the non-
|
|
// normalized input and the expected normalized output.
|
|
type addressTest struct {
|
|
address string
|
|
expectedNetwork string
|
|
expectedAddress string
|
|
isLoopback bool
|
|
isUnix bool
|
|
}
|
|
|
|
var (
|
|
defaultTestPort = "1234"
|
|
addressTestVectors = []addressTest{
|
|
{"tcp://127.0.0.1:9735", "tcp", "127.0.0.1:9735", true, false},
|
|
{"tcp:127.0.0.1:9735", "tcp", "127.0.0.1:9735", true, false},
|
|
{"127.0.0.1:9735", "tcp", "127.0.0.1:9735", true, false},
|
|
{":9735", "tcp", ":9735", false, false},
|
|
{"", "tcp", ":1234", false, false},
|
|
{":", "tcp", ":1234", false, false},
|
|
{"tcp4://127.0.0.1:9735", "tcp", "127.0.0.1:9735", true, false},
|
|
{"tcp4:127.0.0.1:9735", "tcp", "127.0.0.1:9735", true, false},
|
|
{"127.0.0.1", "tcp", "127.0.0.1:1234", true, false},
|
|
{"[::1]", "tcp", "[::1]:1234", true, false},
|
|
{"::1", "tcp", "[::1]:1234", true, false},
|
|
{"tcp6://::1", "tcp", "[::1]:1234", true, false},
|
|
{"tcp6:::1", "tcp", "[::1]:1234", true, false},
|
|
{"localhost:9735", "tcp", "127.0.0.1:9735", true, false},
|
|
{"localhost", "tcp", "127.0.0.1:1234", true, false},
|
|
{"unix:///tmp/lnd.sock", "unix", "/tmp/lnd.sock", false, true},
|
|
{"unix:/tmp/lnd.sock", "unix", "/tmp/lnd.sock", false, true},
|
|
{"123", "tcp", "127.0.0.1:123", true, false},
|
|
{
|
|
"4acth47i6kxnvkewtm6q7ib2s3ufpo5sqbsnzjpbi7utijcltosqemad.onion",
|
|
"tcp",
|
|
"4acth47i6kxnvkewtm6q7ib2s3ufpo5sqbsnzjpbi7utijcltosqemad.onion:1234",
|
|
false,
|
|
false,
|
|
},
|
|
{
|
|
"4acth47i6kxnvkewtm6q7ib2s3ufpo5sqbsnzjpbi7utijcltosqemad.onion:9735",
|
|
"tcp",
|
|
"4acth47i6kxnvkewtm6q7ib2s3ufpo5sqbsnzjpbi7utijcltosqemad.onion:9735",
|
|
false,
|
|
false,
|
|
},
|
|
{
|
|
"3g2upl4pq6kufc4m.onion",
|
|
"tcp",
|
|
"3g2upl4pq6kufc4m.onion:1234",
|
|
false,
|
|
false,
|
|
},
|
|
{
|
|
"3g2upl4pq6kufc4m.onion:9735",
|
|
"tcp",
|
|
"3g2upl4pq6kufc4m.onion:9735",
|
|
false,
|
|
false,
|
|
},
|
|
}
|
|
invalidTestVectors = []string{
|
|
"some string",
|
|
"://",
|
|
"12.12.12.12.12",
|
|
}
|
|
)
|
|
|
|
// TestAddresses ensures that all supported address formats can be parsed and
|
|
// normalized correctly.
|
|
func TestAddresses(t *testing.T) {
|
|
// First, test all correct addresses.
|
|
for i, testVector := range addressTestVectors {
|
|
addr := []string{testVector.address}
|
|
normalized, err := NormalizeAddresses(
|
|
addr, defaultTestPort, net.ResolveTCPAddr,
|
|
)
|
|
if err != nil {
|
|
t.Fatalf("#%v: unable to normalize address %s: %v",
|
|
i, testVector.address, err)
|
|
}
|
|
netAddr := normalized[0]
|
|
if err != nil {
|
|
t.Fatalf("#%v: unable to split normalized address: %v", i, err)
|
|
}
|
|
if netAddr.Network() != testVector.expectedNetwork ||
|
|
netAddr.String() != testVector.expectedAddress {
|
|
t.Fatalf("#%v: mismatched address: expected %s://%s, "+
|
|
"got %s://%s",
|
|
i, testVector.expectedNetwork,
|
|
testVector.expectedAddress,
|
|
netAddr.Network(), netAddr.String(),
|
|
)
|
|
}
|
|
isAddrLoopback := IsLoopback(normalized[0].String())
|
|
if testVector.isLoopback != isAddrLoopback {
|
|
t.Fatalf("#%v: mismatched loopback detection: expected "+
|
|
"%v, got %v for addr %s",
|
|
i, testVector.isLoopback, isAddrLoopback,
|
|
testVector.address,
|
|
)
|
|
}
|
|
isAddrUnix := IsUnix(normalized[0])
|
|
if testVector.isUnix != isAddrUnix {
|
|
t.Fatalf("#%v: mismatched unix detection: expected "+
|
|
"%v, got %v for addr %s",
|
|
i, testVector.isUnix, isAddrUnix,
|
|
testVector.address,
|
|
)
|
|
}
|
|
}
|
|
|
|
// Finally, test invalid inputs to see if they are handled correctly.
|
|
for _, testVector := range invalidTestVectors {
|
|
addr := []string{testVector}
|
|
_, err := NormalizeAddresses(
|
|
addr, defaultTestPort, net.ResolveTCPAddr,
|
|
)
|
|
if err == nil {
|
|
|
|
t.Fatalf("expected error when parsing %v", testVector)
|
|
}
|
|
}
|
|
}
|