diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2021-02-03 17:43:41 +0100 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2021-02-03 17:43:41 +0100 |
commit | 7258a8973dfb2e3069fe1a8364966cfaadbdb4e1 (patch) | |
tree | f199511ff2b90f3d52e780aba5e9191bba34a5ad /device | |
parent | d9d547a3f3f83f6ea23e140e3665ac41b6aca10a (diff) |
device: add up/down stress test
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'device')
-rw-r--r-- | device/device_test.go | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/device/device_test.go b/device/device_test.go index 6b443ce..b783771 100644 --- a/device/device_test.go +++ b/device/device_test.go @@ -7,9 +7,11 @@ package device import ( "bytes" + "encoding/hex" "errors" "fmt" "io/ioutil" + "math/rand" "net" "runtime" "runtime/pprof" @@ -196,6 +198,39 @@ func TestTwoDevicePing(t *testing.T) { }) } +func TestUpDown(t *testing.T) { + goroutineLeakCheck(t) + const itrials = 200 + const otrials = 10 + + for n := 0; n < otrials; n++ { + pair := genTestPair(t) + for i := range pair { + for k := range pair[i].dev.peers.keyMap { + pair[i].dev.IpcSet(fmt.Sprintf("public_key=%s\npersistent_keepalive_interval=1\n", hex.EncodeToString(k[:]))) + } + } + var wg sync.WaitGroup + wg.Add(len(pair)) + for i := range pair { + go func(d *Device) { + defer wg.Done() + for i := 0; i < itrials; i++ { + d.Up() + time.Sleep(time.Duration(rand.Intn(int(time.Nanosecond * (0x10000 - 1))))) + d.Down() + time.Sleep(time.Duration(rand.Intn(int(time.Nanosecond * (0x10000 - 1))))) + } + }(pair[i].dev) + } + wg.Wait() + for i := range pair { + pair[i].dev.Up() + pair[i].dev.Close() + } + } +} + // TestConcurrencySafety does other things concurrently with tunnel use. // It is intended to be used with the race detector to catch data races. func TestConcurrencySafety(t *testing.T) { |