github.com/r8d8/go-ethereum@v5.5.2+incompatible/p2p/peer_test_utils_test.go (about) 1 package p2p 2 3 import ( 4 "errors" 5 "fmt" 6 "net" 7 ) 8 9 var discard = Protocol{ 10 Name: "discard", 11 Length: 1, 12 Run: func(p *Peer, rw MsgReadWriter) error { 13 for { 14 msg, err := rw.ReadMsg() 15 if err != nil { 16 return err 17 } 18 fmt.Printf("discarding %d\n", msg.Code) 19 if err = msg.Discard(); err != nil { 20 return err 21 } 22 } 23 }, 24 } 25 26 func testPeer(protos []Protocol) (func(), *conn, *Peer, <-chan DiscReason) { 27 fd1, fd2 := net.Pipe() 28 c1 := &conn{fd: fd1, transport: newTestTransport(randomID(), fd1)} 29 c2 := &conn{fd: fd2, transport: newTestTransport(randomID(), fd2)} 30 for _, p := range protos { 31 c1.caps = append(c1.caps, p.cap()) 32 c2.caps = append(c2.caps, p.cap()) 33 } 34 35 peer := newPeer(c1, protos) 36 errc := make(chan DiscReason, 1) 37 go func() { errc <- peer.run() }() 38 39 closer := func() { c2.close(errors.New("close func called")) } 40 return closer, c2, peer, errc 41 }