|
7 | 7 | "errors"
|
8 | 8 | "io"
|
9 | 9 | "net/http/httptest"
|
10 |
| - "runtime" |
11 | 10 | "testing"
|
| 11 | + "time" |
12 | 12 |
|
13 | 13 | "github.com/stretchr/testify/assert"
|
14 | 14 | "github.com/stretchr/testify/require"
|
@@ -102,9 +102,6 @@ func TestDERPMesh(t *testing.T) {
|
102 | 102 | })
|
103 | 103 | t.Run("TwentyMeshes", func(t *testing.T) {
|
104 | 104 | t.Parallel()
|
105 |
| - if runtime.GOOS == "windows" { |
106 |
| - t.Skip("This test is races on Windows... I think because it's too slow.") |
107 |
| - } |
108 | 105 | meshes := make([]*derpmesh.Mesh, 0, 20)
|
109 | 106 | serverURLs := make([]string, 0, 20)
|
110 | 107 | for i := 0; i < 20; i++ {
|
@@ -132,12 +129,28 @@ func TestDERPMesh(t *testing.T) {
|
132 | 129 | err = secondClient.Connect(context.Background())
|
133 | 130 | require.NoError(t, err)
|
134 | 131 |
|
| 132 | + closed := make(chan struct{}) |
| 133 | + ctx, cancelFunc := context.WithCancel(context.Background()) |
| 134 | + defer cancelFunc() |
135 | 135 | sent := []byte("hello world")
|
136 |
| - err = firstClient.Send(second.Public(), sent) |
137 |
| - require.NoError(t, err) |
| 136 | + go func() { |
| 137 | + defer close(closed) |
| 138 | + ticker := time.NewTicker(time.Second) |
| 139 | + for { |
| 140 | + select { |
| 141 | + case <-ctx.Done(): |
| 142 | + return |
| 143 | + case <-ticker.C: |
| 144 | + } |
| 145 | + err = firstClient.Send(second.Public(), sent) |
| 146 | + require.NoError(t, err) |
| 147 | + } |
| 148 | + }() |
138 | 149 |
|
139 | 150 | got := recvData(t, secondClient)
|
140 | 151 | require.Equal(t, sent, got)
|
| 152 | + cancelFunc() |
| 153 | + <-closed |
141 | 154 | })
|
142 | 155 | }
|
143 | 156 |
|
|
0 commit comments