diff options
author | Mission Liao <mission.liao@dexon.org> | 2019-03-22 20:20:52 +0800 |
---|---|---|
committer | Jimmy Hu <jimmy.hu@dexon.org> | 2019-03-22 20:20:52 +0800 |
commit | 0f2dd4260fd98b2be06b7f9b0197134c89f11d3c (patch) | |
tree | 49203e7f865fc823c0a51d88da27c3ff05656357 /core/configuration-chain_test.go | |
parent | 99723721b79e7f1cf5d1009d9117705d84df5eaa (diff) | |
download | tangerine-consensus-0f2dd4260fd98b2be06b7f9b0197134c89f11d3c.tar tangerine-consensus-0f2dd4260fd98b2be06b7f9b0197134c89f11d3c.tar.gz tangerine-consensus-0f2dd4260fd98b2be06b7f9b0197134c89f11d3c.tar.bz2 tangerine-consensus-0f2dd4260fd98b2be06b7f9b0197134c89f11d3c.tar.lz tangerine-consensus-0f2dd4260fd98b2be06b7f9b0197134c89f11d3c.tar.xz tangerine-consensus-0f2dd4260fd98b2be06b7f9b0197134c89f11d3c.tar.zst tangerine-consensus-0f2dd4260fd98b2be06b7f9b0197134c89f11d3c.zip |
core: abort hang DKG (#508)
* Capitalize log
* Fix DKG aborting hangs
Make sure reset cc.dkg to nil in runDKG
* Remember to purge tsig verfier too
* Replace abortCh with context.Context
* Fix obvious bug
* Fixup: forever blockin at Wait method when runDKG is not called
* Fixup: fix corner case
If the Add(1) moved to runDKG under cc.dkgLock,
we may not catch it after unlocking cc.dkgLock.
* fixup
Diffstat (limited to 'core/configuration-chain_test.go')
-rw-r--r-- | core/configuration-chain_test.go | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/core/configuration-chain_test.go b/core/configuration-chain_test.go index 4de0c68..0efafd2 100644 --- a/core/configuration-chain_test.go +++ b/core/configuration-chain_test.go @@ -19,6 +19,7 @@ package core import ( "bytes" + "context" "errors" "sync" "testing" @@ -217,7 +218,7 @@ func (s *ConfigurationChainTestSuite) runDKG( } for _, cc := range cfgChains { - cc.registerDKG(round, reset, k) + cc.registerDKG(context.Background(), round, reset, k) } for _, gov := range recv.govs { @@ -347,10 +348,10 @@ func (s *ConfigurationChainTestSuite) TestDKGMasterPublicKeyDelayAdd() { if nID == delayNode { continue } - cc.registerDKG(round, reset, k) + cc.registerDKG(context.Background(), round, reset, k) } time.Sleep(lambdaDKG) - cfgChains[delayNode].registerDKG(round, reset, k) + cfgChains[delayNode].registerDKG(context.Background(), round, reset, k) for _, gov := range recv.govs { s.Require().Len(gov.DKGMasterPublicKeys(round), n-1) @@ -410,7 +411,7 @@ func (s *ConfigurationChainTestSuite) TestDKGComplaintDelayAdd() { } for _, cc := range cfgChains { - cc.registerDKG(round, reset, k) + cc.registerDKG(context.Background(), round, reset, k) } for _, gov := range recv.govs { @@ -617,25 +618,30 @@ func (s *ConfigurationChainTestSuite) TestDKGAbort() { recv.nodes[nID] = cc recv.govs[nID] = gov // The first register should not be blocked. - cc.registerDKG(round, reset, k) + cc.registerDKG(context.Background(), round, reset, k) // We should be blocked because DKGReady is not enough. errs := make(chan error, 1) + called := make(chan struct{}, 1) go func() { + called <- struct{}{} errs <- cc.runDKG(round, reset) }() // The second register shouldn't be blocked, too. randHash := common.NewRandomHash() gov.ResetDKG(randHash[:]) - cc.registerDKG(round, reset+1, k) + <-called + cc.registerDKG(context.Background(), round, reset+1, k) err = <-errs s.Require().EqualError(ErrDKGAborted, err.Error()) go func() { + called <- struct{}{} errs <- cc.runDKG(round, reset+1) }() // The third register shouldn't be blocked, too randHash = common.NewRandomHash() gov.ProposeCRS(round+1, randHash[:]) - cc.registerDKG(round+1, reset, k) + <-called + cc.registerDKG(context.Background(), round+1, reset, k) err = <-errs s.Require().EqualError(ErrDKGAborted, err.Error()) } |