github.com/Bytom/bytom@v1.1.2-0.20210127130405-ae40204c0b09/database/cache_test.go (about) 1 package database 2 3 import ( 4 "testing" 5 6 "github.com/bytom/bytom/protocol/bc" 7 "github.com/bytom/bytom/protocol/bc/types" 8 ) 9 10 func TestBlockCache(t *testing.T) { 11 newBlock := func(h uint64) *types.Block { 12 return &types.Block{ 13 BlockHeader: types.BlockHeader{ 14 Height: h, 15 }, 16 } 17 } 18 blocks := make(map[bc.Hash]*types.Block) 19 for i := 0; i < maxCachedBlocks + 10; i++ { 20 block := newBlock(uint64(i)) 21 blocks[block.Hash()] = block 22 } 23 24 cache := newBlockCache(func(hash *bc.Hash) (*types.Block, error) { 25 return blocks[*hash], nil 26 }) 27 28 for i := 0; i < maxCachedBlocks + 10; i++ { 29 block := newBlock(uint64(i)) 30 hash := block.Hash() 31 cache.lookup(&hash) 32 } 33 34 for i := 0; i < 10; i++ { 35 block := newBlock(uint64(i)) 36 hash := block.Hash() 37 if b, _ := cache.get(&hash); b != nil { 38 t.Fatalf("find old block") 39 } 40 } 41 42 for i := 10; i < maxCachedBlocks + 10; i++ { 43 block := newBlock(uint64(i)) 44 hash := block.Hash() 45 if b, _ := cache.get(&hash); b == nil { 46 t.Fatalf("can't find new block") 47 } 48 } 49 }