github.com/fibonacci-chain/fbc@v0.0.0-20231124064014-c7636198c1e9/libs/cosmos-sdk/baseapp/evm2cm_test.go (about) 1 package baseapp 2 3 import ( 4 "encoding/json" 5 "os" 6 "testing" 7 8 sdk "github.com/fibonacci-chain/fbc/libs/cosmos-sdk/types" 9 "github.com/fibonacci-chain/fbc/libs/tendermint/libs/log" 10 db "github.com/fibonacci-chain/fbc/libs/tm-db" 11 "github.com/stretchr/testify/require" 12 ) 13 14 type testMsg struct { 15 route string 16 } 17 18 func (msg testMsg) Route() string { return msg.route } 19 func (msg testMsg) Type() string { return "testMsg" } 20 func (msg testMsg) GetSigners() []sdk.AccAddress { return nil } 21 func (msg testMsg) GetSignBytes() []byte { return nil } 22 func (msg testMsg) ValidateBasic() error { return nil } 23 24 func TestRegisterCmHandle_ConvertMsg(t *testing.T) { 25 testcases := []struct { 26 module string 27 funcName string 28 blockHeight int64 29 setHeight int64 30 success bool 31 }{ 32 { 33 module: "module1", 34 funcName: "test1", 35 blockHeight: 0, 36 setHeight: 0, 37 success: true, 38 }, 39 { 40 module: "module1", 41 funcName: "test2", 42 blockHeight: 0, 43 setHeight: 0, 44 success: true, 45 }, 46 { 47 module: "module3", 48 funcName: "test1", 49 blockHeight: 0, 50 setHeight: 0, 51 success: true, 52 }, 53 { 54 module: "module4", 55 funcName: "test1", 56 blockHeight: 0, 57 setHeight: 0, 58 success: true, 59 }, 60 { 61 module: "module4", 62 funcName: "test2", 63 blockHeight: 0, 64 setHeight: 0, 65 success: true, 66 }, 67 { 68 module: "module4", 69 funcName: "test3", 70 blockHeight: 0, 71 setHeight: 0, 72 success: true, 73 }, 74 75 // error 76 { 77 module: "module5", 78 funcName: "test1", 79 blockHeight: 4, 80 setHeight: 5, 81 success: false, 82 }, 83 { 84 module: "module5", 85 funcName: "test2", 86 blockHeight: 5, 87 setHeight: 5, 88 success: true, 89 }, 90 { 91 module: "module5", 92 funcName: "test3", 93 blockHeight: 6, 94 setHeight: 5, 95 success: true, 96 }, 97 98 //{ // test for panic 99 // module: "module5", 100 // funcName: "test3", 101 // blockHeight: 6, 102 // setHeight: 5, 103 // success: true, 104 //}, 105 } 106 for _, ts := range testcases { 107 RegisterCmHandle(ts.module+ts.funcName, 108 NewCMHandle(func(data []byte, signers []sdk.AccAddress) (sdk.Msg, error) { 109 return nil, nil 110 }, ts.setHeight)) 111 } 112 113 // check 114 for _, ts := range testcases { 115 RegisterEvmParamParse(func(msg sdk.Msg) ([]byte, error) { 116 mw := &MsgWrapper{ 117 Name: ts.module + ts.funcName, 118 Data: []byte("123"), 119 } 120 v, err := json.Marshal(mw) 121 require.NoError(t, err) 122 return v, nil 123 }) 124 _, err := ConvertMsg(testMsg{}, ts.blockHeight) 125 require.Equal(t, ts.success, err == nil) 126 } 127 } 128 129 func TestJudgeEvmConvert(t *testing.T) { 130 logger := log.NewTMLogger(log.NewSyncWriter(os.Stdout)). 131 With("module", "mock") 132 testcases := []struct { 133 app *BaseApp 134 fnInit func(app *BaseApp) 135 fnCheck func(is bool) 136 }{ 137 { 138 app: NewBaseApp("test", logger, db.NewMemDB(), nil), 139 fnInit: func(app *BaseApp) {}, 140 fnCheck: func(is bool) { 141 require.False(t, is) 142 }, 143 }, 144 { 145 app: NewBaseApp("test", logger, db.NewMemDB(), nil), 146 fnInit: func(app *BaseApp) { 147 app.SetEvmSysContractAddressHandler(func(ctx sdk.Context, addr sdk.AccAddress) bool { 148 return true 149 }) 150 RegisterEvmParamParse(func(msg sdk.Msg) ([]byte, error) { 151 return nil, nil 152 }) 153 RegisterEvmResultConverter(func(txHash, data []byte) ([]byte, error) { 154 return nil, nil 155 }) 156 RegisterEvmConvertJudge(func(msg sdk.Msg) ([]byte, bool) { 157 return []byte{1, 2, 3}, true 158 }) 159 }, 160 fnCheck: func(is bool) { 161 require.True(t, is) 162 }, 163 }, 164 { 165 app: NewBaseApp("test", logger, db.NewMemDB(), nil), 166 fnInit: func(app *BaseApp) {}, 167 fnCheck: func(is bool) { 168 require.False(t, is) 169 }, 170 }, 171 } 172 173 for _, ts := range testcases { 174 ts.fnInit(ts.app) 175 re := ts.app.JudgeEvmConvert(sdk.Context{}, nil) 176 ts.fnCheck(re) 177 } 178 } 179 180 func TestParseMsgWrapper(t *testing.T) { 181 testcases := []struct { 182 input string 183 fnCheck func(ret *MsgWrapper, err error) 184 }{ 185 { 186 input: `{"type": "fbexchain/staking/MsgDeposit","value": {"delegator_address": "0x4375D630687C83471829227b5C1Ea92217FD6265","quantity": {"denom": "fibo","amount": "1"}}}`, 187 fnCheck: func(ret *MsgWrapper, err error) { 188 require.NoError(t, err) 189 require.Equal(t, "fbexchain/staking/MsgDeposit", ret.Name) 190 require.Equal(t, "{\"delegator_address\": \"0x4375D630687C83471829227b5C1Ea92217FD6265\",\"quantity\": {\"denom\": \"fibo\",\"amount\": \"1\"}}", string(ret.Data)) 191 }, 192 }, 193 { 194 input: `{"type": "fbexchain/staking/MsgWithdraw","value": {"delegator_address": "0x4375D630687C83471829227b5C1Ea92217FD6265","quantity": {"denom": "fibo","amount": "1"}}}`, 195 fnCheck: func(ret *MsgWrapper, err error) { 196 require.NoError(t, err) 197 require.Equal(t, "fbexchain/staking/MsgWithdraw", ret.Name) 198 require.Equal(t, "{\"delegator_address\": \"0x4375D630687C83471829227b5C1Ea92217FD6265\",\"quantity\": {\"denom\": \"fibo\",\"amount\": \"1\"}}", string(ret.Data)) 199 }, 200 }, 201 // error 202 { 203 input: `{"type1": "fbexchain/staking/MsgWithdraw","value":""}`, 204 fnCheck: func(ret *MsgWrapper, err error) { 205 require.NotNil(t, err) 206 }, 207 }, 208 { 209 input: `{"type": "fbexchain/staking/MsgWithdraw","value1":"123"}`, 210 fnCheck: func(ret *MsgWrapper, err error) { 211 require.NotNil(t, err) 212 }, 213 }, 214 } 215 216 for _, ts := range testcases { 217 ret, err := ParseMsgWrapper([]byte(ts.input)) 218 ts.fnCheck(ret, err) 219 } 220 }