|
|
|
@ -19,6 +19,7 @@ package ethtest |
|
|
|
|
import ( |
|
|
|
|
"fmt" |
|
|
|
|
"net" |
|
|
|
|
"strings" |
|
|
|
|
"time" |
|
|
|
|
|
|
|
|
|
"github.com/davecgh/go-spew/spew" |
|
|
|
@ -84,6 +85,8 @@ func (s *Suite) AllEthTests() []utesting.Test { |
|
|
|
|
{Name: "Broadcast_66", Fn: s.TestBroadcast_66}, |
|
|
|
|
{Name: "TestLargeAnnounce", Fn: s.TestLargeAnnounce}, |
|
|
|
|
{Name: "TestLargeAnnounce_66", Fn: s.TestLargeAnnounce_66}, |
|
|
|
|
{Name: "TestOldAnnounce", Fn: s.TestOldAnnounce}, |
|
|
|
|
{Name: "TestOldAnnounce_66", Fn: s.TestOldAnnounce_66}, |
|
|
|
|
// malicious handshakes + status
|
|
|
|
|
{Name: "TestMaliciousHandshake", Fn: s.TestMaliciousHandshake}, |
|
|
|
|
{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) { |
|
|
|
|
// Announce the block.
|
|
|
|
|
if err := sendConn.Write(blockAnnouncement); err != nil { |
|
|
|
|