Skip to content

Commit

Permalink
chore: add messages tests (#77)
Browse files Browse the repository at this point in the history
* chore: add MsgSend test

* chore: add MsgMultiSend test

* chore: add MsgDelegate test

* chore: add MsgUndelegate test

* chore: add MsgBeginRedelegate test

* chore: add MsgSetWithdrawAddress tests

* chore: add MsgUnparsedMessage and MsgUnsupportedMessage tests

* chore: fixed linting

* chore: add MsgVote tests

* chore: add MsgWithdrawDelegatorReward and MsgWithdrawValidatorCommission tests

* chore: add msgRevoke tests

* chore: add MsgUpdateClient tests

* chore: add MsgExec tests

* chore: fixed populate multichain denom alias

* chore: add MsgTransfer tests

* chore: add MsgGrant tests

* chore: add FungiblePacketToken tests

* chore: add InterchainAccountsPacket tests

* chore: add Packet parse test

* chore: add MsgTimeout test

* chore: add MsgAcknowledgement

* chore: add MsgRecvPacket tests
  • Loading branch information
freak12techno authored Jul 26, 2024
1 parent 5a648d6 commit 1958f33
Show file tree
Hide file tree
Showing 42 changed files with 3,484 additions and 23 deletions.
2 changes: 1 addition & 1 deletion pkg/data_fetcher/populate_multichain_wallet.go
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ func (f *DataFetcher) PopulateMultichainWallet(
}

walletLink.Href = localChain.Explorer.GetWalletLink(walletLink.Value)
if alias := f.AliasManager.Get(subscriptionName, chain.Name, walletLink.Value); alias != "" {
if alias := f.AliasManager.Get(subscriptionName, localChain.Name, walletLink.Value); alias != "" {
walletLink.Title = alias
}
}
2 changes: 1 addition & 1 deletion pkg/data_fetcher/populate_multichain_wallet_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@ func TestDataFetcherPopulateMultichainWalletRemoteOk(t *testing.T) {

dataFetcher.Cache.Set("chain_channel_channel_port_port", "remote-chain")

err := aliasManager.Set("subscription", "chain", "address", "alias")
err := aliasManager.Set("subscription", "chain2", "address", "alias")
require.NoError(t, err)

wallet := &types.Link{Value: "address"}
Expand Down
2 changes: 1 addition & 1 deletion pkg/messages/msg_acknowledgement.go
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ func ParseMsgAcknowledgement(data []byte, chain *configTypes.Chain, height int64
}, nil
}

func (m MsgAcknowledgement) Type() string {
func (m *MsgAcknowledgement) Type() string {
return "/ibc.core.channel.v1.MsgAcknowledgement"
}

Expand Down
202 changes: 202 additions & 0 deletions pkg/messages/msg_acknowledgement_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,202 @@
package messages

import (
aliasManagerPkg "main/pkg/alias_manager"
configPkg "main/pkg/config"
configTypes "main/pkg/config/types"
"main/pkg/data_fetcher"
"main/pkg/fs"
loggerPkg "main/pkg/logger"
"main/pkg/metrics"
"main/pkg/types"
"main/pkg/types/event"
"testing"

cosmosTypes "github.com/cosmos/cosmos-sdk/types"
ibcTypes "github.com/cosmos/ibc-go/v7/modules/apps/transfer/types"
ibcChannelTypes "github.com/cosmos/ibc-go/v7/modules/core/04-channel/types"

"github.com/gogo/protobuf/proto"
"github.com/stretchr/testify/require"
)

func TestMsgAcknowledgementParseFail(t *testing.T) {
t.Parallel()

parsed, err := ParseMsgAcknowledgement([]byte("bytes"), &configTypes.Chain{Name: "chain"}, 100)
require.Error(t, err)
require.Nil(t, parsed)
}

func TestMsgAcknowledgementParsePacketFail(t *testing.T) {
t.Parallel()

packet := ibcChannelTypes.Packet{
SourceChannel: "src_channel",
SourcePort: "src_port",
DestinationChannel: "dst_channel",
DestinationPort: "dst_port",
Data: []byte("invalid"),
}

msg := &ibcChannelTypes.MsgAcknowledgement{
Signer: "signer",
Packet: packet,
}
msgBytes, err := proto.Marshal(msg)
require.NoError(t, err)

parsed, err := ParseMsgAcknowledgement(msgBytes, &configTypes.Chain{Name: "chain"}, 100)
require.Error(t, err)
require.Nil(t, parsed)
}

func TestMsgAcknowledgementParseOk(t *testing.T) {
t.Parallel()

msgInternal := &ibcTypes.FungibleTokenPacketData{
Denom: "uatom",
Amount: "100",
Sender: "sender",
Receiver: "receiver",
Memo: "memo",
}

msgInternalBytes, err := ibcTypes.ModuleCdc.MarshalJSON(msgInternal)
require.NoError(t, err)

packet := ibcChannelTypes.Packet{
SourceChannel: "src_channel",
SourcePort: "src_port",
DestinationChannel: "dst_channel",
DestinationPort: "dst_port",
Data: msgInternalBytes,
}

msg := &ibcChannelTypes.MsgAcknowledgement{
Signer: "signer",
Packet: packet,
}
msgBytes, err := proto.Marshal(msg)
require.NoError(t, err)

parsed, err := ParseMsgAcknowledgement(msgBytes, &configTypes.Chain{Name: "chain"}, 100)
require.NoError(t, err)
require.NotNil(t, parsed)
}

func TestMsgAcknowledgementBase(t *testing.T) {
t.Parallel()

msgInternal := &ibcTypes.FungibleTokenPacketData{
Denom: "uatom",
Amount: "100",
Sender: "sender",
Receiver: "receiver",
Memo: "memo",
}

msgInternalBytes, err := ibcTypes.ModuleCdc.MarshalJSON(msgInternal)
require.NoError(t, err)

packet := ibcChannelTypes.Packet{
SourceChannel: "src_channel",
SourcePort: "src_port",
DestinationChannel: "dst_channel",
DestinationPort: "dst_port",
Data: msgInternalBytes,
}

msg := &ibcChannelTypes.MsgAcknowledgement{
Signer: "signer",
Packet: packet,
}
msgBytes, err := proto.Marshal(msg)
require.NoError(t, err)

parsed, err := ParseMsgAcknowledgement(msgBytes, &configTypes.Chain{Name: "chain"}, 100)
require.NoError(t, err)
require.NotNil(t, parsed)

require.Equal(t, "/ibc.core.channel.v1.MsgAcknowledgement", parsed.Type())

values := parsed.GetValues()

require.Equal(t, event.EventValues{
event.From(cosmosTypes.EventTypeMessage, cosmosTypes.AttributeKeyAction, "/ibc.core.channel.v1.MsgAcknowledgement"),
event.From(cosmosTypes.EventTypeMessage, cosmosTypes.AttributeKeySender, "signer"),
}, values)

parsed.AddParsedMessage(nil)
parsed.SetParsedMessages([]types.Message{})
require.Empty(t, parsed.GetParsedMessages())
require.Empty(t, parsed.GetRawMessages())
}

func TestMsgAcknowledgementPopulate(t *testing.T) {
t.Parallel()

config := &configPkg.AppConfig{
Chains: configTypes.Chains{
{
Name: "chain",
ChainID: "chain-id",
Denoms: configTypes.DenomInfos{
{Denom: "uatom", DisplayDenom: "atom", DenomExponent: 6, CoingeckoCurrency: "cosmos"},
},
},
},
Metrics: configPkg.MetricsConfig{Enabled: false},
AliasesPath: "path.toml",
}

msgInternal := &ibcTypes.FungibleTokenPacketData{
Denom: "uatom",
Amount: "100",
Sender: "sender",
Receiver: "receiver",
Memo: "memo",
}

msgInternalBytes, err := ibcTypes.ModuleCdc.MarshalJSON(msgInternal)
require.NoError(t, err)

packet := ibcChannelTypes.Packet{
SourceChannel: "src_channel",
SourcePort: "src_port",
DestinationChannel: "dst_channel",
DestinationPort: "dst_port",
Data: msgInternalBytes,
}

msg := &ibcChannelTypes.MsgAcknowledgement{
Signer: "signer",
Packet: packet,
}
msgBytes, err := proto.Marshal(msg)
require.NoError(t, err)

parsed, err := ParseMsgAcknowledgement(msgBytes, &configTypes.Chain{Name: "chain"}, 100)
require.NoError(t, err)
require.NotNil(t, parsed)

filesystem := &fs.MockFs{}
logger := loggerPkg.GetNopLogger()
aliasManager := aliasManagerPkg.NewAliasManager(logger, config, filesystem)
metricsManager := metrics.NewManager(logger, config.Metrics)
dataFetcher := data_fetcher.NewDataFetcher(logger, config, aliasManager, metricsManager)

err = aliasManager.Set("subscription", "chain", "sender", "sender_alias")
require.NoError(t, err)
err = aliasManager.Set("subscription", "chain", "signer", "signer_alias")
require.NoError(t, err)
err = aliasManager.Set("subscription", "chain", "receiver", "receiver_alias")
require.NoError(t, err)

parsed.GetAdditionalData(dataFetcher, "subscription")

message, ok := parsed.(*MsgAcknowledgement)
require.True(t, ok)
require.Equal(t, "sender_alias", message.Sender.Title)
require.Equal(t, "signer_alias", message.Signer.Title)
}
139 changes: 139 additions & 0 deletions pkg/messages/msg_begin_redelegate_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,139 @@
package messages

import (
"fmt"
aliasManagerPkg "main/pkg/alias_manager"
configPkg "main/pkg/config"
configTypes "main/pkg/config/types"
"main/pkg/data_fetcher"
"main/pkg/fs"
loggerPkg "main/pkg/logger"
"main/pkg/metrics"
"main/pkg/types"
"main/pkg/types/event"
"main/pkg/types/responses"
"testing"

cosmosStakingTypes "github.com/cosmos/cosmos-sdk/x/staking/types"

cosmosTypes "github.com/cosmos/cosmos-sdk/types"
"github.com/gogo/protobuf/proto"
"github.com/stretchr/testify/require"
)

func TestMsgBeginRedelegateParse(t *testing.T) {
t.Parallel()

msg := &cosmosStakingTypes.MsgBeginRedelegate{
DelegatorAddress: "delegator",
ValidatorSrcAddress: "validator_src",
ValidatorDstAddress: "validator_dst",
Amount: cosmosTypes.Coin{Amount: cosmosTypes.NewInt(100), Denom: "ustake"},
}
msgBytes, err := proto.Marshal(msg)
require.NoError(t, err)

parsed, err := ParseMsgBeginRedelegate(msgBytes, &configTypes.Chain{Name: "chain"}, 100)
require.NoError(t, err)
require.NotNil(t, parsed)

parsed2, err2 := ParseMsgBeginRedelegate([]byte("aaa"), &configTypes.Chain{Name: "chain"}, 100)
require.Error(t, err2)
require.Nil(t, parsed2)
}

func TestMsgBeginRedelegateBase(t *testing.T) {
t.Parallel()

msg := &cosmosStakingTypes.MsgBeginRedelegate{
DelegatorAddress: "delegator",
ValidatorSrcAddress: "validator_src",
ValidatorDstAddress: "validator_dst",
Amount: cosmosTypes.Coin{Amount: cosmosTypes.NewInt(100), Denom: "ustake"},
}
msgBytes, err := proto.Marshal(msg)
require.NoError(t, err)

parsed, err := ParseMsgBeginRedelegate(msgBytes, &configTypes.Chain{Name: "chain"}, 100)
require.NoError(t, err)
require.NotNil(t, parsed)

require.Equal(t, "/cosmos.staking.v1beta1.MsgBeginRedelegate", parsed.Type())

values := parsed.GetValues()

require.Equal(t, event.EventValues{
event.From(cosmosTypes.EventTypeMessage, cosmosTypes.AttributeKeyAction, "/cosmos.staking.v1beta1.MsgBeginRedelegate"),
event.From(cosmosTypes.EventTypeMessage, cosmosTypes.AttributeKeySender, "delegator"),
event.From(cosmosStakingTypes.EventTypeRedelegate, cosmosStakingTypes.AttributeKeySrcValidator, "validator_src"),
event.From(cosmosStakingTypes.EventTypeRedelegate, cosmosStakingTypes.AttributeKeyDstValidator, "validator_dst"),
event.From(cosmosStakingTypes.EventTypeRedelegate, cosmosStakingTypes.AttributeKeyDelegator, "delegator"),
event.From(cosmosStakingTypes.EventTypeRedelegate, cosmosTypes.AttributeKeyAmount, "100ustake"),
}, values)

parsed.AddParsedMessage(nil)
parsed.SetParsedMessages([]types.Message{})
require.Empty(t, parsed.GetParsedMessages())
require.Empty(t, parsed.GetRawMessages())
}

func TestMsgBeginRedelegatePopulate(t *testing.T) {
t.Parallel()

msg := &cosmosStakingTypes.MsgBeginRedelegate{
DelegatorAddress: "delegator",
ValidatorSrcAddress: "validator_src",
ValidatorDstAddress: "validator_dst",
Amount: cosmosTypes.Coin{Amount: cosmosTypes.NewInt(100000000), Denom: "uatom"},
}
msgBytes, err := proto.Marshal(msg)
require.NoError(t, err)

config := &configPkg.AppConfig{
Chains: configTypes.Chains{
{
Name: "chain",
ChainID: "chain-id",
Denoms: configTypes.DenomInfos{
{Denom: "uatom", DisplayDenom: "atom", DenomExponent: 6, CoingeckoCurrency: "cosmos"},
},
},
},
Metrics: configPkg.MetricsConfig{Enabled: false},
AliasesPath: "path.toml",
}

parsed, err := ParseMsgBeginRedelegate(msgBytes, config.Chains[0], 100)
require.NoError(t, err)
require.NotNil(t, parsed)

filesystem := &fs.MockFs{}
logger := loggerPkg.GetNopLogger()
aliasManager := aliasManagerPkg.NewAliasManager(logger, config, filesystem)
metricsManager := metrics.NewManager(logger, config.Metrics)
dataFetcher := data_fetcher.NewDataFetcher(logger, config, aliasManager, metricsManager)

err = aliasManager.Set("subscription", "chain", "delegator", "delegator_alias")
require.NoError(t, err)

dataFetcher.Cache.Set("chain-id_price_uatom", 6.7)
dataFetcher.Cache.Set("chain_validator_validator_src", &responses.Validator{
OperatorAddress: "test",
Description: responses.ValidatorDescription{Moniker: "Src Validator Moniker"},
})
dataFetcher.Cache.Set("chain_validator_validator_dst", &responses.Validator{
OperatorAddress: "test",
Description: responses.ValidatorDescription{Moniker: "Dst Validator Moniker"},
})

parsed.GetAdditionalData(dataFetcher, "subscription")

msgDelegate, _ := parsed.(*MsgBeginRedelegate)

require.Equal(t, "delegator_alias", msgDelegate.DelegatorAddress.Title)
require.Equal(t, "Src Validator Moniker", msgDelegate.ValidatorSrcAddress.Title)
require.Equal(t, "Dst Validator Moniker", msgDelegate.ValidatorDstAddress.Title)
require.Equal(t, "100.00", fmt.Sprintf("%.2f", msgDelegate.Amount.Value))
require.Equal(t, "670.00", fmt.Sprintf("%.2f", msgDelegate.Amount.PriceUSD))
require.Equal(t, "atom", msgDelegate.Amount.Denom.String())
}
2 changes: 1 addition & 1 deletion pkg/messages/msg_delegate.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ func ParseMsgDelegate(data []byte, chain *configTypes.Chain, height int64) (type
}, nil
}

func (m MsgDelegate) Type() string {
func (m *MsgDelegate) Type() string {
return "/cosmos.staking.v1beta1.MsgDelegate"
}

Expand Down
Loading

0 comments on commit 1958f33

Please sign in to comment.