Skip to content

Commit eda3265

Browse files
authored
chore: fix flake in tunnel (#9746)
1 parent 70e481e commit eda3265

File tree

1 file changed

+24
-13
lines changed

1 file changed

+24
-13
lines changed

coderd/devtunnel/tunnel_test.go

+24-13
Original file line numberDiff line numberDiff line change
@@ -189,23 +189,34 @@ func newTunnelServer(t *testing.T) *tunnelServer {
189189
require.Equal(t, "https", baseURLParsed.Scheme)
190190
baseURLParsed.Host = net.JoinHostPort("tunnel.coder.com", baseURLParsed.Port())
191191

192-
wireguardPort := freeUDPPort(t)
193-
194192
key, err := tunnelsdk.GeneratePrivateKey()
195193
require.NoError(t, err)
196194

197-
options := &tunneld.Options{
198-
BaseURL: baseURLParsed,
199-
WireguardEndpoint: fmt.Sprintf("127.0.0.1:%d", wireguardPort),
200-
WireguardPort: wireguardPort,
201-
WireguardKey: key,
202-
WireguardMTU: tunneld.DefaultWireguardMTU,
203-
WireguardServerIP: tunneld.DefaultWireguardServerIP,
204-
WireguardNetworkPrefix: tunneld.DefaultWireguardNetworkPrefix,
205-
}
195+
// Sadly the tunnel server needs to be passed a port number and can't be
196+
// passed an active listener (because wireguard needs to make the listener),
197+
// so we may need to try a few times to get a free port.
198+
var td *tunneld.API
199+
for i := 0; i < 10; i++ {
200+
wireguardPort := freeUDPPort(t)
201+
options := &tunneld.Options{
202+
BaseURL: baseURLParsed,
203+
WireguardEndpoint: fmt.Sprintf("127.0.0.1:%d", wireguardPort),
204+
WireguardPort: wireguardPort,
205+
WireguardKey: key,
206+
WireguardMTU: tunneld.DefaultWireguardMTU,
207+
WireguardServerIP: tunneld.DefaultWireguardServerIP,
208+
WireguardNetworkPrefix: tunneld.DefaultWireguardNetworkPrefix,
209+
}
206210

207-
td, err := tunneld.New(options)
208-
require.NoError(t, err)
211+
td, err = tunneld.New(options)
212+
if err == nil {
213+
break
214+
}
215+
t.Logf("failed to create tunnel server on port %d: %s", wireguardPort, err)
216+
}
217+
if td == nil {
218+
t.Fatal("failed to create tunnel server in 10 attempts")
219+
}
209220
handler = td.Router()
210221
t.Cleanup(func() {
211222
_ = td.Close()

0 commit comments

Comments
 (0)