cmd/devp2p: add old block announcement test to eth test suite ()

Add old block announcement test to eth test suite, checks to make sure old block announcement isn't propagated
This commit is contained in:
rene 2021-03-20 18:50:44 +00:00 committed by GitHub
parent 5bf6612a2e
commit 36b51b8156
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 37 additions and 0 deletions
cmd/devp2p/internal/ethtest

@ -215,6 +215,10 @@ func (s *Suite) TestLargeAnnounce_66(t *utesting.T) {
} }
} }
func (s *Suite) TestOldAnnounce_66(t *utesting.T) {
s.oldAnnounce(t, s.setupConnection66(t), s.setupConnection66(t))
}
// TestMaliciousHandshake_66 tries to send malicious data during the handshake. // TestMaliciousHandshake_66 tries to send malicious data during the handshake.
func (s *Suite) TestMaliciousHandshake_66(t *utesting.T) { func (s *Suite) TestMaliciousHandshake_66(t *utesting.T) {
conn := s.dial66(t) conn := s.dial66(t)

@ -19,6 +19,7 @@ package ethtest
import ( import (
"fmt" "fmt"
"net" "net"
"strings"
"time" "time"
"github.com/davecgh/go-spew/spew" "github.com/davecgh/go-spew/spew"
@ -84,6 +85,8 @@ func (s *Suite) AllEthTests() []utesting.Test {
{Name: "Broadcast_66", Fn: s.TestBroadcast_66}, {Name: "Broadcast_66", Fn: s.TestBroadcast_66},
{Name: "TestLargeAnnounce", Fn: s.TestLargeAnnounce}, {Name: "TestLargeAnnounce", Fn: s.TestLargeAnnounce},
{Name: "TestLargeAnnounce_66", Fn: s.TestLargeAnnounce_66}, {Name: "TestLargeAnnounce_66", Fn: s.TestLargeAnnounce_66},
{Name: "TestOldAnnounce", Fn: s.TestOldAnnounce},
{Name: "TestOldAnnounce_66", Fn: s.TestOldAnnounce_66},
// malicious handshakes + status // malicious handshakes + status
{Name: "TestMaliciousHandshake", Fn: s.TestMaliciousHandshake}, {Name: "TestMaliciousHandshake", Fn: s.TestMaliciousHandshake},
{Name: "TestMaliciousStatus", Fn: s.TestMaliciousStatus}, {Name: "TestMaliciousStatus", Fn: s.TestMaliciousStatus},
@ -389,6 +392,36 @@ func (s *Suite) TestLargeAnnounce(t *utesting.T) {
} }
} }
func (s *Suite) TestOldAnnounce(t *utesting.T) {
s.oldAnnounce(t, s.setupConnection(t), s.setupConnection(t))
}
func (s *Suite) oldAnnounce(t *utesting.T, sendConn, receiveConn *Conn) {
oldBlockAnnounce := &NewBlock{
Block: s.chain.blocks[len(s.chain.blocks)/2],
TD: s.chain.blocks[len(s.chain.blocks)/2].Difficulty(),
}
if err := sendConn.Write(oldBlockAnnounce); err != nil {
t.Fatalf("could not write to connection: %v", err)
}
switch msg := receiveConn.ReadAndServe(s.chain, timeout*2).(type) {
case *NewBlock:
t.Fatalf("unexpected: block propagated: %s", pretty.Sdump(msg))
case *NewBlockHashes:
t.Fatalf("unexpected: block announced: %s", pretty.Sdump(msg))
case *Error:
errMsg := *msg
// check to make sure error is timeout (propagation didn't come through == test successful)
if !strings.Contains(errMsg.String(), "timeout") {
t.Fatalf("unexpected error: %v", pretty.Sdump(msg))
}
default:
t.Fatalf("unexpected: %s", pretty.Sdump(msg))
}
}
func (s *Suite) testAnnounce(t *utesting.T, sendConn, receiveConn *Conn, blockAnnouncement *NewBlock) { func (s *Suite) testAnnounce(t *utesting.T, sendConn, receiveConn *Conn, blockAnnouncement *NewBlock) {
// Announce the block. // Announce the block.
if err := sendConn.Write(blockAnnouncement); err != nil { if err := sendConn.Write(blockAnnouncement); err != nil {