permission: declare constants for arbitrary values in unit tests

This commit is contained in:
Trung Nguyen 2019-08-27 09:01:59 -04:00
commit 0dffa2eb8d
No known key found for this signature in database
GPG Key ID: 4636434ED9505EB7
3 changed files with 25 additions and 39 deletions

View File

@ -652,9 +652,9 @@ func (q *QuorumControlsAPI) valNodeStatusChange(orgId, url string, op NodeUpdate
}
// validate the op and node status and check if the op can be performed
if (permAction == UpdateNodeStatus && ( op != SuspendNode && op != ActivateSuspendedNode && op != BlacklistNode )) ||
if (permAction == UpdateNodeStatus && (op != SuspendNode && op != ActivateSuspendedNode && op != BlacklistNode)) ||
(permAction == InitiateNodeRecovery && op != RecoverBlacklistedNode) ||
(permAction == ApproveNodeRecovery && op != ApproveBlacklistedNodeRecovery){
(permAction == ApproveNodeRecovery && op != ApproveBlacklistedNodeRecovery) {
return ErrOpNotAllowed, errors.New("invalid node status change operation")
}
@ -682,7 +682,7 @@ func (q *QuorumControlsAPI) validateRole(orgId, roleId string) bool {
return r != nil && r.Active
}
func (q *QuorumControlsAPI) valAccountStatusChange(orgId string, account common.Address, permAction PermAction, op AccountUpdateAction) (ExecStatus, error) {
func (q *QuorumControlsAPI) valAccountStatusChange(orgId string, account common.Address, permAction PermAction, op AccountUpdateAction) (ExecStatus, error) {
// validates if the enode is linked the passed organization
ac := types.AcctInfoMap.GetAccount(account)
@ -698,7 +698,7 @@ func (q *QuorumControlsAPI) valAccountStatusChange(orgId string, account common
return ErrOrgNotOwner, errors.New("account does not belong to the organization passed")
}
if (permAction == UpdateAccountStatus && (op != SuspendAccount && op != ActivateSuspendedAccount && op != BlacklistAccount)) ||
(permAction == InitiateAccountRecovery && op != RecoverBlacklistedAccount ) ||
(permAction == InitiateAccountRecovery && op != RecoverBlacklistedAccount) ||
(permAction == ApproveAccountRecovery && op != ApproveBlacklistedAccountRecovery) {
return ErrOpNotAllowed, errors.New("invalid account status change operation")
}
@ -707,7 +707,6 @@ func (q *QuorumControlsAPI) valAccountStatusChange(orgId string, account common
return ErrBlacklistedAccount, errors.New("blacklisted account. operation not allowed")
}
if (op == SuspendAccount && ac.Status != types.AcctActive) ||
(op == ActivateSuspendedAccount && ac.Status != types.AcctSuspended) ||
(op == BlacklistAccount && ac.Status == types.AcctRecoveryInitiated) ||
@ -1095,7 +1094,7 @@ func (q *QuorumControlsAPI) valRecoverAccount(args txArgs, pinterf *pbind.PermIn
opAction = ApproveBlacklistedAccountRecovery
}
if execStatus, err := q.valAccountStatusChange(args.orgId, args.acctId, action, opAction ); err != nil {
if execStatus, err := q.valAccountStatusChange(args.orgId, args.acctId, action, opAction); err != nil {
return execStatus
}
@ -1120,7 +1119,7 @@ func (q *QuorumControlsAPI) validateAccount(from common.Address) (accounts.Walle
}
func (q *QuorumControlsAPI) newPermInterfaceSession(w accounts.Wallet, txa ethapi.SendTxArgs) *pbind.PermInterfaceSession {
frmAcct, transactOpts, gasLimit, gasPrice, nonce := q.getTxParams(txa, w)
frmAcct, transactOpts, gasLimit, gasPrice := q.getTxParams(txa, w)
ps := &pbind.PermInterfaceSession{
Contract: q.permCtrl.permInterf,
CallOpts: bind.CallOpts{
@ -1131,14 +1130,13 @@ func (q *QuorumControlsAPI) newPermInterfaceSession(w accounts.Wallet, txa ethap
GasLimit: gasLimit,
GasPrice: gasPrice,
Signer: transactOpts.Signer,
Nonce: nonce,
},
}
return ps
}
// getTxParams extracts the transaction related parameters
func (q *QuorumControlsAPI) getTxParams(txa ethapi.SendTxArgs, w accounts.Wallet) (accounts.Account, *bind.TransactOpts, uint64, *big.Int, *big.Int) {
func (q *QuorumControlsAPI) getTxParams(txa ethapi.SendTxArgs, w accounts.Wallet) (accounts.Account, *bind.TransactOpts, uint64, *big.Int) {
frmAcct := accounts.Account{Address: txa.From}
transactOpts := bind.NewWalletTransactor(w, frmAcct)
gasLimit := defaultGasLimit
@ -1149,11 +1147,5 @@ func (q *QuorumControlsAPI) getTxParams(txa ethapi.SendTxArgs, w accounts.Wallet
if txa.Gas != nil {
gasLimit = uint64(*txa.Gas)
}
var nonce *big.Int
if txa.Nonce != nil {
nonce = new(big.Int).SetUint64(uint64(*txa.Nonce))
} else {
nonce = new(big.Int).SetUint64(q.permCtrl.eth.TxPool().Nonce(frmAcct.Address))
}
return frmAcct, transactOpts, gasLimit, gasPrice, nonce
return frmAcct, transactOpts, gasLimit, gasPrice
}

View File

@ -668,12 +668,10 @@ func (p *PermissionCtrl) populateInitPermissions() error {
// initialize the permissions model and populate initial values
func (p *PermissionCtrl) bootupNetwork(permInterfSession *pbind.PermInterfaceSession) error {
// permInterfSession.TransactOpts.Nonce = new(big.Int).SetUint64(p.eth.TxPool().State().GetNonce(permInterfSession.TransactOpts.From))
if _, err := permInterfSession.SetPolicy(p.permConfig.NwAdminOrg, p.permConfig.NwAdminRole, p.permConfig.OrgAdminRole); err != nil {
log.Error("bootupNetwork SetPolicy failed", "err", err)
return err
}
// permInterfSession.TransactOpts.Nonce = new(big.Int).SetUint64(p.eth.TxPool().State().GetNonce(permInterfSession.TransactOpts.From))
if _, err := permInterfSession.Init(&p.permConfig.SubOrgBreadth, &p.permConfig.SubOrgDepth); err != nil {
log.Error("bootupNetwork init failed", "err", err)
return err
@ -756,7 +754,6 @@ func (p *PermissionCtrl) populateNodesFromContract(auth *bind.TransactOpts) erro
if numberOfNodes, err := permNodeSession.GetNumberOfNodes(); err == nil {
iOrgNum := numberOfNodes.Uint64()
for k := uint64(0); k < iOrgNum; k++ {
permNodeSession.TransactOpts.Nonce = new(big.Int).SetUint64(p.eth.TxPool().Nonce(permNodeSession.TransactOpts.From))
if nodeStruct, err := permNodeSession.GetNodeDetailsFromIndex(big.NewInt(int64(k))); err == nil {
types.NodeInfoMap.UpsertNode(nodeStruct.OrgId, nodeStruct.EnodeId, types.NodeStatus(int(nodeStruct.NodeStatus.Int64())))
}
@ -793,14 +790,9 @@ func (p *PermissionCtrl) populateOrgsFromContract(auth *bind.TransactOpts) error
func (p *PermissionCtrl) populateStaticNodesToContract(permissionsSession *pbind.PermInterfaceSession) error {
nodes := p2p.ParsePermissionedNodes(p.dataDir)
for _, node := range nodes {
enodeID := node.EnodeID()
nonce := p.eth.TxPool().Nonce(permissionsSession.TransactOpts.From)
permissionsSession.TransactOpts.Nonce = new(big.Int).SetUint64(nonce)
_, err := permissionsSession.AddAdminNode(node.String())
if err != nil {
log.Warn("Failed to propose node", "err", err, "enode", enodeID)
log.Warn("Failed to propose node", "err", err, "enode", node.EnodeID())
return err
}
types.NodeInfoMap.UpsertNode(p.permConfig.NwAdminOrg, node.String(), 2)
@ -812,8 +804,6 @@ func (p *PermissionCtrl) populateStaticNodesToContract(permissionsSession *pbind
// set of accounts access to full access
func (p *PermissionCtrl) populateInitAccountAccess(permissionsSession *pbind.PermInterfaceSession) error {
for _, a := range p.permConfig.Accounts {
//nonce := p.eth.TxPool().Nonce(permissionsSession.TransactOpts.From)
//permissionsSession.TransactOpts.Nonce = new(big.Int).SetUint64(nonce)
_, er := permissionsSession.AddAdminAccount(a)
if er != nil {
log.Warn("Error adding permission initial account list", "err", er, "account", a)
@ -826,8 +816,6 @@ func (p *PermissionCtrl) populateInitAccountAccess(permissionsSession *pbind.Per
// updates network boot status to true
func (p *PermissionCtrl) updateNetworkStatus(permissionsSession *pbind.PermInterfaceSession) error {
//nonce := p.eth.TxPool().Nonce(permissionsSession.TransactOpts.From)
//permissionsSession.TransactOpts.Nonce = new(big.Int).SetUint64(nonce)
_, err := permissionsSession.UpdateNetworkBootStatus()
if err != nil {
log.Warn("Failed to udpate network boot status ", "err", err)

View File

@ -27,6 +27,12 @@ import (
pbind "github.com/ethereum/go-ethereum/permission/bind"
)
const (
arbitraryNetworkAdminOrg = "NETWORK_ADMIN"
arbitraryNetworkAdminRole = "NETWORK_ADMIN_ROLE"
arbitraryOrgAdminRole = "ORG_ADMIN_ROLE"
)
var (
testObject *PermissionCtrl
guardianKey *ecdsa.PrivateKey
@ -163,9 +169,9 @@ func TestPermissionCtrl_PopulateInitPermissions_whenNetworkIsInitialized(t *test
// assert cache
assert.Equal(t, 1, len(types.OrgInfoMap.GetOrgList()))
cachedOrg := types.OrgInfoMap.GetOrgList()[0]
assert.Equal(t, "NETWORK_ADMIN", cachedOrg.OrgId)
assert.Equal(t, "NETWORK_ADMIN", cachedOrg.FullOrgId)
assert.Equal(t, "NETWORK_ADMIN", cachedOrg.UltimateParent)
assert.Equal(t, arbitraryNetworkAdminOrg, cachedOrg.OrgId)
assert.Equal(t, arbitraryNetworkAdminOrg, cachedOrg.FullOrgId)
assert.Equal(t, arbitraryNetworkAdminOrg, cachedOrg.UltimateParent)
assert.Equal(t, "", cachedOrg.ParentOrgId)
assert.Equal(t, types.OrgApproved, cachedOrg.Status)
assert.Equal(t, 0, len(cachedOrg.SubOrgList))
@ -173,8 +179,8 @@ func TestPermissionCtrl_PopulateInitPermissions_whenNetworkIsInitialized(t *test
assert.Equal(t, 1, len(types.RoleInfoMap.GetRoleList()))
cachedRole := types.RoleInfoMap.GetRoleList()[0]
assert.Equal(t, "NETWORK_ADMIN", cachedRole.OrgId)
assert.Equal(t, "NETWORK_ADMIN_ROLE", cachedRole.RoleId)
assert.Equal(t, arbitraryNetworkAdminOrg, cachedRole.OrgId)
assert.Equal(t, arbitraryNetworkAdminRole, cachedRole.RoleId)
assert.True(t, cachedRole.Active)
assert.True(t, cachedRole.IsAdmin)
assert.True(t, cachedRole.IsVoter)
@ -184,8 +190,8 @@ func TestPermissionCtrl_PopulateInitPermissions_whenNetworkIsInitialized(t *test
assert.Equal(t, 1, len(types.AcctInfoMap.GetAcctList()))
cachedAccount := types.AcctInfoMap.GetAcctList()[0]
assert.Equal(t, "NETWORK_ADMIN", cachedAccount.OrgId)
assert.Equal(t, "NETWORK_ADMIN_ROLE", cachedAccount.RoleId)
assert.Equal(t, arbitraryNetworkAdminOrg, cachedAccount.OrgId)
assert.Equal(t, arbitraryNetworkAdminRole, cachedAccount.RoleId)
assert.Equal(t, types.AcctActive, cachedAccount.Status)
assert.True(t, cachedAccount.IsOrgAdmin)
assert.Equal(t, guardianAddress, cachedAccount.AcctId)
@ -201,9 +207,9 @@ func typicalPermissionCtrl(t *testing.T) *PermissionCtrl {
RoleAddress: roleManagerAddress,
VoterAddress: voterManagerAddress,
OrgAddress: orgManagerAddress,
NwAdminOrg: "NETWORK_ADMIN",
NwAdminRole: "NETWORK_ADMIN_ROLE",
OrgAdminRole: "ORG_ADMIN_ROLE",
NwAdminOrg: arbitraryNetworkAdminOrg,
NwAdminRole: arbitraryNetworkAdminRole,
OrgAdminRole: arbitraryOrgAdminRole,
Accounts: []common.Address{
guardianAddress,
},