mirror of
https://github.com/tailscale/tailscale.git
synced 2025-04-16 03:31:39 +00:00
ipn/ipnlocal: add a test for recent WhoIs regression
This would've prevented #9470. This used to pass, fails as of 9538e9f97035, and passes again once #9472 is in. Updates #9470 Change-Id: Iab97666f7a318432fb3b6372a177ab50c55d4697 Signed-off-by: Brad Fitzpatrick <bradfitz@tailscale.com>
This commit is contained in:
parent
ae89482f25
commit
546506a54d
@ -402,10 +402,7 @@ func (panicOnUseTransport) RoundTrip(*http.Request) (*http.Response, error) {
|
|||||||
panic("unexpected HTTP request")
|
panic("unexpected HTTP request")
|
||||||
}
|
}
|
||||||
|
|
||||||
// Issue 1573: don't generate a machine key if we don't want to be running.
|
func newTestLocalBackend(t testing.TB) *LocalBackend {
|
||||||
func TestLazyMachineKeyGeneration(t *testing.T) {
|
|
||||||
tstest.Replace(t, &panicOnMachineKeyGeneration, func() bool { return true })
|
|
||||||
|
|
||||||
var logf logger.Logf = logger.Discard
|
var logf logger.Logf = logger.Discard
|
||||||
sys := new(tsd.System)
|
sys := new(tsd.System)
|
||||||
store := new(mem.Store)
|
store := new(mem.Store)
|
||||||
@ -420,7 +417,14 @@ func TestLazyMachineKeyGeneration(t *testing.T) {
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("NewLocalBackend: %v", err)
|
t.Fatalf("NewLocalBackend: %v", err)
|
||||||
}
|
}
|
||||||
|
return lb
|
||||||
|
}
|
||||||
|
|
||||||
|
// Issue 1573: don't generate a machine key if we don't want to be running.
|
||||||
|
func TestLazyMachineKeyGeneration(t *testing.T) {
|
||||||
|
tstest.Replace(t, &panicOnMachineKeyGeneration, func() bool { return true })
|
||||||
|
|
||||||
|
lb := newTestLocalBackend(t)
|
||||||
lb.SetHTTPTestClient(&http.Client{
|
lb.SetHTTPTestClient(&http.Client{
|
||||||
Transport: panicOnUseTransport{}, // validate we don't send HTTP requests
|
Transport: panicOnUseTransport{}, // validate we don't send HTTP requests
|
||||||
})
|
})
|
||||||
@ -672,21 +676,8 @@ func TestPacketFilterPermitsUnlockedNodes(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func TestStatusWithoutPeers(t *testing.T) {
|
func TestStatusWithoutPeers(t *testing.T) {
|
||||||
logf := tstest.WhileTestRunningLogger(t)
|
b := newTestLocalBackend(t)
|
||||||
store := new(testStateStorage)
|
|
||||||
sys := new(tsd.System)
|
|
||||||
sys.Set(store)
|
|
||||||
e, err := wgengine.NewFakeUserspaceEngine(logf, sys.Set)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("NewFakeUserspaceEngine: %v", err)
|
|
||||||
}
|
|
||||||
sys.Set(e)
|
|
||||||
t.Cleanup(e.Close)
|
|
||||||
|
|
||||||
b, err := NewLocalBackend(logf, logid.PublicID{}, sys, 0)
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("NewLocalBackend: %v", err)
|
|
||||||
}
|
|
||||||
var cc *mockControl
|
var cc *mockControl
|
||||||
b.SetControlClientGetterForTesting(func(opts controlclient.Options) (controlclient.Client, error) {
|
b.SetControlClientGetterForTesting(func(opts controlclient.Options) (controlclient.Client, error) {
|
||||||
cc = newClient(t, opts)
|
cc = newClient(t, opts)
|
||||||
@ -855,3 +846,56 @@ func TestUpdateNetmapDelta(t *testing.T) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// tests WhoIs and indirectly that setNetMapLocked updates b.nodeByAddr correctly.
|
||||||
|
func TestWhoIs(t *testing.T) {
|
||||||
|
b := newTestLocalBackend(t)
|
||||||
|
b.setNetMapLocked(&netmap.NetworkMap{
|
||||||
|
SelfNode: (&tailcfg.Node{
|
||||||
|
ID: 1,
|
||||||
|
User: 10,
|
||||||
|
Addresses: []netip.Prefix{netip.MustParsePrefix("100.101.102.103/32")},
|
||||||
|
}).View(),
|
||||||
|
Peers: []tailcfg.NodeView{
|
||||||
|
(&tailcfg.Node{
|
||||||
|
ID: 2,
|
||||||
|
User: 20,
|
||||||
|
Addresses: []netip.Prefix{netip.MustParsePrefix("100.200.200.200/32")},
|
||||||
|
}).View(),
|
||||||
|
},
|
||||||
|
UserProfiles: map[tailcfg.UserID]tailcfg.UserProfile{
|
||||||
|
10: {
|
||||||
|
DisplayName: "Myself",
|
||||||
|
},
|
||||||
|
20: {
|
||||||
|
DisplayName: "Peer",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
})
|
||||||
|
tests := []struct {
|
||||||
|
q string
|
||||||
|
want tailcfg.NodeID // 0 means want ok=false
|
||||||
|
wantName string
|
||||||
|
}{
|
||||||
|
{"100.101.102.103:0", 1, "Myself"},
|
||||||
|
{"100.101.102.103:123", 1, "Myself"},
|
||||||
|
{"100.200.200.200:0", 2, "Peer"},
|
||||||
|
{"100.200.200.200:123", 2, "Peer"},
|
||||||
|
{"100.4.0.4:404", 0, ""},
|
||||||
|
}
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.q, func(t *testing.T) {
|
||||||
|
nv, up, ok := b.WhoIs(netip.MustParseAddrPort(tt.q))
|
||||||
|
var got tailcfg.NodeID
|
||||||
|
if ok {
|
||||||
|
got = nv.ID()
|
||||||
|
}
|
||||||
|
if got != tt.want {
|
||||||
|
t.Errorf("got nodeID %v; want %v", got, tt.want)
|
||||||
|
}
|
||||||
|
if up.DisplayName != tt.wantName {
|
||||||
|
t.Errorf("got name %q; want %q", up.DisplayName, tt.wantName)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user