github.com/KiraCore/sekai@v0.3.43/x/gov/keeper/network_actor_test.go (about) 1 package keeper_test 2 3 import ( 4 "testing" 5 6 simapp "github.com/KiraCore/sekai/app" 7 "github.com/KiraCore/sekai/x/gov/types" 8 tmproto "github.com/cometbft/cometbft/proto/tendermint/types" 9 sdk "github.com/cosmos/cosmos-sdk/types" 10 "github.com/stretchr/testify/require" 11 ) 12 13 func TestNewKeeper_SaveNetworkActor(t *testing.T) { 14 app := simapp.Setup(false) 15 ctx := app.NewContext(false, tmproto.Header{}) 16 17 addrs := simapp.AddTestAddrsIncremental(app, ctx, 1, sdk.TokensFromConsensusPower(10, sdk.DefaultPowerReduction)) 18 addr := addrs[0] 19 20 networkActor := types.NetworkActor{ 21 Address: addr, 22 } 23 24 app.CustomGovKeeper.SaveNetworkActor(ctx, networkActor) 25 26 savedActor, found := app.CustomGovKeeper.GetNetworkActorByAddress(ctx, networkActor.Address) 27 require.True(t, found) 28 29 require.Equal(t, networkActor, savedActor) 30 } 31 32 func TestKeeper_GetNetworkActorByAddress_FailsIfItDoesNotExist(t *testing.T) { 33 app := simapp.Setup(false) 34 ctx := app.NewContext(false, tmproto.Header{}) 35 36 addrs := simapp.AddTestAddrsIncremental(app, ctx, 1, sdk.TokensFromConsensusPower(10, sdk.DefaultPowerReduction)) 37 addr := addrs[0] 38 39 _, found := app.CustomGovKeeper.GetNetworkActorByAddress(ctx, addr) 40 require.False(t, found) 41 } 42 43 func TestKeeper_AssignRoleToAddress(t *testing.T) { 44 app := simapp.Setup(false) 45 ctx := app.NewContext(false, tmproto.Header{}) 46 47 addrs := simapp.AddTestAddrsIncremental(app, ctx, 1, sdk.TokensFromConsensusPower(10, sdk.DefaultPowerReduction)) 48 addr := addrs[0] 49 50 actor := types.NewDefaultActor(addr) 51 app.CustomGovKeeper.AssignRoleToActor(ctx, actor, types.RoleSudo) 52 53 savedActor, found := app.CustomGovKeeper.GetNetworkActorByAddress(ctx, addr) 54 require.True(t, found) 55 require.True(t, savedActor.HasRole(types.RoleSudo)) 56 } 57 58 func TestKeeper_AddPermissionToNetworkActor(t *testing.T) { 59 app := simapp.Setup(false) 60 ctx := app.NewContext(false, tmproto.Header{}) 61 62 addrs := simapp.AddTestAddrsIncremental(app, ctx, 1, sdk.TokensFromConsensusPower(10, sdk.DefaultPowerReduction)) 63 addr := addrs[0] 64 65 networkActor := types.NewNetworkActor( 66 addr, 67 nil, 68 1, 69 nil, 70 types.NewPermissions(nil, nil), 71 1, 72 ) 73 74 app.CustomGovKeeper.SaveNetworkActor(ctx, networkActor) 75 76 // We check he does not have permissions 77 savedNetworkActor, found := app.CustomGovKeeper.GetNetworkActorByAddress(ctx, addr) 78 require.True(t, found) 79 require.False(t, savedNetworkActor.Permissions.IsWhitelisted(types.PermSetPermissions)) 80 81 // We add permissions and we save it again. 82 err := app.CustomGovKeeper.AddWhitelistPermission(ctx, savedNetworkActor, types.PermSetPermissions) 83 require.NoError(t, err) 84 85 // And we check that now it has permissions 86 savedNetworkActor, found = app.CustomGovKeeper.GetNetworkActorByAddress(ctx, addr) 87 require.True(t, found) 88 require.True(t, savedNetworkActor.Permissions.IsWhitelisted(types.PermSetPermissions)) 89 90 _, found = app.CustomGovKeeper.GetCouncilor(ctx, addr) 91 require.False(t, found) 92 93 // check gov claim permission 94 err = app.CustomGovKeeper.AddWhitelistPermission(ctx, savedNetworkActor, types.PermClaimCouncilor) 95 require.NoError(t, err) 96 savedNetworkActor, found = app.CustomGovKeeper.GetNetworkActorByAddress(ctx, addr) 97 require.True(t, found) 98 require.True(t, savedNetworkActor.Permissions.IsWhitelisted(types.PermClaimCouncilor)) 99 100 councilor, found := app.CustomGovKeeper.GetCouncilor(ctx, addr) 101 require.True(t, found) 102 require.Equal(t, councilor.Status, types.CouncilorWaiting) 103 } 104 105 func TestKeeper_RemoveWhitelistPermission(t *testing.T) { 106 app := simapp.Setup(false) 107 ctx := app.NewContext(false, tmproto.Header{}) 108 109 addrs := simapp.AddTestAddrsIncremental(app, ctx, 2, sdk.TokensFromConsensusPower(10, sdk.DefaultPowerReduction)) 110 111 err := whitelistPermToMultipleAddrs(app, ctx, addrs, types.PermSetPermissions) 112 require.NoError(t, err) 113 114 iterator := app.CustomGovKeeper.GetNetworkActorsByWhitelistedPermission(ctx, types.PermSetPermissions) 115 requireIteratorCount(t, iterator, 2) 116 assertAddrsHaveWhitelistedPerm(t, app, ctx, addrs, types.PermSetPermissions) 117 118 actor, found := app.CustomGovKeeper.GetNetworkActorByAddress(ctx, addrs[0]) 119 require.True(t, found) 120 err = app.CustomGovKeeper.RemoveWhitelistedPermission(ctx, actor, types.PermSetPermissions) 121 require.NoError(t, err) 122 123 iterator = app.CustomGovKeeper.GetNetworkActorsByWhitelistedPermission(ctx, types.PermSetPermissions) 124 requireIteratorCount(t, iterator, 1) 125 126 assertAddrsDontHaveWhitelistedPerm(t, app, ctx, []sdk.AccAddress{addrs[0]}, types.PermSetPermissions) 127 assertAddrsHaveWhitelistedPerm(t, app, ctx, []sdk.AccAddress{addrs[1]}, types.PermSetPermissions) 128 } 129 130 func TestAssignRoleToAccount(t *testing.T) { 131 app := simapp.Setup(false) 132 ctx := app.NewContext(false, tmproto.Header{}) 133 134 addrs := simapp.AddTestAddrsIncremental(app, ctx, 1, sdk.TokensFromConsensusPower(10, sdk.DefaultPowerReduction)) 135 addr := addrs[0] 136 137 networkActor := types.NewNetworkActor( 138 addr, 139 nil, 140 1, 141 nil, 142 types.NewPermissions(nil, nil), 143 1, 144 ) 145 146 app.CustomGovKeeper.SaveNetworkActor(ctx, networkActor) 147 148 // check sudo role assign 149 err := app.CustomGovKeeper.AssignRoleToAccount(ctx, addr, types.RoleSudo) 150 require.NoError(t, err) 151 savedNetworkActor, found := app.CustomGovKeeper.GetNetworkActorByAddress(ctx, addr) 152 require.True(t, found) 153 require.True(t, savedNetworkActor.HasRole(types.RoleSudo)) 154 155 councilor, found := app.CustomGovKeeper.GetCouncilor(ctx, addr) 156 require.True(t, found) 157 require.Equal(t, councilor.Status, types.CouncilorWaiting) 158 } 159 160 func TestKeeper_GetActorsByRole(t *testing.T) { 161 app := simapp.Setup(false) 162 ctx := app.NewContext(false, tmproto.Header{}) 163 164 addrs := simapp.AddTestAddrsIncremental(app, ctx, 2, sdk.TokensFromConsensusPower(10, sdk.DefaultPowerReduction)) 165 166 addRoleToMultipleAddrs(app, ctx, addrs, types.RoleSudo) 167 168 iterator := app.CustomGovKeeper.GetNetworkActorsByRole(ctx, types.RoleSudo) 169 requireIteratorCount(t, iterator, 2) 170 171 assertAddrsHaveRole(t, app, ctx, addrs, types.RoleSudo) 172 } 173 174 func TestKeeper_UnassignRole(t *testing.T) { 175 app := simapp.Setup(false) 176 ctx := app.NewContext(false, tmproto.Header{}) 177 178 addrs := simapp.AddTestAddrsIncremental(app, ctx, 2, sdk.TokensFromConsensusPower(10, sdk.DefaultPowerReduction)) 179 180 addRoleToMultipleAddrs(app, ctx, addrs, types.RoleSudo) 181 182 iterator := app.CustomGovKeeper.GetNetworkActorsByRole(ctx, types.RoleSudo) 183 requireIteratorCount(t, iterator, 2) 184 185 assertAddrsHaveRole(t, app, ctx, addrs, types.RoleSudo) 186 187 actor, found := app.CustomGovKeeper.GetNetworkActorByAddress(ctx, addrs[0]) 188 require.True(t, found) 189 require.True(t, actor.HasRole(types.RoleSudo)) 190 191 app.CustomGovKeeper.UnassignRoleFromActor(ctx, actor, types.RoleSudo) 192 193 actor, found = app.CustomGovKeeper.GetNetworkActorByAddress(ctx, addrs[0]) 194 require.True(t, found) 195 require.False(t, actor.HasRole(types.RoleSudo)) 196 197 iterator = app.CustomGovKeeper.GetNetworkActorsByRole(ctx, types.RoleSudo) 198 requireIteratorCount(t, iterator, 1) 199 200 } 201 202 func TestKeeper_GetActorsByWhitelistedPerm(t *testing.T) { 203 app := simapp.Setup(false) 204 ctx := app.NewContext(false, tmproto.Header{}) 205 206 addrs := simapp.AddTestAddrsIncremental(app, ctx, 2, sdk.TokensFromConsensusPower(10, sdk.DefaultPowerReduction)) 207 208 err := whitelistPermToMultipleAddrs(app, ctx, addrs, types.PermSetPermissions) 209 require.NoError(t, err) 210 211 iterator := app.CustomGovKeeper.GetNetworkActorsByWhitelistedPermission(ctx, types.PermSetPermissions) 212 requireIteratorCount(t, iterator, 2) 213 214 assertAddrsHaveWhitelistedPerm(t, app, ctx, addrs, types.PermSetPermissions) 215 } 216 217 func TestKeeper_GetNetworkActorsByAbsoluteWhitelistPermission(t *testing.T) { 218 tests := []struct { 219 name string 220 prepareApp func(app *simapp.SekaiApp, ctx sdk.Context) []types.NetworkActor 221 }{ 222 { 223 name: "some addresses whitelisted", 224 prepareApp: func(app *simapp.SekaiApp, ctx sdk.Context) []types.NetworkActor { 225 addrs := simapp.AddTestAddrsIncremental(app, ctx, 2, sdk.TokensFromConsensusPower(10, sdk.DefaultPowerReduction)) 226 227 err := whitelistPermToMultipleAddrs(app, ctx, addrs, types.PermSetPermissions) 228 require.NoError(t, err) 229 230 expectedActors := []types.NetworkActor{ 231 types.NewDefaultActor(addrs[0]), 232 types.NewDefaultActor(addrs[1]), 233 } 234 235 return expectedActors 236 }, 237 }, 238 { 239 name: "some addresses whitelisted by role", 240 prepareApp: func(app *simapp.SekaiApp, ctx sdk.Context) []types.NetworkActor { 241 addrs := simapp.AddTestAddrsIncremental(app, ctx, 2, sdk.TokensFromConsensusPower(10, sdk.DefaultPowerReduction)) 242 243 // Create role 244 app.CustomGovKeeper.SetRole(ctx, types.Role{ 245 Id: 12345, 246 Sid: "12345", 247 Description: "12345", 248 }) 249 err := app.CustomGovKeeper.WhitelistRolePermission(ctx, 12345, types.PermSetPermissions) 250 require.NoError(t, err) 251 252 for _, addr := range addrs { 253 actor := types.NewDefaultActor(addr) 254 app.CustomGovKeeper.AssignRoleToActor(ctx, actor, 12345) 255 } 256 257 expectedActors := []types.NetworkActor{ 258 types.NewDefaultActor(addrs[0]), 259 types.NewDefaultActor(addrs[1]), 260 } 261 262 return expectedActors 263 }, 264 }, 265 { 266 name: "whitelisted address whitelisted by role and personal permission (case 1)", 267 prepareApp: func(app *simapp.SekaiApp, ctx sdk.Context) []types.NetworkActor { 268 addrs := simapp.AddTestAddrsIncremental(app, ctx, 2, sdk.TokensFromConsensusPower(10, sdk.DefaultPowerReduction)) 269 270 // Create role 271 app.CustomGovKeeper.SetRole(ctx, types.Role{ 272 Id: 12345, 273 Sid: "12345", 274 Description: "12345", 275 }) 276 err := app.CustomGovKeeper.WhitelistRolePermission(ctx, 12345, types.PermSetPermissions) 277 require.NoError(t, err) 278 279 // We whitelist all by the role. 280 for _, addr := range addrs { 281 actor := types.NewDefaultActor(addr) 282 app.CustomGovKeeper.AssignRoleToActor(ctx, actor, 12345) 283 } 284 285 err = app.CustomGovKeeper.AddWhitelistPermission(ctx, types.NewDefaultActor(addrs[0]), types.PermSetPermissions) 286 require.NoError(t, err) 287 288 expectedActors := []types.NetworkActor{ 289 types.NewDefaultActor(addrs[0]), 290 types.NewDefaultActor(addrs[1]), 291 } 292 293 return expectedActors 294 }, 295 }, 296 { 297 name: "whitelisted address whitelisted by role and personal permission (case 2)", 298 prepareApp: func(app *simapp.SekaiApp, ctx sdk.Context) []types.NetworkActor { 299 addrs := simapp.AddTestAddrsIncremental(app, ctx, 2, sdk.TokensFromConsensusPower(10, sdk.DefaultPowerReduction)) 300 301 // Create role 302 app.CustomGovKeeper.SetRole(ctx, types.Role{ 303 Id: 12345, 304 Sid: "12345", 305 Description: "12345", 306 }) 307 err := app.CustomGovKeeper.WhitelistRolePermission(ctx, 12345, types.PermSetPermissions) 308 require.NoError(t, err) 309 310 // We assign role to first actor. 311 actor := types.NewDefaultActor(addrs[0]) 312 app.CustomGovKeeper.AssignRoleToActor(ctx, actor, 12345) 313 314 err = whitelistPermToMultipleAddrs(app, ctx, addrs, types.PermSetPermissions) 315 require.NoError(t, err) 316 317 expectedActors := []types.NetworkActor{ 318 types.NewDefaultActor(addrs[0]), 319 types.NewDefaultActor(addrs[1]), 320 } 321 322 return expectedActors 323 }, 324 }, 325 } 326 327 for _, tt := range tests { 328 tt := tt 329 t.Run(tt.name, func(t *testing.T) { 330 app := simapp.Setup(false) 331 ctx := app.NewContext(false, tmproto.Header{}) 332 333 expectecActors := tt.prepareApp(app, ctx) 334 savedPerms := app.CustomGovKeeper.GetNetworkActorsByAbsoluteWhitelistPermission(ctx, types.PermSetPermissions) 335 336 require.Equal(t, len(expectecActors), len(savedPerms)) 337 for i, actor := range expectecActors { 338 require.Equal(t, actor.Address, savedPerms[i].Address) 339 } 340 }) 341 } 342 } 343 344 func addRoleToMultipleAddrs(app *simapp.SekaiApp, ctx sdk.Context, addrs []sdk.AccAddress, role uint64) { 345 for _, addr := range addrs { 346 app.CustomGovKeeper.AssignRoleToActor(ctx, types.NewDefaultActor(addr), role) 347 } 348 } 349 350 func whitelistPermToMultipleAddrs(app *simapp.SekaiApp, ctx sdk.Context, addrs []sdk.AccAddress, permissions types.PermValue) error { 351 for _, addr := range addrs { 352 err := app.CustomGovKeeper.AddWhitelistPermission(ctx, types.NewDefaultActor(addr), permissions) 353 if err != nil { 354 return err 355 } 356 } 357 358 return nil 359 } 360 361 func requireIteratorCount(t *testing.T, iterator sdk.Iterator, expectedCount int) { 362 c := 0 363 for ; iterator.Valid(); iterator.Next() { 364 c++ 365 } 366 367 require.Equal(t, expectedCount, c) 368 } 369 370 func assertAddrsHaveWhitelistedPerm( 371 t *testing.T, 372 app *simapp.SekaiApp, 373 ctx sdk.Context, 374 addrs []sdk.AccAddress, 375 perm types.PermValue, 376 ) { 377 for _, addr := range addrs { 378 actor, found := app.CustomGovKeeper.GetNetworkActorByAddress(ctx, addr) 379 require.True(t, found) 380 require.True(t, actor.Permissions.IsWhitelisted(perm)) 381 } 382 } 383 384 func assertAddrsHaveRole( 385 t *testing.T, 386 app *simapp.SekaiApp, 387 ctx sdk.Context, 388 addrs []sdk.AccAddress, 389 role uint64, 390 ) { 391 for _, addr := range addrs { 392 actor, found := app.CustomGovKeeper.GetNetworkActorByAddress(ctx, addr) 393 require.True(t, found) 394 require.True(t, actor.HasRole(role)) 395 } 396 } 397 398 func assertAddrsDontHaveWhitelistedPerm( 399 t *testing.T, 400 app *simapp.SekaiApp, 401 ctx sdk.Context, 402 addrs []sdk.AccAddress, 403 perm types.PermValue, 404 ) { 405 for _, addr := range addrs { 406 actor, found := app.CustomGovKeeper.GetNetworkActorByAddress(ctx, addr) 407 require.True(t, found) 408 require.False(t, actor.Permissions.IsWhitelisted(perm)) 409 } 410 }