@@ -475,6 +475,93 @@ func TestConfigMaps_updatePeers_lost_and_found(t *testing.T) {
475475_ = testutil .RequireRecvCtx (ctx ,t ,done )
476476}
477477
478+ func TestConfigMaps_setBlockEndpoints_different (t * testing.T ) {
479+ t .Parallel ()
480+ ctx := testutil .Context (t ,testutil .WaitShort )
481+ logger := slogtest .Make (t ,nil ).Leveled (slog .LevelDebug )
482+ fEng := newFakeEngineConfigurable ()
483+ nodePrivateKey := key .NewNode ()
484+ nodeID := tailcfg .NodeID (5 )
485+ discoKey := key .NewDisco ()
486+ uut := newConfigMaps (logger ,fEng ,nodeID ,nodePrivateKey ,discoKey .Public (),nil )
487+ defer uut .close ()
488+
489+ p1ID := uuid .MustParse ("10000000-0000-0000-0000-000000000000" )
490+ p1Node := newTestNode (1 )
491+ p1n ,err := NodeToProto (p1Node )
492+ require .NoError (t ,err )
493+ p1tcn ,err := uut .protoNodeToTailcfg (p1n )
494+ p1tcn .KeepAlive = true
495+ require .NoError (t ,err )
496+
497+ // Given: peer already exists
498+ uut .L .Lock ()
499+ uut .peers [p1ID ]= & peerLifecycle {
500+ peerID :p1ID ,
501+ node :p1tcn ,
502+ lastHandshake :time .Date (2024 ,1 ,7 ,12 ,0 ,10 ,0 ,time .UTC ),
503+ }
504+ uut .L .Unlock ()
505+
506+ uut .setBlockEndpoints (true )
507+
508+ nm := testutil .RequireRecvCtx (ctx ,t ,fEng .setNetworkMap )
509+ r := testutil .RequireRecvCtx (ctx ,t ,fEng .reconfig )
510+ require .Len (t ,nm .Peers ,1 )
511+ require .Len (t ,nm .Peers [0 ].Endpoints ,0 )
512+ require .Len (t ,r .wg .Peers ,1 )
513+
514+ done := make (chan struct {})
515+ go func () {
516+ defer close (done )
517+ uut .close ()
518+ }()
519+ _ = testutil .RequireRecvCtx (ctx ,t ,done )
520+ }
521+
522+ func TestConfigMaps_setBlockEndpoints_same (t * testing.T ) {
523+ t .Parallel ()
524+ ctx := testutil .Context (t ,testutil .WaitShort )
525+ logger := slogtest .Make (t ,nil ).Leveled (slog .LevelDebug )
526+ fEng := newFakeEngineConfigurable ()
527+ nodePrivateKey := key .NewNode ()
528+ nodeID := tailcfg .NodeID (5 )
529+ discoKey := key .NewDisco ()
530+ uut := newConfigMaps (logger ,fEng ,nodeID ,nodePrivateKey ,discoKey .Public (),nil )
531+ defer uut .close ()
532+
533+ p1ID := uuid .MustParse ("10000000-0000-0000-0000-000000000000" )
534+ p1Node := newTestNode (1 )
535+ p1n ,err := NodeToProto (p1Node )
536+ require .NoError (t ,err )
537+ p1tcn ,err := uut .protoNodeToTailcfg (p1n )
538+ p1tcn .KeepAlive = true
539+ require .NoError (t ,err )
540+
541+ // Given: peer already exists && blockEndpoints set to true
542+ uut .L .Lock ()
543+ uut .peers [p1ID ]= & peerLifecycle {
544+ peerID :p1ID ,
545+ node :p1tcn ,
546+ lastHandshake :time .Date (2024 ,1 ,7 ,12 ,0 ,10 ,0 ,time .UTC ),
547+ }
548+ uut .blockEndpoints = true
549+ uut .L .Unlock ()
550+
551+ // Then: we don't configure
552+ requireNeverConfigures (ctx ,t ,uut )
553+
554+ // When we set blockEndpoints to true
555+ uut .setBlockEndpoints (true )
556+
557+ done := make (chan struct {})
558+ go func () {
559+ defer close (done )
560+ uut .close ()
561+ }()
562+ _ = testutil .RequireRecvCtx (ctx ,t ,done )
563+ }
564+
478565func expectStatusWithHandshake (
479566ctx context.Context ,t testing.TB ,fEng * fakeEngineConfigurable ,k key.NodePublic ,lastHandshake time.Time ,
480567)<- chan struct {} {