@@ -227,7 +227,7 @@ func TestNodeUpdater_setStatus_different(t *testing.T) {
227
227
node := testutil .RequireRecvCtx (ctx , t , nodeCh )
228
228
require .Equal (t , nodeKey , node .Key )
229
229
require .Equal (t , discoKey , node .DiscoKey )
230
- require .True (t , slices . Equal ( []string {"[fe80::1]:5678" }, node .Endpoints ) )
230
+ require .Equal (t , []string {"[fe80::1]:5678" }, node .Endpoints )
231
231
232
232
// Then: we store the AsOf time as lastStatus
233
233
uut .L .Lock ()
@@ -361,3 +361,83 @@ func TestNodeUpdater_setStatus_outdated(t *testing.T) {
361
361
}()
362
362
_ = testutil .RequireRecvCtx (ctx , t , done )
363
363
}
364
+
365
+ func TestNodeUpdater_setAddresses_different (t * testing.T ) {
366
+ t .Parallel ()
367
+ ctx := testutil .Context (t , testutil .WaitShort )
368
+ logger := slogtest .Make (t , nil ).Leveled (slog .LevelDebug )
369
+ id := tailcfg .NodeID (1 )
370
+ nodeKey := key .NewNode ().Public ()
371
+ discoKey := key .NewDisco ().Public ()
372
+ nodeCh := make (chan * Node )
373
+ uut := newNodeUpdater (
374
+ logger ,
375
+ func (n * Node ) {
376
+ nodeCh <- n
377
+ },
378
+ id , nodeKey , discoKey ,
379
+ )
380
+ defer uut .close ()
381
+
382
+ // Given: preferred DERP is 1, so we'll send an update
383
+ uut .L .Lock ()
384
+ uut .preferredDERP = 1
385
+ uut .L .Unlock ()
386
+
387
+ // When: we set addresses
388
+ addrs := []netip.Prefix {netip .MustParsePrefix ("192.168.0.200/32" )}
389
+ uut .setAddresses (addrs )
390
+
391
+ // Then: we receive an update with the addresses
392
+ node := testutil .RequireRecvCtx (ctx , t , nodeCh )
393
+ require .Equal (t , nodeKey , node .Key )
394
+ require .Equal (t , discoKey , node .DiscoKey )
395
+ require .Equal (t , addrs , node .Addresses )
396
+ require .Equal (t , addrs , node .AllowedIPs )
397
+
398
+ done := make (chan struct {})
399
+ go func () {
400
+ defer close (done )
401
+ uut .close ()
402
+ }()
403
+ _ = testutil .RequireRecvCtx (ctx , t , done )
404
+ }
405
+
406
+ func TestNodeUpdater_setAddresses_same (t * testing.T ) {
407
+ t .Parallel ()
408
+ ctx := testutil .Context (t , testutil .WaitShort )
409
+ logger := slogtest .Make (t , nil ).Leveled (slog .LevelDebug )
410
+ id := tailcfg .NodeID (1 )
411
+ nodeKey := key .NewNode ().Public ()
412
+ discoKey := key .NewDisco ().Public ()
413
+ nodeCh := make (chan * Node )
414
+ uut := newNodeUpdater (
415
+ logger ,
416
+ func (n * Node ) {
417
+ nodeCh <- n
418
+ },
419
+ id , nodeKey , discoKey ,
420
+ )
421
+ defer uut .close ()
422
+
423
+ // Then: we don't configure
424
+ requireNeverConfigures (ctx , t , & uut .phased )
425
+
426
+ // Given: preferred DERP is 1, so we would send an update on change &&
427
+ // addrs already set
428
+ addrs := []netip.Prefix {netip .MustParsePrefix ("192.168.0.200/32" )}
429
+ uut .L .Lock ()
430
+ uut .preferredDERP = 1
431
+ uut .addresses = slices .Clone (addrs )
432
+ uut .L .Unlock ()
433
+
434
+ // When: we set addrs
435
+ uut .setAddresses (addrs )
436
+
437
+ done := make (chan struct {})
438
+ go func () {
439
+ defer close (done )
440
+ uut .close ()
441
+ }()
442
+ _ = testutil .RequireRecvCtx (ctx , t , done )
443
+ }
0 commit comments