diff --git a/ibc-testkit/src/relayer/context.rs b/ibc-testkit/src/relayer/context.rs index e68d71313..035b9cb25 100644 --- a/ibc-testkit/src/relayer/context.rs +++ b/ibc-testkit/src/relayer/context.rs @@ -1,4 +1,3 @@ -use ibc::apps::transfer::handler::send_transfer; use ibc::apps::transfer::types::msgs::transfer::MsgTransfer; use ibc::apps::transfer::types::packet::PacketData; use ibc::core::channel::types::packet::Packet; @@ -465,6 +464,9 @@ where } /// Submit a packet via [`DummyTransferModule`] on the first context. + /// + /// Requires `serde` feature because of [`ibc::apps::transfer::handler::send_transfer`]. + #[cfg(feature = "serde")] pub fn send_packet_via_dummy_transfer_module_on_a( &mut self, chan_id_on_a: ChannelId, @@ -491,7 +493,7 @@ where }; // module creates the send_packet - send_transfer( + ibc::apps::transfer::handler::send_transfer( self.get_ctx_a_mut().ibc_store_mut(), &mut DummyTransferModule, msg, diff --git a/ibc-testkit/src/relayer/integration.rs b/ibc-testkit/src/relayer/integration.rs index fb831b498..9993cc7f3 100644 --- a/ibc-testkit/src/relayer/integration.rs +++ b/ibc-testkit/src/relayer/integration.rs @@ -9,7 +9,9 @@ use crate::relayer::context::RelayerContext; use crate::testapp::ibc::core::types::DefaultIbcStore; /// Integration test for IBC implementation. This test creates clients, -/// connections, channels, and sends packets between two [`TestHost`]s. This uses +/// connections, channels between two [`TestHost`]s. +/// +/// If `serde` feature is enabled, this also exercises packet relay between [`TestHost`]s. This uses /// [`DummyTransferModule`](crate::testapp::ibc::applications::transfer::types::DummyTransferModule) /// to simulate the transfer of tokens between two contexts. pub fn ibc_integration_test() @@ -83,71 +85,80 @@ where assert_eq!(chan_id_on_a, ChannelId::new(1)); assert_eq!(chan_id_on_b, ChannelId::new(1)); - // ------------------------ - // send packet from A to B - // ------------------------ - - let packet = - relayer.send_packet_via_dummy_transfer_module_on_a(chan_id_on_a.clone(), signer.clone()); - - // continue packet relay starting from recv_packet at B - relayer.send_packet_on_a(packet, signer.clone()); - - // retrieve the ack_packet event - let Some(IbcEvent::AcknowledgePacket(_)) = relayer - .get_ctx_a() - .ibc_store() - .events - .lock() - .last() - .cloned() - else { - panic!("unexpected event") - }; - - // -------------------------- - // timeout packet from A to B - // -------------------------- - - let packet = - relayer.send_packet_via_dummy_transfer_module_on_a(chan_id_on_a.clone(), signer.clone()); - - // timeout the packet on A; never relay the packet to B - relayer.timeout_packet_on_a(packet.clone(), signer.clone()); - - // retrieve the timeout_packet event - let Some(IbcEvent::TimeoutPacket(_)) = relayer - .get_ctx_a() - .ibc_store() - .events - .lock() - .last() - .cloned() - else { - panic!("unexpected event") - }; - - // ------------------------------------------------ - // timeout packet from A to B; using closed channel - // ------------------------------------------------ - - let packet = - relayer.send_packet_via_dummy_transfer_module_on_a(chan_id_on_a.clone(), signer.clone()); - - // timeout the packet on A; never relay the packet to B - relayer.timeout_packet_on_channel_close_on_a(packet.clone(), signer.clone()); - - // retrieve the timeout_packet event - let Some(IbcEvent::TimeoutPacket(_)) = relayer - .get_ctx_a() - .ibc_store() - .events - .lock() - .last() - .cloned() - else { - panic!("unexpected event") - }; + #[cfg(feature = "serde")] + { + { + // ------------------------ + // send packet from A to B + // ------------------------ + + let packet = relayer + .send_packet_via_dummy_transfer_module_on_a(chan_id_on_a.clone(), signer.clone()); + + // continue packet relay starting from recv_packet at B + relayer.send_packet_on_a(packet, signer.clone()); + + // retrieve the ack_packet event + let Some(IbcEvent::AcknowledgePacket(_)) = relayer + .get_ctx_a() + .ibc_store() + .events + .lock() + .last() + .cloned() + else { + panic!("unexpected event") + }; + } + + { + // -------------------------- + // timeout packet from A to B + // -------------------------- + + let packet = relayer + .send_packet_via_dummy_transfer_module_on_a(chan_id_on_a.clone(), signer.clone()); + + // timeout the packet on A; never relay the packet to B + relayer.timeout_packet_on_a(packet.clone(), signer.clone()); + + // retrieve the timeout_packet event + let Some(IbcEvent::TimeoutPacket(_)) = relayer + .get_ctx_a() + .ibc_store() + .events + .lock() + .last() + .cloned() + else { + panic!("unexpected event") + }; + } + + { + // ------------------------------------------------ + // timeout packet from A to B; using closed channel + // ------------------------------------------------ + + let packet = relayer + .send_packet_via_dummy_transfer_module_on_a(chan_id_on_a.clone(), signer.clone()); + + // timeout the packet on A; never relay the packet to B + relayer.timeout_packet_on_channel_close_on_a(packet.clone(), signer.clone()); + + // retrieve the timeout_packet event + let Some(IbcEvent::TimeoutPacket(_)) = relayer + .get_ctx_a() + .ibc_store() + .events + .lock() + .last() + .cloned() + else { + panic!("unexpected event") + }; + } + } } #[cfg(test)] diff --git a/ibc-testkit/src/relayer/mod.rs b/ibc-testkit/src/relayer/mod.rs index 5c70430ef..961de7885 100644 --- a/ibc-testkit/src/relayer/mod.rs +++ b/ibc-testkit/src/relayer/mod.rs @@ -1,7 +1,4 @@ pub mod context; pub mod error; -pub mod utils; - -// `ibc::apps::transfer::handler::send_transfer` requires `serde` -#[cfg(feature = "serde")] pub mod integration; +pub mod utils;