@@ -50,9 +50,9 @@ func TestDERPMesh(t *testing.T) {
50
50
defer firstServer .Close ()
51
51
secondServer , secondServerURL := startDERP (t , tlsConfig )
52
52
firstMesh := derpmesh .New (slogtest .Make (t , nil ).Named ("first" ).Leveled (slog .LevelDebug ), firstServer , tlsConfig )
53
- firstMesh .SetAddresses ([]string {secondServerURL }, true )
53
+ firstMesh .SetAddresses ([]string {secondServerURL }, false )
54
54
secondMesh := derpmesh .New (slogtest .Make (t , nil ).Named ("second" ).Leveled (slog .LevelDebug ), secondServer , tlsConfig )
55
- secondMesh .SetAddresses ([]string {firstServerURL }, true )
55
+ secondMesh .SetAddresses ([]string {firstServerURL }, false )
56
56
defer firstMesh .Close ()
57
57
defer secondMesh .Close ()
58
58
@@ -183,6 +183,56 @@ func TestDERPMesh(t *testing.T) {
183
183
}
184
184
}()
185
185
186
+ got := recvData (t , secondClient )
187
+ require .Equal (t , sent , got )
188
+ cancelFunc ()
189
+ <- closed
190
+ })
191
+ t .Run ("CycleAddresses" , func (t * testing.T ) {
192
+ t .Parallel ()
193
+ firstServer , firstServerURL := startDERP (t , tlsConfig )
194
+ defer firstServer .Close ()
195
+ secondServer , secondServerURL := startDERP (t , tlsConfig )
196
+ firstMesh := derpmesh .New (slogtest .Make (t , nil ).Named ("first" ).Leveled (slog .LevelDebug ), firstServer , tlsConfig )
197
+ firstMesh .SetAddresses ([]string {secondServerURL }, false )
198
+ secondMesh := derpmesh .New (slogtest .Make (t , nil ).Named ("second" ).Leveled (slog .LevelDebug ), secondServer , tlsConfig )
199
+ // Ensures that the client properly re-adds the address after it's removed.
200
+ secondMesh .SetAddresses ([]string {firstServerURL }, true )
201
+ secondMesh .SetAddresses ([]string {}, true )
202
+ secondMesh .SetAddresses ([]string {firstServerURL }, true )
203
+ defer firstMesh .Close ()
204
+ defer secondMesh .Close ()
205
+
206
+ first := key .NewNode ()
207
+ second := key .NewNode ()
208
+ firstClient , err := derphttp .NewClient (first , secondServerURL , tailnet .Logger (slogtest .Make (t , nil )))
209
+ require .NoError (t , err )
210
+ firstClient .TLSConfig = tlsConfig
211
+ secondClient , err := derphttp .NewClient (second , firstServerURL , tailnet .Logger (slogtest .Make (t , nil )))
212
+ require .NoError (t , err )
213
+ secondClient .TLSConfig = tlsConfig
214
+ err = secondClient .Connect (context .Background ())
215
+ require .NoError (t , err )
216
+
217
+ closed := make (chan struct {})
218
+ ctx , cancelFunc := context .WithCancel (context .Background ())
219
+ defer cancelFunc ()
220
+ sent := []byte ("hello world" )
221
+ go func () {
222
+ defer close (closed )
223
+ ticker := time .NewTicker (50 * time .Millisecond )
224
+ defer ticker .Stop ()
225
+ for {
226
+ select {
227
+ case <- ctx .Done ():
228
+ return
229
+ case <- ticker .C :
230
+ }
231
+ err = firstClient .Send (second .Public (), sent )
232
+ require .NoError (t , err )
233
+ }
234
+ }()
235
+
186
236
got := recvData (t , secondClient )
187
237
require .Equal (t , sent , got )
188
238
cancelFunc ()
0 commit comments