diff options
author | obscuren <geffobscura@gmail.com> | 2015-05-16 06:27:13 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2015-05-16 06:27:13 +0800 |
commit | 1564f1a020b9edc78bc672f8f2df64b3d0dc55c3 (patch) | |
tree | d898e2b20a6c2e0b5613ae7f669499c5db23b719 /p2p/nat/nat_test.go | |
parent | 8e24378cc1acb074b56de75bf0baf6feb7927677 (diff) | |
parent | 7ea76fcf993f3fecb55233bdcc2409618d9080b9 (diff) | |
download | dexon-1564f1a020b9edc78bc672f8f2df64b3d0dc55c3.tar dexon-1564f1a020b9edc78bc672f8f2df64b3d0dc55c3.tar.gz dexon-1564f1a020b9edc78bc672f8f2df64b3d0dc55c3.tar.bz2 dexon-1564f1a020b9edc78bc672f8f2df64b3d0dc55c3.tar.lz dexon-1564f1a020b9edc78bc672f8f2df64b3d0dc55c3.tar.xz dexon-1564f1a020b9edc78bc672f8f2df64b3d0dc55c3.tar.zst dexon-1564f1a020b9edc78bc672f8f2df64b3d0dc55c3.zip |
Merge branch 'release/0.9.21'
Diffstat (limited to 'p2p/nat/nat_test.go')
-rw-r--r-- | p2p/nat/nat_test.go | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/p2p/nat/nat_test.go b/p2p/nat/nat_test.go new file mode 100644 index 000000000..95c50522e --- /dev/null +++ b/p2p/nat/nat_test.go @@ -0,0 +1,48 @@ +package nat + +import ( + "bytes" + "net" + "testing" + "time" +) + +// This test checks that autodisc doesn't hang and returns +// consistent results when multiple goroutines call its methods +// concurrently. +func TestAutoDiscRace(t *testing.T) { + ad := startautodisc("thing", func() Interface { + time.Sleep(500 * time.Millisecond) + return extIP{33, 44, 55, 66} + }) + + // Spawn a few concurrent calls to ad.ExternalIP. + type rval struct { + ip net.IP + err error + } + results := make(chan rval, 50) + for i := 0; i < cap(results); i++ { + go func() { + ip, err := ad.ExternalIP() + results <- rval{ip, err} + }() + } + + // Check that they all return the correct result within the deadline. + deadline := time.After(550 * time.Millisecond) + for i := 0; i < cap(results); i++ { + select { + case <-deadline: + t.Fatal("deadline exceeded") + case rval := <-results: + if rval.err != nil { + t.Errorf("result %d: unexpected error: %v", i, rval.err) + } + wantIP := net.IP{33, 44, 55, 66} + if !bytes.Equal(rval.ip, wantIP) { + t.Errorf("result %d: got IP %v, want %v", i, rval.ip, wantIP) + } + } + } +} |