aboutsummaryrefslogtreecommitdiffstats
path: root/core/compaction-chain_test.go
diff options
context:
space:
mode:
authorJimmy Hu <jimmy.hu@dexon.org>2018-08-16 10:22:54 +0800
committerGitHub <noreply@github.com>2018-08-16 10:22:54 +0800
commit96fcee4688dacd812292376994a3500e2c78edeb (patch)
tree2e15153e47b9d75bce11e35d47ad265466856afa /core/compaction-chain_test.go
parentd3107b56cbef1f05baddb64880c3e97d7eda87a4 (diff)
downloaddexon-consensus-96fcee4688dacd812292376994a3500e2c78edeb.tar
dexon-consensus-96fcee4688dacd812292376994a3500e2c78edeb.tar.gz
dexon-consensus-96fcee4688dacd812292376994a3500e2c78edeb.tar.bz2
dexon-consensus-96fcee4688dacd812292376994a3500e2c78edeb.tar.lz
dexon-consensus-96fcee4688dacd812292376994a3500e2c78edeb.tar.xz
dexon-consensus-96fcee4688dacd812292376994a3500e2c78edeb.tar.zst
dexon-consensus-96fcee4688dacd812292376994a3500e2c78edeb.zip
core: Add compaction chain module. (#60)
Diffstat (limited to 'core/compaction-chain_test.go')
-rw-r--r--core/compaction-chain_test.go88
1 files changed, 88 insertions, 0 deletions
diff --git a/core/compaction-chain_test.go b/core/compaction-chain_test.go
new file mode 100644
index 0000000..402394d
--- /dev/null
+++ b/core/compaction-chain_test.go
@@ -0,0 +1,88 @@
+// Copyright 2018 The dexon-consensus-core Authors
+// This file is part of the dexon-consensus-core library.
+//
+// The dexon-consensus-core library is free software: you can redistribute it
+// and/or modify it under the terms of the GNU Lesser General Public License as
+// published by the Free Software Foundation, either version 3 of the License,
+// or (at your option) any later version.
+//
+// The dexon-consensus-core library is distributed in the hope that it will be
+// useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser
+// General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public License
+// along with the dexon-consensus-core library. If not, see
+// <http://www.gnu.org/licenses/>.
+
+package core
+
+import (
+ "testing"
+
+ "github.com/dexon-foundation/dexon-consensus-core/common"
+ "github.com/dexon-foundation/dexon-consensus-core/core/types"
+ "github.com/dexon-foundation/dexon-consensus-core/crypto/eth"
+ "github.com/stretchr/testify/suite"
+)
+
+type CompactionChainTestSuite struct {
+ suite.Suite
+}
+
+func (s *CompactionChainTestSuite) TestProcessBlock() {
+ cc := newCompactionChain()
+ blocks := make([]*types.Block, 10)
+ for idx := range blocks {
+ blocks[idx] = &types.Block{
+ Hash: common.NewRandomHash(),
+ }
+ }
+ var prevBlock *types.Block
+ for _, block := range blocks {
+ s.Equal(cc.prevBlock, prevBlock)
+ cc.processBlock(block)
+ if prevBlock != nil {
+ s.Equal(block.ConsensusInfo.Height, prevBlock.ConsensusInfo.Height+1)
+ prevHash, err := hashConsensusInfo(prevBlock)
+ s.Require().Nil(err)
+ s.Equal(prevHash, block.ConsensusInfoParentHash)
+ }
+ prevBlock = block
+ }
+}
+
+func (s *CompactionChainTestSuite) TestPrepareBlock() {
+ cc := newCompactionChain()
+ blocks := make([]*types.Block, 10)
+ for idx := range blocks {
+ blocks[idx] = &types.Block{
+ Hash: common.NewRandomHash(),
+ ConsensusInfo: types.ConsensusInfo{
+ Height: uint64(idx),
+ },
+ }
+ if idx > 0 {
+ var err error
+ blocks[idx].ConsensusInfoParentHash, err = hashConsensusInfo(blocks[idx-1])
+ s.Require().Nil(err)
+ }
+ }
+ prv, err := eth.NewPrivateKey()
+ s.Require().Nil(err)
+ for _, block := range blocks {
+ cc.prepareBlock(block, prv)
+ if cc.prevBlock != nil {
+ s.True(verifyConsensusInfoSignature(
+ prv.PublicKey(),
+ cc.prevBlock,
+ block.CompactionChainAck.ConsensusInfoSignature))
+ s.Equal(block.CompactionChainAck.AckingBlockHash, cc.prevBlock.Hash)
+ }
+ cc.prevBlock = block
+ }
+}
+
+func TestCompactionChain(t *testing.T) {
+ suite.Run(t, new(CompactionChainTestSuite))
+}