wireguard-go/device
Josh Bleecher Snyder 3591acba76 device: make test setup more robust
Picking two free ports to use for a test is difficult.
The free port we selected might no longer be free when we reach
for it a second time.

On my machine, this failure mode led to failures approximately
once per thousand test runs.

Since failures are rare, and threading through and checking for
all possible errors is complicated, fix this with a big hammer:
Retry if either device fails to come up.

Also, if you accidentally pick the same port twice, delightful confusion ensues.
The handshake failures manifest as crypto errors, which look scary.
Again, fix with retries.

To make these retries easier to implement, use testing.T.Cleanup
instead of defer to close devices. This requires Go 1.14.
Update go.mod accordingly. Go 1.13 is no longer supported anyway.

With these fixes, 'go test -race' ran 100,000 times without failure.

Signed-off-by: Josh Bleecher Snyder <josh@tailscale.com>
2021-01-07 14:49:44 +01:00
..
allowedips.go global: update header comments and modules 2020-05-02 02:08:26 -06:00
allowedips_rand_test.go global: update header comments and modules 2020-05-02 02:08:26 -06:00
allowedips_test.go global: update header comments and modules 2020-05-02 02:08:26 -06:00
bind_test.go global: update header comments and modules 2020-05-02 02:08:26 -06:00
constants.go replay: account for fqcodel reordering 2020-05-19 17:46:35 -06:00
cookie.go global: update header comments and modules 2020-05-02 02:08:26 -06:00
cookie_test.go global: update header comments and modules 2020-05-02 02:08:26 -06:00
device.go device: wait for routines to stop before removing peers 2020-07-04 20:29:31 +10:00
device_test.go device: make test setup more robust 2021-01-07 14:49:44 +01:00
endpoint_test.go global: update header comments and modules 2020-05-02 02:08:26 -06:00
indextable.go device: remove some unnecessary unsafe 2020-07-15 06:59:44 +10:00
ip.go global: update header comments and modules 2020-05-02 02:08:26 -06:00
kdf_test.go global: update header comments and modules 2020-05-02 02:08:26 -06:00
keypair.go replay: minor API changes to more idiomatic Go 2020-10-14 10:46:00 +02:00
logger.go global: update header comments and modules 2020-05-02 02:08:26 -06:00
misc.go global: update header comments and modules 2020-05-02 02:08:26 -06:00
mobilequirks.go device: format a few things 2020-11-06 18:01:27 +01:00
noise-helpers.go global: update header comments and modules 2020-05-02 02:08:26 -06:00
noise-protocol.go replay: minor API changes to more idiomatic Go 2020-10-14 10:46:00 +02:00
noise-types.go global: update header comments and modules 2020-05-02 02:08:26 -06:00
noise_test.go global: update header comments and modules 2020-05-02 02:08:26 -06:00
peer.go device: add write queue mutex for peer 2020-11-18 14:22:15 +01:00
peer_test.go device: avoid copying lock in tests 2020-12-08 14:25:10 -08:00
pools.go device: clear pointers when returning elems to pools 2020-12-08 14:25:02 -08:00
queueconstants_android.go global: update header comments and modules 2020-05-02 02:08:26 -06:00
queueconstants_default.go global: update header comments and modules 2020-05-02 02:08:26 -06:00
queueconstants_ios.go global: update header comments and modules 2020-05-02 02:08:26 -06:00
receive.go device: clear pointers when returning elems to pools 2020-12-08 14:25:02 -08:00
send.go device: clear pointers when returning elems to pools 2020-12-08 14:25:02 -08:00
sticky_default.go device: do not include sticky sockets on android 2020-06-07 01:50:20 -06:00
sticky_linux.go device: use RTMGRP_IPV4_ROUTE to specify multicast groups mask 2020-07-13 17:58:10 -06:00
timers.go global: update header comments and modules 2020-05-02 02:08:26 -06:00
tun.go global: update header comments and modules 2020-05-02 02:08:26 -06:00
tun_test.go global: update header comments and modules 2020-05-02 02:08:26 -06:00
uapi.go global: update header comments and modules 2020-05-02 02:08:26 -06:00
version.go version: bump snapshot 2020-11-18 14:24:17 +01:00