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)
| 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. |
| 142 | func 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"}, |
nothing calls this directly
no test coverage detected
searching dependent graphs…