diff options
author | Jeffrey Wilcke <jeffrey@ethereum.org> | 2016-02-01 18:36:31 +0800 |
---|---|---|
committer | Jeffrey Wilcke <jeffrey@ethereum.org> | 2016-02-01 18:36:31 +0800 |
commit | f85212aa86c8feac17f582ac14f6b15260015261 (patch) | |
tree | 8f25667f7900b216ed27aec7ffb5504a695374eb /p2p/discover/udp_test.go | |
parent | d951ff300e7c390d91b3fa34bec4424522ecf8a0 (diff) | |
parent | 2871781f64958c144a15ccb4e64c005a10be7cdd (diff) | |
download | dexon-f85212aa86c8feac17f582ac14f6b15260015261.tar dexon-f85212aa86c8feac17f582ac14f6b15260015261.tar.gz dexon-f85212aa86c8feac17f582ac14f6b15260015261.tar.bz2 dexon-f85212aa86c8feac17f582ac14f6b15260015261.tar.lz dexon-f85212aa86c8feac17f582ac14f6b15260015261.tar.xz dexon-f85212aa86c8feac17f582ac14f6b15260015261.tar.zst dexon-f85212aa86c8feac17f582ac14f6b15260015261.zip |
Merge pull request #2146 from fjl/discover-win32-large-packets
p2p/discover: fix Windows-specific issue for larger-than-buffer packets
Diffstat (limited to 'p2p/discover/udp_test.go')
-rw-r--r-- | p2p/discover/udp_test.go | 56 |
1 files changed, 52 insertions, 4 deletions
diff --git a/p2p/discover/udp_test.go b/p2p/discover/udp_test.go index 8ed12b8ec..ec28867cc 100644 --- a/p2p/discover/udp_test.go +++ b/p2p/discover/udp_test.go @@ -23,10 +23,8 @@ import ( "errors" "fmt" "io" - logpkg "log" "math/rand" "net" - "os" "path/filepath" "reflect" "runtime" @@ -34,12 +32,62 @@ import ( "testing" "time" + "github.com/davecgh/go-spew/spew" "github.com/ethereum/go-ethereum/crypto" - "github.com/ethereum/go-ethereum/logger" ) func init() { - logger.AddLogSystem(logger.NewStdLogSystem(os.Stdout, logpkg.LstdFlags, logger.ErrorLevel)) + spew.Config.DisableMethods = true +} + +// This test checks that isPacketTooBig correctly identifies +// errors that result from receiving a UDP packet larger +// than the supplied receive buffer. +func TestIsPacketTooBig(t *testing.T) { + listener, err := net.ListenPacket("udp", "127.0.0.1:0") + if err != nil { + t.Fatal(err) + } + defer listener.Close() + sender, err := net.Dial("udp", listener.LocalAddr().String()) + if err != nil { + t.Fatal(err) + } + defer sender.Close() + + sendN := 1800 + recvN := 300 + for i := 0; i < 20; i++ { + go func() { + buf := make([]byte, sendN) + for i := range buf { + buf[i] = byte(i) + } + sender.Write(buf) + }() + + buf := make([]byte, recvN) + listener.SetDeadline(time.Now().Add(1 * time.Second)) + n, _, err := listener.ReadFrom(buf) + if err != nil { + if nerr, ok := err.(net.Error); ok && nerr.Timeout() { + continue + } + if !isPacketTooBig(err) { + t.Fatal("unexpected read error:", spew.Sdump(err)) + } + continue + } + if n != recvN { + t.Fatalf("short read: %d, want %d", n, recvN) + } + for i := range buf { + if buf[i] != byte(i) { + t.Fatalf("error in pattern") + break + } + } + } } // shared test variables |