|
@@ -19,7 +19,9 @@ package ethtest
|
|
|
import (
|
|
import (
|
|
|
"fmt"
|
|
"fmt"
|
|
|
"net"
|
|
"net"
|
|
|
|
|
+ "time"
|
|
|
|
|
|
|
|
|
|
+ "github.com/davecgh/go-spew/spew"
|
|
|
"github.com/ethereum/go-ethereum/crypto"
|
|
"github.com/ethereum/go-ethereum/crypto"
|
|
|
"github.com/ethereum/go-ethereum/internal/utesting"
|
|
"github.com/ethereum/go-ethereum/internal/utesting"
|
|
|
"github.com/ethereum/go-ethereum/p2p/enode"
|
|
"github.com/ethereum/go-ethereum/p2p/enode"
|
|
@@ -27,6 +29,13 @@ import (
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/assert"
|
|
|
)
|
|
)
|
|
|
|
|
|
|
|
|
|
+var pretty = spew.ConfigState{
|
|
|
|
|
+ Indent: " ",
|
|
|
|
|
+ DisableCapacities: true,
|
|
|
|
|
+ DisablePointerAddresses: true,
|
|
|
|
|
+ SortKeys: true,
|
|
|
|
|
+}
|
|
|
|
|
+
|
|
|
// Suite represents a structure used to test the eth
|
|
// Suite represents a structure used to test the eth
|
|
|
// protocol of a node(s).
|
|
// protocol of a node(s).
|
|
|
type Suite struct {
|
|
type Suite struct {
|
|
@@ -73,9 +82,9 @@ func (s *Suite) TestStatus(t *utesting.T) {
|
|
|
// get status
|
|
// get status
|
|
|
switch msg := conn.statusExchange(t, s.chain).(type) {
|
|
switch msg := conn.statusExchange(t, s.chain).(type) {
|
|
|
case *Status:
|
|
case *Status:
|
|
|
- t.Logf("%+v\n", msg)
|
|
|
|
|
|
|
+ t.Logf("got status message: %s", pretty.Sdump(msg))
|
|
|
default:
|
|
default:
|
|
|
- t.Fatalf("unexpected: %#v", msg)
|
|
|
|
|
|
|
+ t.Fatalf("unexpected: %s", pretty.Sdump(msg))
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -104,16 +113,17 @@ func (s *Suite) TestGetBlockHeaders(t *utesting.T) {
|
|
|
t.Fatalf("could not write to connection: %v", err)
|
|
t.Fatalf("could not write to connection: %v", err)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- switch msg := conn.ReadAndServe(s.chain).(type) {
|
|
|
|
|
|
|
+ timeout := 20 * time.Second
|
|
|
|
|
+ switch msg := conn.ReadAndServe(s.chain, timeout).(type) {
|
|
|
case *BlockHeaders:
|
|
case *BlockHeaders:
|
|
|
headers := msg
|
|
headers := msg
|
|
|
for _, header := range *headers {
|
|
for _, header := range *headers {
|
|
|
num := header.Number.Uint64()
|
|
num := header.Number.Uint64()
|
|
|
|
|
+ t.Logf("received header (%d): %s", num, pretty.Sdump(header))
|
|
|
assert.Equal(t, s.chain.blocks[int(num)].Header(), header)
|
|
assert.Equal(t, s.chain.blocks[int(num)].Header(), header)
|
|
|
- t.Logf("\nHEADER FOR BLOCK NUMBER %d: %+v\n", header.Number, header)
|
|
|
|
|
}
|
|
}
|
|
|
default:
|
|
default:
|
|
|
- t.Fatalf("unexpected: %#v", msg)
|
|
|
|
|
|
|
+ t.Fatalf("unexpected: %s", pretty.Sdump(msg))
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -133,14 +143,12 @@ func (s *Suite) TestGetBlockBodies(t *utesting.T) {
|
|
|
t.Fatalf("could not write to connection: %v", err)
|
|
t.Fatalf("could not write to connection: %v", err)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- switch msg := conn.ReadAndServe(s.chain).(type) {
|
|
|
|
|
|
|
+ timeout := 20 * time.Second
|
|
|
|
|
+ switch msg := conn.ReadAndServe(s.chain, timeout).(type) {
|
|
|
case *BlockBodies:
|
|
case *BlockBodies:
|
|
|
- bodies := msg
|
|
|
|
|
- for _, body := range *bodies {
|
|
|
|
|
- t.Logf("\nBODY: %+v\n", body)
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ t.Logf("received %d block bodies", len(*msg))
|
|
|
default:
|
|
default:
|
|
|
- t.Fatalf("unexpected: %#v", msg)
|
|
|
|
|
|
|
+ t.Fatalf("unexpected: %s", pretty.Sdump(msg))
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -173,18 +181,27 @@ func (s *Suite) TestBroadcast(t *utesting.T) {
|
|
|
t.Fatalf("could not write to connection: %v", err)
|
|
t.Fatalf("could not write to connection: %v", err)
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- switch msg := receiveConn.ReadAndServe(s.chain).(type) {
|
|
|
|
|
|
|
+ timeout := 20 * time.Second
|
|
|
|
|
+ switch msg := receiveConn.ReadAndServe(s.chain, timeout).(type) {
|
|
|
case *NewBlock:
|
|
case *NewBlock:
|
|
|
- assert.Equal(t, blockAnnouncement.Block.Header(), msg.Block.Header(),
|
|
|
|
|
- "wrong block header in announcement")
|
|
|
|
|
- assert.Equal(t, blockAnnouncement.TD, msg.TD,
|
|
|
|
|
- "wrong TD in announcement")
|
|
|
|
|
|
|
+ t.Logf("received NewBlock message: %s", pretty.Sdump(msg.Block))
|
|
|
|
|
+ assert.Equal(t,
|
|
|
|
|
+ blockAnnouncement.Block.Header(), msg.Block.Header(),
|
|
|
|
|
+ "wrong block header in announcement",
|
|
|
|
|
+ )
|
|
|
|
|
+ assert.Equal(t,
|
|
|
|
|
+ blockAnnouncement.TD, msg.TD,
|
|
|
|
|
+ "wrong TD in announcement",
|
|
|
|
|
+ )
|
|
|
case *NewBlockHashes:
|
|
case *NewBlockHashes:
|
|
|
hashes := *msg
|
|
hashes := *msg
|
|
|
- assert.Equal(t, blockAnnouncement.Block.Hash(), hashes[0].Hash,
|
|
|
|
|
- "wrong block hash in announcement")
|
|
|
|
|
|
|
+ t.Logf("received NewBlockHashes message: %s", pretty.Sdump(hashes))
|
|
|
|
|
+ assert.Equal(t,
|
|
|
|
|
+ blockAnnouncement.Block.Hash(), hashes[0].Hash,
|
|
|
|
|
+ "wrong block hash in announcement",
|
|
|
|
|
+ )
|
|
|
default:
|
|
default:
|
|
|
- t.Fatalf("unexpected: %#v", msg)
|
|
|
|
|
|
|
+ t.Fatalf("unexpected: %s", pretty.Sdump(msg))
|
|
|
}
|
|
}
|
|
|
// update test suite chain
|
|
// update test suite chain
|
|
|
s.chain.blocks = append(s.chain.blocks, s.fullChain.blocks[1000])
|
|
s.chain.blocks = append(s.chain.blocks, s.fullChain.blocks[1000])
|