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 }