|
@@ -301,6 +301,15 @@ func testGetBlockHeaders(t *testing.T, protocol int) {
|
|
|
pm.blockchain.GetBlockByNumber(1).Hash(),
|
|
pm.blockchain.GetBlockByNumber(1).Hash(),
|
|
|
},
|
|
},
|
|
|
},
|
|
},
|
|
|
|
|
+ // Check a corner case where requesting more can iterate past the endpoints
|
|
|
|
|
+ {
|
|
|
|
|
+ &getBlockHeadersData{Origin: hashOrNumber{Number: 2}, Amount: 5, Reverse: true},
|
|
|
|
|
+ []common.Hash{
|
|
|
|
|
+ pm.blockchain.GetBlockByNumber(2).Hash(),
|
|
|
|
|
+ pm.blockchain.GetBlockByNumber(1).Hash(),
|
|
|
|
|
+ pm.blockchain.GetBlockByNumber(0).Hash(),
|
|
|
|
|
+ },
|
|
|
|
|
+ },
|
|
|
// Check that non existing headers aren't returned
|
|
// Check that non existing headers aren't returned
|
|
|
{
|
|
{
|
|
|
&getBlockHeadersData{Origin: hashOrNumber{Hash: unknown}, Amount: 1},
|
|
&getBlockHeadersData{Origin: hashOrNumber{Hash: unknown}, Amount: 1},
|
|
@@ -322,6 +331,17 @@ func testGetBlockHeaders(t *testing.T, protocol int) {
|
|
|
if err := p2p.ExpectMsg(peer.app, 0x04, headers); err != nil {
|
|
if err := p2p.ExpectMsg(peer.app, 0x04, headers); err != nil {
|
|
|
t.Errorf("test %d: headers mismatch: %v", i, err)
|
|
t.Errorf("test %d: headers mismatch: %v", i, err)
|
|
|
}
|
|
}
|
|
|
|
|
+ // If the test used number origins, repeat with hashes as the too
|
|
|
|
|
+ if tt.query.Origin.Hash == (common.Hash{}) {
|
|
|
|
|
+ if origin := pm.blockchain.GetBlockByNumber(tt.query.Origin.Number); origin != nil {
|
|
|
|
|
+ tt.query.Origin.Hash, tt.query.Origin.Number = origin.Hash(), 0
|
|
|
|
|
+
|
|
|
|
|
+ p2p.Send(peer.app, 0x03, tt.query)
|
|
|
|
|
+ if err := p2p.ExpectMsg(peer.app, 0x04, headers); err != nil {
|
|
|
|
|
+ t.Errorf("test %d: headers mismatch: %v", i, err)
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|