Skip to content

Commit

Permalink
refactor(ibc-testkit): use bon instead of typed-builder (#1326)
Browse files Browse the repository at this point in the history
* refactor(ibc-testkit): use `bon` instead of `typed-builder`

* Bump `bon` requirement

* Bump `bon` requirement

* Fix some places that I missed to update

* Update `LightClientBuilder` to `dummy_light_client()`

* Remove dummy line comments from function args

* default tags at function args

* revert builder pattern

* nits

* pass required args in start_fn

* fix docs build

* use default call instead of build

---------

Co-authored-by: Ranadeep Biswas <mail@rnbguy.at>
Co-authored-by: Rano | Ranadeep <ranadeep@informal.systems>
  • Loading branch information
3 people authored Sep 25, 2024
1 parent ede380f commit cfb707e
Show file tree
Hide file tree
Showing 18 changed files with 272 additions and 397 deletions.
2 changes: 1 addition & 1 deletion ibc-testkit/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ description = """

[dependencies]
# external dependencies
bon = { version = "2.3.0" }
borsh = { workspace = true, optional = true }
derive_more = { workspace = true }
displaydoc = { workspace = true }
Expand All @@ -25,7 +26,6 @@ schemars = { workspace = true, optional = true }
serde = { workspace = true, optional = true }
serde-json = { workspace = true, optional = true }
subtle-encoding = { workspace = true }
typed-builder = { version = "0.19.1" }

# ibc dependencies
ibc = { workspace = true, features = [ "std" ] }
Expand Down
24 changes: 12 additions & 12 deletions ibc-testkit/src/context.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ use ibc::primitives::prelude::*;
use ibc::primitives::Timestamp;

use super::testapp::ibc::core::types::{LightClientState, MockIbcStore};
use crate::fixtures::core::context::TestContextConfig;
use crate::fixtures::core::context::dummy_store_generic_test_context;
use crate::hosts::{HostClientState, MockHost, TendermintHost, TestBlock, TestHeader, TestHost};
use crate::testapp::ibc::clients::{AnyClientState, AnyConsensusState};
use crate::testapp::ibc::core::router::MockRouter;
Expand Down Expand Up @@ -70,7 +70,7 @@ where
HostClientState<H>: ClientStateValidation<MockIbcStore<S>>,
{
fn default() -> Self {
TestContextConfig::builder().build()
dummy_store_generic_test_context().call()
}
}

Expand Down Expand Up @@ -529,35 +529,35 @@ mod tests {
let tests: Vec<Test<H>> = vec![
Test {
name: "Empty history, small pruning window".to_string(),
ctx: TestContextConfig::builder()
ctx: dummy_store_generic_test_context()
.latest_height(Height::new(cv, 1).expect("Never fails"))
.build(),
.call(),
},
Test {
name: "Large pruning window".to_string(),
ctx: TestContextConfig::builder()
ctx: dummy_store_generic_test_context()
.latest_height(Height::new(cv, 2).expect("Never fails"))
.build(),
.call(),
},
Test {
name: "Small pruning window".to_string(),
ctx: TestContextConfig::builder()
ctx: dummy_store_generic_test_context()
.latest_height(Height::new(cv, 30).expect("Never fails"))
.build(),
.call(),
},
Test {
name: "Small pruning window, small starting height".to_string(),
ctx: TestContextConfig::builder()
ctx: dummy_store_generic_test_context()
.latest_height(Height::new(cv, 2).expect("Never fails"))
.build(),
.call(),
},
// This is disabled, as now we generate all the blocks till latest_height
// Generating 2000 Tendermint blocks is slow.
// Test {
// name: "Large pruning window, large starting height".to_string(),
// ctx: TestContextConfig::builder()
// ctx: dummy_store_generic_test_context()
// .latest_height(Height::new(cv, 2000).expect("Never fails"))
// .build(),
// .call(),
// },
];

Expand Down
75 changes: 29 additions & 46 deletions ibc-testkit/src/fixtures/applications/transfer.rs
Original file line number Diff line number Diff line change
@@ -1,38 +1,29 @@
use bon::builder;
use ibc::apps::transfer::types::msgs::transfer::MsgTransfer;
use ibc::apps::transfer::types::packet::PacketData;
use ibc::apps::transfer::types::{Memo, PrefixedCoin};
use ibc::core::channel::types::packet::Packet;
use ibc::core::channel::types::timeout::{TimeoutHeight, TimeoutTimestamp};
use ibc::core::host::types::identifiers::{ChannelId, PortId, Sequence};
use ibc::core::primitives::Signer;
use typed_builder::TypedBuilder;

use crate::fixtures::core::signer::dummy_account_id;

/// Configuration of the `MsgTransfer` message for building dummy messages.
#[derive(TypedBuilder, Debug)]
#[builder(build_method(into = MsgTransfer))]
pub struct MsgTransferConfig {
#[builder(default = PortId::transfer())]
pub port_id_on_a: PortId,
#[builder(default = ChannelId::zero())]
pub chan_id_on_a: ChannelId,
pub packet_data: PacketData,
#[builder(default = TimeoutHeight::Never)]
pub timeout_height_on_b: TimeoutHeight,
#[builder(default = TimeoutTimestamp::Never)]
pub timeout_timestamp_on_b: TimeoutTimestamp,
}

impl From<MsgTransferConfig> for MsgTransfer {
fn from(config: MsgTransferConfig) -> Self {
Self {
port_id_on_a: config.port_id_on_a,
chan_id_on_a: config.chan_id_on_a,
packet_data: config.packet_data,
timeout_height_on_b: config.timeout_height_on_b,
timeout_timestamp_on_b: config.timeout_timestamp_on_b,
}
/// Returns a dummy [`MsgTransfer`], for testing purposes only!
#[builder]
pub fn dummy_msg_transfer(
#[builder(start_fn)] packet_data: PacketData,
#[builder(default = PortId::transfer())] port_id_on_a: PortId,
#[builder(default = ChannelId::zero())] chan_id_on_a: ChannelId,
#[builder(default = TimeoutHeight::Never)] timeout_height_on_b: TimeoutHeight,
#[builder(default = TimeoutTimestamp::Never)] timeout_timestamp_on_b: TimeoutTimestamp,
) -> MsgTransfer {
MsgTransfer {
port_id_on_a,
chan_id_on_a,
packet_data,
timeout_height_on_b,
timeout_timestamp_on_b,
}
}

Expand All @@ -52,26 +43,18 @@ pub fn extract_transfer_packet(msg: &MsgTransfer, sequence: Sequence) -> Packet
}
}

/// Configuration of the `PacketData` type for building dummy packets.
#[derive(TypedBuilder, Debug)]
#[builder(build_method(into = PacketData))]
pub struct PacketDataConfig {
pub token: PrefixedCoin,
#[builder(default = dummy_account_id())]
pub sender: Signer,
#[builder(default = dummy_account_id())]
pub receiver: Signer,
#[builder(default = "".into())]
pub memo: Memo,
}

impl From<PacketDataConfig> for PacketData {
fn from(config: PacketDataConfig) -> Self {
Self {
token: config.token,
sender: config.sender,
receiver: config.receiver,
memo: config.memo,
}
/// Returns a dummy [`PacketData`], for testing purposes only!
#[builder]
pub fn dummy_packet_data(
#[builder(start_fn)] token: PrefixedCoin,
#[builder(default = dummy_account_id())] sender: Signer,
#[builder(default = dummy_account_id())] receiver: Signer,
#[builder(default = "".into())] memo: Memo,
) -> PacketData {
PacketData {
token,
sender,
receiver,
memo,
}
}
4 changes: 2 additions & 2 deletions ibc-testkit/src/fixtures/clients/tendermint.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ use core::str::FromStr;
use core::time::Duration;

use basecoin_store::avl::get_proof_spec as basecoin_proof_spec;
use bon::Builder;
use ibc::clients::tendermint::client_state::ClientState as TmClientState;
use ibc::clients::tendermint::types::error::TendermintClientError;
use ibc::clients::tendermint::types::proto::v1::{ClientState as RawTmClientState, Fraction};
Expand All @@ -17,7 +18,6 @@ use ibc::core::host::types::error::DecodingError;
use ibc::core::host::types::identifiers::ChainId;
use ibc::core::primitives::prelude::*;
use tendermint::block::Header as TmHeader;
use typed_builder::TypedBuilder;

/// Returns a dummy tendermint `ClientState` by given `frozen_height`, for testing purposes only!
pub fn dummy_tm_client_state_from_raw(
Expand Down Expand Up @@ -69,7 +69,7 @@ pub fn dummy_raw_tm_client_state(frozen_height: RawHeight) -> RawTmClientState {
}
}

#[derive(TypedBuilder, Debug)]
#[derive(Debug, Builder)]
pub struct ClientStateConfig {
#[builder(default = TrustThreshold::ONE_THIRD)]
pub trust_level: TrustThreshold,
Expand Down
57 changes: 22 additions & 35 deletions ibc-testkit/src/fixtures/core/channel/packet.rs
Original file line number Diff line number Diff line change
@@ -1,45 +1,32 @@
use bon::builder;
use ibc::core::channel::types::packet::Packet;
use ibc::core::channel::types::proto::v1::Packet as RawPacket;
use ibc::core::channel::types::timeout::{TimeoutHeight, TimeoutTimestamp};
use ibc::core::client::types::proto::v1::Height as RawHeight;
use ibc::core::host::types::identifiers::{ChannelId, PortId, Sequence};
use ibc::core::primitives::prelude::*;
use typed_builder::TypedBuilder;

/// Configuration of the `PacketData` type for building dummy packets.
#[derive(TypedBuilder, Debug)]
#[builder(build_method(into = Packet))]
pub struct PacketConfig {
#[builder(default = Sequence::from(0))]
pub seq_on_a: Sequence,
#[builder(default = PortId::transfer())]
pub port_id_on_a: PortId,
#[builder(default = ChannelId::zero())]
pub chan_id_on_a: ChannelId,
#[builder(default = PortId::transfer())]
pub port_id_on_b: PortId,
#[builder(default = ChannelId::zero())]
pub chan_id_on_b: ChannelId,
#[builder(default)]
pub data: Vec<u8>,
#[builder(default = TimeoutHeight::Never)]
pub timeout_height_on_b: TimeoutHeight,
#[builder(default = TimeoutTimestamp::Never)]
pub timeout_timestamp_on_b: TimeoutTimestamp,
}

impl From<PacketConfig> for Packet {
fn from(config: PacketConfig) -> Self {
Self {
seq_on_a: config.seq_on_a,
port_id_on_a: config.port_id_on_a,
chan_id_on_a: config.chan_id_on_a,
port_id_on_b: config.port_id_on_b,
chan_id_on_b: config.chan_id_on_b,
data: config.data,
timeout_height_on_b: config.timeout_height_on_b,
timeout_timestamp_on_b: config.timeout_timestamp_on_b,
}
/// Returns a dummy [`Packet`], for testing purposes only!
#[builder]
pub fn dummy_packet(
#[builder(default = Sequence::from(0))] seq_on_a: Sequence,
#[builder(default = PortId::transfer())] port_id_on_a: PortId,
#[builder(default = ChannelId::zero())] chan_id_on_a: ChannelId,
#[builder(default = PortId::transfer())] port_id_on_b: PortId,
#[builder(default = ChannelId::zero())] chan_id_on_b: ChannelId,
#[builder(default)] data: Vec<u8>,
#[builder(default = TimeoutHeight::Never)] timeout_height_on_b: TimeoutHeight,
#[builder(default = TimeoutTimestamp::Never)] timeout_timestamp_on_b: TimeoutTimestamp,
) -> Packet {
Packet {
seq_on_a,
port_id_on_a,
chan_id_on_a,
port_id_on_b,
chan_id_on_b,
data,
timeout_height_on_b,
timeout_timestamp_on_b,
}
}

Expand Down
24 changes: 0 additions & 24 deletions ibc-testkit/src/fixtures/core/connection/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -7,36 +7,12 @@ use ibc::core::commitment_types::proto::v1::MerklePrefix;
use ibc::core::connection::types::proto::v1::Counterparty as RawCounterparty;
use ibc::core::host::types::identifiers::ConnectionId;
use ibc::core::primitives::prelude::*;
use typed_builder::TypedBuilder;

pub use self::conn_open_ack::*;
pub use self::conn_open_confirm::*;
pub use self::conn_open_init::*;
pub use self::conn_open_try::*;

#[derive(TypedBuilder, Debug)]
#[builder(build_method(into = RawCounterparty))]
pub struct CounterpartyConfig {
#[builder(default = "07-tendermint-0")]
client_id: &'static str,
#[builder(default = "connection-0")]
connection_id: &'static str,
#[builder(default = Some(MerklePrefix {
key_prefix: b"ibc".to_vec()
}))]
prefix: Option<MerklePrefix>,
}

impl From<CounterpartyConfig> for RawCounterparty {
fn from(config: CounterpartyConfig) -> Self {
Self {
client_id: config.client_id.to_string(),
connection_id: config.connection_id.to_string(),
prefix: config.prefix,
}
}
}

pub fn dummy_raw_counterparty_conn(conn_id: Option<u64>) -> RawCounterparty {
let connection_id = match conn_id {
Some(id) => ConnectionId::new(id).to_string(),
Expand Down
Loading

0 comments on commit cfb707e

Please sign in to comment.