Search Apps Documentation Source Content File Folder Download Copy Actions Download

packet_test.gno

3.76 Kb · 120 lines
  1package transfer_test
  2
  3import (
  4	"encoding/hex"
  5	"testing"
  6
  7	"gno.land/p/nt/uassert/v0"
  8	"gno.land/p/nt/urequire/v0"
  9	"gno.land/r/aib/ibc/apps/transfer"
 10)
 11
 12func TestFungibleTokenPacketDataProtoMarshal(t *testing.T) {
 13	f := transfer.NewFungibleTokenPacketData("ugnot", "100", "g1user", "atone1user", "memo")
 14
 15	bz := f.ProtoMarshal()
 16
 17	expected := "0a0575676e6f7412033130301a06673175736572220a61746f6e6531757365722a046d656d6f"
 18	got := hex.EncodeToString(bz)
 19	uassert.Equal(t, expected, got)
 20}
 21
 22func TestFungibleTokenPacketDataProtoUnmarshal(t *testing.T) {
 23	bz, err := hex.DecodeString("0a0575676e6f7412033130301a06673175736572220a61746f6e6531757365722a046d656d6f")
 24	urequire.NoError(t, err)
 25	var f transfer.FungibleTokenPacketData
 26
 27	err = f.ProtoUnmarshal(bz)
 28
 29	urequire.NoError(t, err)
 30	uassert.Equal(t, "ugnot", f.Denom)
 31	uassert.Equal(t, "100", f.Amount)
 32	uassert.Equal(t, "g1user", f.Sender)
 33	uassert.Equal(t, "atone1user", f.Receiver)
 34	uassert.Equal(t, "memo", f.Memo)
 35}
 36
 37func TestFungibleTokenPacketDataValidateBasic(t *testing.T) {
 38	const (
 39		sender             = "sender"
 40		receiver           = "receiver"
 41		denom              = "transfer/gaiachannel/atom"
 42		amount             = "100"
 43		largeAmount        = "18446744073709551616"                                                           // one greater than largest uint64 (^uint64(0))
 44		invalidLargeAmount = "115792089237316195423570985008687907853269984665640564039457584007913129639936" // 2^256
 45	)
 46	testCases := []struct {
 47		name       string
 48		packetData transfer.FungibleTokenPacketData
 49		expErr     string
 50	}{
 51		{
 52			name:       "valid packet",
 53			packetData: transfer.NewFungibleTokenPacketData(denom, amount, sender, receiver, ""),
 54			expErr:     "",
 55		},
 56		{
 57			name:       "valid packet with memo",
 58			packetData: transfer.NewFungibleTokenPacketData(denom, amount, sender, receiver, "memo"),
 59			expErr:     "",
 60		},
 61		{
 62			name:       "valid packet with large amount",
 63			packetData: transfer.NewFungibleTokenPacketData(denom, largeAmount, sender, receiver, ""),
 64			expErr:     "",
 65		},
 66		{
 67			name:       "invalid denom",
 68			packetData: transfer.NewFungibleTokenPacketData("", amount, sender, receiver, ""),
 69			expErr:     "base denomination cannot be blank",
 70		},
 71		{
 72			name:       "invalid denom, invalid portID",
 73			packetData: transfer.NewFungibleTokenPacketData("(transfer)/channel-1/uatom", amount, sender, receiver, ""),
 74			expErr:     "invalid trace",
 75		},
 76		{
 77			name:       "invalid empty amount",
 78			packetData: transfer.NewFungibleTokenPacketData(denom, "", sender, receiver, ""),
 79			expErr:     "unable to parse transfer amount \"\"",
 80		},
 81		{
 82			name:       "invalid zero amount",
 83			packetData: transfer.NewFungibleTokenPacketData(denom, "0", sender, receiver, ""),
 84			expErr:     "amount must be strictly positive: got 0",
 85		},
 86		{
 87			name:       "invalid negative amount",
 88			packetData: transfer.NewFungibleTokenPacketData(denom, "-1", sender, receiver, ""),
 89			expErr:     "amount must be strictly positive: got -1",
 90		},
 91		{
 92			name:       "invalid large amount",
 93			packetData: transfer.NewFungibleTokenPacketData(denom, invalidLargeAmount, sender, receiver, ""),
 94			expErr:     "unable to parse transfer amount \"" + invalidLargeAmount + "\"",
 95		},
 96		{
 97			name:       "missing sender address",
 98			packetData: transfer.NewFungibleTokenPacketData(denom, amount, "", receiver, ""),
 99			expErr:     "sender address cannot be blank",
100		},
101		{
102			name:       "missing receiver address",
103			packetData: transfer.NewFungibleTokenPacketData(denom, amount, sender, "", ""),
104			expErr:     "receiver address cannot be blank",
105		},
106	}
107
108	for _, tc := range testCases {
109		t.Run(tc.name, func(t *testing.T) {
110
111			err := tc.packetData.ValidateBasic()
112
113			if tc.expErr == "" {
114				urequire.NoError(t, err)
115				return
116			}
117			urequire.ErrorContains(t, err, tc.expErr)
118		})
119	}
120}