use core::time::Duration;
use ibc_relayer::config::default::connection_delay as default_connection_delay;
use ibc_relayer::config::Config;
use ibc_relayer::foreign_client::CreateOptions as ClientOptions;
use ibc_relayer_types::core::ics04_channel::channel::Ordering;
use ibc_relayer_types::core::ics04_channel::version::Version;
use ibc_relayer_types::core::ics24_host::identifier::PortId;
use crate::error::Error;
use crate::framework::base::HasOverrides;
use crate::framework::base::TestConfigOverride;
use crate::framework::binary::chain::{ClientOptionsOverride, RelayerConfigOverride};
use crate::framework::binary::channel::{
ChannelOrderOverride, ChannelVersionOverride, PortsOverride,
};
use crate::framework::binary::connection::ConnectionDelayOverride;
use crate::framework::binary::node::{
NamadaParametersOverride, NodeConfigOverride, NodeGenesisOverride,
};
use crate::framework::nary::channel::PortsOverride as NaryPortsOverride;
use crate::framework::supervisor::SupervisorOverride;
use crate::types::config::TestConfig;
use crate::types::topology::TopologyType;
use super::binary::chain::TopologyOverride;
pub trait TestOverrides {
fn modify_test_config(&self, _config: &mut TestConfig) {}
fn modify_node_config(&self, _config: &mut toml::Value) -> Result<(), Error> {
Ok(())
}
fn modify_genesis_file(&self, _genesis: &mut serde_json::Value) -> Result<(), Error> {
Ok(())
}
fn modify_relayer_config(&self, _config: &mut Config) {
}
fn namada_modify_parameter_file(&self, _parameter: &mut toml::Value) -> Result<(), Error> {
Ok(())
}
fn client_options_a_to_b(&self) -> ClientOptions {
Default::default()
}
fn client_options_b_to_a(&self) -> ClientOptions {
Default::default()
}
fn should_spawn_supervisor(&self) -> bool {
true
}
fn connection_delay(&self) -> Duration {
default_connection_delay()
}
fn channel_port_a(&self) -> PortId {
PortId::transfer()
}
fn channel_port_b(&self) -> PortId {
PortId::transfer()
}
fn channel_order(&self) -> Ordering {
Ordering::Unordered
}
fn channel_version(&self) -> Version {
Version::ics20()
}
fn topology(&self) -> Option<TopologyType> {
None
}
}
impl<Test: TestOverrides> HasOverrides for Test {
type Overrides = Self;
fn get_overrides(&self) -> &Self {
self
}
}
impl<Test: TestOverrides> TestConfigOverride for Test {
fn modify_test_config(&self, config: &mut TestConfig) {
TestOverrides::modify_test_config(self, config)
}
}
impl<Test: TestOverrides> NodeConfigOverride for Test {
fn modify_node_config(&self, config: &mut toml::Value) -> Result<(), Error> {
TestOverrides::modify_node_config(self, config)
}
}
impl<Test: TestOverrides> NodeGenesisOverride for Test {
fn modify_genesis_file(&self, genesis: &mut serde_json::Value) -> Result<(), Error> {
TestOverrides::modify_genesis_file(self, genesis)
}
}
impl<Test: TestOverrides> NamadaParametersOverride for Test {
fn namada_modify_parameter_file(&self, parameter: &mut toml::Value) -> Result<(), Error> {
TestOverrides::namada_modify_parameter_file(self, parameter)
}
}
impl<Test: TestOverrides> RelayerConfigOverride for Test {
fn modify_relayer_config(&self, config: &mut Config) {
TestOverrides::modify_relayer_config(self, config)
}
}
impl<Test: TestOverrides> ClientOptionsOverride for Test {
fn client_options_a_to_b(&self) -> ClientOptions {
TestOverrides::client_options_a_to_b(self)
}
fn client_options_b_to_a(&self) -> ClientOptions {
TestOverrides::client_options_b_to_a(self)
}
}
impl<Test: TestOverrides> SupervisorOverride for Test {
fn should_spawn_supervisor(&self) -> bool {
TestOverrides::should_spawn_supervisor(self)
}
}
impl<Test: TestOverrides> ConnectionDelayOverride for Test {
fn connection_delay(&self) -> Duration {
TestOverrides::connection_delay(self)
}
}
impl<Test: TestOverrides> PortsOverride for Test {
fn channel_port_a(&self) -> PortId {
TestOverrides::channel_port_a(self)
}
fn channel_port_b(&self) -> PortId {
TestOverrides::channel_port_b(self)
}
}
impl<Test: TestOverrides> ChannelOrderOverride for Test {
fn channel_order(&self) -> Ordering {
TestOverrides::channel_order(self)
}
}
impl<Test: TestOverrides> ChannelVersionOverride for Test {
fn channel_version(&self) -> Version {
TestOverrides::channel_version(self)
}
}
impl<Test: TestOverrides> NaryPortsOverride<2> for Test {
fn channel_ports(&self) -> [[PortId; 2]; 2] {
let port_a = self.channel_port_a();
let port_b = self.channel_port_b();
[[port_a.clone(), port_b.clone()], [port_b, port_a]]
}
}
impl<Test: TestOverrides> TopologyOverride for Test {
fn topology(&self) -> Option<TopologyType> {
TestOverrides::topology(self)
}
}