@@ -74,12 +74,10 @@ func TestNodeUpdater_setNetInfo_same(t *testing.T) {
74
74
nodeKey := key .NewNode ().Public ()
75
75
discoKey := key .NewDisco ().Public ()
76
76
nodeCh := make (chan * Node )
77
- goCh := make (chan struct {})
78
77
uut := newNodeUpdater (
79
78
logger ,
80
79
func (n * Node ) {
81
80
nodeCh <- n
82
- <- goCh
83
81
},
84
82
id , nodeKey , discoKey ,
85
83
)
@@ -108,3 +106,80 @@ func TestNodeUpdater_setNetInfo_same(t *testing.T) {
108
106
}()
109
107
_ = testutil .RequireRecvCtx (ctx , t , done )
110
108
}
109
+
110
+ func TestNodeUpdater_setDERPForcedWebsocket_different (t * testing.T ) {
111
+ t .Parallel ()
112
+ ctx := testutil .Context (t , testutil .WaitShort )
113
+ logger := slogtest .Make (t , nil ).Leveled (slog .LevelDebug )
114
+ id := tailcfg .NodeID (1 )
115
+ nodeKey := key .NewNode ().Public ()
116
+ discoKey := key .NewDisco ().Public ()
117
+ nodeCh := make (chan * Node )
118
+ uut := newNodeUpdater (
119
+ logger ,
120
+ func (n * Node ) {
121
+ nodeCh <- n
122
+ },
123
+ id , nodeKey , discoKey ,
124
+ )
125
+ defer uut .close ()
126
+
127
+ // Given: preferred DERP is 1, so we'll send an update
128
+ uut .L .Lock ()
129
+ uut .preferredDERP = 1
130
+ uut .L .Unlock ()
131
+
132
+ // When: we set a new forced websocket reason
133
+ uut .setDERPForcedWebsocket (1 , "test" )
134
+
135
+ // Then: we receive an update with the reason set
136
+ node := testutil .RequireRecvCtx (ctx , t , nodeCh )
137
+ require .Equal (t , nodeKey , node .Key )
138
+ require .Equal (t , discoKey , node .DiscoKey )
139
+ require .True (t , maps .Equal (map [int ]string {1 : "test" }, node .DERPForcedWebsocket ))
140
+
141
+ done := make (chan struct {})
142
+ go func () {
143
+ defer close (done )
144
+ uut .close ()
145
+ }()
146
+ _ = testutil .RequireRecvCtx (ctx , t , done )
147
+ }
148
+
149
+ func TestNodeUpdater_setDERPForcedWebsocket_same (t * testing.T ) {
150
+ t .Parallel ()
151
+ ctx := testutil .Context (t , testutil .WaitShort )
152
+ logger := slogtest .Make (t , nil ).Leveled (slog .LevelDebug )
153
+ id := tailcfg .NodeID (1 )
154
+ nodeKey := key .NewNode ().Public ()
155
+ discoKey := key .NewDisco ().Public ()
156
+ nodeCh := make (chan * Node )
157
+ uut := newNodeUpdater (
158
+ logger ,
159
+ func (n * Node ) {
160
+ nodeCh <- n
161
+ },
162
+ id , nodeKey , discoKey ,
163
+ )
164
+ defer uut .close ()
165
+
166
+ // Then: we don't configure
167
+ requireNeverConfigures (ctx , t , & uut .phased )
168
+
169
+ // Given: preferred DERP is 1, so we would send an update on change &&
170
+ // reason for region 1 is set to "test"
171
+ uut .L .Lock ()
172
+ uut .preferredDERP = 1
173
+ uut .derpForcedWebsockets [1 ] = "test"
174
+ uut .L .Unlock ()
175
+
176
+ // When: we set region 1 to "test
177
+ uut .setDERPForcedWebsocket (1 , "test" )
178
+
179
+ done := make (chan struct {})
180
+ go func () {
181
+ defer close (done )
182
+ uut .close ()
183
+ }()
184
+ _ = testutil .RequireRecvCtx (ctx , t , done )
185
+ }
0 commit comments