aboutsummaryrefslogtreecommitdiffstats
path: root/p2p/discover/udp_test.go
diff options
context:
space:
mode:
authorJeffrey Wilcke <jeffrey@ethereum.org>2016-02-01 18:36:31 +0800
committerJeffrey Wilcke <jeffrey@ethereum.org>2016-02-01 18:36:31 +0800
commitf85212aa86c8feac17f582ac14f6b15260015261 (patch)
tree8f25667f7900b216ed27aec7ffb5504a695374eb /p2p/discover/udp_test.go
parentd951ff300e7c390d91b3fa34bec4424522ecf8a0 (diff)
parent2871781f64958c144a15ccb4e64c005a10be7cdd (diff)
downloaddexon-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.go56
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