github.com/Finschia/finschia-sdk@v0.49.1/x/fbridge/keeper/auth_test.go (about) 1 package keeper 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/require" 7 8 "github.com/Finschia/finschia-sdk/x/fbridge/testutil" 9 "github.com/Finschia/finschia-sdk/x/fbridge/types" 10 ) 11 12 func TestAssignRole(t *testing.T) { 13 key, memKey, ctx, encCfg, authKeeper, bankKeeper, addrs := testutil.PrepareFbridgeTest(t, 3) 14 auth := types.DefaultAuthority() 15 k := NewKeeper(encCfg.Codec, key, memKey, authKeeper, bankKeeper, auth.String()) 16 err := k.InitGenesis(ctx, types.DefaultGenesisState()) 17 require.NoError(t, err) 18 19 // 1. Bridge authority assigns an address to a guardian role 20 p, err := k.RegisterRoleProposal(ctx, addrs[0], addrs[1], types.RoleGuardian) 21 require.Error(t, err, "role proposal must not be passed without authority") 22 require.Equal(t, types.RoleProposal{}, p) 23 p, err = k.RegisterRoleProposal(ctx, auth, addrs[0], types.RoleGuardian) 24 require.NoError(t, err) 25 require.EqualValues(t, 1, p.Id) 26 err = k.updateRole(ctx, types.RoleGuardian, addrs[0]) 27 require.NoError(t, err) 28 require.Equal(t, types.RoleGuardian, k.GetRole(ctx, addrs[0])) 29 require.Equal(t, types.RoleMetadata{Guardian: 1, Operator: 0, Judge: 0}, k.GetRoleMetadata(ctx)) 30 31 // 2. Guardian assigns an address to a guardian role 32 _, err = k.RegisterRoleProposal(ctx, auth, addrs[1], types.RoleGuardian) 33 require.Error(t, err, "role proposal must be passed with guardian role after guardian group is formed") 34 p, err = k.RegisterRoleProposal(ctx, addrs[0], addrs[1], types.RoleGuardian) 35 require.NoError(t, err, "role proposal must be passed with guardian role") 36 require.EqualValues(t, 2, p.Id) 37 err = k.addVote(ctx, p.Id, addrs[0], types.OptionYes) 38 require.NoError(t, err) 39 opt, err := k.GetVote(ctx, p.Id, addrs[0]) 40 require.NoError(t, err) 41 require.Equal(t, types.OptionYes, opt) 42 err = k.updateRole(ctx, types.RoleGuardian, addrs[1]) 43 require.NoError(t, err) 44 require.Equal(t, types.RoleMetadata{Guardian: 2, Operator: 0, Judge: 0}, k.GetRoleMetadata(ctx)) 45 sws := k.GetBridgeSwitches(ctx) 46 require.Len(t, sws, 2) 47 for _, sw := range sws { 48 require.Equal(t, types.StatusActive, sw.Status) 49 } 50 51 // 3. Guardian assigns an address to an operator role 52 err = k.updateRole(ctx, types.RoleOperator, addrs[1]) 53 require.NoError(t, err) 54 require.Equal(t, types.RoleMetadata{Guardian: 1, Operator: 1, Judge: 0}, k.GetRoleMetadata(ctx)) 55 56 // 4. Guardian assigns an address to a same role 57 err = k.updateRole(ctx, types.RoleOperator, addrs[1]) 58 require.NoError(t, err) 59 } 60 61 func TestBridgeHaltAndResume(t *testing.T) { 62 key, memKey, ctx, encCfg, authKeeper, bankKeeper, addrs := testutil.PrepareFbridgeTest(t, 3) 63 auth := types.DefaultAuthority() 64 k := NewKeeper(encCfg.Codec, key, memKey, authKeeper, bankKeeper, auth.String()) 65 err := k.InitGenesis(ctx, types.DefaultGenesisState()) 66 require.NoError(t, err) 67 for _, addr := range addrs { 68 err = k.updateRole(ctx, types.RoleGuardian, addr) 69 require.NoError(t, err) 70 } 71 72 require.Equal(t, types.StatusActive, k.GetBridgeStatus(ctx), "bridge status must be active (3/3)") 73 require.Equal(t, types.BridgeStatusMetadata{Active: 3, Inactive: 0}, k.GetBridgeStatusMetadata(ctx)) 74 75 err = k.updateBridgeSwitch(ctx, addrs[0], types.StatusInactive) 76 require.NoError(t, err) 77 require.Equal(t, types.StatusActive, k.GetBridgeStatus(ctx), "bridge status must be active (2/3)") 78 require.Equal(t, types.BridgeStatusMetadata{Active: 2, Inactive: 1}, k.GetBridgeStatusMetadata(ctx)) 79 80 err = k.updateBridgeSwitch(ctx, addrs[1], types.StatusInactive) 81 require.NoError(t, err) 82 require.Equal(t, types.StatusInactive, k.GetBridgeStatus(ctx), "bridge status must be inactive (1/3)") 83 require.Equal(t, types.BridgeStatusMetadata{Active: 1, Inactive: 2}, k.GetBridgeStatusMetadata(ctx)) 84 85 err = k.updateBridgeSwitch(ctx, addrs[0], types.StatusActive) 86 require.NoError(t, err) 87 require.Equal(t, types.StatusActive, k.GetBridgeStatus(ctx), "bridge status must be active (2/3)") 88 require.Equal(t, types.BridgeStatusMetadata{Active: 2, Inactive: 1}, k.GetBridgeStatusMetadata(ctx)) 89 90 err = k.updateBridgeSwitch(ctx, addrs[0], 3) 91 require.Error(t, err, "invalid bridge status must be rejected") 92 }