github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/x/staking/msg_convert_test.go (about)

     1  package staking
     2  
     3  import (
     4  	"fmt"
     5  	"testing"
     6  
     7  	sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types"
     8  	"github.com/fibonacci-chain/fbc/x/staking/types"
     9  	"github.com/stretchr/testify/require"
    10  )
    11  
    12  func testMustAccAddressFromBech32(addr string) sdk.AccAddress {
    13  	re, err := sdk.AccAddressFromBech32(addr)
    14  	if err != nil {
    15  		panic(err)
    16  	}
    17  	return re
    18  }
    19  
    20  func newTestSysCoin(i int64, precison int64) sdk.SysCoin {
    21  	return sdk.NewDecCoinFromDec(sdk.DefaultBondDenom, sdk.NewDecWithPrec(i, precison))
    22  }
    23  
    24  func TestConvertDepositMsg(t *testing.T) {
    25  	addr, err := sdk.AccAddressFromHex("B2910E22Bb23D129C02d122B77B462ceB0E89Db9")
    26  	require.NoError(t, err)
    27  
    28  	testcases := []struct {
    29  		msgstr  string
    30  		res     types.MsgDeposit
    31  		fnCheck func(msg sdk.Msg, err error, res types.MsgDeposit)
    32  	}{
    33  		{
    34  			msgstr: fmt.Sprintf("{\"delegator_address\": \"%s\",\"quantity\": {\"denom\": \"fibo\",\"amount\": \"1000\"}}", addr.String()),
    35  			res:    NewMsgDeposit(testMustAccAddressFromBech32(addr.String()), newTestSysCoin(1000, 0)),
    36  			fnCheck: func(msg sdk.Msg, err error, res types.MsgDeposit) {
    37  				require.NoError(t, err)
    38  				require.Equal(t, msg.(types.MsgDeposit), res)
    39  			},
    40  		},
    41  		{
    42  			msgstr: `{"delegator_address": "0xB2910E22Bb23D129C02d122B77B462ceB0E89Db9","quantity": {"denom": "fibo","amount": "1000"}}`,
    43  			res:    NewMsgDeposit(testMustAccAddressFromBech32("0xB2910E22Bb23D129C02d122B77B462ceB0E89Db9"), newTestSysCoin(1000, 0)),
    44  			fnCheck: func(msg sdk.Msg, err error, res types.MsgDeposit) {
    45  				require.NoError(t, err)
    46  				require.Equal(t, msg.(types.MsgDeposit), res)
    47  			},
    48  		},
    49  		{
    50  			msgstr: `{"delegator_address": "B2910E22Bb23D129C02d122B77B462ceB0E89Db9","quantity": {"denom": "fibo","amount": "1000"}}`,
    51  			res:    NewMsgDeposit(testMustAccAddressFromBech32("B2910E22Bb23D129C02d122B77B462ceB0E89Db9"), newTestSysCoin(1000, 0)),
    52  			fnCheck: func(msg sdk.Msg, err error, res types.MsgDeposit) {
    53  				require.NoError(t, err)
    54  				require.Equal(t, msg.(types.MsgDeposit), res)
    55  			},
    56  		},
    57  		{
    58  			msgstr: `{"delegator_address": "B2910E22Bb23D129C02d122B77B462ceB0E89Db9","quantity": {"denom": "fibo","amount": "1.5"}}`,
    59  			res:    NewMsgDeposit(testMustAccAddressFromBech32("B2910E22Bb23D129C02d122B77B462ceB0E89Db9"), newTestSysCoin(15, 1)),
    60  			fnCheck: func(msg sdk.Msg, err error, res types.MsgDeposit) {
    61  				require.NoError(t, err)
    62  				require.Equal(t, msg.(types.MsgDeposit), res)
    63  			},
    64  		},
    65  		{
    66  			msgstr: `{"delegator_address": "B2910E22Bb23D129C02d122B77B462ceB0E89Db9","quantity": {"denom": "fibo","amount": "0.5"}}`,
    67  			res:    NewMsgDeposit(testMustAccAddressFromBech32("B2910E22Bb23D129C02d122B77B462ceB0E89Db9"), newTestSysCoin(5, 1)),
    68  			fnCheck: func(msg sdk.Msg, err error, res types.MsgDeposit) {
    69  				require.NoError(t, err)
    70  				require.Equal(t, msg.(types.MsgDeposit), res)
    71  			},
    72  		},
    73  		// error
    74  		{
    75  			msgstr: "123",
    76  			fnCheck: func(msg sdk.Msg, err error, res types.MsgDeposit) {
    77  				require.Error(t, err)
    78  				require.Nil(t, msg)
    79  			},
    80  		},
    81  		{
    82  			msgstr: fmt.Sprintf("{\"delegator_address\": \"\",\"quantity\": {\"denom\": \"fibo\",\"amount\": \"0.5\"}}"),
    83  			fnCheck: func(msg sdk.Msg, err error, res types.MsgDeposit) {
    84  				require.Error(t, err)
    85  				require.Nil(t, msg)
    86  			},
    87  		},
    88  		{
    89  			msgstr: fmt.Sprintf("{\"delegator_address\": \"889Fb79ac5Ec9C1Ee86Db2D3f3857Dd3D4af0C2E\",\"quantity\": {\"denom\": \"fibo\",\"amount\": \"0.5\"}}"),
    90  			res:    NewMsgDeposit(testMustAccAddressFromBech32("B2910E22Bb23D129C02d122B77B462ceB0E89Db9"), newTestSysCoin(5, 1)),
    91  			fnCheck: func(msg sdk.Msg, err error, res types.MsgDeposit) {
    92  				require.Equal(t, ErrCheckSignerFail, err)
    93  				require.Nil(t, msg)
    94  			},
    95  		},
    96  	}
    97  
    98  	for _, ts := range testcases {
    99  		msg, err := ConvertDepositMsg([]byte(ts.msgstr), ts.res.GetSigners())
   100  		ts.fnCheck(msg, err, ts.res)
   101  	}
   102  }
   103  
   104  func TestConvertWithdrawMsg(t *testing.T) {
   105  	addr, err := sdk.AccAddressFromHex("B2910E22Bb23D129C02d122B77B462ceB0E89Db9")
   106  	require.NoError(t, err)
   107  	testcases := []struct {
   108  		msgstr  string
   109  		res     types.MsgWithdraw
   110  		fnCheck func(msg sdk.Msg, err error, res types.MsgWithdraw)
   111  	}{
   112  		{
   113  			msgstr: fmt.Sprintf("{\"delegator_address\": \"%s\",\"quantity\": {\"denom\": \"fibo\",\"amount\": \"1000\"}}", addr.String()),
   114  			res:    NewMsgWithdraw(testMustAccAddressFromBech32(addr.String()), newTestSysCoin(1000, 0)),
   115  			fnCheck: func(msg sdk.Msg, err error, res types.MsgWithdraw) {
   116  				require.NoError(t, err)
   117  				require.Equal(t, msg.(types.MsgWithdraw), res)
   118  			},
   119  		},
   120  		{
   121  			msgstr: `{"delegator_address": "0xB2910E22Bb23D129C02d122B77B462ceB0E89Db9","quantity": {"denom": "fibo","amount": "1000"}}`,
   122  			res:    NewMsgWithdraw(testMustAccAddressFromBech32("0xB2910E22Bb23D129C02d122B77B462ceB0E89Db9"), newTestSysCoin(1000, 0)),
   123  			fnCheck: func(msg sdk.Msg, err error, res types.MsgWithdraw) {
   124  				require.NoError(t, err)
   125  				require.Equal(t, msg.(types.MsgWithdraw), res)
   126  			},
   127  		},
   128  		{
   129  			msgstr: `{"delegator_address": "B2910E22Bb23D129C02d122B77B462ceB0E89Db9","quantity": {"denom": "fibo","amount": "1000"}}`,
   130  			res:    NewMsgWithdraw(testMustAccAddressFromBech32("B2910E22Bb23D129C02d122B77B462ceB0E89Db9"), newTestSysCoin(1000, 0)),
   131  			fnCheck: func(msg sdk.Msg, err error, res types.MsgWithdraw) {
   132  				require.NoError(t, err)
   133  				require.Equal(t, msg.(types.MsgWithdraw), res)
   134  			},
   135  		},
   136  		{
   137  			msgstr: `{"delegator_address": "B2910E22Bb23D129C02d122B77B462ceB0E89Db9","quantity": {"denom": "fibo","amount": "1.5"}}`,
   138  			res:    NewMsgWithdraw(testMustAccAddressFromBech32("B2910E22Bb23D129C02d122B77B462ceB0E89Db9"), newTestSysCoin(15, 1)),
   139  			fnCheck: func(msg sdk.Msg, err error, res types.MsgWithdraw) {
   140  				require.NoError(t, err)
   141  				require.Equal(t, msg.(types.MsgWithdraw), res)
   142  			},
   143  		},
   144  		{
   145  			msgstr: `{"delegator_address": "B2910E22Bb23D129C02d122B77B462ceB0E89Db9","quantity": {"denom": "fibo","amount": "0.5"}}`,
   146  			res:    NewMsgWithdraw(testMustAccAddressFromBech32("B2910E22Bb23D129C02d122B77B462ceB0E89Db9"), newTestSysCoin(5, 1)),
   147  			fnCheck: func(msg sdk.Msg, err error, res types.MsgWithdraw) {
   148  				require.NoError(t, err)
   149  				require.Equal(t, msg.(types.MsgWithdraw), res)
   150  			},
   151  		},
   152  		// error
   153  		{
   154  			msgstr: "123",
   155  			fnCheck: func(msg sdk.Msg, err error, res types.MsgWithdraw) {
   156  				require.Error(t, err)
   157  				require.Nil(t, msg)
   158  			},
   159  		},
   160  		{
   161  			msgstr: fmt.Sprintf("{\"delegator_address\": \"\",\"quantity\": {\"denom\": \"fibo\",\"amount\": \"0.5\"}}"),
   162  			fnCheck: func(msg sdk.Msg, err error, res types.MsgWithdraw) {
   163  				require.Error(t, err)
   164  				require.Nil(t, msg)
   165  			},
   166  		},
   167  		{
   168  			msgstr: fmt.Sprintf("{\"delegator_address\": \"889Fb79ac5Ec9C1Ee86Db2D3f3857Dd3D4af0C2E\",\"quantity\": {\"denom\": \"fibo\",\"amount\": \"0.5\"}}"),
   169  			res:    NewMsgWithdraw(testMustAccAddressFromBech32("B2910E22Bb23D129C02d122B77B462ceB0E89Db9"), newTestSysCoin(5, 1)),
   170  			fnCheck: func(msg sdk.Msg, err error, res types.MsgWithdraw) {
   171  				require.Equal(t, ErrCheckSignerFail, err)
   172  				require.Nil(t, msg)
   173  			},
   174  		},
   175  	}
   176  
   177  	for _, ts := range testcases {
   178  		msg, err := ConvertWithdrawMsg([]byte(ts.msgstr), ts.res.GetSigners())
   179  		ts.fnCheck(msg, err, ts.res)
   180  	}
   181  }
   182  
   183  func testMustValAddressFromBech32(addrs ...string) []sdk.ValAddress {
   184  	var results []sdk.ValAddress
   185  	for _, addr := range addrs {
   186  		re, err := sdk.ValAddressFromBech32(addr)
   187  		if err != nil {
   188  			panic(err)
   189  		}
   190  		results = append(results, re)
   191  	}
   192  	return results
   193  }
   194  
   195  func TestConvertAddSharesMsg(t *testing.T) {
   196  	valAddr1, err := sdk.ValAddressFromHex("07a277f15a4fa6bb6629ee25b24fb28579bf8e2a")
   197  	require.NoError(t, err)
   198  	valAddr2, err := sdk.ValAddressFromHex("422f2e2e38c34fd23c4de0a5aaddc3ca926817ed")
   199  	require.NoError(t, err)
   200  
   201  	testcases := []struct {
   202  		msgstr  string
   203  		res     types.MsgAddShares
   204  		fnCheck func(msg sdk.Msg, err error, res types.MsgAddShares)
   205  	}{
   206  		{
   207  			msgstr: fmt.Sprintf("{\"delegator_address\": \"0xb2910e22bb23d129c02d122b77b462ceb0e89db9\",\"validator_addresses\": [\"%s\",\"%s\"]}", valAddr1.String(), valAddr2.String()),
   208  			res: NewMsgAddShares(testMustAccAddressFromBech32("0xb2910e22bb23d129c02d122b77b462ceb0e89db9"),
   209  				testMustValAddressFromBech32(valAddr1.String(), valAddr2.String())),
   210  			fnCheck: func(msg sdk.Msg, err error, res types.MsgAddShares) {
   211  				require.NoError(t, err)
   212  				require.Equal(t, msg.(types.MsgAddShares), res)
   213  			},
   214  		},
   215  		{
   216  			msgstr: fmt.Sprintf("{\"delegator_address\": \"0xb2910e22bb23d129c02d122b77b462ceb0e89db9\",\"validator_addresses\": [\"%s\"]}", valAddr1.String()),
   217  			res: NewMsgAddShares(testMustAccAddressFromBech32("0xb2910e22bb23d129c02d122b77b462ceb0e89db9"),
   218  				testMustValAddressFromBech32(valAddr1.String())),
   219  			fnCheck: func(msg sdk.Msg, err error, res types.MsgAddShares) {
   220  				require.NoError(t, err)
   221  				require.Equal(t, msg.(types.MsgAddShares), res)
   222  			},
   223  		},
   224  		// error
   225  		{
   226  			msgstr: "123",
   227  			fnCheck: func(msg sdk.Msg, err error, res types.MsgAddShares) {
   228  				require.Error(t, err)
   229  				require.Nil(t, msg)
   230  			},
   231  		},
   232  		{
   233  			msgstr: fmt.Sprintf("{\"delegator_address\": \"\",\"validator_addresses\": [\"%s\",\"%s\"]}", valAddr1.String(), valAddr2.String()),
   234  			fnCheck: func(msg sdk.Msg, err error, res types.MsgAddShares) {
   235  				require.Error(t, err)
   236  				require.Nil(t, msg)
   237  			},
   238  		},
   239  		{
   240  			msgstr: fmt.Sprintf("{\"delegator_address\": \"0xb2910e22bb23d129c02d122b77b462ceb0e89db9\",\"validator_addresses\": [\"%s\",\"%s\"]}", valAddr1.String(), valAddr2.String()),
   241  			res: NewMsgAddShares(testMustAccAddressFromBech32("0x889Fb79ac5Ec9C1Ee86Db2D3f3857Dd3D4af0C2E"),
   242  				testMustValAddressFromBech32(valAddr1.String(), valAddr2.String())),
   243  			fnCheck: func(msg sdk.Msg, err error, res types.MsgAddShares) {
   244  				require.Equal(t, ErrCheckSignerFail, err)
   245  				require.Nil(t, msg)
   246  			},
   247  		},
   248  	}
   249  
   250  	for _, ts := range testcases {
   251  		msg, err := ConvertAddSharesMsg([]byte(ts.msgstr), ts.res.GetSigners())
   252  		ts.fnCheck(msg, err, ts.res)
   253  	}
   254  }