@@ -105,3 +105,58 @@ func TestIBC2SendMsg(t *testing.T) {
105
105
require .Equal (t , uint32 (i ), response .IBC2PacketReceiveCounter )
106
106
}
107
107
}
108
+
109
+ func TestIBC2RAsyncAckSending (t * testing.T ) {
110
+ coord := wasmibctesting .NewCoordinator (t , 2 )
111
+ chainA := wasmibctesting .NewWasmTestChain (coord .GetChain (ibctesting .GetChainID (1 )))
112
+ chainB := wasmibctesting .NewWasmTestChain (coord .GetChain (ibctesting .GetChainID (2 )))
113
+
114
+ contractCodeA := chainA .StoreCodeFile ("./testdata/ibc2.wasm" ).CodeID
115
+ contractAddrA := chainA .InstantiateContract (contractCodeA , []byte (`{}` ))
116
+ contractPortA := wasmkeeper .PortIDForContractV2 (contractAddrA )
117
+
118
+ contractCodeB := chainB .StoreCodeFile ("./testdata/ibc2.wasm" ).CodeID
119
+ contractAddrB := chainB .InstantiateContract (contractCodeB , []byte (`{}` ))
120
+ contractPortB := wasmkeeper .PortIDForContractV2 (contractAddrB )
121
+ require .NotEmpty (t , contractAddrA )
122
+
123
+ path := wasmibctesting .NewWasmPath (chainA , chainB )
124
+ path .EndpointA .ChannelConfig = & ibctesting.ChannelConfig {
125
+ PortID : contractPortA ,
126
+ Version : ibctransfertypes .V1 ,
127
+ Order : channeltypes .UNORDERED ,
128
+ }
129
+ path .EndpointB .ChannelConfig = & ibctesting.ChannelConfig {
130
+ PortID : contractPortB ,
131
+ Version : ibctransfertypes .V1 ,
132
+ Order : channeltypes .UNORDERED ,
133
+ }
134
+
135
+ path .Path .SetupV2 ()
136
+
137
+ var err error
138
+ timeoutTimestamp := chainA .GetTimeoutTimestampSecs ()
139
+ payload := mockv2 .NewMockPayload (contractPortB , contractPortA )
140
+ payload .Value , err = json .Marshal (IbcPayload {ResponseWithoutAck : true })
141
+ require .NoError (t , err )
142
+ packet , err := path .EndpointB .MsgSendPacket (timeoutTimestamp , payload )
143
+ require .NoError (t , err )
144
+ err = path .EndpointA .MsgRecvPacket (packet )
145
+ require .NoError (t , err )
146
+
147
+ var response State
148
+ err = chainA .SmartQuery (contractAddrA .String (), QueryMsg {QueryState : struct {}{}}, & response )
149
+ require .NoError (t , err )
150
+ require .Equal (t , uint32 (1 ), response .IBC2PacketReceiveCounter )
151
+
152
+ timeoutTimestamp = chainA .GetTimeoutTimestampSecs ()
153
+ payload = mockv2 .NewMockPayload (contractPortB , contractPortA )
154
+ payload .Value , err = json .Marshal (IbcPayload {SendAsyncAckForPrevMsg : true })
155
+ require .NoError (t , err )
156
+ packet , err = path .EndpointB .MsgSendPacket (timeoutTimestamp , payload )
157
+ require .NoError (t , err )
158
+ err = wasmibctesting .RelayPendingPacketsV2 (path )
159
+ require .NoError (t , err )
160
+
161
+ // TODO tkulik: We need https://github.com/CosmWasm/wasmd/issues/2171 in order to properly test receiving async ACKs
162
+ }
0 commit comments