Commit e7a77cac authored by mdj33's avatar mdj33 Committed by vipwzw

add UT

parent 374d622a
......@@ -450,87 +450,10 @@ func (a *action) checkConfig(title string) error {
return pt.ErrInvalidTitle
}
forkHeight := types.GetDappFork(pt.ParaX, pt.ForkCommitTx)
if types.IsPara() {
forkHeight = types.Conf("config.consensus.sub.para").GInt("MainForkParacrossCommitTx")
if forkHeight == -1 || forkHeight == 0 {
forkHeight = types.MaxHeight
}
}
if a.exec.GetMainHeight() < forkHeight {
return types.ErrNotSupport
}
return nil
}
//NodeConfig support super account node config
func (a *action) NodeConfig(config *pt.ParaNodeAddrConfig) (*types.Receipt, error) {
err := a.checkConfig(config.Title)
if err != nil {
return nil, err
}
if config.Op == pt.ParaNodeJoin {
if config.Addr != a.fromaddr {
return nil, types.ErrFromAddr
}
return a.nodeJoin(config)
} else if config.Op == pt.ParaNodeQuit {
if config.Addr != a.fromaddr {
return nil, types.ErrFromAddr
}
return a.nodeQuit(config)
} else if config.Op == pt.ParaNodeVote {
return a.nodeVote(config)
} else {
return nil, pt.ErrParaUnSupportNodeOper
}
}
//NodeConfig support super account node config
func (a *action) NodeGroupConfig(config *pt.ParaNodeGroupApply) (*types.Receipt, error) {
err := a.checkConfig(config.Title)
if err != nil {
return nil, err
}
if len(config.Addrs) == 0 {
return nil, types.ErrInvalidParam
}
if config.Op == pt.ParacrossNodeGroupApply {
if !strings.Contains(config.Addrs, a.fromaddr) {
clog.Error("node group apply fromaddr not one of apply addrs", "addr", a.fromaddr, "apply", config.Addrs)
return nil, types.ErrNotAllow
}
err := a.checkNodeGroupExist(config.Title)
if err != nil {
return nil, err
}
return a.nodeGroupApply(config)
} else if config.Op == pt.ParacrossNodeGroupApprove {
err := a.checkNodeGroupExist(config.Title)
if err != nil {
return nil, err
}
return a.nodeGroupApprove(config)
} else if config.Op == pt.ParacrossNodeGroupQuit {
if !strings.Contains(config.Addrs, a.fromaddr) {
clog.Error("node group apply fromaddr not one of apply addrs", "addr", a.fromaddr, "apply", config.Addrs)
return nil, types.ErrNotAllow
}
return a.nodeGroupQuit(config)
} else {
return nil, pt.ErrParaUnSupportNodeOper
}
}
func getAddrGroup(addr string) []string {
if strings.Contains(addr, ",") {
......@@ -799,3 +722,68 @@ func (a *action) nodeGroupCreate(title string, nodes []string, coinFrozen int64)
}
return receipt, nil
}
//NodeConfig support super account node config
func (a *action) NodeGroupConfig(config *pt.ParaNodeGroupApply) (*types.Receipt, error) {
if !validTitle(config.Title) {
return nil, pt.ErrInvalidTitle
}
if len(config.Addrs) == 0 {
return nil, types.ErrInvalidParam
}
if config.Op == pt.ParacrossNodeGroupApply {
if !strings.Contains(config.Addrs, a.fromaddr) {
clog.Error("node group apply fromaddr not one of apply addrs", "addr", a.fromaddr, "apply", config.Addrs)
return nil, types.ErrNotAllow
}
err := a.checkNodeGroupExist(config.Title)
if err != nil {
return nil, err
}
return a.nodeGroupApply(config)
} else if config.Op == pt.ParacrossNodeGroupApprove {
err := a.checkNodeGroupExist(config.Title)
if err != nil {
return nil, err
}
return a.nodeGroupApprove(config)
} else if config.Op == pt.ParacrossNodeGroupQuit {
if !strings.Contains(config.Addrs, a.fromaddr) {
clog.Error("node group apply fromaddr not one of apply addrs", "addr", a.fromaddr, "apply", config.Addrs)
return nil, types.ErrNotAllow
}
return a.nodeGroupQuit(config)
} else {
return nil, pt.ErrParaUnSupportNodeOper
}
}
//NodeConfig support super account node config
func (a *action) NodeConfig(config *pt.ParaNodeAddrConfig) (*types.Receipt, error) {
if !validTitle(config.Title) {
return nil, pt.ErrInvalidTitle
}
if config.Op == pt.ParaNodeJoin {
if config.Addr != a.fromaddr {
return nil, types.ErrFromAddr
}
return a.nodeJoin(config)
} else if config.Op == pt.ParaNodeQuit {
if config.Addr != a.fromaddr {
return nil, types.ErrFromAddr
}
return a.nodeQuit(config)
} else if config.Op == pt.ParaNodeVote {
return a.nodeVote(config)
} else {
return nil, pt.ErrParaUnSupportNodeOper
}
}
......@@ -23,8 +23,13 @@ var (
PrivKey14K = "CC38546E9E659D15E6B4893F0AB32A06D103931A8230B0BDE71459D2B27D6944" // 14KEKbYtKKQm4wMthSK9J4La4nAiidGozt
Account14K = "14KEKbYtKKQm4wMthSK9J4La4nAiidGozt"
Account1MC = "1MCftFynyvG2F4ED5mdHYgziDxx6vDrScs"
applyAddrs = "1KSBd17H7ZK8iT37aJztFB22XGwsPTdwE4, 1JRNjdEqp4LJ5fqycUBm9ayCKSeeskgMKR, 1NLHPEcbTWWxxU3dGUZBhayjrCHD3psX7k,1MCftFynyvG2F4ED5mdHYgziDxx6vDrScs"
Account12Q = "12qyocayNF7Lv6C9qW4avxs2E7U41fKSfv"
PrivKey12Q = "4257D8692EF7FE13C68B65D6A52F03933DB2FA5CE8FAF210B5B8B80C721CED01"
)
type NodeManageTestSuite struct {
suite.Suite
stateDB dbm.KV
......@@ -32,6 +37,7 @@ type NodeManageTestSuite struct {
api *apimock.QueueProtocolAPI
exec *Paracross
//title string
}
func (suite *NodeManageTestSuite) SetupSuite() {
......@@ -57,6 +63,7 @@ func (suite *NodeManageTestSuite) SetupSuite() {
//}
types.S("config.consensus.sub.para.MainForkParacrossCommitTx", int64(1))
types.S("config.exec.sub.manage.superManager",[]interface{}{Account12Q})
// TODO, more fields
// setup block
......@@ -65,16 +72,6 @@ func (suite *NodeManageTestSuite) SetupSuite() {
}
MainBlockHash10 = blockDetail.Block.Hash()
// setup title nodes : len = 4
nodeConfigKey := calcManageConfigNodesKey(Title)
nodeValue := makeNodeInfo(Title, Title, 4)
suite.stateDB.Set(nodeConfigKey, types.Encode(nodeValue))
value, err := suite.stateDB.Get(nodeConfigKey)
if err != nil {
suite.T().Error("get setup title failed", err)
return
}
assert.Equal(suite.T(), value, types.Encode(nodeValue))
}
......@@ -104,6 +101,37 @@ func nodeCommitImpl(suite suite.Suite, exec *Paracross, privkeyStr string, tx *t
return
}
func checkGroupApplyReceipt(suite *NodeManageTestSuite, receipt *types.Receipt) {
assert.Equal(suite.T(), receipt.Ty, int32(types.ExecOk))
assert.Len(suite.T(), receipt.KV, 1)
assert.Len(suite.T(), receipt.Logs, 1)
var stat pt.ParaNodeAddrStatus
err := types.Decode(receipt.KV[0].Value, &stat)
assert.Nil(suite.T(), err, "decode ParaNodeAddrStatus failed")
//suite.T().Log("titleHeight", titleHeight)
assert.Equal(suite.T(), int32(pt.TyLogParaNodeGroupApply), receipt.Logs[0].Ty)
assert.Equal(suite.T(), int32(pt.ParacrossNodeGroupApply), stat.Status)
}
func checkGroupApproveReceipt(suite *NodeManageTestSuite, receipt *types.Receipt) {
assert.Equal(suite.T(), receipt.Ty, int32(types.ExecOk))
assert.Len(suite.T(), receipt.KV, 6)
assert.Len(suite.T(), receipt.Logs, 6)
len := len(receipt.KV)
var stat pt.ParaNodeAddrStatus
err := types.Decode(receipt.KV[len-1].Value, &stat)
assert.Nil(suite.T(), err, "decode ParaNodeAddrStatus failed")
//suite.T().Log("titleHeight", titleHeight)
assert.Equal(suite.T(), int32(pt.TyLogParaNodeGroupApprove), receipt.Logs[len-1].Ty)
assert.Equal(suite.T(), int32(pt.ParacrossNodeGroupApprove), stat.Status)
}
func checkJoinReceipt(suite *NodeManageTestSuite, receipt *types.Receipt) {
assert.Equal(suite.T(), receipt.Ty, int32(types.ExecOk))
assert.Len(suite.T(), receipt.KV, 1)
......@@ -190,23 +218,37 @@ func voteTest(suite *NodeManageTestSuite, addr string, join bool) {
checkVoteDoneReceipt(suite, receipt, 3, join)
}
func (suite *NodeManageTestSuite) TestExec() {
//takeover
config := &pt.ParaNodeAddrConfig{
Op: pt.ParaNodeTakeover,
Addr: Account14K,
func (suite *NodeManageTestSuite) testNodeGroupConfig() {
//title := types.GetTitle()
config := &pt.ParaNodeGroupApply{
Addrs:applyAddrs,
Op: pt.ParacrossNodeGroupApply,
}
tx, err := pt.CreateRawNodeConfigTx(config)
tx, err := pt.CreateRawNodeGroupApplyTx(config)
suite.Nil(err)
receipt := nodeCommit(suite, PrivKeyB, tx)
checkGroupApplyReceipt(suite, receipt)
config = &pt.ParaNodeGroupApply{
Addrs:applyAddrs,
Op: pt.ParacrossNodeGroupApprove,
}
tx, err = pt.CreateRawNodeGroupApplyTx(config)
suite.Nil(err)
nodeCommit(suite, PrivKey14K, tx)
//checkJoinReceipt(suite, receipt)
receipt = nodeCommit(suite, PrivKey12Q, tx)
checkGroupApproveReceipt(suite, receipt)
}
func (suite *NodeManageTestSuite) testNodeConfig() {
//Join test
config = &pt.ParaNodeAddrConfig{
config := &pt.ParaNodeAddrConfig{
Op: pt.ParaNodeJoin,
Addr: Account14K,
}
tx, err = pt.CreateRawNodeConfigTx(config)
tx, err := pt.CreateRawNodeConfigTx(config)
suite.Nil(err)
receipt := nodeCommit(suite, PrivKey14K, tx)
......@@ -227,6 +269,11 @@ func (suite *NodeManageTestSuite) TestExec() {
//vote test
voteTest(suite, Account1MC, false)
}
func (s *NodeManageTestSuite) TestExec() {
s.testNodeGroupConfig()
s.testNodeConfig()
}
......@@ -238,3 +285,7 @@ func TestNodeManageSuite(t *testing.T) {
types.SetTitleOnlyForTest(tempTitle)
}
func (s *NodeManageTestSuite) TearDownSuite() {
}
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment