ibc-test-framework 0.32.2

Framework for writing integration tests for IBC relayers
use eyre::{eyre, Report as Error};
use toml::Value;

/// Set the `rpc` field in the full node config.
pub fn set_rpc_port(config: &mut Value, port: u16) -> Result<(), Error> {
    config
        .get_mut("ledger")
        .ok_or_else(|| eyre!("expect ledger section"))?
        .get_mut("cometbft")
        .ok_or_else(|| eyre!("expect cometbft section"))?
        .get_mut("rpc")
        .ok_or_else(|| eyre!("expect cometbft rpc"))?
        .as_table_mut()
        .ok_or_else(|| eyre!("expect object"))?
        .insert(
            "laddr".to_string(),
            format!("tcp://0.0.0.0:{}", port).into(),
        );

    Ok(())
}

/// Set the `p2p` field in the full node config.
pub fn set_p2p_port(config: &mut Value, port: u16) -> Result<(), Error> {
    config
        .get_mut("ledger")
        .ok_or_else(|| eyre!("expect ledger section"))?
        .get_mut("cometbft")
        .ok_or_else(|| eyre!("expect cometbft section"))?
        .get_mut("p2p")
        .ok_or_else(|| eyre!("expect cometbft p2p"))?
        .as_table_mut()
        .ok_or_else(|| eyre!("expect object"))?
        .insert(
            "laddr".to_string(),
            format!("tcp://0.0.0.0:{}", port).into(),
        );

    Ok(())
}

/// Set the `proxy_app` field in the full node config.
pub fn set_proxy_app_port(config: &mut Value, port: u16) -> Result<(), Error> {
    config
        .get_mut("ledger")
        .ok_or_else(|| eyre!("expect ledger section"))?
        .get_mut("cometbft")
        .ok_or_else(|| eyre!("expect cometbft section"))?
        .as_table_mut()
        .ok_or_else(|| eyre!("expect object"))?
        .insert(
            "proxy_app".to_string(),
            format!("tcp://0.0.0.0:{}", port).into(),
        );

    Ok(())
}

/// Set the `block_cache_bytes` field in the full node config.
pub fn set_block_cache_bytes(config: &mut Value, block_cache_bytes: i64) -> Result<(), Error> {
    config
        .get_mut("ledger")
        .ok_or_else(|| eyre!("expect ledger section"))?
        .get_mut("shell")
        .ok_or_else(|| eyre!("expect shell section"))?
        .as_table_mut()
        .ok_or_else(|| eyre!("expect object"))?
        .insert(
            "block_cache_bytes".to_string(),
            Value::Integer(block_cache_bytes),
        );

    Ok(())
}

pub fn set_unbonding_len(parameters: &mut Value, unbonding_len: i64) -> Result<(), Error> {
    parameters
        .get_mut("pos_params")
        .ok_or_else(|| eyre!("expect pos_params section"))?
        .as_table_mut()
        .ok_or_else(|| eyre!("expect object"))?
        .insert("unbonding_len".to_string(), Value::Integer(unbonding_len));

    Ok(())
}

pub fn set_pipeline_len(parameters: &mut Value, pipeline_len: i64) -> Result<(), Error> {
    parameters
        .get_mut("pos_params")
        .ok_or_else(|| eyre!("expect pos_params section"))?
        .as_table_mut()
        .ok_or_else(|| eyre!("expect object"))?
        .insert("pipeline_len".to_string(), Value::Integer(pipeline_len));

    Ok(())
}

pub fn set_default_mint_limit(
    parameters: &mut Value,
    default_mint_limit: i64,
) -> Result<(), Error> {
    parameters
        .get_mut("ibc_params")
        .ok_or_else(|| eyre!("expect ibc_params section"))?
        .as_table_mut()
        .ok_or_else(|| eyre!("expect object"))?
        .insert(
            "default_mint_limit".to_string(),
            Value::String(default_mint_limit.to_string()),
        );

    Ok(())
}

pub fn set_default_per_epoch_throughput_limit(
    parameters: &mut Value,
    default_per_epoch_throughput_limit: i64,
) -> Result<(), Error> {
    parameters
        .get_mut("ibc_params")
        .ok_or_else(|| eyre!("expect ibc_params section"))?
        .as_table_mut()
        .ok_or_else(|| eyre!("expect object"))?
        .insert(
            "default_per_epoch_throughput_limit".to_string(),
            Value::String(default_per_epoch_throughput_limit.to_string()),
        );

    Ok(())
}

pub fn set_epochs_per_year(parameters: &mut Value, epochs_per_year: i64) -> Result<(), Error> {
    parameters
        .get_mut("parameters")
        .ok_or_else(|| eyre!("expect parameters section"))?
        .as_table_mut()
        .ok_or_else(|| eyre!("expect object"))?
        .insert(
            "epochs_per_year".to_string(),
            Value::Integer(epochs_per_year),
        );

    Ok(())
}