@@ -482,3 +482,90 @@ func TestNodeUpdater_setCallback(t *testing.T) {
482
482
}()
483
483
_ = testutil .RequireRecvCtx (ctx , t , done )
484
484
}
485
+
486
+ func TestNodeUpdater_setBlockEndpoints_different (t * testing.T ) {
487
+ t .Parallel ()
488
+ ctx := testutil .Context (t , testutil .WaitShort )
489
+ logger := slogtest .Make (t , nil ).Leveled (slog .LevelDebug )
490
+ id := tailcfg .NodeID (1 )
491
+ nodeKey := key .NewNode ().Public ()
492
+ discoKey := key .NewDisco ().Public ()
493
+ nodeCh := make (chan * Node )
494
+ uut := newNodeUpdater (
495
+ logger ,
496
+ func (n * Node ) {
497
+ nodeCh <- n
498
+ },
499
+ id , nodeKey , discoKey ,
500
+ )
501
+ defer uut .close ()
502
+
503
+ // Given: preferred DERP is 1, so we'll send an update && some endpoints
504
+ uut .L .Lock ()
505
+ uut .preferredDERP = 1
506
+ uut .endpoints = []string {"10.11.12.13:7890" }
507
+ uut .L .Unlock ()
508
+
509
+ // When: we setBlockEndpoints
510
+ uut .setBlockEndpoints (true )
511
+
512
+ // Then: we receive an update without endpoints
513
+ node := testutil .RequireRecvCtx (ctx , t , nodeCh )
514
+ require .Equal (t , nodeKey , node .Key )
515
+ require .Equal (t , discoKey , node .DiscoKey )
516
+ require .Len (t , node .Endpoints , 0 )
517
+
518
+ // When: we unset BlockEndpoints
519
+ uut .setBlockEndpoints (false )
520
+
521
+ // Then: we receive an update with endpoints
522
+ node = testutil .RequireRecvCtx (ctx , t , nodeCh )
523
+ require .Equal (t , nodeKey , node .Key )
524
+ require .Equal (t , discoKey , node .DiscoKey )
525
+ require .Len (t , node .Endpoints , 1 )
526
+
527
+ done := make (chan struct {})
528
+ go func () {
529
+ defer close (done )
530
+ uut .close ()
531
+ }()
532
+ _ = testutil .RequireRecvCtx (ctx , t , done )
533
+ }
534
+
535
+ func TestNodeUpdater_setBlockEndpoints_same (t * testing.T ) {
536
+ t .Parallel ()
537
+ ctx := testutil .Context (t , testutil .WaitShort )
538
+ logger := slogtest .Make (t , nil ).Leveled (slog .LevelDebug )
539
+ id := tailcfg .NodeID (1 )
540
+ nodeKey := key .NewNode ().Public ()
541
+ discoKey := key .NewDisco ().Public ()
542
+ nodeCh := make (chan * Node )
543
+ uut := newNodeUpdater (
544
+ logger ,
545
+ func (n * Node ) {
546
+ nodeCh <- n
547
+ },
548
+ id , nodeKey , discoKey ,
549
+ )
550
+ defer uut .close ()
551
+
552
+ // Then: we don't configure
553
+ requireNeverConfigures (ctx , t , & uut .phased )
554
+
555
+ // Given: preferred DERP is 1, so we would send an update on change &&
556
+ // blockEndpoints already set
557
+ uut .L .Lock ()
558
+ uut .preferredDERP = 1
559
+ uut .blockEndpoints = true
560
+ uut .L .Unlock ()
561
+
562
+ // When: we set block endpoints
563
+ uut .setBlockEndpoints (true )
564
+
565
+ done := make (chan struct {})
566
+ go func () {
567
+ defer close (done )
568
+ uut .close ()
569
+ }()
570
+ _ = testutil .RequireRecvCtx (ctx , t , done )
571
+ }
0 commit comments