207 lines
5.6 KiB
Go
207 lines
5.6 KiB
Go
package keeper_test
|
|
|
|
import (
|
|
"bytes"
|
|
"context"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"cosmossdk.io/core/address"
|
|
coretesting "cosmossdk.io/core/testing"
|
|
storetypes "cosmossdk.io/store/types"
|
|
"cosmossdk.io/x/circuit"
|
|
"cosmossdk.io/x/circuit/keeper"
|
|
"cosmossdk.io/x/circuit/types"
|
|
|
|
addresscodec "github.com/cosmos/cosmos-sdk/codec/address"
|
|
codectestutil "github.com/cosmos/cosmos-sdk/codec/testutil"
|
|
"github.com/cosmos/cosmos-sdk/runtime"
|
|
"github.com/cosmos/cosmos-sdk/testutil"
|
|
moduletestutil "github.com/cosmos/cosmos-sdk/types/module/testutil"
|
|
authtypes "github.com/cosmos/cosmos-sdk/x/auth/types"
|
|
)
|
|
|
|
var addresses = []string{
|
|
"cosmos1zglwfu6xjzvzagqcmvzewyzjp9xwqw5qwrr8n9",
|
|
"cosmos1p8s0p6gqc6c9gt77lgr2qqujz49huhu6a80smx",
|
|
"cosmos1qasf9ehx8m7cnat39ndc74rx3fg7z66u8lw0fd",
|
|
"cosmos1uxrdj5zfuudhypsmmjxnj4gpu432ycht06a05a",
|
|
"cosmos1wn7k8a7fwpmrwnm94ndj0germfnxnhl6hs8spj",
|
|
}
|
|
|
|
type fixture struct {
|
|
ctx context.Context
|
|
keeper keeper.Keeper
|
|
mockAddr []byte
|
|
mockPerms types.Permissions
|
|
mockMsgURL string
|
|
ac address.Codec
|
|
}
|
|
|
|
func initFixture(t *testing.T) *fixture {
|
|
t.Helper()
|
|
encCfg := moduletestutil.MakeTestEncodingConfig(codectestutil.CodecOptions{}, circuit.AppModule{})
|
|
ac := addresscodec.NewBech32Codec("cosmos")
|
|
mockStoreKey := storetypes.NewKVStoreKey("test")
|
|
|
|
env := runtime.NewEnvironment(runtime.NewKVStoreService(mockStoreKey), coretesting.NewNopLogger())
|
|
authority, err := ac.BytesToString(authtypes.NewModuleAddress(types.GovModuleName))
|
|
require.NoError(t, err)
|
|
k := keeper.NewKeeper(env, encCfg.Codec, authority, ac)
|
|
|
|
bz, err := ac.StringToBytes(authority)
|
|
require.NoError(t, err)
|
|
|
|
return &fixture{
|
|
ctx: testutil.DefaultContextWithDB(t, mockStoreKey, storetypes.NewTransientStoreKey("transient_test")).Ctx,
|
|
keeper: k,
|
|
mockAddr: bz,
|
|
mockPerms: types.Permissions{
|
|
Level: 3,
|
|
LimitTypeUrls: []string{"test"},
|
|
},
|
|
mockMsgURL: "mock_url",
|
|
ac: ac,
|
|
}
|
|
}
|
|
|
|
func TestGetAuthority(t *testing.T) {
|
|
t.Parallel()
|
|
f := initFixture(t)
|
|
authority := f.keeper.GetAuthority()
|
|
require.True(t, bytes.Equal(f.mockAddr, authority))
|
|
}
|
|
|
|
func TestGetAndSetPermissions(t *testing.T) {
|
|
t.Parallel()
|
|
f := initFixture(t)
|
|
// Set the permissions for the mock address.
|
|
|
|
err := f.keeper.Permissions.Set(f.ctx, f.mockAddr, f.mockPerms)
|
|
require.NoError(t, err)
|
|
|
|
// Retrieve the permissions for the mock address.
|
|
perms, err := f.keeper.Permissions.Get(f.ctx, f.mockAddr)
|
|
require.NoError(t, err)
|
|
|
|
//// Assert that the retrieved permissions match the expected value.
|
|
require.Equal(t, f.mockPerms, perms)
|
|
}
|
|
|
|
func TestIteratePermissions(t *testing.T) {
|
|
t.Parallel()
|
|
f := initFixture(t)
|
|
// Define a set of mock permissions
|
|
mockPerms := []types.Permissions{
|
|
{Level: types.Permissions_LEVEL_SOME_MSGS, LimitTypeUrls: []string{"url1", "url2"}},
|
|
{Level: types.Permissions_LEVEL_ALL_MSGS},
|
|
{Level: types.Permissions_LEVEL_NONE_UNSPECIFIED},
|
|
}
|
|
|
|
// Set the permissions for a set of mock addresses
|
|
mockAddrs := [][]byte{
|
|
[]byte("mock_address_1"),
|
|
[]byte("mock_address_2"),
|
|
[]byte("mock_address_3"),
|
|
}
|
|
for i, addr := range mockAddrs {
|
|
err := f.keeper.Permissions.Set(f.ctx, addr, mockPerms[i])
|
|
require.NoError(t, err)
|
|
}
|
|
|
|
// Define a variable to store the returned permissions
|
|
var returnedPerms []types.Permissions
|
|
|
|
// Iterate through the permissions and append them to the returnedPerms slice
|
|
err := f.keeper.Permissions.Walk(f.ctx, nil, func(address []byte, perms types.Permissions) (stop bool, err error) {
|
|
returnedPerms = append(returnedPerms, perms)
|
|
return false, nil
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
// Assert that the returned permissions match the set mock permissions
|
|
require.Equal(t, mockPerms, returnedPerms)
|
|
}
|
|
|
|
func TestIterateDisabledList(t *testing.T) {
|
|
t.Parallel()
|
|
f := initFixture(t)
|
|
|
|
mockMsgs := []string{
|
|
"mockUrl1",
|
|
"mockUrl2",
|
|
"mockUrl3",
|
|
}
|
|
|
|
for _, url := range mockMsgs {
|
|
require.NoError(t, f.keeper.DisableList.Set(f.ctx, url))
|
|
}
|
|
|
|
// Define a variable to store the returned disabled URLs
|
|
var returnedDisabled []string
|
|
|
|
err := f.keeper.DisableList.Walk(f.ctx, nil, func(msgUrl string) (bool, error) {
|
|
returnedDisabled = append(returnedDisabled, msgUrl)
|
|
return false, nil
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
// Assert that the returned disabled URLs match the set mock disabled URLs
|
|
require.Equal(t, mockMsgs[0], returnedDisabled[0])
|
|
require.Equal(t, mockMsgs[1], returnedDisabled[1])
|
|
require.Equal(t, mockMsgs[2], returnedDisabled[2])
|
|
|
|
// re-enable mockMsgs[0]
|
|
require.NoError(t, f.keeper.DisableList.Remove(f.ctx, mockMsgs[0]))
|
|
returnedDisabled = []string{}
|
|
|
|
err = f.keeper.DisableList.Walk(f.ctx, nil, func(msgUrl string) (bool, error) {
|
|
returnedDisabled = append(returnedDisabled, msgUrl)
|
|
return false, nil
|
|
})
|
|
require.NoError(t, err)
|
|
|
|
require.Len(t, returnedDisabled, 2)
|
|
require.Equal(t, mockMsgs[1], returnedDisabled[0])
|
|
require.Equal(t, mockMsgs[2], returnedDisabled[1])
|
|
}
|
|
|
|
func TestIsAllowed(t *testing.T) {
|
|
t.Parallel()
|
|
f := initFixture(t)
|
|
|
|
testCases := []struct {
|
|
name string
|
|
msgURL string
|
|
setDisabled bool
|
|
expected bool
|
|
}{
|
|
{
|
|
name: "allowed message",
|
|
msgURL: "test_allowed",
|
|
setDisabled: false,
|
|
expected: true,
|
|
},
|
|
{
|
|
name: "disabled message",
|
|
msgURL: "test_disabled",
|
|
setDisabled: true,
|
|
expected: false,
|
|
},
|
|
}
|
|
|
|
for _, tc := range testCases {
|
|
t.Run(tc.name, func(t *testing.T) {
|
|
if tc.setDisabled {
|
|
err := f.keeper.DisableList.Set(f.ctx, tc.msgURL)
|
|
require.NoError(t, err)
|
|
}
|
|
|
|
allowed, err := f.keeper.IsAllowed(f.ctx, tc.msgURL)
|
|
require.NoError(t, err)
|
|
require.Equal(t, tc.expected, allowed)
|
|
})
|
|
}
|
|
}
|