github.com/KiraCore/sekai@v0.3.43/x/gov/client/cli/cli_role_test.go (about)

     1  package cli_test
     2  
     3  import (
     4  	"fmt"
     5  	"strings"
     6  
     7  	"github.com/KiraCore/sekai/x/gov/client/cli"
     8  	"github.com/KiraCore/sekai/x/gov/types"
     9  	stakingcli "github.com/KiraCore/sekai/x/staking/client/cli"
    10  	"github.com/cosmos/cosmos-sdk/client/flags"
    11  	clitestutil "github.com/cosmos/cosmos-sdk/testutil/cli"
    12  	sdk "github.com/cosmos/cosmos-sdk/types"
    13  )
    14  
    15  func (s IntegrationTestSuite) TestWhitelistRolePermission() {
    16  	// Query permissions for role Validator
    17  	val := s.network.Validators[0]
    18  	clientCtx := val.ClientCtx
    19  
    20  	cmd := cli.GetCmdQueryRole()
    21  	out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, []string{
    22  		"2", // RoleInTest
    23  	})
    24  	s.Require().NoError(err)
    25  
    26  	var roleQuery types.RoleQuery
    27  	val.ClientCtx.Codec.MustUnmarshalJSON(out.Bytes(), &roleQuery)
    28  	s.Require().False(roleQuery.Permissions.IsWhitelisted(types.PermSetPermissions))
    29  
    30  	// Send Tx To Whitelist permission
    31  	cmd = cli.GetTxWhitelistRolePermission()
    32  	_, err = clitestutil.ExecTestCLICmd(clientCtx, cmd, []string{
    33  		"2", // Role created in test
    34  		"1", // PermSetPermission
    35  		fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()),
    36  		fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
    37  		fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync),
    38  		fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.DefaultDenom, sdk.NewInt(100))).String()),
    39  	})
    40  	s.Require().NoError(err)
    41  
    42  	// Query again to check if it has the new permission
    43  	cmd = cli.GetCmdQueryRole()
    44  	out, err = clitestutil.ExecTestCLICmd(clientCtx, cmd, []string{
    45  		"2", // RoleCreatedInTest
    46  	})
    47  	s.Require().NoError(err)
    48  
    49  	var newRoleQuery types.RoleQuery
    50  	val.ClientCtx.Codec.MustUnmarshalJSON(out.Bytes(), &newRoleQuery)
    51  }
    52  
    53  func (s IntegrationTestSuite) TestBlacklistRolePermission() {
    54  	// Query permissions for role Validator
    55  	val := s.network.Validators[0]
    56  	clientCtx := val.ClientCtx
    57  
    58  	cmd := cli.GetCmdQueryRole()
    59  	out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, []string{
    60  		"2", // RoleValidator
    61  	})
    62  	s.Require().NoError(err)
    63  
    64  	var roleQuery types.RoleQuery
    65  	val.ClientCtx.Codec.MustUnmarshalJSON(out.Bytes(), &roleQuery)
    66  	s.Require().True(roleQuery.Permissions.IsWhitelisted(types.PermClaimValidator))
    67  	s.Require().False(roleQuery.Permissions.IsBlacklisted(types.PermClaimCouncilor))
    68  
    69  	// Send Tx To Blacklist permission
    70  	cmd = cli.GetTxBlacklistRolePermission()
    71  	out, err = clitestutil.ExecTestCLICmd(clientCtx, cmd, []string{
    72  		"2", // RoleValidator
    73  		"3", // PermClaimCouncilor
    74  		fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()),
    75  		fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
    76  		fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync),
    77  		fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.DefaultDenom, sdk.NewInt(100))).String()),
    78  	})
    79  	s.Require().NoError(err)
    80  
    81  	// Query again to check if it has the new permission
    82  	err = s.network.WaitForNextBlock()
    83  	s.Require().NoError(err)
    84  
    85  	cmd = cli.GetCmdQueryRole()
    86  	out, err = clitestutil.ExecTestCLICmd(clientCtx, cmd, []string{
    87  		"2", // RoleValidator
    88  	})
    89  	s.Require().NoError(err)
    90  
    91  	var newRoleQuery types.RoleQuery
    92  	val.ClientCtx.Codec.MustUnmarshalJSON(out.Bytes(), &newRoleQuery)
    93  	s.Require().True(newRoleQuery.Permissions.IsWhitelisted(types.PermClaimValidator))
    94  }
    95  
    96  func (s IntegrationTestSuite) TestRemoveWhitelistRolePermission() {
    97  	// Query permissions for role Validator
    98  	val := s.network.Validators[0]
    99  	clientCtx := val.ClientCtx
   100  
   101  	cmd := cli.GetCmdQueryRole()
   102  	out, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, []string{
   103  		"2", // RoleInTest
   104  	})
   105  	s.Require().NoError(err)
   106  
   107  	var roleQuery types.RoleQuery
   108  	val.ClientCtx.Codec.MustUnmarshalJSON(out.Bytes(), &roleQuery)
   109  	s.Require().True(roleQuery.Permissions.IsWhitelisted(types.PermClaimValidator))
   110  
   111  	// Send Tx To Blacklist permission
   112  	cmd = cli.GetTxRemoveWhitelistRolePermission()
   113  	out, err = clitestutil.ExecTestCLICmd(clientCtx, cmd, []string{
   114  		"2", // RoleValidator
   115  		"2", // PermClaimValidator
   116  		fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()),
   117  		fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
   118  		fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync),
   119  		fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.DefaultDenom, sdk.NewInt(100))).String()),
   120  	})
   121  	s.Require().NoError(err)
   122  
   123  	// Query again to check if it has the new permission
   124  	err = s.network.WaitForNextBlock()
   125  	s.Require().NoError(err)
   126  
   127  	cmd = cli.GetCmdQueryRole()
   128  	out, err = clitestutil.ExecTestCLICmd(clientCtx, cmd, []string{
   129  		"2", // RoleInTest
   130  	})
   131  	s.Require().NoError(err)
   132  
   133  	var newRoleQuery types.RoleQuery
   134  	val.ClientCtx.Codec.MustUnmarshalJSON(out.Bytes(), &newRoleQuery)
   135  	s.Require().False(newRoleQuery.Permissions.IsWhitelisted(types.PermClaimValidator))
   136  }
   137  
   138  func (s IntegrationTestSuite) TestRemoveBlacklistRolePermission() {
   139  	// Query permissions for role RoleInTest
   140  	val := s.network.Validators[0]
   141  	clientCtx := val.ClientCtx
   142  
   143  	cmd := cli.GetCmdQueryRole()
   144  	_, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, []string{
   145  		"sudo",
   146  	})
   147  	s.Require().NoError(err)
   148  
   149  	// Send Tx To Remove Blacklist Permissions
   150  	cmd = cli.GetTxRemoveBlacklistRolePermission()
   151  	_, err = clitestutil.ExecTestCLICmd(clientCtx, cmd, []string{
   152  		"sudo", // RoleValidator
   153  		"3",    // PermClaimCouncilor
   154  		fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()),
   155  		fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
   156  		fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync),
   157  		fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.DefaultDenom, sdk.NewInt(100))).String()),
   158  	})
   159  	s.Require().NoError(err)
   160  
   161  	// Query again to check if it has the new permission
   162  	err = s.network.WaitForNextBlock()
   163  	s.Require().NoError(err)
   164  }
   165  
   166  func (s IntegrationTestSuite) TestCreateRole() {
   167  	// Query permissions for role Non existing role yet
   168  	val := s.network.Validators[0]
   169  	clientCtx := val.ClientCtx
   170  
   171  	cmd := cli.GetCmdQueryRole()
   172  	_, err := clitestutil.ExecTestCLICmd(clientCtx, cmd, []string{
   173  		"myRole", // RoleInTest
   174  	})
   175  	s.Require().Error(err)
   176  	strings.Contains(err.Error(), types.ErrRoleDoesNotExist.Error())
   177  
   178  	// Add role
   179  	cmd = cli.GetTxCreateRole()
   180  	_, err = clitestutil.ExecTestCLICmd(clientCtx, cmd, []string{
   181  		"myRole", "myRole", // RoleValidator
   182  		fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()),
   183  		fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
   184  		fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync),
   185  		fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.DefaultDenom, sdk.NewInt(100))).String()),
   186  	})
   187  	s.Require().NoError(err)
   188  
   189  	err = s.network.WaitForNextBlock()
   190  	s.Require().NoError(err)
   191  
   192  }
   193  
   194  func (s IntegrationTestSuite) TestAssignRoles_AndUnassignRoles() {
   195  	val := s.network.Validators[0]
   196  	clientCtx := val.ClientCtx
   197  
   198  	addr, err := sdk.AccAddressFromBech32("kira15ky9du8a2wlstz6fpx3p4mqpjyrm5cgqzp4f3d")
   199  	s.Require().NoError(err)
   200  
   201  	cmd := cli.GetTxAssignRole()
   202  	_, err = clitestutil.ExecTestCLICmd(clientCtx, cmd, []string{
   203  		"2", // Role created in test
   204  		fmt.Sprintf("--%s=%s", flags.FlagFrom, val.Address.String()),
   205  		fmt.Sprintf("--%s=%s", stakingcli.FlagAddr, addr),
   206  		fmt.Sprintf("--%s=true", flags.FlagSkipConfirmation),
   207  		fmt.Sprintf("--%s=%s", flags.FlagBroadcastMode, flags.BroadcastSync),
   208  		fmt.Sprintf("--%s=%s", flags.FlagFees, sdk.NewCoins(sdk.NewCoin(s.cfg.DefaultDenom, sdk.NewInt(100))).String()),
   209  	})
   210  	s.Require().NoError(err)
   211  
   212  }
   213  
   214  func (s IntegrationTestSuite) TestGetRolesByAddress() {
   215  	val := s.network.Validators[0]
   216  
   217  	roles := GetRolesByAddress(s.T(), s.network, val.Address)
   218  
   219  	s.Require().Equal([]uint64{uint64(types.RoleSudo)}, roles)
   220  }