aboutsummaryrefslogtreecommitdiffstats
path: root/core/test/state_test.go
diff options
context:
space:
mode:
authorMission Liao <mission.liao@dexon.org>2018-10-26 13:26:18 +0800
committerGitHub <noreply@github.com>2018-10-26 13:26:18 +0800
commitef9575062f5ec6a36b30efb5064c0e3a442075fe (patch)
tree703c21ed27bed375ed1584a5114ec6b28c4965f0 /core/test/state_test.go
parent721d36f2720b0cbf648cbffe40fd05c9a60061e4 (diff)
downloaddexon-consensus-ef9575062f5ec6a36b30efb5064c0e3a442075fe.tar
dexon-consensus-ef9575062f5ec6a36b30efb5064c0e3a442075fe.tar.gz
dexon-consensus-ef9575062f5ec6a36b30efb5064c0e3a442075fe.tar.bz2
dexon-consensus-ef9575062f5ec6a36b30efb5064c0e3a442075fe.tar.lz
dexon-consensus-ef9575062f5ec6a36b30efb5064c0e3a442075fe.tar.xz
dexon-consensus-ef9575062f5ec6a36b30efb5064c0e3a442075fe.tar.zst
dexon-consensus-ef9575062f5ec6a36b30efb5064c0e3a442075fe.zip
test: clone types.Config, test.Governance, test.State (#262)
Diffstat (limited to 'core/test/state_test.go')
-rw-r--r--core/test/state_test.go104
1 files changed, 93 insertions, 11 deletions
diff --git a/core/test/state_test.go b/core/test/state_test.go
index ebb5a25..59b8f63 100644
--- a/core/test/state_test.go
+++ b/core/test/state_test.go
@@ -82,15 +82,6 @@ func (s *StateTestSuite) newDKGFinal(round uint64) *typesDKG.Finalize {
}
}
-func (s *StateTestSuite) genNodes(count int) (nodes []crypto.PublicKey) {
- for i := 0; i < count; i++ {
- prv, err := ecdsa.NewPrivateKey()
- s.Require().NoError(err)
- nodes = append(nodes, prv.PublicKey())
- }
- return
-}
-
func (s *StateTestSuite) compareNodes(node1, node2 []crypto.PublicKey) bool {
id1 := common.Hashes{}
for _, n := range node1 {
@@ -162,13 +153,103 @@ func (s *StateTestSuite) checkConfigChanges(config *types.Config) {
req.Equal(config.DKGSetSize, uint32(6))
}
+func (s *StateTestSuite) TestEqual() {
+ var (
+ req = s.Require()
+ lambda = 250 * time.Millisecond
+ )
+ _, genesisNodes, err := NewKeys(20)
+ req.NoError(err)
+ st := NewState(genesisNodes, lambda, true)
+ req.NoError(st.Equal(st))
+ // One node is missing.
+ st1 := NewState(genesisNodes, lambda, true)
+ for nID := range st1.nodes {
+ delete(st1.nodes, nID)
+ break
+ }
+ req.Equal(st.Equal(st1), ErrStateNodeSetNotEqual)
+ // Make some changes.
+ st2 := st.Clone()
+ req.NoError(st.Equal(st2))
+ s.makeConfigChanges(st)
+ req.Equal(st.Equal(st2), ErrStateConfigNotEqual)
+ crs := common.NewRandomHash()
+ req.NoError(st.ProposeCRS(1, crs))
+ masterPubKey := s.newDKGMasterPublicKey(2)
+ comp := s.newDKGComplaint(2)
+ final := s.newDKGFinal(2)
+ s.makeDKGChanges(st, masterPubKey, comp, final)
+ // Remove dkg complaints from cloned one to check if equal.
+ st3 := st.Clone()
+ req.NoError(st.Equal(st3))
+ delete(st3.dkgComplaints, uint64(2))
+ req.Equal(st.Equal(st3), ErrStateDKGComplaintsNotEqual)
+ // Remove dkg master public key from cloned one to check if equal.
+ st4 := st.Clone()
+ req.NoError(st.Equal(st4))
+ delete(st4.dkgMasterPublicKeys, uint64(2))
+ req.Equal(st.Equal(st4), ErrStateDKGMasterPublicKeysNotEqual)
+ // Remove dkg finalize from cloned one to check if equal.
+ st5 := st.Clone()
+ req.NoError(st.Equal(st5))
+ delete(st5.dkgFinals, uint64(2))
+ req.Equal(st.Equal(st5), ErrStateDKGFinalsNotEqual)
+}
+
+func (s *StateTestSuite) TestPendingChangesEqual() {
+ var (
+ req = s.Require()
+ lambda = 250 * time.Millisecond
+ )
+ // Setup a non-local mode State instance.
+ _, genesisNodes, err := NewKeys(20)
+ req.NoError(err)
+ st := NewState(genesisNodes, lambda, false)
+ req.NoError(st.Equal(st))
+ // Apply some changes.
+ s.makeConfigChanges(st)
+ crs := common.NewRandomHash()
+ req.NoError(st.ProposeCRS(1, crs))
+ masterPubKey := s.newDKGMasterPublicKey(2)
+ comp := s.newDKGComplaint(2)
+ final := s.newDKGFinal(2)
+ s.makeDKGChanges(st, masterPubKey, comp, final)
+ // Remove pending config changes.
+ st1 := st.Clone()
+ req.NoError(st.Equal(st1))
+ st1.pendingChangedConfigs = make(map[StateChangeType]interface{})
+ req.Equal(st.Equal(st1), ErrStatePendingChangesNotEqual)
+ // Remove pending crs changes.
+ st2 := st.Clone()
+ req.NoError(st.Equal(st2))
+ st2.pendingCRS = []*crsAdditionRequest{}
+ req.Equal(st.Equal(st2), ErrStatePendingChangesNotEqual)
+ // Remove pending dkg complaints changes.
+ st3 := st.Clone()
+ req.NoError(st.Equal(st3))
+ st3.pendingDKGComplaints = []*typesDKG.Complaint{}
+ req.Equal(st.Equal(st3), ErrStatePendingChangesNotEqual)
+ // Remove pending dkg master public key changes.
+ st4 := st.Clone()
+ req.NoError(st.Equal(st4))
+ st4.pendingDKGMasterPublicKeys = []*typesDKG.MasterPublicKey{}
+ req.Equal(st.Equal(st4), ErrStatePendingChangesNotEqual)
+ // Remove pending dkg finalize changes.
+ st5 := st.Clone()
+ req.NoError(st.Equal(st5))
+ st5.pendingDKGFinals = []*typesDKG.Finalize{}
+ req.Equal(st.Equal(st5), ErrStatePendingChangesNotEqual)
+}
+
func (s *StateTestSuite) TestLocalMode() {
// Test State with local mode.
var (
req = s.Require()
lambda = 250 * time.Millisecond
)
- genesisNodes := s.genNodes(20)
+ _, genesisNodes, err := NewKeys(20)
+ req.NoError(err)
st := NewState(genesisNodes, lambda, true)
config1, nodes1 := st.Snapshot()
req.True(s.compareNodes(genesisNodes, nodes1))
@@ -228,7 +309,8 @@ func (s *StateTestSuite) TestPacking() {
lambda = 250 * time.Millisecond
)
// Make config changes.
- genesisNodes := s.genNodes(20)
+ _, genesisNodes, err := NewKeys(20)
+ req.NoError(err)
st := NewState(genesisNodes, lambda, false)
s.makeConfigChanges(st)
// Add new CRS.