Skip to content

Commit

Permalink
Use TEST_PRESET env to run cosmos tests with different chains (#477)
Browse files Browse the repository at this point in the history
* Add dynamic gas config to LegacyCosmosBootstrap and use env variables for legacy cosmos tests

* Use Cosmos Nix branch for Osmosis v27

* Apply Github suggestion

* Update Nix flake

* Remove unnecessary cosmos legacy test

* Update cosmos-integration-tests CI job to use test presets

* Fix cosmos-integration-tests github action

* Remove legacy bootstrap test and unnecessary code

* Extract setup creation in different methods
  • Loading branch information
ljoss17 authored Dec 4, 2024
1 parent 7f4cb72 commit 29e6ca0
Show file tree
Hide file tree
Showing 13 changed files with 391 additions and 272 deletions.
12 changes: 9 additions & 3 deletions .github/workflows/integration-tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,13 @@ jobs:
cosmos-integration-tests:
runs-on: ubuntu-20.04
timeout-minutes: 60
strategy:
fail-fast: false
matrix:
preset:
- GaiaToGaia
- OsmosisToOsmosis
- OsmosisToGaia
steps:
- uses: actions/checkout@v4
- uses: cachix/install-nix-action@v30
Expand All @@ -32,10 +39,9 @@ jobs:
- name: run integration tests
env:
RUST_BACKTRACE: 1
TEST_PRESET: ${{ matrix.preset }}
run: |
export LEGACY_GAIA_BIN=$(nix build .#gaia14 --print-out-paths --no-link)/bin/gaiad
nix shell .#cargo-nextest .#protobuf .#gaia .#celestia-app .#ibc-go-v8-simapp -c \
nix shell .#cargo-nextest .#protobuf .#gaia .#celestia-app .#ibc-go-v8-simapp .#osmosis -c \
cargo nextest run -p hermes-cosmos-integration-tests \
--test-threads=2
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ use std::sync::Arc;
use cgp::core::component::UseContext;
use cgp::core::error::{ErrorRaiserComponent, ErrorTypeComponent};
use cgp::prelude::*;
use hermes_cosmos_chain_components::types::config::gas::dynamic_gas_config::DynamicGasConfig;
use hermes_cosmos_relayer::contexts::build::CosmosBuilder;
use hermes_cosmos_test_components::bootstrap::components::cosmos_sdk_legacy::*;
use hermes_cosmos_test_components::bootstrap::impls::generator::wallet_config::GenerateStandardWalletConfig;
Expand All @@ -14,9 +15,7 @@ use hermes_cosmos_test_components::bootstrap::traits::fields::account_prefix::Ac
use hermes_cosmos_test_components::bootstrap::traits::fields::chain_command_path::ChainCommandPathGetterComponent;
use hermes_cosmos_test_components::bootstrap::traits::fields::chain_store_dir::ChainStoreDirGetterComponent;
use hermes_cosmos_test_components::bootstrap::traits::fields::denom::DenomPrefixGetterComponent;
use hermes_cosmos_test_components::bootstrap::traits::fields::dynamic_gas_fee::{
DynamicGasGetterComponent, ReturnNoDynamicGas,
};
use hermes_cosmos_test_components::bootstrap::traits::fields::dynamic_gas_fee::DynamicGasGetterComponent;
use hermes_cosmos_test_components::bootstrap::traits::fields::random_id::RandomIdFlagGetterComponent;
use hermes_cosmos_test_components::bootstrap::traits::generator::generate_wallet_config::WalletConfigGeneratorComponent;
use hermes_cosmos_test_components::bootstrap::traits::modifiers::modify_comet_config::CometConfigModifierComponent;
Expand Down Expand Up @@ -66,6 +65,7 @@ pub struct LegacyCosmosBootstrapFields {
Box<dyn Fn(&mut serde_json::Value) -> Result<(), Error> + Send + Sync + 'static>,
pub comet_config_modifier:
Box<dyn Fn(&mut toml::Value) -> Result<(), Error> + Send + Sync + 'static>,
pub dynamic_gas: Option<DynamicGasConfig>,
}

impl CanUseLegacyCosmosSdkChainBootstrapper for LegacyCosmosBootstrap {}
Expand Down Expand Up @@ -112,15 +112,14 @@ delegate_components! {
ChainCommandPathGetterComponent,
AccountPrefixGetterComponent,
DenomPrefixGetterComponent,
DynamicGasGetterComponent,
RandomIdFlagGetterComponent,
CompatModeGetterComponent,
CosmosBuilderGetterComponent,
CometConfigModifierComponent,
CosmosGenesisConfigModifierComponent,
]:
UseContext,
DynamicGasGetterComponent:
ReturnNoDynamicGas,
CosmosSdkConfigModifierComponent:
NoModifyCosmosSdkConfig,
RelayerChainConfigBuilderComponent:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ use core::time::Duration;

use cgp::core::error::CanRaiseError;
use hermes_cosmos_relayer::contexts::chain::CosmosChain;
use hermes_cosmos_test_components::bootstrap::traits::fields::dynamic_gas_fee::HasDynamicGas;
use hermes_cosmos_test_components::bootstrap::traits::types::chain_node_config::HasChainNodeConfigType;
use hermes_cosmos_test_components::chain::types::wallet::CosmosTestWallet;
use hermes_error::types::HermesError;
Expand All @@ -22,6 +23,7 @@ where
+ CanBuildRelayerChainConfig
+ HasCosmosBuilder
+ HasRuntime
+ HasDynamicGas
+ CanRaiseError<HermesError>,
Bootstrap::Runtime: CanSleep,
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@ use core::str::FromStr;
use core::time::Duration;

use cgp::core::error::CanRaiseError;
use hermes_cosmos_chain_components::impls::types::config::CosmosChainConfig;
use hermes_cosmos_chain_components::impls::types::config::{CosmosChainConfig, EventSourceMode};
use hermes_cosmos_chain_components::types::config::gas::gas_config::GasConfig;
use hermes_cosmos_test_components::bootstrap::traits::fields::account_prefix::HasAccountPrefix;
use hermes_cosmos_test_components::bootstrap::traits::fields::dynamic_gas_fee::HasDynamicGas;
use hermes_cosmos_test_components::bootstrap::traits::types::chain_node_config::HasChainNodeConfigType;
Expand All @@ -12,12 +13,10 @@ use hermes_cosmos_test_components::bootstrap::types::genesis_config::CosmosGenes
use hermes_cosmos_test_components::chain::types::wallet::CosmosTestWallet;
use hermes_test_components::chain::traits::types::wallet::HasWalletType;
use hermes_test_components::chain_driver::traits::types::chain::HasChainType;
use ibc_relayer::chain::cosmos::config::CosmosSdkConfig;
use ibc_relayer::config::dynamic_gas::DynamicGasPrice;
use ibc_relayer::config::gas_multiplier::GasMultiplier;
use ibc_proto::cosmos::base::v1beta1::Coin;
use ibc_proto::cosmos::tx::v1beta1::Fee;
use ibc_relayer::config::{self, AddressType};
use ibc_relayer::keyring::Store;
use tendermint_rpc::{Error as TendermintRpcError, Url, WebSocketClientUrl};
use tendermint_rpc::{Error as TendermintRpcError, Url};

use crate::traits::bootstrap::compat_mode::HasCompatMode;
use crate::traits::bootstrap::relayer_chain_config::RelayerChainConfigBuilder;
Expand All @@ -41,63 +40,59 @@ where
chain_genesis_config: &CosmosGenesisConfig,
relayer_wallet: &CosmosTestWallet,
) -> Result<CosmosChainConfig, Bootstrap::Error> {
let dynamic_gas_price = if let Some(dynamic_gas_config) = bootstrap.dynamic_gas() {
DynamicGasPrice::unsafe_new(true, dynamic_gas_config.multiplier, dynamic_gas_config.max)
} else {
DynamicGasPrice::default()
let gas_multiplier = 1.3;
let gas_price = 1.0;
let fee_granter = "".to_owned();
let max_gas = 900000000;
let max_amount = (max_gas as f64 * gas_multiplier) * gas_price;
let max_gas_fee_in_coin = Coin {
denom: chain_genesis_config.staking_denom.to_string(),
amount: max_amount.to_string(),
};
let relayer_chain_config = CosmosSdkConfig {
id: chain_node_config.chain_id.clone(),

let max_fee = Fee {
amount: vec![max_gas_fee_in_coin],
gas_limit: max_gas,
payer: "".to_string(),
granter: fee_granter.clone(),
};

let gas_config = GasConfig {
default_gas: 400_000,
max_gas,
gas_multiplier,
gas_price: config::GasPrice::new(1.0, chain_genesis_config.staking_denom.to_string()),
max_fee,
fee_granter,
dynamic_gas_config: bootstrap.dynamic_gas().clone(),
};

let relayer_chain_config = CosmosChainConfig {
id: chain_node_config.chain_id.to_string(),
rpc_addr: Url::from_str(&format!("http://localhost:{}", chain_node_config.rpc_port))
.map_err(Bootstrap::raise_error)?,
grpc_addr: Url::from_str(&format!("http://localhost:{}", chain_node_config.grpc_port))
.map_err(Bootstrap::raise_error)?,
event_source: config::EventSourceMode::Push {
url: WebSocketClientUrl::from_str(&format!(
"ws://localhost:{}/websocket",
chain_node_config.rpc_port
))
.map_err(Bootstrap::raise_error)?,
batch_delay: config::default::batch_delay(),
event_source: EventSourceMode::Push {
url: format!("ws://localhost:{}/websocket", chain_node_config.rpc_port),
},
rpc_timeout: config::default::rpc_timeout(),
trusted_node: false,
genesis_restart: None,
account_prefix: bootstrap.account_prefix().into(),
key_name: relayer_wallet.id.clone(),
key_store_type: Store::Test,
key_store_folder: Some(chain_node_config.chain_home_dir.join("hermes_keyring")),
store_prefix: "ibc".to_string(),
default_gas: None,
max_gas: Some(900000000),
gas_adjustment: None,
gas_multiplier: Some(GasMultiplier::unsafe_new(1.3)),
dynamic_gas_price,
fee_granter: None,
max_msg_num: Default::default(),
max_tx_size: Default::default(),
max_grpc_decoding_size: config::default::max_grpc_decoding_size(),
query_packets_chunk_size: config::default::query_packets_chunk_size(),
max_block_time: Duration::from_secs(30),
clock_drift: Duration::from_secs(5),
trusting_period: Some(Duration::from_secs(14 * 24 * 3600)),
client_refresh_rate: config::default::client_refresh_rate(),
ccv_consumer_chain: false,
trust_threshold: Default::default(),
gas_price: config::GasPrice::new(1.0, chain_genesis_config.staking_denom.to_string()),
packet_filter: Default::default(),
address_type: AddressType::Cosmos,
memo_prefix: Default::default(),
memo_overwrite: None,
proof_specs: Default::default(),
gas_config,
address_type: AddressType::Cosmos.to_string(),
extension_options: Default::default(),
sequential_batch_tx: false,
compat_mode: bootstrap.compat_mode().cloned(),
clear_interval: None,
excluded_sequences: Default::default(),
allow_ccq: false,
compat_mode: bootstrap
.compat_mode()
.map(|compat_mode| compat_mode.to_string()),
};

Ok(relayer_chain_config.into())
Ok(relayer_chain_config)
}
}
Loading

0 comments on commit 29e6ca0

Please sign in to comment.