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}