aboutsummaryrefslogtreecommitdiffstats
path: root/core/compaction-chain_test.go
diff options
context:
space:
mode:
authorJimmy Hu <jimmy.hu@dexon.org>2018-10-08 15:30:53 +0800
committerGitHub <noreply@github.com>2018-10-08 15:30:53 +0800
commit97abfdabfd41b44f3273a869eca75cea34b0fdc8 (patch)
treec5e2939bc6a363bc179a762f1079973219fa65b7 /core/compaction-chain_test.go
parent02f8296bf9ec5069ff26e39216c7e7af7c6e9567 (diff)
downloaddexon-consensus-97abfdabfd41b44f3273a869eca75cea34b0fdc8.tar
dexon-consensus-97abfdabfd41b44f3273a869eca75cea34b0fdc8.tar.gz
dexon-consensus-97abfdabfd41b44f3273a869eca75cea34b0fdc8.tar.bz2
dexon-consensus-97abfdabfd41b44f3273a869eca75cea34b0fdc8.tar.lz
dexon-consensus-97abfdabfd41b44f3273a869eca75cea34b0fdc8.tar.xz
dexon-consensus-97abfdabfd41b44f3273a869eca75cea34b0fdc8.tar.zst
dexon-consensus-97abfdabfd41b44f3273a869eca75cea34b0fdc8.zip
core: Add block randomness in compaction-chain module (#179)
Diffstat (limited to 'core/compaction-chain_test.go')
-rw-r--r--core/compaction-chain_test.go87
1 files changed, 79 insertions, 8 deletions
diff --git a/core/compaction-chain_test.go b/core/compaction-chain_test.go
index 6f62aa2..5ceb5c2 100644
--- a/core/compaction-chain_test.go
+++ b/core/compaction-chain_test.go
@@ -22,24 +22,19 @@ import (
"time"
"github.com/dexon-foundation/dexon-consensus-core/common"
- "github.com/dexon-foundation/dexon-consensus-core/core/blockdb"
"github.com/dexon-foundation/dexon-consensus-core/core/types"
"github.com/stretchr/testify/suite"
)
type CompactionChainTestSuite struct {
suite.Suite
- db blockdb.BlockDatabase
}
func (s *CompactionChainTestSuite) SetupTest() {
- var err error
- s.db, err = blockdb.NewMemBackedBlockDB()
- s.Require().Nil(err)
}
func (s *CompactionChainTestSuite) newCompactionChain() *compactionChain {
- return newCompactionChain(s.db)
+ return newCompactionChain()
}
func (s *CompactionChainTestSuite) generateBlocks(
@@ -74,12 +69,88 @@ func (s *CompactionChainTestSuite) TestProcessBlock() {
var prevBlock *types.Block
for _, block := range blocks {
s.Equal(cc.prevBlock, prevBlock)
- err := cc.processBlock(block)
- s.Require().Nil(err)
+ s.Require().NoError(cc.processBlock(block))
prevBlock = block
}
}
+func (s *CompactionChainTestSuite) TestExtractBlocks() {
+ cc := s.newCompactionChain()
+ blocks := make([]*types.Block, 10)
+ for idx := range blocks {
+ blocks[idx] = &types.Block{
+ Hash: common.NewRandomHash(),
+ }
+ s.Require().False(cc.blockRegistered(blocks[idx].Hash))
+ cc.registerBlock(blocks[idx])
+ s.Require().True(cc.blockRegistered(blocks[idx].Hash))
+ }
+ // Randomness is ready for extract.
+ for i := 0; i < 3; i++ {
+ s.Require().NoError(cc.processBlock(blocks[i]))
+ h := common.NewRandomHash()
+ s.Require().NoError(cc.processBlockRandomnessResult(
+ &types.BlockRandomnessResult{
+ BlockHash: blocks[i].Hash,
+ Randomness: h[:],
+ }))
+ }
+ delivered := cc.extractBlocks()
+ s.Require().Len(delivered, 3)
+
+ // Randomness is not yet ready for extract.
+ for i := 3; i < 6; i++ {
+ s.Require().NoError(cc.processBlock(blocks[i]))
+ }
+ delivered = append(delivered, cc.extractBlocks()...)
+ s.Require().Len(delivered, 3)
+
+ // Make some randomness ready.
+ for i := 3; i < 6; i++ {
+ h := common.NewRandomHash()
+ s.Require().NoError(cc.processBlockRandomnessResult(
+ &types.BlockRandomnessResult{
+ BlockHash: blocks[i].Hash,
+ Randomness: h[:],
+ }))
+ }
+ delivered = append(delivered, cc.extractBlocks()...)
+ s.Require().Len(delivered, 6)
+
+ // Later block's randomness is ready.
+ for i := 6; i < 10; i++ {
+ s.Require().NoError(cc.processBlock(blocks[i]))
+ if i < 8 {
+ continue
+ }
+ h := common.NewRandomHash()
+ s.Require().NoError(cc.processBlockRandomnessResult(
+ &types.BlockRandomnessResult{
+ BlockHash: blocks[i].Hash,
+ Randomness: h[:],
+ }))
+ }
+ delivered = append(delivered, cc.extractBlocks()...)
+ s.Require().Len(delivered, 6)
+
+ // Prior block's randomness is ready.
+ for i := 6; i < 8; i++ {
+ h := common.NewRandomHash()
+ s.Require().NoError(cc.processBlockRandomnessResult(
+ &types.BlockRandomnessResult{
+ BlockHash: blocks[i].Hash,
+ Randomness: h[:],
+ }))
+ }
+ delivered = append(delivered, cc.extractBlocks()...)
+ s.Require().Len(delivered, 10)
+
+ // The delivered order should be the same as processing order.
+ for i, block := range delivered {
+ s.Equal(block.Hash, blocks[i].Hash)
+ }
+}
+
func TestCompactionChain(t *testing.T) {
suite.Run(t, new(CompactionChainTestSuite))
}