MCPcopy
hub / github.com/tailscale/tailscale / TestSendMapUpdateAgainstTestControl

Function TestSendMapUpdateAgainstTestControl

control/tsp/map_test.go:142–271  ·  view source on GitHub ↗

TestSendMapUpdateAgainstTestControl verifies that a [Client.SendMapUpdate] call from one node lands on the coordination server and that peer nodes subsequently observe the updated DiscoKey via their own streaming map poll.

(t *testing.T)

Source from the content-addressed store, hash-verified

140// call from one node lands on the coordination server and that peer nodes
141// subsequently observe the updated DiscoKey via their own streaming map poll.
142func TestSendMapUpdateAgainstTestControl(t *testing.T) {
143 ctrl := &testcontrol.Server{}
144 ctrl.HTTPTestServer = httptest.NewUnstartedServer(ctrl)
145 ctrl.HTTPTestServer.Start()
146 t.Cleanup(ctrl.HTTPTestServer.Close)
147 baseURL := ctrl.HTTPTestServer.URL
148
149 ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
150 defer cancel()
151
152 ht := new(health.Tracker)
153
154 serverKey, err := DiscoverServerKey(ctx, baseURL)
155 if err != nil {
156 t.Fatalf("DiscoverServerKey: %v", err)
157 }
158
159 register := func(hostname string) (nodeKey key.NodePrivate, machineKey key.MachinePrivate) {
160 t.Helper()
161 nodeKey = key.NewNode()
162 machineKey = key.NewMachine()
163 c, err := NewClient(ClientOpts{
164 ServerURL: baseURL,
165 MachineKey: machineKey,
166 HealthTracker: ht,
167 })
168 if err != nil {
169 t.Fatalf("NewClient %s: %v", hostname, err)
170 }
171 defer c.Close()
172 c.SetControlPublicKey(serverKey)
173 if _, err := c.Register(ctx, RegisterOpts{
174 NodeKey: nodeKey,
175 Hostinfo: &tailcfg.Hostinfo{Hostname: hostname},
176 }); err != nil {
177 t.Fatalf("Register %s: %v", hostname, err)
178 }
179 return nodeKey, machineKey
180 }
181
182 nodeKeyA, machineKeyA := register("a")
183 nodeKeyB, machineKeyB := register("b")
184
185 // B starts a streaming map poll so we can observe updates about peer A.
186 clientB, err := NewClient(ClientOpts{
187 ServerURL: baseURL,
188 MachineKey: machineKeyB,
189 HealthTracker: ht,
190 })
191 if err != nil {
192 t.Fatalf("NewClient B: %v", err)
193 }
194 defer clientB.Close()
195 clientB.SetControlPublicKey(serverKey)
196
197 session, err := clientB.Map(ctx, MapOpts{
198 NodeKey: nodeKeyB,
199 Hostinfo: &tailcfg.Hostinfo{Hostname: "b"},

Callers

nothing calls this directly

Calls 15

CloseMethod · 0.95
SetControlPublicKeyMethod · 0.95
RegisterMethod · 0.95
MapMethod · 0.95
SendMapUpdateMethod · 0.95
NewNodeFunction · 0.92
NewMachineFunction · 0.92
NewDiscoFunction · 0.92
DiscoverServerKeyFunction · 0.85
registerFunction · 0.85
NewClientFunction · 0.70
StartMethod · 0.65

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…