OSDN Git Service

netsync add test case (#365)
[bytom/vapor.git] / netsync / chainmgr / tool_test.go
index db17b4f..4a3badd 100644 (file)
@@ -4,9 +4,11 @@ import (
        "errors"
        "math/rand"
        "net"
+       "time"
 
-       wire "github.com/tendermint/go-wire"
+       "github.com/tendermint/go-wire"
        "github.com/tendermint/tmlibs/flowrate"
+       dbm "github.com/vapor/database/leveldb"
 
        "github.com/vapor/consensus"
        "github.com/vapor/netsync/peers"
@@ -48,6 +50,10 @@ func (p *P2PPeer) IsLAN() bool {
        return false
 }
 
+func (p *P2PPeer) RemoteAddrHost() string {
+       return ""
+}
+
 func (p *P2PPeer) ServiceFlag() consensus.ServiceFlag {
        return p.flag
 }
@@ -79,6 +85,7 @@ func (p *P2PPeer) setAsync(b bool) {
 func (p *P2PPeer) postMan() {
        for msgBytes := range p.msgCh {
                msgType, msg, _ := decodeMessage(msgBytes)
+               time.Sleep(10 * time.Millisecond)
                p.remoteNode.processMsg(p.srcPeer, msgType, msg)
        }
 }
@@ -89,7 +96,7 @@ func NewPeerSet() *PeerSet {
        return &PeerSet{}
 }
 
-func (ps *PeerSet) IsBanned(peerID string, level byte, reason string) bool {
+func (ps *PeerSet) IsBanned(ip string, level byte, reason string) bool {
        return false
 }
 
@@ -123,7 +130,8 @@ func (nw *NetWork) HandsShake(nodeA, nodeB *Manager) (*P2PPeer, *P2PPeer, error)
 
        nodeA.AddPeer(&A2B)
        nodeB.AddPeer(&B2A)
-
+       nodeA.SendStatus(B2A.srcPeer)
+       nodeB.SendStatus(A2B.srcPeer)
        A2B.setAsync(true)
        B2A.setAsync(true)
        return &B2A, &A2B, nil
@@ -153,7 +161,34 @@ func mockBlocks(startBlock *types.Block, height uint64) []*types.Block {
        return blocks
 }
 
-func mockSync(blocks []*types.Block, mempool *mock.Mempool) *Manager {
+func mockErrorBlocks(startBlock *types.Block, height uint64, errBlockHeight uint64) []*types.Block {
+       blocks := []*types.Block{}
+       indexBlock := &types.Block{}
+       if startBlock == nil {
+               indexBlock = &types.Block{BlockHeader: types.BlockHeader{Version: uint64(rand.Uint32())}}
+               blocks = append(blocks, indexBlock)
+       } else {
+               indexBlock = startBlock
+       }
+
+       for indexBlock.Height < height {
+               block := &types.Block{
+                       BlockHeader: types.BlockHeader{
+                               Height:            indexBlock.Height + 1,
+                               PreviousBlockHash: indexBlock.Hash(),
+                               Version:           uint64(rand.Uint32()),
+                       },
+               }
+               if block.Height == errBlockHeight {
+                       block.TransactionsMerkleRoot = bc.NewHash([32]byte{0x1})
+               }
+               blocks = append(blocks, block)
+               indexBlock = block
+       }
+       return blocks
+}
+
+func mockSync(blocks []*types.Block, mempool *mock.Mempool, fastSyncDB dbm.DB) *Manager {
        chain := mock.NewChain(mempool)
        peers := peers.NewPeerSet(NewPeerSet())
        chain.SetBestBlockHeader(&blocks[len(blocks)-1].BlockHeader)
@@ -163,7 +198,7 @@ func mockSync(blocks []*types.Block, mempool *mock.Mempool) *Manager {
 
        return &Manager{
                chain:       chain,
-               blockKeeper: newBlockKeeper(chain, peers),
+               blockKeeper: newBlockKeeper(chain, peers, fastSyncDB),
                peers:       peers,
                mempool:     mempool,
                txSyncCh:    make(chan *txSyncMsg),