(t *testing.T)
| 2234 | } |
| 2235 | |
| 2236 | func TestBasicDERPController_RewriteDERPMap(t *testing.T) { |
| 2237 | t.Parallel() |
| 2238 | ctx := testutil.Context(t, testutil.WaitShort) |
| 2239 | logger := slogtest.Make(t, &slogtest.Options{IgnoreErrors: true}).Leveled(slog.LevelDebug) |
| 2240 | |
| 2241 | testDERPMap := &tailcfg.DERPMap{ |
| 2242 | Regions: map[int]*tailcfg.DERPRegion{ |
| 2243 | 1: { |
| 2244 | RegionID: 1, |
| 2245 | }, |
| 2246 | }, |
| 2247 | } |
| 2248 | |
| 2249 | // Ensure the fake rewriter works as expected. |
| 2250 | rewriter := &fakeDERPMapRewriter{ |
| 2251 | ctx: ctx, |
| 2252 | calls: make(chan rewriteDERPMapCall, 16), |
| 2253 | } |
| 2254 | rewriter.RewriteDERPMap(testDERPMap) |
| 2255 | rewriteCall := testutil.TryReceive(ctx, t, rewriter.calls) |
| 2256 | require.Same(t, testDERPMap, rewriteCall.derpMap) |
| 2257 | |
| 2258 | derpClient := &fakeDERPClient{ |
| 2259 | ch: make(chan *tailcfg.DERPMap), |
| 2260 | err: nil, |
| 2261 | } |
| 2262 | defer derpClient.Close() |
| 2263 | |
| 2264 | derpSetter := &fakeDERPMapSetter{ |
| 2265 | ctx: ctx, |
| 2266 | calls: make(chan *setDERPMapCall, 16), |
| 2267 | } |
| 2268 | |
| 2269 | derpCtrl := tailnet.NewBasicDERPController(logger, rewriter, derpSetter) |
| 2270 | derpCtrl.New(derpClient) |
| 2271 | |
| 2272 | // Simulate receiving a new DERP map from the server, which should be passed |
| 2273 | // to the rewriter and setter. |
| 2274 | testDERPMap = testDERPMap.Clone() // make a new pointer |
| 2275 | derpClient.ch <- testDERPMap |
| 2276 | rewriteCall = testutil.TryReceive(ctx, t, rewriter.calls) |
| 2277 | require.Same(t, testDERPMap, rewriteCall.derpMap) |
| 2278 | setterCall := testutil.TryReceive(ctx, t, derpSetter.calls) |
| 2279 | require.Same(t, testDERPMap, setterCall.derpMap) |
| 2280 | } |
| 2281 | |
| 2282 | type fakeWorkspaceUpdatesController struct { |
| 2283 | ctx context.Context |
nothing calls this directly
no test coverage detected