diff --git a/packages/orchestration/test/cosmos-interchain-service.test.ts b/packages/orchestration/test/cosmos-interchain-service.test.ts index 7e71a39aa176..a9307a4f95f7 100644 --- a/packages/orchestration/test/cosmos-interchain-service.test.ts +++ b/packages/orchestration/test/cosmos-interchain-service.test.ts @@ -252,6 +252,7 @@ test.serial( { version: 'ics27-2', ordering: 'unordered', encoding: 'json' }, ); + await eventLoopIteration(); // propagate channelOpenAck const { bridgeEvents: bridgeEvents0, bridgeDowncalls: bridgeDowncalls0 } = await inspectDibcBridge(); @@ -278,7 +279,8 @@ test.serial( const { event, ...channelInfo } = bridgeEvents0[0]; // simulate channel closing from remote chain await E(ibcBridge).fromBridge(buildChannelCloseConfirmEvent(channelInfo)); - await eventLoopIteration(); + await eventLoopIteration(); // To propagate channelCloseConfirm + await eventLoopIteration(); // To propagate automatic channelOpenInit const { bridgeEvents: bridgeEvents1, bridgeDowncalls: bridgeDowncalls1 } = await inspectDibcBridge(); diff --git a/packages/orchestration/test/examples/auto-stake-it.contract.test.ts b/packages/orchestration/test/examples/auto-stake-it.contract.test.ts index d462e7e236c2..3ab87c2c91e1 100644 --- a/packages/orchestration/test/examples/auto-stake-it.contract.test.ts +++ b/packages/orchestration/test/examples/auto-stake-it.contract.test.ts @@ -119,6 +119,7 @@ test('make accounts, register tap, return invitationMakers', async t => { 'tokens transferred from LOA to COA', ); await transmitTransferAck(); + await eventLoopIteration(); // propagate the ack const { acknowledgement } = (await inspectDibcBridge()).bridgeEvents.at( -1, ) as IBCEvent<'acknowledgementPacket'>; diff --git a/packages/orchestration/test/network-fakes.ts b/packages/orchestration/test/network-fakes.ts index b137a61930af..b59fde409550 100644 --- a/packages/orchestration/test/network-fakes.ts +++ b/packages/orchestration/test/network-fakes.ts @@ -70,7 +70,7 @@ export const ibcBridgeMocks: { ) => IBCEvent<'channelOpenAck'> : T extends 'acknowledgementPacket' ? ( - obj: IBCMethod<'sendPacket'>, + obj: IBCEvent<'sendPacket'>, opts: { sequence: bigint; acknowledgement: string }, ) => IBCEvent<'acknowledgementPacket'> : never; @@ -102,13 +102,11 @@ export const ibcBridgeMocks: { address: mockChainAddress, }), connectionHops: obj.hops, - order: obj.order, - version: obj.version, }; }, acknowledgementPacket: ( - obj: IBCMethod<'sendPacket'>, + obj: IBCEvent<'sendPacket'>, opts: { sequence: bigint; acknowledgement: string }, ): IBCEvent<'acknowledgementPacket'> => { const { sequence, acknowledgement } = opts; @@ -236,19 +234,23 @@ export const makeFakeIBCBridge = ( : `${bech32Prefix}1test`; addressMap.set(addressKey, mockChainAddress); } - const ackEvent = ibcBridgeMocks.channelOpenAck(obj, { - mockChainAddress, - channelID: `channel-${channelCount}`, - counterpartyChannelID: `channel-${connectionChannelCount}`, + const channelID = `channel-${channelCount}` as const; + + setImmediate(() => { + const ackEvent = ibcBridgeMocks.channelOpenAck(obj, { + mockChainAddress, + channelID, + counterpartyChannelID: `channel-${connectionChannelCount}`, + }); + bridgeHandler?.fromBridge(ackEvent); + bridgeEvents = bridgeEvents.concat(ackEvent); + channelCount += 1; + if (obj.packet.source_port.includes('icacontroller')) { + icaAccountCount += 1; + } + remoteChannelMap[obj.hops[0]] = connectionChannelCount + 1; }); - bridgeHandler?.fromBridge(ackEvent); - bridgeEvents = bridgeEvents.concat(ackEvent); - channelCount += 1; - if (obj.packet.source_port.includes('icacontroller')) { - icaAccountCount += 1; - } - remoteChannelMap[obj.hops[0]] = connectionChannelCount + 1; - return undefined; + return channelID; } case 'sendPacket': { const mockAckMapHasData = obj.packet.data in mockAckMap; @@ -274,9 +276,11 @@ export const makeFakeIBCBridge = ( ? mockAckMap[obj.packet.data] : errorAcknowledgments.error5, }); - bridgeEvents = bridgeEvents.concat(ackEvent); ibcSequenceNonce += 1n; - bridgeHandler?.fromBridge(ackEvent); + setImmediate(() => { + bridgeEvents = bridgeEvents.concat(ackEvent); + bridgeHandler?.fromBridge(ackEvent); + }); return ackEvent.packet; } default: diff --git a/packages/orchestration/test/utils/address.test.ts b/packages/orchestration/test/utils/address.test.ts index ecdf12b688b0..395e7eb3fe05 100644 --- a/packages/orchestration/test/utils/address.test.ts +++ b/packages/orchestration/test/utils/address.test.ts @@ -70,7 +70,7 @@ test('findAddressField', t => { '/ibc-hop/connection-0/ibc-port/icahost/ordered/{"version":"ics27-1","controller_connection_id":"connection-0","host_connection_id":"connection-1","address":"osmo1m30khedzqy9msu4502u74ugmep30v69pzee370jkas57xhmjfgjqe67ayq","encoding":"proto3","tx_type":"sdk_multi_msg"}/ibc-channel/channel-1', ), 'osmo1m30khedzqy9msu4502u74ugmep30v69pzee370jkas57xhmjfgjqe67ayq', - 'returns address when localAddrr is appended to version string', + 'returns address when localAddr is appended to version string', ); t.is( findAddressField( @@ -103,7 +103,7 @@ test('makeICQChannelAddress', t => { ), { message: - /must be '\(\/ibc-hop\/CONNECTION\)\*\/ibc-port\/PORT\/\(ordered\|unordered\)\/VERSION'/, + /must be '\(\/ibc-hop\/CONNECTION\)\*\/ibc-port\/PORT\/\(pipelining\/\(true|false\)\/\)?\(ordered\|unordered\)\/VERSION'/, }, 'makeICQChannelAddress not hardened against malformed version. use `validateRemoteIbcAddress` to detect this, or expect IBC ProtocolImpl to throw', );