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 }