wgengine/magicsock: start handling disco message, use netaddr.IPPort more
Updates #483
This commit is contained in:
@@ -24,6 +24,7 @@ import (
|
||||
"github.com/tailscale/wireguard-go/tun/tuntest"
|
||||
"github.com/tailscale/wireguard-go/wgcfg"
|
||||
"golang.org/x/crypto/nacl/box"
|
||||
"inet.af/netaddr"
|
||||
"tailscale.com/derp"
|
||||
"tailscale.com/derp/derphttp"
|
||||
"tailscale.com/derp/derpmap"
|
||||
@@ -662,17 +663,16 @@ func TestAddrSet(t *testing.T) {
|
||||
rc := tstest.NewResourceCheck()
|
||||
defer rc.Assert(t)
|
||||
|
||||
// This gets reassigned inside every test, so that the connections
|
||||
// all log using the "current" t.Logf function. Sigh.
|
||||
logf, setT := makeNestable(t)
|
||||
|
||||
mustUDPAddr := func(s string) *net.UDPAddr {
|
||||
mustIPPortPtr := func(s string) *netaddr.IPPort {
|
||||
t.Helper()
|
||||
ua, err := net.ResolveUDPAddr("udp", s)
|
||||
ipp, err := netaddr.ParseIPPort(s)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
return ua
|
||||
return &ipp
|
||||
}
|
||||
mustUDPAddr := func(s string) *net.UDPAddr {
|
||||
return mustIPPortPtr(s).UDPAddr()
|
||||
}
|
||||
udpAddrs := func(ss ...string) (ret []net.UDPAddr) {
|
||||
t.Helper()
|
||||
@@ -681,7 +681,7 @@ func TestAddrSet(t *testing.T) {
|
||||
}
|
||||
return ret
|
||||
}
|
||||
joinUDPs := func(in []*net.UDPAddr) string {
|
||||
joinUDPs := func(in []netaddr.IPPort) string {
|
||||
var sb strings.Builder
|
||||
for i, ua := range in {
|
||||
if i > 0 {
|
||||
@@ -747,7 +747,7 @@ func TestAddrSet(t *testing.T) {
|
||||
as: &AddrSet{
|
||||
addrs: udpAddrs("127.3.3.40:1", "123.45.67.89:123", "10.0.0.1:123"),
|
||||
curAddr: 2, // should be ignored
|
||||
roamAddr: mustUDPAddr("5.6.7.8:123"),
|
||||
roamAddr: mustIPPortPtr("5.6.7.8:123"),
|
||||
},
|
||||
steps: []step{
|
||||
{b: regPacket, want: "5.6.7.8:123"},
|
||||
@@ -776,7 +776,7 @@ func TestAddrSet(t *testing.T) {
|
||||
as: &AddrSet{
|
||||
addrs: udpAddrs("127.3.3.40:1", "123.45.67.89:123", "10.0.0.1:123"),
|
||||
curAddr: 2, // should be ignored
|
||||
roamAddr: mustUDPAddr("5.6.7.8:123"),
|
||||
roamAddr: mustIPPortPtr("5.6.7.8:123"),
|
||||
},
|
||||
steps: []step{
|
||||
{b: sprayPacket, want: "127.3.3.40:1,123.45.67.89:123,10.0.0.1:123,5.6.7.8:123"},
|
||||
@@ -804,18 +804,17 @@ func TestAddrSet(t *testing.T) {
|
||||
},
|
||||
},
|
||||
}
|
||||
outerT := t
|
||||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
setT(t)
|
||||
defer setT(outerT)
|
||||
faket := time.Unix(0, 0)
|
||||
var logBuf bytes.Buffer
|
||||
tt.as.Logf = func(format string, args ...interface{}) {
|
||||
fmt.Fprintf(&logBuf, format, args...)
|
||||
logf(format, args...)
|
||||
t.Logf(format, args...)
|
||||
}
|
||||
tt.as.clock = func() time.Time { return faket }
|
||||
initAddrSet(tt.as)
|
||||
for i, st := range tt.steps {
|
||||
faket = faket.Add(st.advance)
|
||||
|
||||
@@ -837,6 +836,23 @@ func TestAddrSet(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
// initAddrSet initializes fields in the provided incomplete AddrSet
|
||||
// to satisfying invariants within magicsock.
|
||||
func initAddrSet(as *AddrSet) {
|
||||
if as.roamAddr != nil && as.roamAddrStd == nil {
|
||||
as.roamAddrStd = as.roamAddr.UDPAddr()
|
||||
}
|
||||
if len(as.ipPorts) == 0 {
|
||||
for _, ua := range as.addrs {
|
||||
ipp, ok := netaddr.FromStdAddr(ua.IP, ua.Port, ua.Zone)
|
||||
if !ok {
|
||||
panic(fmt.Sprintf("bogus UDPAddr %+v", ua))
|
||||
}
|
||||
as.ipPorts = append(as.ipPorts, ipp)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestDiscoMessage(t *testing.T) {
|
||||
peer1Priv := key.NewPrivate()
|
||||
peer1Pub := peer1Priv.Public()
|
||||
@@ -857,7 +873,7 @@ func TestDiscoMessage(t *testing.T) {
|
||||
pkt = append(pkt, nonce[:]...)
|
||||
|
||||
pkt = box.Seal(pkt, []byte(payload), &nonce, c.discoPrivate.Public().B32(), peer1Priv.B32())
|
||||
got := c.handleDiscoMessage(pkt, &net.UDPAddr{})
|
||||
got := c.handleDiscoMessage(pkt, &net.UDPAddr{IP: net.ParseIP("1.2.3.4")})
|
||||
if !got {
|
||||
t.Error("failed to open it")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user