Some checks failed
CodeQL / Analyze (push) Waiting to run
golangci-lint / lint (push) Waiting to run
Tests / Code Coverage / build (amd64) (push) Waiting to run
Tests / Code Coverage / build (arm64) (push) Waiting to run
Tests / Code Coverage / unit-tests (map[additional-args:-tags="test_e2e" name:e2e path:./e2e]) (push) Waiting to run
Tests / Code Coverage / unit-tests (map[name:08-wasm path:./modules/light-clients/08-wasm]) (push) Waiting to run
Tests / Code Coverage / unit-tests (map[name:ibc-go path:.]) (push) Waiting to run
Docker Build & Push Simapp (main) / docker-build (push) Has been cancelled
163 lines
4.9 KiB
Go
163 lines
4.9 KiB
Go
package cli
|
|
|
|
import (
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"git.cw.tr/mukan-network/mukan-sdk/codec"
|
|
codectypes "git.cw.tr/mukan-network/mukan-sdk/codec/types"
|
|
sdk "git.cw.tr/mukan-network/mukan-sdk/types"
|
|
banktypes "git.cw.tr/mukan-network/mukan-sdk/x/bank/types"
|
|
stakingtypes "git.cw.tr/mukan-network/mukan-sdk/x/staking/types"
|
|
|
|
icatypes "git.cw.tr/mukan-network/mukan-ibc/modules/apps/27-interchain-accounts/types"
|
|
)
|
|
|
|
const msgDelegateMessage = `{
|
|
"@type": "/cosmos.staking.v1beta1.MsgDelegate",
|
|
"delegator_address": "cosmos15ccshhmp0gsx29qpqq6g4zmltnnvgmyu9ueuadh9y2nc5zj0szls5gtddz",
|
|
"validator_address": "cosmosvaloper1qnk2n4nlkpw9xfqntladh74w6ujtulwnmxnh3k",
|
|
"amount": {
|
|
"denom": "stake",
|
|
"amount": "1000"
|
|
}
|
|
}`
|
|
|
|
const bankSendMessage = `{
|
|
"@type":"/cosmos.bank.v1beta1.MsgSend",
|
|
"from_address":"cosmos15ccshhmp0gsx29qpqq6g4zmltnnvgmyu9ueuadh9y2nc5zj0szls5gtddz",
|
|
"to_address":"cosmos10h9stc5v6ntgeygf5xf945njqq5h32r53uquvw",
|
|
"amount": [
|
|
{
|
|
"denom": "stake",
|
|
"amount": "1000"
|
|
}
|
|
]
|
|
}`
|
|
|
|
var multiMsg = fmt.Sprintf("[ %s, %s ]", msgDelegateMessage, bankSendMessage)
|
|
|
|
func TestGeneratePacketData(t *testing.T) {
|
|
t.Helper()
|
|
tests := []struct {
|
|
name string
|
|
memo string
|
|
expectedPass bool
|
|
message string
|
|
registerInterfaceFn func(registry codectypes.InterfaceRegistry)
|
|
assertionFn func(t *testing.T, msgs []sdk.Msg)
|
|
}{
|
|
{
|
|
name: "packet data generation succeeds (MsgDelegate & MsgSend)",
|
|
memo: "",
|
|
expectedPass: true,
|
|
message: multiMsg,
|
|
registerInterfaceFn: func(registry codectypes.InterfaceRegistry) {
|
|
stakingtypes.RegisterInterfaces(registry)
|
|
banktypes.RegisterInterfaces(registry)
|
|
},
|
|
assertionFn: func(t *testing.T, msgs []sdk.Msg) {
|
|
t.Helper()
|
|
assertMsgDelegate(t, msgs[0])
|
|
assertMsgBankSend(t, msgs[1])
|
|
},
|
|
},
|
|
{
|
|
name: "packet data generation succeeds (MsgDelegate)",
|
|
memo: "non-empty-memo",
|
|
expectedPass: true,
|
|
message: msgDelegateMessage,
|
|
registerInterfaceFn: stakingtypes.RegisterInterfaces,
|
|
assertionFn: func(t *testing.T, msgs []sdk.Msg) {
|
|
t.Helper()
|
|
assertMsgDelegate(t, msgs[0])
|
|
},
|
|
},
|
|
{
|
|
name: "packet data generation succeeds (MsgSend)",
|
|
memo: "non-empty-memo",
|
|
expectedPass: true,
|
|
message: bankSendMessage,
|
|
registerInterfaceFn: banktypes.RegisterInterfaces,
|
|
assertionFn: func(t *testing.T, msgs []sdk.Msg) {
|
|
t.Helper()
|
|
assertMsgBankSend(t, msgs[0])
|
|
},
|
|
},
|
|
{
|
|
name: "empty memo is valid",
|
|
memo: "",
|
|
expectedPass: true,
|
|
message: msgDelegateMessage,
|
|
registerInterfaceFn: stakingtypes.RegisterInterfaces,
|
|
assertionFn: nil,
|
|
},
|
|
{
|
|
name: "invalid message string",
|
|
expectedPass: false,
|
|
message: "<invalid-message-body>",
|
|
},
|
|
}
|
|
|
|
encodings := []string{icatypes.EncodingProtobuf, icatypes.EncodingProto3JSON}
|
|
for _, encoding := range encodings {
|
|
for _, tc := range tests {
|
|
|
|
ir := codectypes.NewInterfaceRegistry()
|
|
if tc.registerInterfaceFn != nil {
|
|
tc.registerInterfaceFn(ir)
|
|
}
|
|
|
|
cdc := codec.NewProtoCodec(ir)
|
|
|
|
t.Run(fmt.Sprintf("%s with %s encoding", tc.name, encoding), func(t *testing.T) {
|
|
bz, err := generatePacketData(cdc, []byte(tc.message), tc.memo, encoding)
|
|
|
|
if tc.expectedPass {
|
|
require.NoError(t, err)
|
|
require.NotNil(t, bz)
|
|
|
|
packetData := icatypes.InterchainAccountPacketData{}
|
|
err = cdc.UnmarshalJSON(bz, &packetData)
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, icatypes.EXECUTE_TX, packetData.Type)
|
|
require.Equal(t, tc.memo, packetData.Memo)
|
|
|
|
data := packetData.Data
|
|
messages, err := icatypes.DeserializeCosmosTx(cdc, data, encoding)
|
|
|
|
require.NoError(t, err)
|
|
require.NotNil(t, messages)
|
|
|
|
if tc.assertionFn != nil {
|
|
tc.assertionFn(t, messages)
|
|
}
|
|
} else {
|
|
require.Error(t, err)
|
|
require.Nil(t, bz)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
}
|
|
|
|
func assertMsgBankSend(t *testing.T, msg sdk.Msg) { //nolint:thelper
|
|
bankSendMsg, ok := msg.(*banktypes.MsgSend)
|
|
require.True(t, ok)
|
|
require.Equal(t, "cosmos15ccshhmp0gsx29qpqq6g4zmltnnvgmyu9ueuadh9y2nc5zj0szls5gtddz", bankSendMsg.FromAddress)
|
|
require.Equal(t, "cosmos10h9stc5v6ntgeygf5xf945njqq5h32r53uquvw", bankSendMsg.ToAddress)
|
|
require.Equal(t, "stake", bankSendMsg.Amount.GetDenomByIndex(0))
|
|
require.Equal(t, uint64(1000), bankSendMsg.Amount[0].Amount.Uint64())
|
|
}
|
|
|
|
func assertMsgDelegate(t *testing.T, msg sdk.Msg) { //nolint:thelper
|
|
msgDelegate, ok := msg.(*stakingtypes.MsgDelegate)
|
|
require.True(t, ok)
|
|
require.Equal(t, "cosmos15ccshhmp0gsx29qpqq6g4zmltnnvgmyu9ueuadh9y2nc5zj0szls5gtddz", msgDelegate.DelegatorAddress)
|
|
require.Equal(t, "cosmosvaloper1qnk2n4nlkpw9xfqntladh74w6ujtulwnmxnh3k", msgDelegate.ValidatorAddress)
|
|
require.Equal(t, "stake", msgDelegate.Amount.Denom)
|
|
require.Equal(t, uint64(1000), msgDelegate.Amount.Amount.Uint64())
|
|
}
|