github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/p2p/netutil/error_test.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 19:16:41</date> 10 //</624450105264574464> 11 12 13 package netutil 14 15 import ( 16 "net" 17 "testing" 18 "time" 19 ) 20 21 //此测试检查ispackettoobig是否正确识别 22 //接收更大的UDP数据包导致的错误 23 //比提供的接收缓冲区大。 24 func TestIsPacketTooBig(t *testing.T) { 25 listener, err := net.ListenPacket("udp", "127.0.0.1:0") 26 if err != nil { 27 t.Fatal(err) 28 } 29 defer listener.Close() 30 sender, err := net.Dial("udp", listener.LocalAddr().String()) 31 if err != nil { 32 t.Fatal(err) 33 } 34 defer sender.Close() 35 36 sendN := 1800 37 recvN := 300 38 for i := 0; i < 20; i++ { 39 go func() { 40 buf := make([]byte, sendN) 41 for i := range buf { 42 buf[i] = byte(i) 43 } 44 sender.Write(buf) 45 }() 46 47 buf := make([]byte, recvN) 48 listener.SetDeadline(time.Now().Add(1 * time.Second)) 49 n, _, err := listener.ReadFrom(buf) 50 if err != nil { 51 if nerr, ok := err.(net.Error); ok && nerr.Timeout() { 52 continue 53 } 54 if !isPacketTooBig(err) { 55 t.Fatalf("unexpected read error: %v", err) 56 } 57 continue 58 } 59 if n != recvN { 60 t.Fatalf("short read: %d, want %d", n, recvN) 61 } 62 for i := range buf { 63 if buf[i] != byte(i) { 64 t.Fatalf("error in pattern") 65 break 66 } 67 } 68 } 69 } 70