Skip to content

Commit bd7fb13

Browse files
committed
Fix race condition in connection tests
1 parent 332d435 commit bd7fb13

File tree

3 files changed

+16
-10
lines changed

3 files changed

+16
-10
lines changed

enterprise/coderd/coderd.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -283,11 +283,11 @@ func (api *API) updateEntitlements(ctx context.Context) error {
283283
for _, replica := range api.replicaManager.Regional() {
284284
addresses = append(addresses, replica.RelayAddress)
285285
}
286-
api.derpMesh.SetAddresses(addresses)
286+
api.derpMesh.SetAddresses(addresses, false)
287287
_ = api.updateEntitlements(ctx)
288288
})
289289
} else {
290-
api.derpMesh.SetAddresses([]string{})
290+
api.derpMesh.SetAddresses([]string{}, false)
291291
api.replicaManager.SetCallback(func() {
292292
// If the amount of replicas change, so should our entitlements.
293293
// This is to display a warning in the UI if the user is unlicensed.

enterprise/derpmesh/derpmesh.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,10 @@ type Mesh struct {
4242

4343
// SetAddresses performs a diff of the incoming addresses and adds
4444
// or removes DERP clients from the mesh.
45-
func (m *Mesh) SetAddresses(addresses []string) {
45+
//
46+
// Connect is only used for testing to ensure DERPs are meshed before
47+
// exchanging messages.
48+
func (m *Mesh) SetAddresses(addresses []string, connect bool) {
4649
total := make(map[string]struct{}, 0)
4750
for _, address := range addresses {
4851
addressURL, err := url.Parse(address)
@@ -58,7 +61,7 @@ func (m *Mesh) SetAddresses(addresses []string) {
5861
address = derpURL.String()
5962

6063
total[address] = struct{}{}
61-
added, err := m.addAddress(address)
64+
added, err := m.addAddress(address, connect)
6265
if err != nil {
6366
m.logger.Error(m.ctx, "failed to add address", slog.F("address", address), slog.Error(err))
6467
continue
@@ -85,7 +88,7 @@ func (m *Mesh) SetAddresses(addresses []string) {
8588
// addAddress begins meshing with a new address. It returns false if the address is already being meshed with.
8689
// It's expected that this is a full HTTP address with a path.
8790
// e.g. http://127.0.0.1:8080/derp
88-
func (m *Mesh) addAddress(address string) (bool, error) {
91+
func (m *Mesh) addAddress(address string, connect bool) (bool, error) {
8992
m.mutex.Lock()
9093
defer m.mutex.Unlock()
9194
_, isActive := m.active[address]
@@ -102,6 +105,9 @@ func (m *Mesh) addAddress(address string) (bool, error) {
102105
var dialer net.Dialer
103106
return dialer.DialContext(ctx, network, addr)
104107
})
108+
if connect {
109+
_ = client.Connect(m.ctx)
110+
}
105111
ctx, cancelFunc := context.WithCancel(m.ctx)
106112
closed := make(chan struct{})
107113
closeFunc := func() {

enterprise/derpmesh/derpmesh_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,9 @@ func TestDERPMesh(t *testing.T) {
4949
defer firstServer.Close()
5050
secondServer, secondServerURL := startDERP(t, tlsConfig)
5151
firstMesh := derpmesh.New(slogtest.Make(t, nil).Named("first").Leveled(slog.LevelDebug), firstServer, tlsConfig)
52-
firstMesh.SetAddresses([]string{secondServerURL})
52+
firstMesh.SetAddresses([]string{secondServerURL}, true)
5353
secondMesh := derpmesh.New(slogtest.Make(t, nil).Named("second").Leveled(slog.LevelDebug), secondServer, tlsConfig)
54-
secondMesh.SetAddresses([]string{firstServerURL})
54+
secondMesh.SetAddresses([]string{firstServerURL}, true)
5555
defer firstMesh.Close()
5656
defer secondMesh.Close()
5757

@@ -78,9 +78,9 @@ func TestDERPMesh(t *testing.T) {
7878
t.Parallel()
7979
server, serverURL := startDERP(t, tlsConfig)
8080
mesh := derpmesh.New(slogtest.Make(t, nil).Named("first").Leveled(slog.LevelDebug), server, tlsConfig)
81-
mesh.SetAddresses([]string{"http://fake.com"})
81+
mesh.SetAddresses([]string{"http://fake.com"}, false)
8282
// This should trigger a removal...
83-
mesh.SetAddresses([]string{})
83+
mesh.SetAddresses([]string{}, false)
8484
defer mesh.Close()
8585

8686
first := key.NewNode()
@@ -114,7 +114,7 @@ func TestDERPMesh(t *testing.T) {
114114
meshes = append(meshes, mesh)
115115
}
116116
for _, mesh := range meshes {
117-
mesh.SetAddresses(serverURLs)
117+
mesh.SetAddresses(serverURLs, true)
118118
}
119119

120120
first := key.NewNode()

0 commit comments

Comments
 (0)