From ef8201bdcd94b82fece3ce6ae7f2ed7e3f2b554c Mon Sep 17 00:00:00 2001 From: Ranadeep Biswas Date: Thu, 29 Feb 2024 17:47:25 +0100 Subject: [PATCH] refactor tests --- ibc-testkit/src/fixtures/core/context.rs | 2 +- ibc-testkit/src/testapp/ibc/core/types.rs | 229 +++---- .../tests/core/ics02_client/create_client.rs | 7 +- .../tests/core/ics02_client/update_client.rs | 604 +++++++++++------- .../tests/core/ics02_client/upgrade_client.rs | 22 +- .../core/ics03_connection/conn_open_ack.rs | 36 +- .../ics03_connection/conn_open_confirm.rs | 24 +- .../core/ics03_connection/conn_open_init.rs | 15 +- .../core/ics03_connection/conn_open_try.rs | 16 +- .../core/ics04_channel/acknowledgement.rs | 32 +- .../core/ics04_channel/chan_close_confirm.rs | 26 +- .../core/ics04_channel/chan_close_init.rs | 26 +- .../tests/core/ics04_channel/chan_open_ack.rs | 53 +- .../core/ics04_channel/chan_open_confirm.rs | 44 +- .../core/ics04_channel/chan_open_init.rs | 19 +- .../tests/core/ics04_channel/chan_open_try.rs | 26 +- .../tests/core/ics04_channel/recv_packet.rs | 32 +- .../tests/core/ics04_channel/send_packet.rs | 48 +- .../tests/core/ics04_channel/timeout.rs | 46 +- .../core/ics04_channel/timeout_on_close.rs | 14 +- ibc-testkit/tests/core/router.rs | 5 +- 21 files changed, 750 insertions(+), 576 deletions(-) diff --git a/ibc-testkit/src/fixtures/core/context.rs b/ibc-testkit/src/fixtures/core/context.rs index 656b3bd128..6928614a09 100644 --- a/ibc-testkit/src/fixtures/core/context.rs +++ b/ibc-testkit/src/fixtures/core/context.rs @@ -2,13 +2,13 @@ use alloc::fmt::Debug; use core::cmp::min; use core::ops::{Add, Sub}; use core::time::Duration; -use tendermint::Time; use basecoin_store::context::ProvableStore; use ibc::core::client::types::Height; use ibc::core::host::types::identifiers::ChainId; use ibc::core::primitives::prelude::*; use ibc::core::primitives::Timestamp; +use tendermint::Time; use typed_builder::TypedBuilder; use crate::hosts::TestHost; diff --git a/ibc-testkit/src/testapp/ibc/core/types.rs b/ibc-testkit/src/testapp/ibc/core/types.rs index ace517edd6..96c60b1af9 100644 --- a/ibc-testkit/src/testapp/ibc/core/types.rs +++ b/ibc-testkit/src/testapp/ibc/core/types.rs @@ -529,6 +529,7 @@ mod tests { use ibc::core::channel::types::error::{ChannelError, PacketError}; use ibc::core::channel::types::packet::Packet; use ibc::core::channel::types::Version; + use ibc::core::host::types::identifiers::ChainId; use ibc::core::primitives::Signer; use ibc::core::router::module::Module; use ibc::core::router::types::module::{ModuleExtras, ModuleId}; @@ -536,145 +537,109 @@ mod tests { use super::*; use crate::fixtures::core::channel::PacketConfig; use crate::fixtures::core::signer::dummy_bech32_account; + use crate::hosts::mockhost::MockHost; + use crate::hosts::tenderminthost::TendermintHost; use crate::testapp::ibc::core::router::MockRouter; #[test] - fn test_history_manipulation() { - pub struct Test { + fn test_history_manipulation_mock() { + pub struct Test { name: String, - ctx: MockContext, + ctx: MockContext, } - let cv = 1; // The version to use for all chains. - - let mock_chain_id = ChainId::new(&format!("mockgaia-{cv}")).unwrap(); - - let tests: Vec = vec![ - Test { - name: "Empty history, small pruning window".to_string(), - ctx: MockContextConfig::builder() - .host_id(mock_chain_id.clone()) - .max_history_size(2) - .latest_height(Height::new(cv, 1).expect("Never fails")) - .build(), - }, - Test { - name: "[Synthetic TM host] Empty history, small pruning window".to_string(), - ctx: MockContextConfig::builder() - .host_id(mock_chain_id.clone()) - .host_type(HostType::SyntheticTendermint) - .max_history_size(2) - .latest_height(Height::new(cv, 1).expect("Never fails")) - .build(), - }, - Test { - name: "Large pruning window".to_string(), - ctx: MockContextConfig::builder() - .host_id(mock_chain_id.clone()) - .max_history_size(30) - .latest_height(Height::new(cv, 2).expect("Never fails")) - .build(), - }, - Test { - name: "[Synthetic TM host] Large pruning window".to_string(), - ctx: MockContextConfig::builder() - .host_id(mock_chain_id.clone()) - .host_type(HostType::SyntheticTendermint) - .max_history_size(30) - .latest_height(Height::new(cv, 2).expect("Never fails")) - .build(), - }, - Test { - name: "Small pruning window".to_string(), - ctx: MockContextConfig::builder() - .host_id(mock_chain_id.clone()) - .max_history_size(3) - .latest_height(Height::new(cv, 30).expect("Never fails")) - .build(), - }, - Test { - name: "[Synthetic TM host] Small pruning window".to_string(), - ctx: MockContextConfig::builder() - .host_id(mock_chain_id.clone()) - .host_type(HostType::SyntheticTendermint) - .max_history_size(3) - .latest_height(Height::new(cv, 30).expect("Never fails")) - .build(), - }, - Test { - name: "Small pruning window, small starting height".to_string(), - ctx: MockContextConfig::builder() - .host_id(mock_chain_id.clone()) - .max_history_size(3) - .latest_height(Height::new(cv, 2).expect("Never fails")) - .build(), - }, - Test { - name: "[Synthetic TM host] Small pruning window, small starting height".to_string(), - ctx: MockContextConfig::builder() - .host_id(mock_chain_id.clone()) - .host_type(HostType::SyntheticTendermint) - .max_history_size(3) - .latest_height(Height::new(cv, 2).expect("Never fails")) - .build(), - }, - Test { - name: "Large pruning window, large starting height".to_string(), - ctx: MockContextConfig::builder() - .host_id(mock_chain_id.clone()) - .max_history_size(50) - .latest_height(Height::new(cv, 2000).expect("Never fails")) - .build(), - }, - Test { - name: "[Synthetic TM host] Large pruning window, large starting height".to_string(), - ctx: MockContextConfig::builder() - .host_id(mock_chain_id) - .host_type(HostType::SyntheticTendermint) - .max_history_size(50) - .latest_height(Height::new(cv, 2000).expect("Never fails")) - .build(), - }, - ]; - for mut test in tests { - // All tests should yield a valid context after initialization. - assert!( - test.ctx.validate().is_ok(), - "failed in test {} while validating context {:?}", - test.name, - test.ctx - ); - - let current_height = test.ctx.latest_height(); - - // After advancing the chain's height, the context should still be valid. - test.ctx.advance_host_chain_height(); - assert!( - test.ctx.validate().is_ok(), - "failed in test {} while validating context {:?}", - test.name, - test.ctx - ); - - let next_height = current_height.increment(); - assert_eq!( - test.ctx.latest_height(), - next_height, - "failed while increasing height for context {:?}", - test.ctx - ); - - assert_eq!( - test.ctx - .host_block(¤t_height) - .expect("Never fails") - .height(), - current_height, - "failed while fetching height {:?} of context {:?}", - current_height, - test.ctx - ); + fn run_tests(sub_title: &str) { + let cv = 1; // The version to use for all chains. + let mock_chain_id = ChainId::new(&format!("mockgaia-{cv}")).unwrap(); + + let tests: Vec> = vec![ + Test { + name: "Empty history, small pruning window".to_string(), + ctx: MockContextConfig::builder() + .host_id(mock_chain_id.clone()) + .max_history_size(2) + .latest_height(Height::new(cv, 1).expect("Never fails")) + .build(), + }, + Test { + name: "Large pruning window".to_string(), + ctx: MockContextConfig::builder() + .host_id(mock_chain_id.clone()) + .max_history_size(30) + .latest_height(Height::new(cv, 2).expect("Never fails")) + .build(), + }, + Test { + name: "Small pruning window".to_string(), + ctx: MockContextConfig::builder() + .host_id(mock_chain_id.clone()) + .max_history_size(3) + .latest_height(Height::new(cv, 30).expect("Never fails")) + .build(), + }, + Test { + name: "Small pruning window, small starting height".to_string(), + ctx: MockContextConfig::builder() + .host_id(mock_chain_id.clone()) + .max_history_size(3) + .latest_height(Height::new(cv, 2).expect("Never fails")) + .build(), + }, + Test { + name: "Large pruning window, large starting height".to_string(), + ctx: MockContextConfig::builder() + .host_id(mock_chain_id.clone()) + .max_history_size(50) + .latest_height(Height::new(cv, 2000).expect("Never fails")) + .build(), + }, + ]; + + for mut test in tests { + // All tests should yield a valid context after initialization. + assert!( + test.ctx.validate().is_ok(), + "failed in test [{}] {} while validating context {:?}", + sub_title, + test.name, + test.ctx + ); + + let current_height = test.ctx.latest_height(); + + // After advancing the chain's height, the context should still be valid. + test.ctx.advance_host_chain_height(); + assert!( + test.ctx.validate().is_ok(), + "failed in test [{}] {} while validating context {:?}", + sub_title, + test.name, + test.ctx + ); + + let next_height = current_height.increment(); + assert_eq!( + test.ctx.latest_height(), + next_height, + "failed while increasing height for context {:?}", + test.ctx + ); + + assert_eq!( + test.ctx + .host_block(¤t_height) + .expect("Never fails") + .height(), + current_height, + "failed while fetching height {:?} of context {:?}", + current_height, + test.ctx + ); + } } + + run_tests::("Mock Host"); + run_tests::("Synthetic TM Host"); } #[test] diff --git a/ibc-testkit/tests/core/ics02_client/create_client.rs b/ibc-testkit/tests/core/ics02_client/create_client.rs index 3540aefb62..41bd271da1 100644 --- a/ibc-testkit/tests/core/ics02_client/create_client.rs +++ b/ibc-testkit/tests/core/ics02_client/create_client.rs @@ -13,6 +13,7 @@ use ibc_testkit::fixtures::clients::tendermint::{ dummy_tendermint_header, dummy_tm_client_state_from_header, }; use ibc_testkit::fixtures::core::signer::dummy_account_id; +use ibc_testkit::hosts::mockhost::MockHost; use ibc_testkit::testapp::ibc::clients::mock::client_state::{ client_type as mock_client_type, MockClientState, }; @@ -24,7 +25,7 @@ use test_log::test; #[test] fn test_create_client_ok() { - let mut ctx = MockContext::default(); + let mut ctx = MockContext::::default(); let mut router = MockRouter::new_with_transfer(); let signer = dummy_account_id(); let height = Height::new(0, 42).unwrap(); @@ -57,7 +58,7 @@ fn test_create_client_ok() { fn test_tm_create_client_ok() { let signer = dummy_account_id(); - let mut ctx = MockContext::default(); + let mut ctx = MockContext::::default(); let mut router = MockRouter::new_with_transfer(); @@ -93,7 +94,7 @@ fn test_tm_create_client_ok() { fn test_invalid_frozen_tm_client_creation() { let signer = dummy_account_id(); - let ctx = MockContext::default(); + let ctx = MockContext::::default(); let router = MockRouter::new_with_transfer(); diff --git a/ibc-testkit/tests/core/ics02_client/update_client.rs b/ibc-testkit/tests/core/ics02_client/update_client.rs index ca9d99961d..734a0eb019 100644 --- a/ibc-testkit/tests/core/ics02_client/update_client.rs +++ b/ibc-testkit/tests/core/ics02_client/update_client.rs @@ -19,12 +19,14 @@ use ibc::core::handler::types::msgs::MsgEnvelope; use ibc::core::host::types::identifiers::{ChainId, ClientId, ClientType}; use ibc::core::host::types::path::ClientConsensusStatePath; use ibc::core::host::ValidationContext; -use ibc::core::primitives::{downcast, Timestamp}; +use ibc::core::primitives::Timestamp; use ibc::primitives::proto::Any; use ibc::primitives::ToVec; use ibc_testkit::fixtures::core::context::MockContextConfig; use ibc_testkit::fixtures::core::signer::dummy_account_id; -use ibc_testkit::hosts::block::{HostBlock, HostType}; +use ibc_testkit::hosts::mockhost::MockHost; +use ibc_testkit::hosts::tenderminthost::{BlockParams, TendermintHost}; +use ibc_testkit::hosts::{TestBlock, TestHeader, TestHost}; use ibc_testkit::testapp::ibc::clients::mock::client_state::{ client_type as mock_client_type, MockClientState, }; @@ -33,11 +35,12 @@ use ibc_testkit::testapp::ibc::clients::mock::misbehaviour::Misbehaviour as Mock use ibc_testkit::testapp::ibc::clients::AnyConsensusState; use ibc_testkit::testapp::ibc::core::router::MockRouter; use ibc_testkit::testapp::ibc::core::types::{MockClientConfig, MockContext}; +use ibc_testkit::testapp::ibc::utils::blocks_since; use rstest::*; use tendermint_testgen::Validator as TestgenValidator; struct Fixture { - ctx: MockContext, + ctx: MockContext, router: MockRouter, } @@ -45,11 +48,12 @@ struct Fixture { fn fixture() -> Fixture { let client_id = ClientId::default(); - let ctx = MockContext::default().with_client_config( - MockClientConfig::builder() - .client_id(client_id.clone()) + let ctx = MockContext::::default().with_light_client( + client_id.clone(), + MockContextConfig::builder() .latest_height(Height::new(0, 42).unwrap()) - .build(), + .build::>() + .generate_light_client(vec![], &()), ); let router = MockRouter::new_with_transfer(); @@ -120,13 +124,13 @@ fn test_update_client_with_prev_header() { let height_1 = Height::new(0, 43).unwrap(); let height_2 = Height::new(0, 44).unwrap(); - let mut ctx = MockContext::default().with_client_config( - MockClientConfig::builder() - .client_chain_id(chain_id_b.clone()) - .client_type(tm_client_type()) - .client_id(client_id.clone()) + let mut ctx = MockContext::::default().with_light_client( + client_id.clone(), + MockContextConfig::builder() + .host_id(chain_id_b.clone()) .latest_height(latest_height) - .build(), + .build::>() + .generate_light_client(vec![], &Default::default()), ); let mut router = MockRouter::new_with_transfer(); @@ -136,13 +140,15 @@ fn test_update_client_with_prev_header() { target_height: Height, trusted_height: Height, ) -> MsgEnvelope { - let mut tm_block = HostBlock::generate_tm_block( - chain_id, - target_height.revision_height(), - Timestamp::now(), - ); + let mut tm_block = TendermintHost::new(chain_id) + .generate_block( + target_height.revision_height(), + Timestamp::now(), + &Default::default(), + ) + .into_header(); - tm_block.trusted_height = trusted_height; + tm_block.set_trusted_height(trusted_height); let msg = MsgUpdateClient { client_id, @@ -206,19 +212,22 @@ fn test_consensus_state_pruning() { let mut ctx = MockContextConfig::builder() .host_id(chain_id.clone()) - .host_type(HostType::SyntheticTendermint) .latest_height(client_height) .latest_timestamp(Timestamp::now()) .max_history_size(u64::MAX) - .build::() - .with_client_config( - MockClientConfig::builder() - .client_chain_id(chain_id.clone()) - .client_id(client_id.clone()) + .build::>() + .with_light_client( + client_id.clone(), + MockContextConfig::builder() + .host_id(chain_id.clone()) .latest_height(client_height) - .client_type(tm_client_type()) - .trusting_period(Duration::from_secs(3)) - .build(), + .build::>() + .generate_light_client( + vec![], + &MockClientConfig::builder() + .trusting_period(Duration::from_secs(3)) + .build(), + ), ); let mut router = MockRouter::new_with_transfer(); @@ -233,7 +242,8 @@ fn test_consensus_state_pruning() { ctx.advance_host_chain_height(); - let mut block = ctx.host_block(&update_height).unwrap().clone(); + let block = ctx.host_block(&update_height).unwrap().clone(); + let mut block = block.into_header(); block.set_trusted_height(client_height); @@ -304,30 +314,26 @@ fn test_update_synthetic_tendermint_client_adjacent_ok() { let update_height = Height::new(1, 21).unwrap(); let chain_id_b = ChainId::new("mockgaiaB-1").unwrap(); + let ctx_b = MockContextConfig::builder() + .host_id(chain_id_b) + .latest_height(update_height) + .build::>(); + let mut ctx = MockContextConfig::builder() .host_id(ChainId::new("mockgaiaA-1").unwrap()) .latest_height(Height::new(1, 1).unwrap()) - .build::() - .with_client_config( - MockClientConfig::builder() - .client_chain_id(chain_id_b.clone()) - .client_id(client_id.clone()) - .client_type(tm_client_type()) // The target host chain (B) is synthetic TM. - .latest_height(client_height) - .build(), + .build::>() + .with_light_client( + client_id.clone(), + ctx_b.generate_light_client(vec![client_height], &Default::default()), ); let mut router = MockRouter::new_with_transfer(); - let ctx_b = MockContextConfig::builder() - .host_id(chain_id_b) - .host_type(HostType::SyntheticTendermint) - .latest_height(update_height) - .build::(); - let signer = dummy_account_id(); - let mut block = ctx_b.host_block(&update_height).unwrap().clone(); + let block = ctx_b.host_block(&update_height).unwrap().clone(); + let mut block = block.into_header(); block.set_trusted_height(client_height); let latest_header_height = block.height(); @@ -360,23 +366,6 @@ fn test_update_synthetic_tendermint_client_validator_change_ok() { let client_height = Height::new(1, 20).unwrap(); let chain_id_b = ChainId::new("mockgaiaB-1").unwrap(); - let mut ctx_a = MockContextConfig::builder() - .host_id(ChainId::new("mockgaiaA-1").unwrap()) - .latest_height(Height::new(1, 1).unwrap()) - .build::() - .with_client_config( - // client state initialized with client_height, and - // [{id: 1, power: 50}, {id: 2, power: 50}] for validator set and next validator set. - MockClientConfig::builder() - .client_chain_id(chain_id_b.clone()) - .client_id(client_id.clone()) - .latest_height(client_height) - .client_type(tm_client_type()) - .build(), - ); - - let mut router_a = MockRouter::new_with_transfer(); - let ctx_b_val_history = vec![ // First two validator sets are default at client creation // @@ -387,13 +376,14 @@ fn test_update_synthetic_tendermint_client_validator_change_ok() { ], // validator set of height-21 vec![ - TestgenValidator::new("1").voting_power(50), - TestgenValidator::new("2").voting_power(50), + TestgenValidator::new("1").voting_power(34), + TestgenValidator::new("2").voting_power(66), ], // validator set of height-22 + // overlap maintains 1/3 power in older set vec![ - TestgenValidator::new("1").voting_power(30), - TestgenValidator::new("2").voting_power(70), + TestgenValidator::new("1").voting_power(1), + TestgenValidator::new("4").voting_power(99), ], // validator set of height-23 vec![ @@ -402,25 +392,46 @@ fn test_update_synthetic_tendermint_client_validator_change_ok() { ], ]; - let update_height = client_height.add(ctx_b_val_history.len() as u64 - 2); + let block_params = BlockParams::from_validator_history(ctx_b_val_history); + + let update_height = client_height.add(block_params.len() as u64 - 1); + + assert_eq!(update_height.revision_height(), 22); let ctx_b = MockContextConfig::builder() .host_id(chain_id_b.clone()) - .host_type(HostType::SyntheticTendermint) .latest_height(update_height) - .max_history_size(ctx_b_val_history.len() as u64 - 1) - .validator_set_history(ctx_b_val_history) - .build::(); + .max_history_size(block_params.len() as u64) + .validator_set_history(block_params) + .build::>(); + + let mut ctx_a = MockContextConfig::builder() + .host_id(ChainId::new("mockgaiaA-1").unwrap()) + .latest_height(Height::new(1, 1).unwrap()) + .build::>() + .with_light_client( + client_id.clone(), + // remote light client initialized with client_height + ctx_b.generate_light_client(vec![client_height], &Default::default()), + ); + + let mut router_a = MockRouter::new_with_transfer(); let signer = dummy_account_id(); - let mut block = ctx_b.host_block(&update_height).unwrap().clone(); + let mut block = ctx_b + .host_block(&update_height) + .unwrap() + .clone() + .into_header(); block.set_trusted_height(client_height); - let trusted_next_validator_set = match ctx_b.host_block(&client_height).expect("no error") { - HostBlock::SyntheticTendermint(header) => header.light_block.next_validators.clone(), - _ => panic!("unexpected host block type"), - }; + let trusted_next_validator_set = ctx_b + .host_block(&client_height) + .expect("no error") + .inner() + .next_validators + .clone(); block.set_trusted_next_validators_set(trusted_next_validator_set); @@ -447,28 +458,11 @@ fn test_update_synthetic_tendermint_client_validator_change_ok() { } #[rstest] -fn test_update_synthetic_tendermint_client_validator_change_fail() { +fn test_update_synthetic_tendermint_client_wrong_trusted_validator_change_fail() { let client_id = tm_client_type().build_client_id(0); let client_height = Height::new(1, 20).unwrap(); let chain_id_b = ChainId::new("mockgaiaB-1").unwrap(); - let ctx_a = MockContextConfig::builder() - .host_id(ChainId::new("mockgaiaA-1").unwrap()) - .latest_height(Height::new(1, 1).unwrap()) - .build::() - .with_client_config( - // client state initialized with client_height, and - // [{id: 1, power: 50}, {id: 2, power: 50}] for validator set and next validator set. - MockClientConfig::builder() - .client_chain_id(chain_id_b.clone()) - .client_id(client_id.clone()) - .latest_height(client_height) - .client_type(tm_client_type()) - .build(), - ); - - let router = MockRouter::new_with_transfer(); - let ctx_b_val_history = vec![ // First two validator sets are default at client creation // @@ -495,27 +489,60 @@ fn test_update_synthetic_tendermint_client_validator_change_fail() { ], ]; - let update_height = client_height.add(ctx_b_val_history.len() as u64 - 2); + let block_params = BlockParams::from_validator_history(ctx_b_val_history); + + let update_height = client_height.add(block_params.len() as u64 - 1); + + assert_eq!(update_height.revision_height(), 22); let ctx_b = MockContextConfig::builder() .host_id(chain_id_b.clone()) - .host_type(HostType::SyntheticTendermint) .latest_height(update_height) - .max_history_size(ctx_b_val_history.len() as u64 - 1) - .validator_set_history(ctx_b_val_history) - .build::(); + .max_history_size(block_params.len() as u64) + .validator_set_history(block_params) + .build::>(); + + let ctx_a = MockContextConfig::builder() + .host_id(ChainId::new("mockgaiaA-1").unwrap()) + .latest_height(Height::new(1, 1).unwrap()) + .build::>() + .with_light_client( + client_id.clone(), + // remote light client initialized with client_height + ctx_b.generate_light_client(vec![client_height], &Default::default()), + ); + + let router = MockRouter::new_with_transfer(); let signer = dummy_account_id(); - let mut block = ctx_b.host_block(&update_height).unwrap().clone(); + let mut block = ctx_b + .host_block(&update_height) + .unwrap() + .clone() + .into_header(); block.set_trusted_height(client_height); - let trusted_next_validator_set = match ctx_b.host_block(&client_height).expect("no error") { - HostBlock::SyntheticTendermint(header) => header.light_block.next_validators.clone(), - _ => panic!("unexpected host block type"), - }; + let trusted_next_validator_set = ctx_b + .host_block(&client_height) + .expect("no error") + .inner() + .next_validators + .clone(); + + let mistrusted_next_validator_set = ctx_b + .host_block(&client_height.increment()) + .expect("no error") + .inner() + .next_validators + .clone(); + + assert_ne!( + mistrusted_next_validator_set.hash(), + trusted_next_validator_set.hash() + ); - block.set_trusted_next_validators_set(trusted_next_validator_set); + block.set_trusted_next_validators_set(mistrusted_next_validator_set); let msg = MsgUpdateClient { client_id, @@ -531,40 +558,124 @@ fn test_update_synthetic_tendermint_client_validator_change_fail() { } #[rstest] -fn test_update_synthetic_tendermint_client_non_adjacent_ok() { +fn test_update_synthetic_tendermint_client_validator_change_fail() { let client_id = tm_client_type().build_client_id(0); let client_height = Height::new(1, 20).unwrap(); - let update_height = Height::new(1, 21).unwrap(); let chain_id_b = ChainId::new("mockgaiaB-1").unwrap(); - let mut ctx = MockContextConfig::builder() + let ctx_b_val_history = vec![ + // First two validator sets are default at client creation + // + // validator set of height-20 + vec![ + TestgenValidator::new("1").voting_power(50), + TestgenValidator::new("2").voting_power(50), + ], + // validator set of height-21 + vec![ + TestgenValidator::new("1").voting_power(90), + TestgenValidator::new("2").voting_power(10), + ], + // validator set of height-22 + // 2/3 validator power has changed + // TODO(rano): inspect more about corner case of the change + vec![ + // TestgenValidator::new("1").voting_power(0), + TestgenValidator::new("4").voting_power(90), + TestgenValidator::new("2").voting_power(10), + ], + // validator set of height-23 + vec![ + TestgenValidator::new("1").voting_power(20), + TestgenValidator::new("2").voting_power(80), + ], + ]; + + let block_params = BlockParams::from_validator_history(ctx_b_val_history); + + let update_height = client_height.add(block_params.len() as u64 - 1); + + assert_eq!(update_height.revision_height(), 22); + + let ctx_b = MockContextConfig::builder() + .host_id(chain_id_b.clone()) + .latest_height(update_height) + .max_history_size(block_params.len() as u64) + .validator_set_history(block_params) + .build::>(); + + let ctx_a = MockContextConfig::builder() .host_id(ChainId::new("mockgaiaA-1").unwrap()) .latest_height(Height::new(1, 1).unwrap()) - .build::() - .with_client_config( - MockClientConfig::builder() - .client_chain_id(chain_id_b.clone()) - .client_id(client_id.clone()) - .client_type(tm_client_type()) // The target host chain (B) is synthetic TM. - .latest_height(client_height) - .consensus_state_heights(vec![ - client_height.sub(1).expect("no error"), - client_height, - ]) - .build(), + .build::>() + .with_light_client( + client_id.clone(), + // remote light client initialized with client_height + ctx_b.generate_light_client(vec![client_height], &Default::default()), ); - let mut router = MockRouter::new_with_transfer(); + let router_a = MockRouter::new_with_transfer(); + + let signer = dummy_account_id(); + + let mut block = ctx_b + .host_block(&update_height) + .unwrap() + .clone() + .into_header(); + block.set_trusted_height(client_height); + + let trusted_next_validator_set = ctx_b + .host_block(&client_height) + .expect("no error") + .inner() + .next_validators + .clone(); + + block.set_trusted_next_validators_set(trusted_next_validator_set); + + let msg = MsgUpdateClient { + client_id, + client_message: block.into(), + signer, + }; + let msg_envelope = MsgEnvelope::from(ClientMsg::from(msg.clone())); + + let res = validate(&ctx_a, &router_a, msg_envelope.clone()); + + assert!(res.is_err()); +} + +#[rstest] +fn test_update_synthetic_tendermint_client_non_adjacent_ok() { + let client_id = tm_client_type().build_client_id(0); + let client_height = Height::new(1, 20).unwrap(); + let update_height = Height::new(1, 21).unwrap(); + let chain_id_b = ChainId::new("mockgaiaB-1").unwrap(); let ctx_b = MockContextConfig::builder() .host_id(chain_id_b) - .host_type(HostType::SyntheticTendermint) .latest_height(update_height) - .build::(); + .build::>(); + + let mut ctx = MockContextConfig::builder() + .host_id(ChainId::new("mockgaiaA-1").unwrap()) + .latest_height(Height::new(1, 1).unwrap()) + .build::>() + .with_light_client( + client_id.clone(), + ctx_b.generate_light_client( + vec![client_height.sub(1).expect("no error"), client_height], + &Default::default(), + ), + ); + + let mut router = MockRouter::new_with_transfer(); let signer = dummy_account_id(); - let mut block = ctx_b.host_block(&update_height).unwrap().clone(); + let block = ctx_b.host_block(&update_height).unwrap().clone(); + let mut block = block.into_header(); let trusted_height = client_height.clone().sub(1).unwrap(); block.set_trusted_height(trusted_height); @@ -602,48 +713,39 @@ fn test_update_synthetic_tendermint_client_duplicate_ok() { let ctx_b_chain_id = ChainId::new("mockgaiaB-1").unwrap(); let start_height = Height::new(1, 11).unwrap(); + let ctx_b = MockContextConfig::builder() + .host_id(ctx_b_chain_id) + .latest_height(client_height) + .max_history_size(blocks_since(client_height, start_height).expect("no error") + 1) + .build::>(); + let mut ctx_a = MockContextConfig::builder() .host_id(ctx_a_chain_id) .latest_height(start_height) - .build::() - .with_client_config( - MockClientConfig::builder() - .client_chain_id(ctx_b_chain_id.clone()) - .client_id(client_id.clone()) - .client_type(tm_client_type()) // The target host chain (B) is synthetic TM. - .latest_height(client_height) - .consensus_state_heights(vec![start_height]) - .build(), + .build::>() + .with_light_client( + client_id.clone(), + ctx_b.generate_light_client(vec![start_height], &Default::default()), ); let mut router_a = MockRouter::new_with_transfer(); - let ctx_b = MockContextConfig::builder() - .host_id(ctx_b_chain_id) - .host_type(HostType::SyntheticTendermint) - .latest_height(client_height) - .build::(); - let signer = dummy_account_id(); let block = ctx_b.host_block(&client_height).unwrap().clone(); + let mut block = block.into_header(); // Update the trusted height of the header to point to the previous height // (`start_height` in this case). // // Note: The current MockContext interface doesn't allow us to // do this without a major redesign. - let block = match block { - HostBlock::SyntheticTendermint(mut theader) => { - // current problem: the timestamp of the new header doesn't match the timestamp of - // the stored consensus state. If we hack them to match, then commit check fails. - // FIXME: figure out why they don't match. - theader.trusted_height = start_height; - - HostBlock::SyntheticTendermint(theader) - } - _ => block, - }; + + // current problem: the timestamp of the new header doesn't match the timestamp of + // the stored consensus state. If we hack them to match, then commit check fails. + // FIXME: figure out why they don't match. + + block.set_trusted_height(start_height); // Update the client height to `client_height` // @@ -652,9 +754,9 @@ fn test_update_synthetic_tendermint_client_duplicate_ok() { { // FIXME: idea: we need to update the light client with the latest block from // chain B - let consensus_state: AnyConsensusState = block.clone().into(); + let consensus_state: AnyConsensusState = block.clone().into_consensus_state().into(); - let tm_block = downcast!(block.clone() => HostBlock::SyntheticTendermint).unwrap(); + let tm_block = █ let chain_id = ChainId::from_str(tm_block.header().chain_id.as_str()).unwrap(); @@ -730,33 +832,29 @@ fn test_update_synthetic_tendermint_client_lower_height() { let chain_start_height = Height::new(1, 11).unwrap(); + let ctx_b = MockContextConfig::builder() + .host_id(ChainId::new("mockgaiaB-1").unwrap()) + .latest_height(client_height) + .build::>(); + let ctx = MockContextConfig::builder() .host_id(ChainId::new("mockgaiaA-1").unwrap()) .latest_height(chain_start_height) - .build::() - .with_client_config( - MockClientConfig::builder() - .client_id(client_id.clone()) - .client_type(tm_client_type()) // The target host chain (B) is synthetic TM. - .latest_height(client_height) - .build(), + .build::>() + .with_light_client( + client_id.clone(), + ctx_b.generate_light_client(vec![], &Default::default()), ); let router = MockRouter::new_with_transfer(); - let ctx_b = MockContextConfig::builder() - .host_id(ChainId::new("mockgaiaB-1").unwrap()) - .host_type(HostType::SyntheticTendermint) - .latest_height(client_height) - .build::(); - let signer = dummy_account_id(); let block_ref = ctx_b.host_block(&client_update_height).unwrap(); let msg = MsgUpdateClient { client_id, - client_message: block_ref.clone().into(), + client_message: block_ref.clone().into_header().into(), signer, }; @@ -795,7 +893,10 @@ fn test_update_client_events(fixture: Fixture) { ibc_events[0], IbcEvent::Message(MessageEvent::Client) )); - let update_client_event = downcast!(&ibc_events[1] => IbcEvent::UpdateClient).unwrap(); + + let IbcEvent::UpdateClient(update_client_event) = &ibc_events[1] else { + panic!("UpdateClient event is expected") + }; assert_eq!(update_client_event.client_id(), &client_id); assert_eq!(update_client_event.client_type(), &mock_client_type()); @@ -804,7 +905,11 @@ fn test_update_client_events(fixture: Fixture) { assert_eq!(update_client_event.header(), &header.to_vec()); } -fn ensure_misbehaviour(ctx: &MockContext, client_id: &ClientId, client_type: &ClientType) { +fn ensure_misbehaviour( + ctx: &MockContext, + client_id: &ClientId, + client_type: &ClientType, +) { let client_state = ctx.client_state(client_id).unwrap(); let status = client_state.status(ctx, client_id).unwrap(); @@ -817,8 +922,9 @@ fn ensure_misbehaviour(ctx: &MockContext, client_id: &ClientId, client_type: &Cl ibc_events[0], IbcEvent::Message(MessageEvent::Client), )); - let misbehaviour_client_event = - downcast!(&ibc_events[1] => IbcEvent::ClientMisbehaviour).unwrap(); + let IbcEvent::ClientMisbehaviour(misbehaviour_client_event) = &ibc_events[1] else { + panic!("ClientMisbehaviour event is expected") + }; assert_eq!(misbehaviour_client_event.client_id(), client_id); assert_eq!(misbehaviour_client_event.client_type(), client_type); } @@ -854,11 +960,12 @@ fn test_submit_misbehaviour_nonexisting_client(fixture: Fixture) { let msg_envelope = msg_update_client(&ClientId::from_str("nonexistingclient").unwrap()); - let ctx = MockContext::default().with_client_config( - MockClientConfig::builder() - .client_id(client_id.clone()) + let ctx = MockContext::::default().with_light_client( + client_id.clone(), + MockContextConfig::builder() .latest_height(Height::new(0, 42).unwrap()) - .build(), + .build::>() + .generate_light_client(vec![], &()), ); let res = validate(&ctx, &router, msg_envelope); assert!(res.is_err()); @@ -872,11 +979,12 @@ fn test_client_update_misbehaviour_nonexisting_client(fixture: Fixture) { let msg_envelope = msg_update_client(&ClientId::from_str("nonexistingclient").unwrap()); - let ctx = MockContext::default().with_client_config( - MockClientConfig::builder() - .client_id(client_id.clone()) + let ctx = MockContext::::default().with_light_client( + client_id.clone(), + MockContextConfig::builder() .latest_height(Height::new(0, 42).unwrap()) - .build(), + .build::>() + .generate_light_client(vec![], &()), ); let res = validate(&ctx, &router, msg_envelope); assert!(res.is_err()); @@ -891,44 +999,42 @@ fn test_misbehaviour_synthetic_tendermint_equivocation() { let misbehaviour_height = Height::new(1, 21).unwrap(); let chain_id_b = ChainId::new("mockgaiaB-1").unwrap(); + // Create a mock context for chain-B + let ctx_b = MockContextConfig::builder() + .host_id(chain_id_b.clone()) + .latest_height(misbehaviour_height) + .build::>(); + // Create a mock context for chain-A with a synthetic tendermint light client for chain-B let mut ctx_a = MockContextConfig::builder() .host_id(ChainId::new("mockgaiaA-1").unwrap()) .latest_height(Height::new(1, 1).unwrap()) - .build::() - .with_client_config( - MockClientConfig::builder() - .client_chain_id(chain_id_b.clone()) - .client_id(client_id.clone()) - .client_type(tm_client_type()) - .latest_height(client_height) - .build(), + .build::>() + .with_light_client( + client_id.clone(), + ctx_b.generate_light_client(vec![client_height], &Default::default()), ); let mut router_a = MockRouter::new_with_transfer(); - // Create a mock context for chain-B - let ctx_b = MockContextConfig::builder() - .host_id(chain_id_b.clone()) - .host_type(HostType::SyntheticTendermint) - .latest_height(misbehaviour_height) - .build::(); - // Get chain-B's header at `misbehaviour_height` let header1: TmHeader = { - let mut block = ctx_b.host_block(&misbehaviour_height).unwrap().clone(); + let block = ctx_b.host_block(&misbehaviour_height).unwrap().clone(); + let mut block = block.into_header(); block.set_trusted_height(client_height); - block.try_into_tm_block().unwrap().into() + block.into() }; // Generate an equivocal header for chain-B at `misbehaviour_height` let header2 = { - let mut tm_block = HostBlock::generate_tm_block( - chain_id_b, - misbehaviour_height.revision_height(), - Timestamp::now(), - ); - tm_block.trusted_height = client_height; + let mut tm_block = TendermintHost::new(chain_id_b) + .generate_block( + misbehaviour_height.revision_height(), + Timestamp::now(), + &Default::default(), + ) + .into_header(); + tm_block.set_trusted_height(client_height); tm_block.into() }; @@ -957,26 +1063,28 @@ fn test_misbehaviour_synthetic_tendermint_bft_time() { let mut ctx_a = MockContextConfig::builder() .host_id(ChainId::new("mockgaiaA-1").unwrap()) .latest_height(Height::new(1, 1).unwrap()) - .build::() - .with_client_config( - MockClientConfig::builder() - .client_chain_id(chain_id_b.clone()) - .client_id(client_id.clone()) - .client_type(tm_client_type()) + .build::>() + .with_light_client( + client_id.clone(), + MockContextConfig::builder() + .host_id(chain_id_b.clone()) .latest_height(client_height) - .build(), + .build::>() + .generate_light_client(vec![], &Default::default()), ); let mut router_a = MockRouter::new_with_transfer(); // Generate `header1` for chain-B let header1 = { - let mut tm_block = HostBlock::generate_tm_block( - chain_id_b.clone(), - misbehaviour_height.revision_height(), - Timestamp::now(), - ); - tm_block.trusted_height = client_height; + let mut tm_block = TendermintHost::new(chain_id_b.clone()) + .generate_block( + misbehaviour_height.revision_height(), + Timestamp::now(), + &Default::default(), + ) + .into_header(); + tm_block.set_trusted_height(client_height); tm_block }; @@ -985,12 +1093,14 @@ fn test_misbehaviour_synthetic_tendermint_bft_time() { let header2 = { let timestamp = Timestamp::from_nanoseconds(Timestamp::now().nanoseconds() + 1_000_000_000).unwrap(); - let mut tm_block = HostBlock::generate_tm_block( - chain_id_b, - misbehaviour_height.revision_height(), - timestamp, - ); - tm_block.trusted_height = client_height; + let mut tm_block = TendermintHost::new(chain_id_b) + .generate_block( + misbehaviour_height.revision_height(), + timestamp, + &Default::default(), + ) + .into_header(); + tm_block.set_trusted_height(client_height); tm_block }; @@ -1027,16 +1137,20 @@ fn test_expired_client() { .host_id(ChainId::new("mockgaiaA-1").unwrap()) .latest_height(Height::new(1, 1).unwrap()) .latest_timestamp(timestamp) - .build::() - .with_client_config( - MockClientConfig::builder() - .client_chain_id(chain_id_b.clone()) - .client_id(client_id.clone()) + .build::>() + .with_light_client( + client_id.clone(), + MockContextConfig::builder() + .host_id(chain_id_b) .latest_height(client_height) - .client_type(tm_client_type()) .latest_timestamp(timestamp) - .trusting_period(trusting_period) - .build(), + .build::>() + .generate_light_client( + vec![], + &MockClientConfig::builder() + .trusting_period(trusting_period) + .build(), + ), ); while ctx.host_timestamp().expect("no error") < (timestamp + trusting_period).expect("no error") @@ -1065,27 +1179,30 @@ fn test_client_update_max_clock_drift() { .host_id(ChainId::new("mockgaiaA-1").unwrap()) .latest_height(Height::new(1, 1).unwrap()) .latest_timestamp(timestamp) - .build::() - .with_client_config( - MockClientConfig::builder() - .client_chain_id(chain_id_b.clone()) - .client_id(client_id.clone()) + .build::>() + .with_light_client( + client_id.clone(), + MockContextConfig::builder() + .host_id(chain_id_b.clone()) .latest_height(client_height) - .client_type(tm_client_type()) .latest_timestamp(timestamp) - .max_clock_drift(max_clock_drift) - .build(), + .build::>() + .generate_light_client( + vec![], + &MockClientConfig::builder() + .max_clock_drift(max_clock_drift) + .build(), + ), ); let router_a = MockRouter::new_with_transfer(); let mut ctx_b = MockContextConfig::builder() .host_id(chain_id_b.clone()) - .host_type(HostType::SyntheticTendermint) .latest_height(client_height) .latest_timestamp(timestamp) .max_history_size(u64::MAX) - .build::(); + .build::>(); while ctx_b.host_timestamp().expect("no error") < (ctx_a.host_timestamp().expect("no error") + max_clock_drift).expect("no error") @@ -1100,13 +1217,16 @@ fn test_client_update_max_clock_drift() { let signer = dummy_account_id(); - let mut block = ctx_b.host_block(&update_height).unwrap().clone(); + let block = ctx_b.host_block(&update_height).unwrap().clone(); + let mut block = block.into_header(); block.set_trusted_height(client_height); - let trusted_next_validator_set = match ctx_b.host_block(&client_height).expect("no error") { - HostBlock::SyntheticTendermint(header) => header.light_block.next_validators.clone(), - _ => panic!("unexpected host block type"), - }; + let trusted_next_validator_set = ctx_b + .host_block(&client_height) + .expect("no error") + .inner() + .next_validators + .clone(); block.set_trusted_next_validators_set(trusted_next_validator_set); diff --git a/ibc-testkit/tests/core/ics02_client/upgrade_client.rs b/ibc-testkit/tests/core/ics02_client/upgrade_client.rs index 7b58f98e6f..5856108647 100644 --- a/ibc-testkit/tests/core/ics02_client/upgrade_client.rs +++ b/ibc-testkit/tests/core/ics02_client/upgrade_client.rs @@ -8,16 +8,17 @@ use ibc::core::handler::types::events::{IbcEvent, MessageEvent}; use ibc::core::handler::types::msgs::MsgEnvelope; use ibc::core::host::types::path::ClientConsensusStatePath; use ibc::core::host::ValidationContext; -use ibc::core::primitives::downcast; use ibc_testkit::fixtures::clients::tendermint::{ dummy_tendermint_header, dummy_tm_client_state_from_header, }; use ibc_testkit::fixtures::core::client::dummy_msg_upgrade_client; +use ibc_testkit::fixtures::core::context::MockContextConfig; use ibc_testkit::fixtures::{Expect, Fixture}; +use ibc_testkit::hosts::mockhost::MockHost; use ibc_testkit::testapp::ibc::clients::mock::client_state::client_type as mock_client_type; use ibc_testkit::testapp::ibc::clients::{AnyClientState, AnyConsensusState}; use ibc_testkit::testapp::ibc::core::router::MockRouter; -use ibc_testkit::testapp::ibc::core::types::{MockClientConfig, MockContext}; +use ibc_testkit::testapp::ibc::core::types::MockContext; enum Ctx { Default, @@ -33,12 +34,13 @@ enum Msg { fn msg_upgrade_client_fixture(ctx_variant: Ctx, msg_variant: Msg) -> Fixture { let client_id = mock_client_type().build_client_id(0); - let ctx_default = MockContext::default(); - let ctx_with_client = MockContext::default().with_client_config( - MockClientConfig::builder() - .client_id(client_id.clone()) + let ctx_default = MockContext::::default(); + let ctx_with_client = MockContext::::default().with_light_client( + client_id.clone(), + MockContextConfig::builder() .latest_height(Height::new(0, 42).unwrap()) - .build(), + .build::>() + .generate_light_client(vec![], &()), ); let ctx = match ctx_variant { Ctx::Default => ctx_default, @@ -102,8 +104,10 @@ fn upgrade_client_execute(fxt: &mut Fixture, expect: Expect) { ibc_events[0], IbcEvent::Message(MessageEvent::Client) )); - let upgrade_client_event = - downcast!(&ibc_events[1] => IbcEvent::UpgradeClient).unwrap(); + + let IbcEvent::UpgradeClient(upgrade_client_event) = &ibc_events[1] else { + panic!("UpgradeClient event is expected") + }; let plan_height = Height::new(1, 26).unwrap(); assert_eq!(upgrade_client_event.client_id(), &fxt.msg.client_id); diff --git a/ibc-testkit/tests/core/ics03_connection/conn_open_ack.rs b/ibc-testkit/tests/core/ics03_connection/conn_open_ack.rs index de2386e8d6..61c5ceb70f 100644 --- a/ibc-testkit/tests/core/ics03_connection/conn_open_ack.rs +++ b/ibc-testkit/tests/core/ics03_connection/conn_open_ack.rs @@ -16,8 +16,9 @@ use ibc::core::primitives::ZERO_DURATION; use ibc_testkit::fixtures::core::connection::dummy_msg_conn_open_ack; use ibc_testkit::fixtures::core::context::MockContextConfig; use ibc_testkit::fixtures::{Expect, Fixture}; +use ibc_testkit::hosts::mockhost::MockHost; use ibc_testkit::testapp::ibc::core::router::MockRouter; -use ibc_testkit::testapp::ibc::core::types::{MockClientConfig, MockContext}; +use ibc_testkit::testapp::ibc::core::types::MockContext; use test_log::test; enum Ctx { @@ -57,35 +58,38 @@ fn conn_open_ack_fixture(ctx: Ctx) -> Fixture { let mut conn_end_open = default_conn_end.clone(); conn_end_open.set_state(State::Open); // incorrect field - let ctx_default = MockContext::default(); + let ctx_default = MockContext::::default(); let ctx_new = MockContextConfig::builder() .host_id(ChainId::new(&format!("mockgaia-{}", latest_height.revision_number())).unwrap()) .latest_height(latest_height) - .build::(); + .build::>(); let ctx = match ctx { Ctx::New => ctx_new, Ctx::NewWithConnection => ctx_new - .with_client_config( - MockClientConfig::builder() - .client_id(client_id.clone()) + .with_light_client( + client_id, + MockContextConfig::builder() .latest_height(proof_height) - .build(), + .build::>() + .generate_light_client(vec![], &()), ) .with_connection(conn_id, default_conn_end), Ctx::DefaultWithConnection => ctx_default - .with_client_config( - MockClientConfig::builder() - .client_id(client_id.clone()) + .with_light_client( + client_id, + MockContextConfig::builder() .latest_height(proof_height) - .build(), + .build::>() + .generate_light_client(vec![], &()), ) .with_connection(conn_id, default_conn_end), Ctx::NewWithConnectionEndOpen => ctx_new - .with_client_config( - MockClientConfig::builder() - .client_id(client_id.clone()) + .with_light_client( + client_id, + MockContextConfig::builder() .latest_height(proof_height) - .build(), + .build::>() + .generate_light_client(vec![], &()), ) .with_connection(conn_id, conn_end_open), }; @@ -157,7 +161,7 @@ fn conn_open_ack_execute(fxt: &mut Fixture, expect: Expect IbcEvent::OpenAckConnection(e) => e, _ => unreachable!(), }; - let conn_end = ::connection_end( + let conn_end = as ValidationContext>::connection_end( &fxt.ctx, conn_open_try_event.conn_id_on_a(), ) diff --git a/ibc-testkit/tests/core/ics03_connection/conn_open_confirm.rs b/ibc-testkit/tests/core/ics03_connection/conn_open_confirm.rs index 67eafe48fb..59937b96f8 100644 --- a/ibc-testkit/tests/core/ics03_connection/conn_open_confirm.rs +++ b/ibc-testkit/tests/core/ics03_connection/conn_open_confirm.rs @@ -12,9 +12,11 @@ use ibc::core::host::ValidationContext; use ibc::core::primitives::prelude::*; use ibc::core::primitives::ZERO_DURATION; use ibc_testkit::fixtures::core::connection::dummy_conn_open_confirm; +use ibc_testkit::fixtures::core::context::MockContextConfig; use ibc_testkit::fixtures::{Expect, Fixture}; +use ibc_testkit::hosts::mockhost::MockHost; use ibc_testkit::testapp::ibc::core::router::MockRouter; -use ibc_testkit::testapp::ibc::core::types::{MockClientConfig, MockContext}; +use ibc_testkit::testapp::ibc::core::types::MockContext; use test_log::test; enum Ctx { @@ -32,7 +34,7 @@ fn conn_open_confirm_fixture(ctx: Ctx) -> Fixture { CommitmentPrefix::try_from(b"ibc".to_vec()).unwrap(), ); - let ctx_default = MockContext::default(); + let ctx_default = MockContext::::default(); let incorrect_conn_end_state = ConnectionEnd::new( State::Init, @@ -49,19 +51,21 @@ fn conn_open_confirm_fixture(ctx: Ctx) -> Fixture { let ctx = match ctx { Ctx::Default => ctx_default, Ctx::IncorrectConnection => ctx_default - .with_client_config( - MockClientConfig::builder() - .client_id(client_id.clone()) + .with_light_client( + client_id.clone(), + MockContextConfig::builder() .latest_height(Height::new(0, 10).unwrap()) - .build(), + .build::>() + .generate_light_client(vec![], &()), ) .with_connection(msg.conn_id_on_b.clone(), incorrect_conn_end_state), Ctx::CorrectConnection => ctx_default - .with_client_config( - MockClientConfig::builder() - .client_id(client_id.clone()) + .with_light_client( + client_id.clone(), + MockContextConfig::builder() .latest_height(Height::new(0, 10).unwrap()) - .build(), + .build::>() + .generate_light_client(vec![], &()), ) .with_connection(msg.conn_id_on_b.clone(), correct_conn_end), }; diff --git a/ibc-testkit/tests/core/ics03_connection/conn_open_init.rs b/ibc-testkit/tests/core/ics03_connection/conn_open_init.rs index c3f978419e..8a12014598 100644 --- a/ibc-testkit/tests/core/ics03_connection/conn_open_init.rs +++ b/ibc-testkit/tests/core/ics03_connection/conn_open_init.rs @@ -11,9 +11,11 @@ use ibc_testkit::fixtures::core::connection::{ dummy_msg_conn_open_init, msg_conn_open_init_with_counterparty_conn_id, msg_conn_open_with_version, }; +use ibc_testkit::fixtures::core::context::MockContextConfig; use ibc_testkit::fixtures::{Expect, Fixture}; +use ibc_testkit::hosts::mockhost::MockHost; use ibc_testkit::testapp::ibc::core::router::MockRouter; -use ibc_testkit::testapp::ibc::core::types::{MockClientConfig, MockContext}; +use ibc_testkit::testapp::ibc::core::types::MockContext; use test_log::test; enum Ctx { @@ -39,13 +41,14 @@ fn conn_open_init_fixture(ctx_variant: Ctx, msg_variant: Msg) -> Fixture msg_conn_open_init_with_counterparty_conn_id(msg_default, 2), }; - let ctx_default = MockContext::default(); + let ctx_default = MockContext::::default(); let ctx = match ctx_variant { - Ctx::WithClient => ctx_default.with_client_config( - MockClientConfig::builder() - .client_id(msg.client_id_on_a.clone()) + Ctx::WithClient => ctx_default.with_light_client( + msg.client_id_on_a.clone(), + MockContextConfig::builder() .latest_height(Height::new(0, 10).unwrap()) - .build(), + .build::>() + .generate_light_client(vec![], &()), ), _ => ctx_default, }; diff --git a/ibc-testkit/tests/core/ics03_connection/conn_open_try.rs b/ibc-testkit/tests/core/ics03_connection/conn_open_try.rs index 9800aa789e..ba7cf32ff4 100644 --- a/ibc-testkit/tests/core/ics03_connection/conn_open_try.rs +++ b/ibc-testkit/tests/core/ics03_connection/conn_open_try.rs @@ -9,8 +9,9 @@ use ibc::core::primitives::prelude::*; use ibc_testkit::fixtures::core::connection::dummy_msg_conn_open_try; use ibc_testkit::fixtures::core::context::MockContextConfig; use ibc_testkit::fixtures::{Expect, Fixture}; +use ibc_testkit::hosts::mockhost::MockHost; use ibc_testkit::testapp::ibc::core::router::MockRouter; -use ibc_testkit::testapp::ibc::core::types::{MockClientConfig, MockContext}; +use ibc_testkit::testapp::ibc::core::types::MockContext; use test_log::test; enum Ctx { @@ -53,14 +54,15 @@ fn conn_open_try_fixture(ctx_variant: Ctx, msg_variant: Msg) -> Fixture(); + .build::>(); let ctx = match ctx_variant { - Ctx::Default => MockContext::default(), - Ctx::WithClient => ctx_new.with_client_config( - MockClientConfig::builder() - .client_id(msg.client_id_on_b.clone()) + Ctx::Default => MockContext::::default(), + Ctx::WithClient => ctx_new.with_light_client( + msg.client_id_on_b.clone(), + MockContextConfig::builder() .latest_height(Height::new(0, client_cons_state_height).unwrap()) - .build(), + .build::>() + .generate_light_client(vec![], &()), ), }; Fixture { ctx, msg } diff --git a/ibc-testkit/tests/core/ics04_channel/acknowledgement.rs b/ibc-testkit/tests/core/ics04_channel/acknowledgement.rs index 056936fd1c..b33a0d1b7b 100644 --- a/ibc-testkit/tests/core/ics04_channel/acknowledgement.rs +++ b/ibc-testkit/tests/core/ics04_channel/acknowledgement.rs @@ -15,13 +15,15 @@ use ibc::core::host::types::identifiers::{ChannelId, ClientId, ConnectionId, Por use ibc::core::host::ExecutionContext; use ibc::core::primitives::*; use ibc_testkit::fixtures::core::channel::dummy_raw_msg_acknowledgement; +use ibc_testkit::fixtures::core::context::MockContextConfig; +use ibc_testkit::hosts::mockhost::MockHost; use ibc_testkit::testapp::ibc::core::router::MockRouter; -use ibc_testkit::testapp::ibc::core::types::{MockClientConfig, MockContext}; +use ibc_testkit::testapp::ibc::core::types::MockContext; use rstest::*; use test_log::test; struct Fixture { - ctx: MockContext, + ctx: MockContext, router: MockRouter, client_height: Height, msg: MsgAcknowledgement, @@ -34,10 +36,12 @@ struct Fixture { #[fixture] fn fixture() -> Fixture { let client_height = Height::new(0, 2).unwrap(); - let ctx = MockContext::default().with_client_config( - MockClientConfig::builder() + let ctx = MockContext::::default().with_light_client( + ClientId::default(), + MockContextConfig::builder() .latest_height(client_height) - .build(), + .build::>() + .generate_light_client(vec![], &()), ); let router = MockRouter::new_with_transfer(); @@ -121,10 +125,12 @@ fn ack_success_no_packet_commitment(fixture: Fixture) { .. } = fixture; let ctx = ctx - .with_client_config( - MockClientConfig::builder() + .with_light_client( + ClientId::default(), + MockContextConfig::builder() .latest_height(client_height) - .build(), + .build::>() + .generate_light_client(vec![], &()), ) .with_channel( PortId::transfer(), @@ -155,11 +161,13 @@ fn ack_success_happy_path(fixture: Fixture) { client_height, .. } = fixture; - let mut ctx: MockContext = ctx - .with_client_config( - MockClientConfig::builder() + let mut ctx = ctx + .with_light_client( + ClientId::default(), + MockContextConfig::builder() .latest_height(client_height) - .build(), + .build::>() + .generate_light_client(vec![], &()), ) .with_channel( PortId::transfer(), diff --git a/ibc-testkit/tests/core/ics04_channel/chan_close_confirm.rs b/ibc-testkit/tests/core/ics04_channel/chan_close_confirm.rs index d337c7d4a4..cc1bd3f493 100644 --- a/ibc-testkit/tests/core/ics04_channel/chan_close_confirm.rs +++ b/ibc-testkit/tests/core/ics04_channel/chan_close_confirm.rs @@ -13,15 +13,17 @@ use ibc::core::host::ValidationContext; use ibc::core::primitives::*; use ibc_testkit::fixtures::core::channel::dummy_raw_msg_chan_close_confirm; use ibc_testkit::fixtures::core::connection::dummy_raw_counterparty_conn; +use ibc_testkit::fixtures::core::context::MockContextConfig; +use ibc_testkit::hosts::mockhost::MockHost; use ibc_testkit::testapp::ibc::clients::mock::client_state::client_type as mock_client_type; use ibc_testkit::testapp::ibc::core::router::MockRouter; -use ibc_testkit::testapp::ibc::core::types::{MockClientConfig, MockContext}; +use ibc_testkit::testapp::ibc::core::types::MockContext; #[test] fn test_chan_close_confirm_validate() { let client_id = mock_client_type().build_client_id(24); let conn_id = ConnectionId::new(2); - let default_context = MockContext::default(); + let default_context = MockContext::::default(); let client_consensus_state_height = default_context.host_height().unwrap(); let conn_end = ConnectionEnd::new( @@ -53,11 +55,12 @@ fn test_chan_close_confirm_validate() { .unwrap(); let context = default_context - .with_client_config( - MockClientConfig::builder() - .client_id(client_id.clone()) + .with_light_client( + client_id.clone(), + MockContextConfig::builder() .latest_height(client_consensus_state_height) - .build(), + .build::>() + .generate_light_client(vec![], &()), ) .with_connection(conn_id, conn_end) .with_channel( @@ -80,7 +83,7 @@ fn test_chan_close_confirm_validate() { fn test_chan_close_confirm_execute() { let client_id = mock_client_type().build_client_id(24); let conn_id = ConnectionId::new(2); - let default_context = MockContext::default(); + let default_context = MockContext::::default(); let client_consensus_state_height = default_context.host_height().unwrap(); let conn_end = ConnectionEnd::new( @@ -112,11 +115,12 @@ fn test_chan_close_confirm_execute() { .unwrap(); let mut context = default_context - .with_client_config( - MockClientConfig::builder() - .client_id(client_id.clone()) + .with_light_client( + client_id.clone(), + MockContextConfig::builder() .latest_height(client_consensus_state_height) - .build(), + .build::>() + .generate_light_client(vec![], &()), ) .with_connection(conn_id, conn_end) .with_channel( diff --git a/ibc-testkit/tests/core/ics04_channel/chan_close_init.rs b/ibc-testkit/tests/core/ics04_channel/chan_close_init.rs index ccf040f85b..f35feedb5f 100644 --- a/ibc-testkit/tests/core/ics04_channel/chan_close_init.rs +++ b/ibc-testkit/tests/core/ics04_channel/chan_close_init.rs @@ -13,9 +13,11 @@ use ibc::core::host::ValidationContext; use ibc::core::primitives::*; use ibc_testkit::fixtures::core::channel::dummy_raw_msg_chan_close_init; use ibc_testkit::fixtures::core::connection::dummy_raw_counterparty_conn; +use ibc_testkit::fixtures::core::context::MockContextConfig; +use ibc_testkit::hosts::mockhost::MockHost; use ibc_testkit::testapp::ibc::clients::mock::client_state::client_type as mock_client_type; use ibc_testkit::testapp::ibc::core::router::MockRouter; -use ibc_testkit::testapp::ibc::core::types::{MockClientConfig, MockContext}; +use ibc_testkit::testapp::ibc::core::types::MockContext; #[test] fn test_chan_close_init_validate() { @@ -49,15 +51,16 @@ fn test_chan_close_init_validate() { .unwrap(); let context = { - let default_context = MockContext::default(); + let default_context = MockContext::::default(); let client_consensus_state_height = default_context.host_height().unwrap(); default_context - .with_client_config( - MockClientConfig::builder() - .client_id(client_id.clone()) + .with_light_client( + client_id.clone(), + MockContextConfig::builder() .latest_height(client_consensus_state_height) - .build(), + .build::>() + .generate_light_client(vec![], &()), ) .with_connection(conn_id, conn_end) .with_channel( @@ -109,15 +112,16 @@ fn test_chan_close_init_execute() { .unwrap(); let mut context = { - let default_context = MockContext::default(); + let default_context = MockContext::::default(); let client_consensus_state_height = default_context.host_height().unwrap(); default_context - .with_client_config( - MockClientConfig::builder() - .client_id(client_id.clone()) + .with_light_client( + client_id.clone(), + MockContextConfig::builder() .latest_height(client_consensus_state_height) - .build(), + .build::>() + .generate_light_client(vec![], &()), ) .with_connection(conn_id, conn_end) .with_channel( diff --git a/ibc-testkit/tests/core/ics04_channel/chan_open_ack.rs b/ibc-testkit/tests/core/ics04_channel/chan_open_ack.rs index 6a584e2cad..9a11f6a4a7 100644 --- a/ibc-testkit/tests/core/ics04_channel/chan_open_ack.rs +++ b/ibc-testkit/tests/core/ics04_channel/chan_open_ack.rs @@ -14,14 +14,16 @@ use ibc::core::primitives::*; use ibc::core::router::types::module::ModuleId; use ibc_testkit::fixtures::core::channel::dummy_raw_msg_chan_open_ack; use ibc_testkit::fixtures::core::connection::dummy_raw_counterparty_conn; +use ibc_testkit::fixtures::core::context::MockContextConfig; +use ibc_testkit::hosts::mockhost::MockHost; use ibc_testkit::testapp::ibc::clients::mock::client_state::client_type as mock_client_type; use ibc_testkit::testapp::ibc::core::router::MockRouter; -use ibc_testkit::testapp::ibc::core::types::{MockClientConfig, MockContext}; +use ibc_testkit::testapp::ibc::core::types::MockContext; use rstest::*; use test_log::test; pub struct Fixture { - pub context: MockContext, + pub context: MockContext, pub router: MockRouter, pub module_id: ModuleId, pub msg: MsgChannelOpenAck, @@ -35,7 +37,7 @@ pub struct Fixture { #[fixture] fn fixture() -> Fixture { let proof_height = 10; - let context = MockContext::default(); + let context = MockContext::::default(); let module_id = ModuleId::new(MODULE_ID_STR.to_string()); let router = MockRouter::new_with_transfer(); @@ -90,11 +92,12 @@ fn chan_open_ack_happy_path(fixture: Fixture) { } = fixture; let context = context - .with_client_config( - MockClientConfig::builder() - .client_id(client_id_on_a.clone()) + .with_light_client( + client_id_on_a, + MockContextConfig::builder() .latest_height(Height::new(0, proof_height).unwrap()) - .build(), + .build::>() + .generate_light_client(vec![], &()), ) .with_connection(conn_id_on_a, conn_end_on_a) .with_channel( @@ -125,11 +128,12 @@ fn chan_open_ack_execute_happy_path(fixture: Fixture) { } = fixture; let mut context = context - .with_client_config( - MockClientConfig::builder() - .client_id(client_id_on_a.clone()) + .with_light_client( + client_id_on_a, + MockContextConfig::builder() .latest_height(Height::new(0, proof_height).unwrap()) - .build(), + .build::>() + .generate_light_client(vec![], &()), ) .with_connection(conn_id_on_a, conn_end_on_a) .with_channel( @@ -167,11 +171,12 @@ fn chan_open_ack_fail_no_connection(fixture: Fixture) { } = fixture; let context = context - .with_client_config( - MockClientConfig::builder() - .client_id(client_id_on_a.clone()) + .with_light_client( + client_id_on_a, + MockContextConfig::builder() .latest_height(Height::new(0, proof_height).unwrap()) - .build(), + .build::>() + .generate_light_client(vec![], &()), ) .with_channel( msg.port_id_on_a.clone(), @@ -202,11 +207,12 @@ fn chan_open_ack_fail_no_channel(fixture: Fixture) { .. } = fixture; let context = context - .with_client_config( - MockClientConfig::builder() - .client_id(client_id_on_a.clone()) + .with_light_client( + client_id_on_a, + MockContextConfig::builder() .latest_height(Height::new(0, proof_height).unwrap()) - .build(), + .build::>() + .generate_light_client(vec![], &()), ) .with_connection(conn_id_on_a, conn_end_on_a); @@ -242,11 +248,12 @@ fn chan_open_ack_fail_channel_wrong_state(fixture: Fixture) { ) .unwrap(); let context = context - .with_client_config( - MockClientConfig::builder() - .client_id(client_id_on_a.clone()) + .with_light_client( + client_id_on_a, + MockContextConfig::builder() .latest_height(Height::new(0, proof_height).unwrap()) - .build(), + .build::>() + .generate_light_client(vec![], &()), ) .with_connection(conn_id_on_a, conn_end_on_a) .with_channel( diff --git a/ibc-testkit/tests/core/ics04_channel/chan_open_confirm.rs b/ibc-testkit/tests/core/ics04_channel/chan_open_confirm.rs index f01b4adfd7..fa3b3568fe 100644 --- a/ibc-testkit/tests/core/ics04_channel/chan_open_confirm.rs +++ b/ibc-testkit/tests/core/ics04_channel/chan_open_confirm.rs @@ -13,14 +13,16 @@ use ibc::core::host::types::identifiers::{ChannelId, ClientId, ConnectionId}; use ibc::core::primitives::*; use ibc_testkit::fixtures::core::channel::dummy_raw_msg_chan_open_confirm; use ibc_testkit::fixtures::core::connection::dummy_raw_counterparty_conn; +use ibc_testkit::fixtures::core::context::MockContextConfig; +use ibc_testkit::hosts::mockhost::MockHost; use ibc_testkit::testapp::ibc::clients::mock::client_state::client_type as mock_client_type; use ibc_testkit::testapp::ibc::core::router::MockRouter; -use ibc_testkit::testapp::ibc::core::types::{MockClientConfig, MockContext}; +use ibc_testkit::testapp::ibc::core::types::MockContext; use rstest::*; use test_log::test; pub struct Fixture { - pub context: MockContext, + pub context: MockContext, pub router: MockRouter, pub msg: MsgChannelOpenConfirm, pub client_id_on_b: ClientId, @@ -33,7 +35,7 @@ pub struct Fixture { #[fixture] fn fixture() -> Fixture { let proof_height = 10; - let context = MockContext::default(); + let context = MockContext::::default(); let router = MockRouter::new_with_transfer(); @@ -87,11 +89,12 @@ fn chan_open_confirm_validate_happy_path(fixture: Fixture) { } = fixture; let context = context - .with_client_config( - MockClientConfig::builder() - .client_id(client_id_on_b.clone()) + .with_light_client( + client_id_on_b.clone(), + MockContextConfig::builder() .latest_height(Height::new(0, proof_height).unwrap()) - .build(), + .build::>() + .generate_light_client(vec![], &()), ) .with_connection(conn_id_on_b, conn_end_on_b) .with_channel( @@ -122,11 +125,12 @@ fn chan_open_confirm_execute_happy_path(fixture: Fixture) { } = fixture; let mut context = context - .with_client_config( - MockClientConfig::builder() - .client_id(client_id_on_b.clone()) + .with_light_client( + client_id_on_b.clone(), + MockContextConfig::builder() .latest_height(Height::new(0, proof_height).unwrap()) - .build(), + .build::>() + .generate_light_client(vec![], &()), ) .with_connection(conn_id_on_b, conn_end_on_b) .with_channel( @@ -166,11 +170,12 @@ fn chan_open_confirm_fail_no_channel(fixture: Fixture) { .. } = fixture; let context = context - .with_client_config( - MockClientConfig::builder() - .client_id(client_id_on_b.clone()) + .with_light_client( + client_id_on_b.clone(), + MockContextConfig::builder() .latest_height(Height::new(0, proof_height).unwrap()) - .build(), + .build::>() + .generate_light_client(vec![], &()), ) .with_connection(conn_id_on_b, conn_end_on_b); @@ -206,11 +211,12 @@ fn chan_open_confirm_fail_channel_wrong_state(fixture: Fixture) { ) .unwrap(); let context = context - .with_client_config( - MockClientConfig::builder() - .client_id(client_id_on_b.clone()) + .with_light_client( + client_id_on_b.clone(), + MockContextConfig::builder() .latest_height(Height::new(0, proof_height).unwrap()) - .build(), + .build::>() + .generate_light_client(vec![], &()), ) .with_connection(conn_id_on_b, conn_end_on_b) .with_channel( diff --git a/ibc-testkit/tests/core/ics04_channel/chan_open_init.rs b/ibc-testkit/tests/core/ics04_channel/chan_open_init.rs index d79f8989c6..166cb2add2 100644 --- a/ibc-testkit/tests/core/ics04_channel/chan_open_init.rs +++ b/ibc-testkit/tests/core/ics04_channel/chan_open_init.rs @@ -10,13 +10,15 @@ use ibc::core::host::types::identifiers::ConnectionId; use ibc::core::host::ValidationContext; use ibc_testkit::fixtures::core::channel::dummy_raw_msg_chan_open_init; use ibc_testkit::fixtures::core::connection::dummy_msg_conn_open_init; +use ibc_testkit::fixtures::core::context::MockContextConfig; +use ibc_testkit::hosts::mockhost::MockHost; use ibc_testkit::testapp::ibc::core::router::MockRouter; -use ibc_testkit::testapp::ibc::core::types::{MockClientConfig, MockContext}; +use ibc_testkit::testapp::ibc::core::types::MockContext; use rstest::*; use test_log::test; pub struct Fixture { - pub ctx: MockContext, + pub ctx: MockContext, pub router: MockRouter, pub msg: MsgEnvelope, } @@ -28,7 +30,7 @@ fn fixture() -> Fixture { let msg = MsgEnvelope::from(ChannelMsg::from(msg_chan_open_init)); - let default_ctx = MockContext::default(); + let default_ctx = MockContext::::default(); let router = MockRouter::new_with_transfer(); let msg_conn_init = dummy_msg_conn_open_init(); @@ -46,11 +48,12 @@ fn fixture() -> Fixture { .unwrap(); let ctx = default_ctx - .with_client_config( - MockClientConfig::builder() - .client_id(client_id_on_a.clone()) + .with_light_client( + client_id_on_a.clone(), + MockContextConfig::builder() .latest_height(client_height) - .build(), + .build::>() + .generate_light_client(vec![], &()), ) .with_connection(ConnectionId::default(), conn_end_on_a); @@ -114,7 +117,7 @@ fn chan_open_init_execute_happy_path(fixture: Fixture) { fn chan_open_init_fail_no_connection(fixture: Fixture) { let Fixture { router, msg, .. } = fixture; - let res = validate(&MockContext::default(), &router, msg); + let res = validate(&MockContext::::default(), &router, msg); assert!( res.is_err(), diff --git a/ibc-testkit/tests/core/ics04_channel/chan_open_try.rs b/ibc-testkit/tests/core/ics04_channel/chan_open_try.rs index 35d8a55a70..21476d25fd 100644 --- a/ibc-testkit/tests/core/ics04_channel/chan_open_try.rs +++ b/ibc-testkit/tests/core/ics04_channel/chan_open_try.rs @@ -12,14 +12,16 @@ use ibc::core::host::ValidationContext; use ibc::core::primitives::*; use ibc_testkit::fixtures::core::channel::dummy_raw_msg_chan_open_try; use ibc_testkit::fixtures::core::connection::dummy_raw_counterparty_conn; +use ibc_testkit::fixtures::core::context::MockContextConfig; +use ibc_testkit::hosts::mockhost::MockHost; use ibc_testkit::testapp::ibc::clients::mock::client_state::client_type as mock_client_type; use ibc_testkit::testapp::ibc::core::router::MockRouter; -use ibc_testkit::testapp::ibc::core::types::{MockClientConfig, MockContext}; +use ibc_testkit::testapp::ibc::core::types::MockContext; use rstest::*; use test_log::test; pub struct Fixture { - pub ctx: MockContext, + pub ctx: MockContext, pub router: MockRouter, pub msg: MsgEnvelope, pub client_id_on_b: ClientId, @@ -54,7 +56,7 @@ fn fixture() -> Fixture { let msg = MsgEnvelope::from(ChannelMsg::from(msg_chan_open_try)); - let ctx = MockContext::default(); + let ctx = MockContext::::default(); let router = MockRouter::new_with_transfer(); @@ -83,11 +85,12 @@ fn chan_open_try_validate_happy_path(fixture: Fixture) { } = fixture; let ctx = ctx - .with_client_config( - MockClientConfig::builder() - .client_id(client_id_on_b.clone()) + .with_light_client( + client_id_on_b.clone(), + MockContextConfig::builder() .latest_height(Height::new(0, proof_height).unwrap()) - .build(), + .build::>() + .generate_light_client(vec![], &()), ) .with_connection(conn_id_on_b, conn_end_on_b); @@ -110,11 +113,12 @@ fn chan_open_try_execute_happy_path(fixture: Fixture) { } = fixture; let mut ctx = ctx - .with_client_config( - MockClientConfig::builder() - .client_id(client_id_on_b.clone()) + .with_light_client( + client_id_on_b.clone(), + MockContextConfig::builder() .latest_height(Height::new(0, proof_height).unwrap()) - .build(), + .build::>() + .generate_light_client(vec![], &()), ) .with_connection(conn_id_on_b, conn_end_on_b); diff --git a/ibc-testkit/tests/core/ics04_channel/recv_packet.rs b/ibc-testkit/tests/core/ics04_channel/recv_packet.rs index 773390f17f..45db3a9bd9 100644 --- a/ibc-testkit/tests/core/ics04_channel/recv_packet.rs +++ b/ibc-testkit/tests/core/ics04_channel/recv_packet.rs @@ -15,15 +15,17 @@ use ibc::core::host::types::identifiers::{ChannelId, ClientId, ConnectionId, Por use ibc::core::host::ExecutionContext; use ibc::core::primitives::*; use ibc_testkit::fixtures::core::channel::{dummy_msg_recv_packet, dummy_raw_msg_recv_packet}; +use ibc_testkit::fixtures::core::context::MockContextConfig; use ibc_testkit::fixtures::core::signer::dummy_account_id; +use ibc_testkit::hosts::mockhost::MockHost; use ibc_testkit::relayer::context::RelayerContext; use ibc_testkit::testapp::ibc::core::router::MockRouter; -use ibc_testkit::testapp::ibc::core::types::{MockClientConfig, MockContext}; +use ibc_testkit::testapp::ibc::core::types::MockContext; use rstest::*; use test_log::test; pub struct Fixture { - pub context: MockContext, + pub context: MockContext, pub router: MockRouter, pub client_height: Height, pub host_height: Height, @@ -34,7 +36,7 @@ pub struct Fixture { #[fixture] fn fixture() -> Fixture { - let context = MockContext::default(); + let context = MockContext::::default(); let router = MockRouter::new_with_transfer(); @@ -114,10 +116,12 @@ fn recv_packet_validate_happy_path(fixture: Fixture) { let packet = &msg.packet; let mut context = context - .with_client_config( - MockClientConfig::builder() + .with_light_client( + ClientId::default(), + MockContextConfig::builder() .latest_height(client_height) - .build(), + .build::>() + .generate_light_client(vec![], &()), ) .with_connection(ConnectionId::default(), conn_end_on_b) .with_channel( @@ -192,10 +196,12 @@ fn recv_packet_timeout_expired(fixture: Fixture) { let msg_envelope = MsgEnvelope::from(PacketMsg::from(msg_packet_old)); let context = context - .with_client_config( - MockClientConfig::builder() + .with_light_client( + ClientId::default(), + MockContextConfig::builder() .latest_height(client_height) - .build(), + .build::>() + .generate_light_client(vec![], &()), ) .with_connection(ConnectionId::default(), conn_end_on_b) .with_channel(PortId::transfer(), ChannelId::default(), chan_end_on_b) @@ -222,10 +228,12 @@ fn recv_packet_execute_happy_path(fixture: Fixture) { .. } = fixture; let mut ctx = context - .with_client_config( - MockClientConfig::builder() + .with_light_client( + ClientId::default(), + MockContextConfig::builder() .latest_height(client_height) - .build(), + .build::>() + .generate_light_client(vec![], &()), ) .with_connection(ConnectionId::default(), conn_end_on_b) .with_channel(PortId::transfer(), ChannelId::default(), chan_end_on_b); diff --git a/ibc-testkit/tests/core/ics04_channel/send_packet.rs b/ibc-testkit/tests/core/ics04_channel/send_packet.rs index 7963eda898..87b2fd9613 100644 --- a/ibc-testkit/tests/core/ics04_channel/send_packet.rs +++ b/ibc-testkit/tests/core/ics04_channel/send_packet.rs @@ -14,14 +14,16 @@ use ibc::core::handler::types::events::{IbcEvent, MessageEvent}; use ibc::core::host::types::identifiers::{ChannelId, ClientId, ConnectionId, PortId}; use ibc::core::primitives::*; use ibc_testkit::fixtures::core::channel::dummy_raw_packet; -use ibc_testkit::testapp::ibc::core::types::{MockClientConfig, MockContext}; +use ibc_testkit::fixtures::core::context::MockContextConfig; +use ibc_testkit::hosts::mockhost::MockHost; +use ibc_testkit::testapp::ibc::core::types::MockContext; use test_log::test; #[test] fn send_packet_processing() { struct Test { name: String, - ctx: MockContext, + ctx: MockContext, packet: Packet, want_pass: bool, } @@ -82,17 +84,19 @@ fn send_packet_processing() { let tests: Vec = vec![ Test { name: "Processing fails because no channel exists in the context".to_string(), - ctx: MockContext::default(), + ctx: MockContext::::default(), packet: packet.clone(), want_pass: false, }, Test { name: "Good parameters".to_string(), - ctx: MockContext::default() - .with_client_config( - MockClientConfig::builder() + ctx: MockContext::::default() + .with_light_client( + ClientId::default(), + MockContextConfig::builder() .latest_height(client_height) - .build(), + .build::>() + .generate_light_client(vec![], &()), ) .with_connection(ConnectionId::default(), conn_end_on_a.clone()) .with_channel( @@ -106,11 +110,13 @@ fn send_packet_processing() { }, Test { name: "Packet timeout height same as destination chain height".to_string(), - ctx: MockContext::default() - .with_client_config( - MockClientConfig::builder() + ctx: MockContext::::default() + .with_light_client( + ClientId::default(), + MockContextConfig::builder() .latest_height(client_height) - .build(), + .build::>() + .generate_light_client(vec![], &()), ) .with_connection(ConnectionId::default(), conn_end_on_a.clone()) .with_channel( @@ -124,11 +130,13 @@ fn send_packet_processing() { }, Test { name: "Packet timeout height one more than destination chain height".to_string(), - ctx: MockContext::default() - .with_client_config( - MockClientConfig::builder() + ctx: MockContext::::default() + .with_light_client( + ClientId::default(), + MockContextConfig::builder() .latest_height(client_height) - .build(), + .build::>() + .generate_light_client(vec![], &()), ) .with_connection(ConnectionId::default(), conn_end_on_a.clone()) .with_channel( @@ -142,11 +150,13 @@ fn send_packet_processing() { }, Test { name: "Packet timeout due to timestamp".to_string(), - ctx: MockContext::default() - .with_client_config( - MockClientConfig::builder() + ctx: MockContext::::default() + .with_light_client( + ClientId::default(), + MockContextConfig::builder() .latest_height(client_height) - .build(), + .build::>() + .generate_light_client(vec![], &()), ) .with_connection(ConnectionId::default(), conn_end_on_a) .with_channel(PortId::transfer(), ChannelId::default(), chan_end_on_a) diff --git a/ibc-testkit/tests/core/ics04_channel/timeout.rs b/ibc-testkit/tests/core/ics04_channel/timeout.rs index aeb3d2c0a0..d11d8c0f27 100644 --- a/ibc-testkit/tests/core/ics04_channel/timeout.rs +++ b/ibc-testkit/tests/core/ics04_channel/timeout.rs @@ -15,12 +15,14 @@ use ibc::core::host::types::identifiers::{ChannelId, ClientId, ConnectionId, Por use ibc::core::host::ExecutionContext; use ibc::core::primitives::*; use ibc_testkit::fixtures::core::channel::dummy_raw_msg_timeout; +use ibc_testkit::fixtures::core::context::MockContextConfig; +use ibc_testkit::hosts::mockhost::MockHost; use ibc_testkit::testapp::ibc::core::router::MockRouter; -use ibc_testkit::testapp::ibc::core::types::{MockClientConfig, MockContext}; +use ibc_testkit::testapp::ibc::core::types::MockContext; use rstest::*; struct Fixture { - ctx: MockContext, + ctx: MockContext, pub router: MockRouter, client_height: Height, msg: MsgTimeout, @@ -33,10 +35,12 @@ struct Fixture { #[fixture] fn fixture() -> Fixture { let client_height = Height::new(0, 2).unwrap(); - let ctx = MockContext::default().with_client_config( - MockClientConfig::builder() + let ctx = MockContext::::default().with_light_client( + ClientId::default(), + MockContextConfig::builder() .latest_height(client_height) - .build(), + .build::>() + .generate_light_client(vec![], &()), ); let client_height = Height::new(0, 2).unwrap(); @@ -109,10 +113,12 @@ fn timeout_fail_no_channel(fixture: Fixture) { client_height, .. } = fixture; - let ctx = ctx.with_client_config( - MockClientConfig::builder() + let ctx = ctx.with_light_client( + ClientId::default(), + MockContextConfig::builder() .latest_height(client_height) - .build(), + .build::>() + .generate_light_client(vec![], &()), ); let msg_envelope = MsgEnvelope::from(PacketMsg::from(msg)); let res = validate(&ctx, &router, msg_envelope); @@ -186,10 +192,12 @@ fn timeout_fail_proof_timeout_not_reached(fixture: Fixture) { let packet = msg.packet.clone(); let mut ctx = ctx - .with_client_config( - MockClientConfig::builder() + .with_light_client( + ClientId::default(), + MockContextConfig::builder() .latest_height(client_height) - .build(), + .build::>() + .generate_light_client(vec![], &()), ) .with_connection(ConnectionId::default(), conn_end_on_a) .with_channel( @@ -267,10 +275,12 @@ fn timeout_unordered_channel_validate(fixture: Fixture) { let packet = msg.packet.clone(); let mut ctx = ctx - .with_client_config( - MockClientConfig::builder() + .with_light_client( + ClientId::default(), + MockContextConfig::builder() .latest_height(client_height) - .build(), + .build::>() + .generate_light_client(vec![], &()), ) .with_connection(ConnectionId::default(), conn_end_on_a) .with_channel( @@ -317,10 +327,12 @@ fn timeout_ordered_channel_validate(fixture: Fixture) { let packet = msg.packet.clone(); let mut ctx = ctx - .with_client_config( - MockClientConfig::builder() + .with_light_client( + ClientId::default(), + MockContextConfig::builder() .latest_height(client_height) - .build(), + .build::>() + .generate_light_client(vec![], &()), ) .with_connection(ConnectionId::default(), conn_end_on_a) .with_channel( diff --git a/ibc-testkit/tests/core/ics04_channel/timeout_on_close.rs b/ibc-testkit/tests/core/ics04_channel/timeout_on_close.rs index c0321e8b1e..19ef54c038 100644 --- a/ibc-testkit/tests/core/ics04_channel/timeout_on_close.rs +++ b/ibc-testkit/tests/core/ics04_channel/timeout_on_close.rs @@ -14,12 +14,14 @@ use ibc::core::host::types::identifiers::{ChannelId, ClientId, ConnectionId, Por use ibc::core::host::ExecutionContext; use ibc::core::primitives::*; use ibc_testkit::fixtures::core::channel::dummy_raw_msg_timeout_on_close; +use ibc_testkit::fixtures::core::context::MockContextConfig; +use ibc_testkit::hosts::mockhost::MockHost; use ibc_testkit::testapp::ibc::core::router::MockRouter; -use ibc_testkit::testapp::ibc::core::types::{MockClientConfig, MockContext}; +use ibc_testkit::testapp::ibc::core::types::MockContext; use rstest::*; pub struct Fixture { - pub context: MockContext, + pub context: MockContext, pub router: MockRouter, pub msg: MsgTimeoutOnClose, pub packet_commitment: PacketCommitment, @@ -30,10 +32,12 @@ pub struct Fixture { #[fixture] fn fixture() -> Fixture { let client_height = Height::new(0, 2).unwrap(); - let context = MockContext::default().with_client_config( - MockClientConfig::builder() + let context = MockContext::::default().with_light_client( + ClientId::default(), + MockContextConfig::builder() .latest_height(client_height) - .build(), + .build::>() + .generate_light_client(vec![], &()), ); let router = MockRouter::new_with_transfer(); diff --git a/ibc-testkit/tests/core/router.rs b/ibc-testkit/tests/core/router.rs index cc977d56e2..079cbc63e9 100644 --- a/ibc-testkit/tests/core/router.rs +++ b/ibc-testkit/tests/core/router.rs @@ -37,6 +37,7 @@ use ibc_testkit::fixtures::core::connection::{ }; use ibc_testkit::fixtures::core::context::MockContextConfig; use ibc_testkit::fixtures::core::signer::dummy_account_id; +use ibc_testkit::hosts::mockhost::MockHost; use ibc_testkit::testapp::ibc::applications::transfer::types::DummyTransferModule; use ibc_testkit::testapp::ibc::clients::mock::client_state::MockClientState; use ibc_testkit::testapp::ibc::clients::mock::consensus_state::MockConsensusState; @@ -68,7 +69,7 @@ fn routing_module_and_keepers() { } } - type StateCheckFn = dyn FnOnce(&MockContext) -> bool; + type StateCheckFn = dyn FnOnce(&MockContext) -> bool; // Test parameters struct Test { @@ -98,7 +99,7 @@ fn routing_module_and_keepers() { .add(core::time::Duration::from_secs(4)) .unwrap(), ) - .build::(); + .build::>(); let mut router = MockRouter::new_with_transfer();