@@ -586,7 +586,7 @@ func TestNewBasicDERPController_Mainline(t *testing.T) {
586
586
t .Parallel ()
587
587
fs := make (chan * tailcfg.DERPMap )
588
588
logger := testutil .Logger (t )
589
- uut := tailnet .NewBasicDERPController (logger , fakeSetter (fs ))
589
+ uut := tailnet .NewBasicDERPController (logger , nil , fakeSetter (fs ))
590
590
fc := fakeDERPClient {
591
591
ch : make (chan * tailcfg.DERPMap ),
592
592
}
@@ -609,7 +609,7 @@ func TestNewBasicDERPController_RecvErr(t *testing.T) {
609
609
t .Parallel ()
610
610
fs := make (chan * tailcfg.DERPMap )
611
611
logger := testutil .Logger (t )
612
- uut := tailnet .NewBasicDERPController (logger , fakeSetter (fs ))
612
+ uut := tailnet .NewBasicDERPController (logger , nil , fakeSetter (fs ))
613
613
expectedErr := xerrors .New ("a bad thing happened" )
614
614
fc := fakeDERPClient {
615
615
ch : make (chan * tailcfg.DERPMap ),
@@ -1041,7 +1041,7 @@ func TestController_Disconnects(t *testing.T) {
1041
1041
// darwin can be slow sometimes.
1042
1042
tailnet .WithGracefulTimeout (5 * time .Second ))
1043
1043
uut .CoordCtrl = tailnet .NewAgentCoordinationController (logger .Named ("coord_ctrl" ), fConn )
1044
- uut .DERPCtrl = tailnet .NewBasicDERPController (logger .Named ("derp_ctrl" ), fConn )
1044
+ uut .DERPCtrl = tailnet .NewBasicDERPController (logger .Named ("derp_ctrl" ), nil , fConn )
1045
1045
uut .Run (ctx )
1046
1046
1047
1047
call := testutil .TryReceive (testCtx , t , fCoord .CoordinateCalls )
@@ -1945,6 +1945,52 @@ func TestTunnelAllWorkspaceUpdatesController_HandleErrors(t *testing.T) {
1945
1945
}
1946
1946
}
1947
1947
1948
+ func TestBasicDERPController_RewriteDERPMap (t * testing.T ) {
1949
+ t .Parallel ()
1950
+ ctx := testutil .Context (t , testutil .WaitShort )
1951
+ logger := slogtest .Make (t , & slogtest.Options {IgnoreErrors : true }).Leveled (slog .LevelDebug )
1952
+
1953
+ testDERPMap := & tailcfg.DERPMap {
1954
+ Regions : map [int ]* tailcfg.DERPRegion {
1955
+ 1 : {
1956
+ RegionID : 1 ,
1957
+ },
1958
+ },
1959
+ }
1960
+
1961
+ // Ensure the fake rewriter works as expected.
1962
+ rewriter := & fakeDERPMapRewriter {
1963
+ ctx : ctx ,
1964
+ calls : make (chan rewriteDERPMapCall , 16 ),
1965
+ }
1966
+ rewriter .RewriteDERPMap (testDERPMap )
1967
+ rewriteCall := testutil .TryReceive (ctx , t , rewriter .calls )
1968
+ require .Same (t , testDERPMap , rewriteCall .derpMap )
1969
+
1970
+ derpClient := & fakeDERPClient {
1971
+ ch : make (chan * tailcfg.DERPMap ),
1972
+ err : nil ,
1973
+ }
1974
+ defer derpClient .Close ()
1975
+
1976
+ derpSetter := & fakeDERPMapSetter {
1977
+ ctx : ctx ,
1978
+ calls : make (chan * setDERPMapCall , 16 ),
1979
+ }
1980
+
1981
+ derpCtrl := tailnet .NewBasicDERPController (logger , rewriter , derpSetter )
1982
+ derpCtrl .New (derpClient )
1983
+
1984
+ // Simulate receiving a new DERP map from the server, which should be passed
1985
+ // to the rewriter and setter.
1986
+ testDERPMap = testDERPMap .Clone () // make a new pointer
1987
+ derpClient .ch <- testDERPMap
1988
+ rewriteCall = testutil .TryReceive (ctx , t , rewriter .calls )
1989
+ require .Same (t , testDERPMap , rewriteCall .derpMap )
1990
+ setterCall := testutil .TryReceive (ctx , t , derpSetter .calls )
1991
+ require .Same (t , testDERPMap , setterCall .derpMap )
1992
+ }
1993
+
1948
1994
type fakeWorkspaceUpdatesController struct {
1949
1995
ctx context.Context
1950
1996
t testing.TB
@@ -2040,3 +2086,45 @@ type fakeCloser struct{}
2040
2086
func (fakeCloser ) Close () error {
2041
2087
return nil
2042
2088
}
2089
+
2090
+ type fakeDERPMapRewriter struct {
2091
+ ctx context.Context
2092
+ calls chan rewriteDERPMapCall
2093
+ }
2094
+
2095
+ var _ tailnet.DERPMapRewriter = & fakeDERPMapRewriter {}
2096
+
2097
+ type rewriteDERPMapCall struct {
2098
+ derpMap * tailcfg.DERPMap
2099
+ }
2100
+
2101
+ func (f * fakeDERPMapRewriter ) RewriteDERPMap (derpMap * tailcfg.DERPMap ) {
2102
+ call := rewriteDERPMapCall {
2103
+ derpMap : derpMap ,
2104
+ }
2105
+ select {
2106
+ case f .calls <- call :
2107
+ case <- f .ctx .Done ():
2108
+ }
2109
+ }
2110
+
2111
+ type fakeDERPMapSetter struct {
2112
+ ctx context.Context
2113
+ calls chan * setDERPMapCall
2114
+ }
2115
+
2116
+ var _ tailnet.DERPMapSetter = & fakeDERPMapSetter {}
2117
+
2118
+ type setDERPMapCall struct {
2119
+ derpMap * tailcfg.DERPMap
2120
+ }
2121
+
2122
+ func (f * fakeDERPMapSetter ) SetDERPMap (derpMap * tailcfg.DERPMap ) {
2123
+ call := & setDERPMapCall {
2124
+ derpMap : derpMap ,
2125
+ }
2126
+ select {
2127
+ case <- f .ctx .Done ():
2128
+ case f .calls <- call :
2129
+ }
2130
+ }
0 commit comments