X-Git-Url: http://git.osdn.net/view?p=bytom%2Fvapor.git;a=blobdiff_plain;f=database%2Fcache_test.go;h=b88ad3a343667d5f83309b0b8c59fe698b784a8c;hp=198d4cdc10a3cc70a220b71066f58e59d7431d23;hb=489e57ce3c46eb9e8ca25c7e966a1ea26fe41d57;hpb=3232d09732a648a1d0148cb0ecebf72d348f8ff6 diff --git a/database/cache_test.go b/database/cache_test.go index 198d4cdc..b88ad3a3 100644 --- a/database/cache_test.go +++ b/database/cache_test.go @@ -16,23 +16,31 @@ func TestBlockCache(t *testing.T) { }, } } - newVoteResult := func(seq uint64) *state.VoteResult { - return &state.VoteResult{ + + newConsensusResult := func(seq uint64) *state.ConsensusResult { + return &state.ConsensusResult{ Seq: seq, } } + blocks := make(map[bc.Hash]*types.Block) + blockHashes := make(map[uint64]*bc.Hash) + blockIndexHashes := make(map[uint64][]*bc.Hash) for i := 0; i < maxCachedBlockHeaders+10; i++ { block := newBlock(uint64(i)) - blocks[block.Hash()] = block + hash := block.Hash() + blocks[hash] = block + blockHashes[block.Height] = &hash + blockIndexHashes[block.Height] = append(blockIndexHashes[block.Height], &hash) } - voteResults := make(map[uint64]*state.VoteResult) - for i := 0; i < maxCachedVoteResults+10; i++ { - voteResult := newVoteResult(uint64(i)) - voteResults[voteResult.Seq] = voteResult + + consensusResults := make(map[uint64]*state.ConsensusResult) + for i := 0; i < maxCachedConsensusResults+10; i++ { + consensusResult := newConsensusResult(uint64(i)) + consensusResults[consensusResult.Seq] = consensusResult } - fillBlockHeaderFn := func(hash *bc.Hash, height uint64) (*types.BlockHeader, error) { + fillBlockHeaderFn := func(hash *bc.Hash) (*types.BlockHeader, error) { return &blocks[*hash].BlockHeader, nil } @@ -40,49 +48,116 @@ func TestBlockCache(t *testing.T) { return blocks[*hash].Transactions, nil } - fillVoteResultFn := func(seq uint64) (*state.VoteResult, error) { - return voteResults[seq], nil + fillBlockHashesFn := func(height uint64) ([]*bc.Hash, error) { + return blockIndexHashes[height], nil + } + + fillMainChainHashFn := func(height uint64) (*bc.Hash, error) { + return blockHashes[height], nil } - cache := newCache(fillBlockHeaderFn, fillBlockTxsFn, fillVoteResultFn) + fillConsensusResultFn := func(seq uint64) (*state.ConsensusResult, error) { + return consensusResults[seq], nil + } + cache := newCache(fillBlockHeaderFn, fillBlockTxsFn, fillBlockHashesFn, fillMainChainHashFn, fillConsensusResultFn) for i := 0; i < maxCachedBlockHeaders+10; i++ { block := newBlock(uint64(i)) hash := block.Hash() - cache.lookupBlockHeader(&hash, block.Height) + cache.lookupBlockHeader(&hash) } for i := 0; i < 10; i++ { block := newBlock(uint64(i)) hash := block.Hash() - if b, _ := cache.getBlockHeader(&hash); b != nil { - t.Fatalf("find old block") + if _, ok := cache.lruBlockHeaders.Get(hash); ok { + t.Fatalf("find old block header") } } for i := 10; i < maxCachedBlockHeaders+10; i++ { block := newBlock(uint64(i)) hash := block.Hash() - if b, _ := cache.getBlockHeader(&hash); b == nil { - t.Fatalf("can't find new block") + if _, ok := cache.lruBlockHeaders.Get(hash); !ok { + t.Fatalf("can't find new block header") + } + } + + for i := 0; i < maxCachedBlockTransactions+10; i++ { + block := newBlock(uint64(i)) + hash := block.Hash() + cache.lookupBlockTxs(&hash) + } + + for i := 0; i < 10; i++ { + block := newBlock(uint64(i)) + hash := block.Hash() + if _, ok := cache.lruBlockTxs.Get(hash); ok { + t.Fatalf("find old block transactions") + } + } + + for i := 10; i < maxCachedBlockTransactions+10; i++ { + block := newBlock(uint64(i)) + hash := block.Hash() + if _, ok := cache.lruBlockTxs.Get(hash); !ok { + t.Fatalf("can't find new block transactions") + } + } + + for i := 0; i < maxCachedBlockHashes+10; i++ { + block := newBlock(uint64(i)) + cache.lookupBlockHashesByHeight(block.Height) + } + + for i := 0; i < 10; i++ { + block := newBlock(uint64(i)) + if _, ok := cache.lruBlockHashes.Get(block.Height); ok { + t.Fatalf("find old block Hashes for specified height") + } + } + + for i := 10; i < maxCachedBlockHashes+10; i++ { + block := newBlock(uint64(i)) + if _, ok := cache.lruBlockHashes.Get(block.Height); !ok { + t.Fatalf("can't find new block Hashes for specified height") + } + } + + for i := 0; i < maxCachedMainChainHashes+10; i++ { + block := newBlock(uint64(i)) + cache.lookupMainChainHash(block.Height) + } + + for i := 0; i < 10; i++ { + block := newBlock(uint64(i)) + if _, ok := cache.lruMainChainHashes.Get(block.Height); ok { + t.Fatalf("find old main chain block Hash for specified height") + } + } + + for i := 10; i < maxCachedMainChainHashes+10; i++ { + block := newBlock(uint64(i)) + if _, ok := cache.lruMainChainHashes.Get(block.Height); !ok { + t.Fatalf("can't find new main chain block Hash for specified height") } } - for i := 0; i < maxCachedVoteResults+10; i++ { - voteResult := newVoteResult(uint64(i)) - cache.lookupVoteResult(voteResult.Seq) + for i := 0; i < maxCachedConsensusResults+10; i++ { + consensusResult := newConsensusResult(uint64(i)) + cache.lookupConsensusResult(consensusResult.Seq) } for i := 0; i < 10; i++ { - voteResult := newVoteResult(uint64(i)) - if v, _ := cache.getVoteResult(voteResult.Seq); v != nil { + consensusResult := newConsensusResult(uint64(i)) + if _, ok := cache.lruConsensusResults.Get(consensusResult.Seq); ok { t.Fatalf("find old vote result") } } - for i := 10; i < maxCachedVoteResults+10; i++ { - voteResult := newVoteResult(uint64(i)) - if v, _ := cache.getVoteResult(voteResult.Seq); v == nil { + for i := 10; i < maxCachedConsensusResults+10; i++ { + consensusResult := newConsensusResult(uint64(i)) + if _, ok := cache.lruConsensusResults.Get(consensusResult.Seq); !ok { t.Fatalf("can't find new vote result") } }