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  }