summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2021-02-10 01:01:37 +0100
committerJason A. Donenfeld <Jason@zx2c4.com>2021-02-10 01:01:37 +0100
commit747f5440bc18492a63eb91cba7db72b16c96176d (patch)
tree7cfa396f4d585518872f81a2717558fecc851074
parentaabc3770bad3ac6674a7a3952cdcd88f11dd1a72 (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.go15
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 {