Skip to content

Commit

Permalink
done system tests
Browse files Browse the repository at this point in the history
  • Loading branch information
akhilkumarpilli committed Oct 22, 2024
1 parent f79489e commit 228fb8c
Show file tree
Hide file tree
Showing 2 changed files with 113 additions and 17 deletions.
128 changes: 112 additions & 16 deletions tests/systemtests/circuit_test.go
Original file line number Diff line number Diff line change
@@ -1,15 +1,21 @@
//go:build system_test

package systemtests

import (
"encoding/json"
"fmt"
"strings"
"testing"
"time"

"github.com/stretchr/testify/require"
"github.com/tidwall/gjson"
)

func TestCircuitCmds(t *testing.T) {
var someMsgs = []string{"/cosmos.bank.v1beta1.MsgSend", "/cosmos.bank.v1beta1.MsgMultiSend"}

func TestCircuitCommands(t *testing.T) {
// scenario: test circuit commands
// given a running chain

Expand Down Expand Up @@ -41,9 +47,6 @@ func TestCircuitCmds(t *testing.T) {
someMsgsAcc := cli.AddKey("someMsgsAcc")
require.NotEmpty(t, someMsgsAcc)

accountAddr := cli.AddKey("account")
require.NotEmpty(t, accountAddr)

// fund tokens to new created addresses
var amount int64 = 100000
denom := "stake"
Expand All @@ -55,10 +58,6 @@ func TestCircuitCmds(t *testing.T) {
RequireTxSuccess(t, rsp)
require.Equal(t, amount, cli.QueryBalance(someMsgsAcc, denom))

rsp = cli.FundAddress(accountAddr, fmt.Sprintf("%d%s", amount, denom))
RequireTxSuccess(t, rsp)
require.Equal(t, amount, cli.QueryBalance(accountAddr, denom))

// query gov module account address
rsp = cli.CustomQuery("q", "auth", "module-account", "gov")
govModAddr := gjson.Get(rsp, "account.value.address")
Expand Down Expand Up @@ -101,46 +100,143 @@ func TestCircuitCmds(t *testing.T) {
name string
address string
level int
limtTypeURLS string
limtTypeURLS []string
expPermission string
}{
{
"set new super admin",
superAdmin2,
3,
"",
[]string{},
"LEVEL_SUPER_ADMIN",
},
{
"set all msgs level to address",
allMsgsAcc,
2,
"",
[]string{},
"LEVEL_ALL_MSGS",
},
{
"set some msgs level to address",
someMsgsAcc,
1,
"/cosmos.bank.v1beta1.MsgSend, /cosmos.bank.v1beta1.MsgMultiSend",
someMsgs,
"LEVEL_SOME_MSGS",
},
}

for _, tc := range authorizeTestCases {
t.Run(tc.name, func(t *testing.T) {
permissionJSON := fmt.Sprintf(`{"level":%d,"limit_type_urls":[]}`, tc.level)
if tc.limtTypeURLS != "" {
permissionJSON = fmt.Sprintf(`{"level":%d,"limit_type_urls":["%s"]}`, tc.level, tc.limtTypeURLS)
if len(tc.limtTypeURLS) != 0 {
permissionJSON = fmt.Sprintf(`{"level":%d,"limit_type_urls":["%s"]}`, tc.level, strings.Join(tc.limtTypeURLS[:], `","`))
}
rsp = cli.RunAndWait("tx", "circuit", "authorize", tc.address, permissionJSON, "--from="+superAdmin)
RequireTxSuccess(t, rsp)

// query account permissions
rsp = cli.CustomQuery("q", "circuit", "account", tc.address)
require.Equal(t, tc.expPermission, gjson.Get(rsp, "permission.level").String())
if tc.limtTypeURLS != "" {
require.Equal(t, tc.limtTypeURLS, gjson.Get(rsp, "permission.limit_type_urls.0").String())
if len(tc.limtTypeURLS) != 0 {
listStr := gjson.Get(rsp, "permission.limit_type_urls").String()

// convert string to array
var msgsList []string
require.NoError(t, json.Unmarshal([]byte(listStr), &msgsList))

require.EqualValues(t, tc.limtTypeURLS, msgsList)
}
})
}

// test disable tx command
testCircuitTxCommand(t, cli, "disable", superAdmin, superAdmin2, allMsgsAcc, someMsgsAcc)

// test reset tx command
testCircuitTxCommand(t, cli, "reset", superAdmin, superAdmin2, allMsgsAcc, someMsgsAcc)
}

func testCircuitTxCommand(t *testing.T, cli *CLIWrapper, txType, superAdmin, superAdmin2, allMsgsAcc, someMsgsAcc string) {
t.Helper()

disableTestCases := []struct {
name string
fromAddr string
disableMsgs []string
executeTxs [][]string
}{
{
txType + " msgs with super admin",
superAdmin,
[]string{"/cosmos.gov.v1.MsgVote"},
[][]string{
{
"tx", "gov", "vote", "3", "yes", "--from=" + superAdmin,
},
},
},
{
txType + " msgs with all msgs level address",
allMsgsAcc,
[]string{"/cosmos.gov.v1.MsgDeposit"},
[][]string{
{
"tx", "gov", "deposit", "3", "1000stake", "--from=" + allMsgsAcc,
},
},
},
{
txType + " msgs with some msgs level address",
someMsgsAcc,
someMsgs,
[][]string{
{
"tx", "bank", "send", superAdmin, someMsgsAcc, "10000stake",
},
{
"tx", "bank", "multi-send", superAdmin, someMsgsAcc, superAdmin2, "10000stake", "--from=" + superAdmin,
},
},
},
}

for _, tc := range disableTestCases {
t.Run(tc.name, func(t *testing.T) {
cmd := []string{"tx", "circuit", txType, "--from=" + tc.fromAddr}
cmd = append(cmd, tc.disableMsgs...)
rsp := cli.RunAndWait(cmd...)
RequireTxSuccess(t, rsp)

// execute given type transaction
rsp = cli.CustomQuery("q", "circuit", "disabled-list")
var list []string
if rsp != "{}" {
listStr := gjson.Get(rsp, "disabled_list").String()

// convert string to array
require.NoError(t, json.Unmarshal([]byte(listStr), &list))
}
for _, msg := range tc.disableMsgs {
if txType == "disable" {
require.Contains(t, list, msg)
} else {
require.NotContains(t, list, msg)
}
}

// test given msg transaction to confirm
for _, tx := range tc.executeTxs {
tx = append(tx, "--fees=2stake")
rsp = cli.RunCommandWithArgs(cli.withTXFlags(tx...)...)
if txType == "disable" {
RequireTxFailure(t, rsp)
require.Contains(t, gjson.Get(rsp, "raw_log").String(), "tx type not allowed")
} else {
RequireTxSuccess(t, rsp)
}
// wait for sometime to avoid sequence error
time.Sleep(time.Second * 2)
}
})
}
Expand Down
2 changes: 1 addition & 1 deletion x/circuit/autocli.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ func (am AppModule) AutoCLIOptions() *autocliv1.ModuleOptions {
"SOME_MSGS" = 1,
"ALL_MSGS" = 2,
"SUPER_ADMIN" = 3,`,
Example: fmt.Sprintf(`%s tx circuit authorize [address] '{"level":1,"limit_type_urls":["/cosmos.bank.v1beta1.MsgSend, /cosmos.bank.v1beta1.MsgMultiSend"]}'"`, version.AppName),
Example: fmt.Sprintf(`%s tx circuit authorize [address] '{"level":1,"limit_type_urls":["/cosmos.bank.v1beta1.MsgSend", "/cosmos.bank.v1beta1.MsgMultiSend"]}'"`, version.AppName),
PositionalArgs: []*autocliv1.PositionalArgDescriptor{
{ProtoField: "grantee"},
{ProtoField: "permissions"}, // TODO(@julienrbrt) Support flattening msg for setting each field as a positional arg
Expand Down

0 comments on commit 228fb8c

Please sign in to comment.