diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2021-02-10 01:01:37 +0100 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2021-02-10 01:01:37 +0100 |
commit | 747f5440bc18492a63eb91cba7db72b16c96176d (patch) | |
tree | 7cfa396f4d585518872f81a2717558fecc851074 | |
parent | aabc3770bad3ac6674a7a3952cdcd88f11dd1a72 (diff) |
device: retry Up() in up/down test
We're loosing our ownership of the port when bringing the device down,
which means another test process could reclaim it. Avoid this by
retrying for 4 seconds.
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
-rw-r--r-- | device/device_test.go | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/device/device_test.go b/device/device_test.go index c17b350..02b1c35 100644 --- a/device/device_test.go +++ b/device/device_test.go @@ -8,6 +8,7 @@ package device import ( "bytes" "encoding/hex" + "errors" "fmt" "io/ioutil" "math/rand" @@ -16,6 +17,7 @@ import ( "runtime/pprof" "sync" "sync/atomic" + "syscall" "testing" "time" @@ -211,8 +213,17 @@ func TestUpDown(t *testing.T) { go func(d *Device) { defer wg.Done() for i := 0; i < itrials; i++ { - if err := d.Up(); err != nil { - t.Errorf("failed up bring up device: %v", err) + start := time.Now() + for { + if err := d.Up(); err != nil { + if errors.Is(err, syscall.EADDRINUSE) && time.Now().Sub(start) < time.Second*4 { + // Some other test process is racing with us, so try again. + time.Sleep(time.Millisecond * 10) + continue + } + t.Errorf("failed up bring up device: %v", err) + } + break } time.Sleep(time.Duration(rand.Intn(int(time.Nanosecond * (0x10000 - 1))))) if err := d.Down(); err != nil { |