p2p: set up unit test logging

This change ensures we pass the Server logger down to Peer instances and
discovery. Test logging now works in all Server tests.
This commit is contained in:
Felix Lange 2019-06-06 15:01:51 +02:00
parent e0290f4f7b
commit 0a723f8594
4 changed files with 44 additions and 31 deletions

View file

@ -120,7 +120,7 @@ func NewPeer(id enode.ID, name string, caps []Cap) *Peer {
pipe, _ := net.Pipe() pipe, _ := net.Pipe()
node := enode.SignNull(new(enr.Record), id) node := enode.SignNull(new(enr.Record), id)
conn := &conn{fd: pipe, transport: nil, node: node, caps: caps, name: name} conn := &conn{fd: pipe, transport: nil, node: node, caps: caps, name: name}
peer := newPeer(conn, nil) peer := newPeer(log.Root(), conn, nil)
close(peer.closed) // ensures Disconnect doesn't block close(peer.closed) // ensures Disconnect doesn't block
return peer return peer
} }
@ -176,7 +176,7 @@ func (p *Peer) Inbound() bool {
return p.rw.is(inboundConn) return p.rw.is(inboundConn)
} }
func newPeer(conn *conn, protocols []Protocol) *Peer { func newPeer(log log.Logger, conn *conn, protocols []Protocol) *Peer {
protomap := matchProtocols(protocols, conn.caps, conn) protomap := matchProtocols(protocols, conn.caps, conn)
p := &Peer{ p := &Peer{
rw: conn, rw: conn,

View file

@ -24,6 +24,8 @@ import (
"reflect" "reflect"
"testing" "testing"
"time" "time"
"github.com/ethereum/go-ethereum/log"
) )
var discard = Protocol{ var discard = Protocol{
@ -52,7 +54,7 @@ func testPeer(protos []Protocol) (func(), *conn, *Peer, <-chan error) {
c2.caps = append(c2.caps, p.cap()) c2.caps = append(c2.caps, p.cap())
} }
peer := newPeer(c1, protos) peer := newPeer(log.Root(), c1, protos)
errc := make(chan error, 1) errc := make(chan error, 1)
go func() { go func() {
_, err := peer.run() _, err := peer.run()

View file

@ -416,7 +416,7 @@ func (srv *Server) Start() (err error) {
srv.running = true srv.running = true
srv.log = srv.Config.Logger srv.log = srv.Config.Logger
if srv.log == nil { if srv.log == nil {
srv.log = log.New() srv.log = log.Root()
} }
if srv.NoDial && srv.ListenAddr == "" { if srv.NoDial && srv.ListenAddr == "" {
srv.log.Warn("P2P server will be useless, neither dialing nor listening") srv.log.Warn("P2P server will be useless, neither dialing nor listening")
@ -542,6 +542,7 @@ func (srv *Server) setupDiscovery() error {
NetRestrict: srv.NetRestrict, NetRestrict: srv.NetRestrict,
Bootnodes: srv.BootstrapNodes, Bootnodes: srv.BootstrapNodes,
Unhandled: unhandled, Unhandled: unhandled,
Log: srv.log,
} }
ntab, err := discover.ListenUDP(conn, srv.localnode, cfg) ntab, err := discover.ListenUDP(conn, srv.localnode, cfg)
if err != nil { if err != nil {
@ -723,7 +724,7 @@ running:
err := srv.protoHandshakeChecks(peers, inboundCount, c) err := srv.protoHandshakeChecks(peers, inboundCount, c)
if err == nil { if err == nil {
// The handshakes are done and it passed all checks. // The handshakes are done and it passed all checks.
p := newPeer(c, srv.Protocols) p := newPeer(srv.log, c, srv.Protocols)
// If message events are enabled, pass the peerFeed // If message events are enabled, pass the peerFeed
// to the peer // to the peer
if srv.EnableMsgEvents { if srv.EnableMsgEvents {

View file

@ -26,6 +26,7 @@ import (
"time" "time"
"github.com/ethereum/go-ethereum/crypto" "github.com/ethereum/go-ethereum/crypto"
"github.com/ethereum/go-ethereum/internal/testlog"
"github.com/ethereum/go-ethereum/log" "github.com/ethereum/go-ethereum/log"
"github.com/ethereum/go-ethereum/p2p/enode" "github.com/ethereum/go-ethereum/p2p/enode"
"github.com/ethereum/go-ethereum/p2p/enr" "github.com/ethereum/go-ethereum/p2p/enr"
@ -74,6 +75,7 @@ func startTestServer(t *testing.T, remoteKey *ecdsa.PublicKey, pf func(*Peer)) *
MaxPeers: 10, MaxPeers: 10,
ListenAddr: "127.0.0.1:0", ListenAddr: "127.0.0.1:0",
PrivateKey: newkey(), PrivateKey: newkey(),
Logger: testlog.Logger(t, log.LvlTrace),
} }
server := &Server{ server := &Server{
Config: config, Config: config,
@ -359,6 +361,7 @@ func TestServerAtCap(t *testing.T) {
PrivateKey: newkey(), PrivateKey: newkey(),
MaxPeers: 10, MaxPeers: 10,
NoDial: true, NoDial: true,
NoDiscovery: true,
TrustedNodes: []*enode.Node{newNode(trustedID, nil)}, TrustedNodes: []*enode.Node{newNode(trustedID, nil)},
}, },
} }
@ -433,6 +436,7 @@ func TestServerPeerLimits(t *testing.T) {
PrivateKey: srvkey, PrivateKey: srvkey,
MaxPeers: 0, MaxPeers: 0,
NoDial: true, NoDial: true,
NoDiscovery: true,
Protocols: []Protocol{discard}, Protocols: []Protocol{discard},
}, },
newTransport: func(fd net.Conn) transport { return tp }, newTransport: func(fd net.Conn) transport { return tp },
@ -541,20 +545,25 @@ func TestServerSetupConn(t *testing.T) {
} }
for i, test := range tests { for i, test := range tests {
srv := &Server{ t.Run(test.wantCalls, func(t *testing.T) {
Config: Config{ cfg := Config{
PrivateKey: srvkey, PrivateKey: srvkey,
MaxPeers: 10, MaxPeers: 10,
NoDial: true, NoDial: true,
NoDiscovery: true,
Protocols: []Protocol{discard}, Protocols: []Protocol{discard},
}, Logger: testlog.Logger(t, log.LvlTrace),
}
srv := &Server{
Config: cfg,
newTransport: func(fd net.Conn) transport { return test.tt }, newTransport: func(fd net.Conn) transport { return test.tt },
log: log.New(), log: cfg.Logger,
} }
if !test.dontstart { if !test.dontstart {
if err := srv.Start(); err != nil { if err := srv.Start(); err != nil {
t.Fatalf("couldn't start server: %v", err) t.Fatalf("couldn't start server: %v", err)
} }
defer srv.Stop()
} }
p1, _ := net.Pipe() p1, _ := net.Pipe()
srv.SetupConn(p1, test.flags, test.dialDest) srv.SetupConn(p1, test.flags, test.dialDest)
@ -564,6 +573,7 @@ func TestServerSetupConn(t *testing.T) {
if test.tt.calls != test.wantCalls { if test.tt.calls != test.wantCalls {
t.Errorf("test %d: calls mismatch: got %q, want %q", i, test.tt.calls, test.wantCalls) t.Errorf("test %d: calls mismatch: got %q, want %q", i, test.tt.calls, test.wantCalls)
} }
})
} }
} }