mirror of
https://github.com/tailscale/tailscale.git
synced 2025-08-21 18:42:36 +00:00
ipn/ipnlocal,wgengine/magicsock: wait for magicsock to process pending events on authReconfig
Updates #16369 Signed-off-by: Nick Khyl <nickk@tailscale.com>
This commit is contained in:
@@ -1114,6 +1114,8 @@ func TestEngineReconfigOnStateChange(t *testing.T) {
|
||||
disconnect := &ipn.MaskedPrefs{Prefs: ipn.Prefs{WantRunning: false}, WantRunningSet: true}
|
||||
node1 := testNetmapForNode(1, "node-1", []netip.Prefix{netip.MustParsePrefix("100.64.1.1/32")})
|
||||
node2 := testNetmapForNode(2, "node-2", []netip.Prefix{netip.MustParsePrefix("100.64.1.2/32")})
|
||||
node3 := testNetmapForNode(3, "node-3", []netip.Prefix{netip.MustParsePrefix("100.64.1.3/32")})
|
||||
node3.Peers = []tailcfg.NodeView{node1.SelfNode, node2.SelfNode}
|
||||
routesWithQuad100 := func(extra ...netip.Prefix) []netip.Prefix {
|
||||
return append(extra, netip.MustParsePrefix("100.100.100.100/32"))
|
||||
}
|
||||
@@ -1308,6 +1310,40 @@ func TestEngineReconfigOnStateChange(t *testing.T) {
|
||||
Hosts: hostsFor(node1),
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "Start/Connect/Login/WithPeers",
|
||||
steps: func(t *testing.T, lb *LocalBackend, cc func() *mockControl) {
|
||||
mustDo(t)(lb.Start(ipn.Options{}))
|
||||
mustDo2(t)(lb.EditPrefs(connect))
|
||||
cc().authenticated(node3)
|
||||
},
|
||||
wantState: ipn.Starting,
|
||||
wantCfg: &wgcfg.Config{
|
||||
Name: "tailscale",
|
||||
NodeID: node3.SelfNode.StableID(),
|
||||
Peers: []wgcfg.Peer{
|
||||
{
|
||||
PublicKey: node1.SelfNode.Key(),
|
||||
DiscoKey: node1.SelfNode.DiscoKey(),
|
||||
},
|
||||
{
|
||||
PublicKey: node2.SelfNode.Key(),
|
||||
DiscoKey: node2.SelfNode.DiscoKey(),
|
||||
},
|
||||
},
|
||||
Addresses: node3.SelfNode.Addresses().AsSlice(),
|
||||
},
|
||||
wantRouterCfg: &router.Config{
|
||||
SNATSubnetRoutes: true,
|
||||
NetfilterMode: preftype.NetfilterOn,
|
||||
LocalAddrs: node3.SelfNode.Addresses().AsSlice(),
|
||||
Routes: routesWithQuad100(),
|
||||
},
|
||||
wantDNSCfg: &dns.Config{
|
||||
Routes: map[dnsname.FQDN][]*dnstype.Resolver{},
|
||||
Hosts: hostsFor(node3),
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, tt := range tests {
|
||||
@@ -1322,8 +1358,18 @@ func TestEngineReconfigOnStateChange(t *testing.T) {
|
||||
t.Errorf("State: got %v; want %v", gotState, tt.wantState)
|
||||
}
|
||||
|
||||
if engine.Config() != nil {
|
||||
for _, p := range engine.Config().Peers {
|
||||
pKey := p.PublicKey.UntypedHexString()
|
||||
_, err := lb.MagicConn().ParseEndpoint(pKey)
|
||||
if err != nil {
|
||||
t.Errorf("ParseEndpoint(%q) failed: %v", pKey, err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
opts := []cmp.Option{
|
||||
cmpopts.EquateComparable(key.NodePublic{}, netip.Addr{}, netip.Prefix{}),
|
||||
cmpopts.EquateComparable(key.NodePublic{}, key.DiscoPublic{}, netip.Addr{}, netip.Prefix{}),
|
||||
}
|
||||
if diff := cmp.Diff(tt.wantCfg, engine.Config(), opts...); diff != "" {
|
||||
t.Errorf("wgcfg.Config(+got -want): %v", diff)
|
||||
@@ -1356,6 +1402,8 @@ func testNetmapForNode(userID tailcfg.UserID, name string, addresses []netip.Pre
|
||||
Addresses: addresses,
|
||||
MachineAuthorized: true,
|
||||
}
|
||||
self.Key = makeNodeKeyFromID(self.ID)
|
||||
self.DiscoKey = makeDiscoKeyFromID(self.ID)
|
||||
return &netmap.NetworkMap{
|
||||
SelfNode: self.View(),
|
||||
Name: self.Name,
|
||||
@@ -1403,6 +1451,7 @@ func newLocalBackendWithMockEngineAndControl(t *testing.T, enableLogging bool) (
|
||||
|
||||
magicConn, err := magicsock.NewConn(magicsock.Options{
|
||||
Logf: logf,
|
||||
EventBus: sys.Bus.Get(),
|
||||
NetMon: dialer.NetMon(),
|
||||
Metrics: sys.UserMetricsRegistry(),
|
||||
HealthTracker: sys.HealthTracker(),
|
||||
|
Reference in New Issue
Block a user