diff options
author | Haoping Ku <haoping.ku@dexon.org> | 2018-10-22 18:22:05 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-10-22 18:22:05 +0800 |
commit | 3f8770e5f3338802f7f9839e3ecbcc701e67ed31 (patch) | |
tree | cb00a34f0003d40925ab7afa710ee24e6deed802 /core/total-ordering_test.go | |
parent | 6615245b8098daf39be250698e9ff90e0a72936b (diff) | |
download | dexon-consensus-3f8770e5f3338802f7f9839e3ecbcc701e67ed31.tar.gz dexon-consensus-3f8770e5f3338802f7f9839e3ecbcc701e67ed31.tar.zst dexon-consensus-3f8770e5f3338802f7f9839e3ecbcc701e67ed31.zip |
core: total-ordering: add test TestRunFromNonGenesis (#226)
* core: total-ordering: add test TestRunFromNonGenesis
Diffstat (limited to 'core/total-ordering_test.go')
-rw-r--r-- | core/total-ordering_test.go | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/core/total-ordering_test.go b/core/total-ordering_test.go index 94fc619..315326e 100644 --- a/core/total-ordering_test.go +++ b/core/total-ordering_test.go @@ -1202,6 +1202,85 @@ func (s *TotalOrderingTestSuite) TestRoundChanged() { s.baseTestForRoundChange(repeat, configs) } +func (s *TotalOrderingTestSuite) TestRunFromNonGenesis() { + var ( + req = s.Require() + numChains = uint32(19) + genesisTime = time.Now().UTC() + ) + gen := test.NewBlocksGenerator(&test.BlocksGeneratorConfig{ + NumChains: numChains, + MinBlockTimeInterval: 0, + MaxBlockTimeInterval: 500 * time.Millisecond, + }, nil, hashBlock) + db, err := blockdb.NewMemBackedBlockDB() + req.NoError(err) + err = gen.Generate(0, genesisTime, genesisTime.Add(20*time.Second), db) + req.NoError(err) + iter, err := db.GetAll() + req.NoError(err) + + revealer, err := test.NewRandomDAGRevealer(iter) + req.NoError(err) + + genesisConfig := &totalOrderingConfig{ + roundBasedConfig: roundBasedConfig{ + roundInterval: 1000 * time.Second, + }, + k: 0, + phi: uint64(numChains * 2 / 3), + numChains: numChains, + } + genesisConfig.setRoundBeginTime(genesisTime) + to1 := newTotalOrdering(genesisConfig) + s.Require().NoError(to1.appendConfig(1, &types.Config{ + K: 0, + PhiRatio: 0.5, + NumChains: numChains, + })) + deliveredBlocks1 := [][]*types.Block{} + for { + b, err := revealer.Next() + if err != nil { + if err == blockdb.ErrIterationFinished { + err = nil + break + } + } + s.Require().NoError(err) + bs, _, err := to1.processBlock(&b) + s.Require().Nil(err) + if len(bs) > 0 { + deliveredBlocks1 = append(deliveredBlocks1, bs) + } + } + // Run new total ordering again. + offset := len(deliveredBlocks1) / 2 + to2 := newTotalOrdering(genesisConfig) + s.Require().NoError(to2.appendConfig(1, &types.Config{ + K: 0, + PhiRatio: 0.5, + NumChains: numChains, + })) + deliveredBlocks2 := [][]*types.Block{} + for i := offset; i < len(deliveredBlocks1); i++ { + for _, b := range deliveredBlocks1[i] { + bs, _, err := to2.processBlock(b) + req.NoError(err) + if len(bs) > 0 { + deliveredBlocks2 = append(deliveredBlocks2, bs) + } + } + } + // Check deliver1 and deliver2. + for i := 0; i < len(deliveredBlocks2); i++ { + req.Equal(len(deliveredBlocks1[offset+i]), len(deliveredBlocks2[i])) + for j := 0; j < len(deliveredBlocks2[i]); j++ { + req.Equal(deliveredBlocks1[offset+i][j], deliveredBlocks2[i][j]) + } + } +} + func TestTotalOrdering(t *testing.T) { suite.Run(t, new(TotalOrderingTestSuite)) } |