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  }