aboutsummaryrefslogtreecommitdiffstats
path: root/p2p/netutil/error_test.go
diff options
context:
space:
mode:
authorFelix Lange <fjl@twurst.com>2016-11-22 01:11:21 +0800
committerFelix Lange <fjl@twurst.com>2016-11-23 05:20:38 +0800
commit1d80155d5e036a0c10dd456ae2772dfa17338b95 (patch)
tree1caf318e5666dc21d42074697d677975c6fed6e6 /p2p/netutil/error_test.go
parent04edbb0703142f792522e29a557069a3e52705f5 (diff)
downloadgo-tangerine-1d80155d5e036a0c10dd456ae2772dfa17338b95.tar
go-tangerine-1d80155d5e036a0c10dd456ae2772dfa17338b95.tar.gz
go-tangerine-1d80155d5e036a0c10dd456ae2772dfa17338b95.tar.bz2
go-tangerine-1d80155d5e036a0c10dd456ae2772dfa17338b95.tar.lz
go-tangerine-1d80155d5e036a0c10dd456ae2772dfa17338b95.tar.xz
go-tangerine-1d80155d5e036a0c10dd456ae2772dfa17338b95.tar.zst
go-tangerine-1d80155d5e036a0c10dd456ae2772dfa17338b95.zip
p2p/netutil: new package for network utilities
The new package contains three things for now: - IP network list parsing and matching - The WSAEMSGSIZE workaround, which is duplicated in p2p/discover and p2p/discv5.
Diffstat (limited to 'p2p/netutil/error_test.go')
-rw-r--r--p2p/netutil/error_test.go73
1 files changed, 73 insertions, 0 deletions
diff --git a/p2p/netutil/error_test.go b/p2p/netutil/error_test.go
new file mode 100644
index 000000000..645e48f83
--- /dev/null
+++ b/p2p/netutil/error_test.go
@@ -0,0 +1,73 @@
+// Copyright 2016 The go-ethereum Authors
+// This file is part of the go-ethereum library.
+//
+// The go-ethereum library is free software: you can redistribute it and/or modify
+// it under the terms of the GNU Lesser General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// The go-ethereum library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with the go-ethereum library. If not, see <http://www.gnu.org/licenses/>.
+
+package netutil
+
+import (
+ "net"
+ "testing"
+ "time"
+)
+
+// 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.Fatalf("unexpected read error: %v", 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
+ }
+ }
+ }
+}