From 0dcd53160c539c37876ea73403d52bd7d2a9a26a Mon Sep 17 00:00:00 2001 From: Alexander Gryaznov Date: Mon, 17 Feb 2025 19:33:45 +0200 Subject: [PATCH 01/19] integration smoke test --- config/envs/local/local-evm-e2e.yaml | 48 ++++++++++++++++++ docker-compose.yml | 11 +++++ e2e-tests/Cargo.toml | 14 ++++++ e2e-tests/src/lib.rs | 1 + e2e-tests/tests/common.rs | 73 ++++++++++++++++++++++++++++ e2e-tests/tests/smoke.rs | 11 +++++ 6 files changed, 158 insertions(+) create mode 100644 config/envs/local/local-evm-e2e.yaml create mode 100644 e2e-tests/Cargo.toml create mode 100644 e2e-tests/src/lib.rs create mode 100644 e2e-tests/tests/common.rs create mode 100644 e2e-tests/tests/smoke.rs diff --git a/config/envs/local/local-evm-e2e.yaml b/config/envs/local/local-evm-e2e.yaml new file mode 100644 index 000000000..804a5ec3e --- /dev/null +++ b/config/envs/local/local-evm-e2e.yaml @@ -0,0 +1,48 @@ +config: + chronicle_funds: 10. + timechain_url: 'ws://localhost:9944' + prices_path: 'prices.csv' +contracts: + evm: + additional_params: "factory/additional_config.json" + proxy: "contracts/GatewayProxy.sol/GatewayProxy.json" + gateway: "contracts/Gateway.sol/Gateway.json" + tester: "contracts/GmpProxy.sol/GmpProxy.json" +networks: + 2: + backend: "evm" + blockchain: "anvil" + network: "dev" + url: "ws://localhost:8545" + admin_funds: 100. + gateway_funds: 1. + chronicle_funds: 1. + batch_size: 64 + batch_offset: 0 + batch_gas_limit: 10000000 + gmp_margin: 0.0 + shard_task_limit: 50 + route_gas_limit: 10000000 + route_base_fee: 1400000000 + shard_size: 1 + shard_threshold: 1 + 3: + backend: "evm" + blockchain: "anvil" + network: "dev" + url: "ws://localhost:8546" + admin_funds: 100. + gateway_funds: 1. + chronicle_funds: 1. + batch_size: 64 + batch_offset: 0 + batch_gas_limit: 10000000 + gmp_margin: 0.0 + shard_task_limit: 50 + route_gas_limit: 10000000 + route_base_fee: 1400000000 + shard_size: 1 + shard_threshold: 1 +chronicles: + - http://localhost:8080 + - http://localhost:8081 diff --git a/docker-compose.yml b/docker-compose.yml index b20baffa1..b67f315de 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -81,8 +81,11 @@ services: - 'anvil -b 2 --steps-tracing --base-fee 0' environment: ANVIL_IP_ADDR: '0.0.0.0' + ports: + - 8545:8545 profiles: - evm + - bridge chronicle-2-evm: image: 'analoglabs/chronicle-develop' @@ -98,8 +101,11 @@ services: environment: RUST_LOG: 'tc_subxt=debug,chronicle=debug,tss=debug,gmp_evm=info' RUST_BACKTRACE: 1 + ports: + - 8080:8080 profiles: - evm + - bridge chain-3-evm: image: 'ghcr.io/foundry-rs/foundry:latest' @@ -107,6 +113,8 @@ services: - 'anvil -b 2 --steps-tracing --base-fee 0' environment: ANVIL_IP_ADDR: '0.0.0.0' + ports: + - 8546:8545 profiles: - evm @@ -124,6 +132,8 @@ services: environment: RUST_LOG: 'tc_subxt=debug,chronicle=debug,tss=debug,gmp_evm=info' RUST_BACKTRACE: 1 + ports: + - 8081:8080 profiles: - evm @@ -131,5 +141,6 @@ services: image: 'analoglabs/tc-cli-develop' environment: RUST_BACKTRACE: 1 + RUST_LOG: 'gmp_evm=info' profiles: - never diff --git a/e2e-tests/Cargo.toml b/e2e-tests/Cargo.toml new file mode 100644 index 000000000..e21850ba3 --- /dev/null +++ b/e2e-tests/Cargo.toml @@ -0,0 +1,14 @@ +[package] +name = "e2e-tests" +authors.workspace = true +edition.workspace = true +version.workspace = true +homepage.workspace = true +license.workspace = true +readme.workspace = true +repository.workspace = true + +[dev-dependencies] +tokio = { workspace = true, features = ["rt-multi-thread", "macros"] } +anyhow.workspace = true +tc-cli= { path = "../tc-cli", features = ["testnet", "develop"] } diff --git a/e2e-tests/src/lib.rs b/e2e-tests/src/lib.rs new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/e2e-tests/src/lib.rs @@ -0,0 +1 @@ + diff --git a/e2e-tests/tests/common.rs b/e2e-tests/tests/common.rs new file mode 100644 index 000000000..151b48eec --- /dev/null +++ b/e2e-tests/tests/common.rs @@ -0,0 +1,73 @@ +use anyhow::{Context, Result}; +use std::path::Path; +use std::process; +use tc_cli::{Sender, Tc}; + +pub struct TestEnv { + tc: Tc, +} + +const CONFIG: &str = "local-evm.yaml"; +const ENV: &str = "../config/envs/local"; + +impl TestEnv { + async fn new() -> Result { + let sender = Sender::new(); + let tc = Tc::new(Path::new(ENV).to_path_buf(), CONFIG, sender) + .await + .context("Error creating Tc client")?; + Ok(TestEnv { tc }) + } + + pub async fn spawn() -> Result { + // if !build_containers()? { + // anyhow::bail!("Failed to build containers"); + // } + + if !docker_up()? { + anyhow::bail!("Failed to start containers"); + } + Self::new().await + } +} + +impl Drop for TestEnv { + /// Tear-down logic for the tests + fn drop(&mut self) { + if !docker_down().expect("Failed to stop containers") { + println!( + "Failed to stop containers, please stop by hand with:\n\ + \t $> docker compose --profile=ethereum down" + ); + }; + } +} + +fn build_containers() -> Result { + let mut cmd = process::Command::new(Path::new("../scripts/build_docker.sh")); + let mut child = cmd.spawn().context("Error building containers")?; + + child.wait().map(|c| c.success()).context("Error building containers: {e}") +} + +fn docker_up() -> Result { + let mut cmd = process::Command::new("docker"); + + cmd.arg("compose").arg("--profile=ethereum").arg("up").arg("--wait"); + + let mut child = cmd.spawn().context("Error starting containers")?; + + // Wait for all containers to start + child.wait().map(|c| c.success()).context("Error starting containers") +} + +fn docker_down() -> Result { + let mut cmd = process::Command::new("docker"); + + cmd.arg("compose").arg("--profile=ethereum").arg("down"); + + let mut child = cmd.spawn().context("Error stopping containers")?; + + // Wait for all containers to start + child.wait().map(|c| c.success()).context("Error stopping containers: {e}") +} diff --git a/e2e-tests/tests/smoke.rs b/e2e-tests/tests/smoke.rs new file mode 100644 index 000000000..8976a8911 --- /dev/null +++ b/e2e-tests/tests/smoke.rs @@ -0,0 +1,11 @@ +mod common; + +use common::TestEnv; + +#[tokio::test] +// Resembles tc-cli smoke test +async fn smoke() { + let _env = TestEnv::spawn().await.expect("Failed to spawn Test Environment"); + + todo!() +} From 53d378095810353bdc23c60e0668be27794ea27d Mon Sep 17 00:00:00 2001 From: Alexander Gryaznov Date: Mon, 17 Feb 2025 20:01:10 +0200 Subject: [PATCH 02/19] spawn/teardown works --- Cargo.lock | 9 +++++++++ Cargo.toml | 1 + e2e-tests/tests/common.rs | 6 +++--- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 175f09101..2cdeb637f 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4005,6 +4005,15 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "feeef44e73baff3a26d371801df019877a9866a8c493d315ab00177843314f35" +[[package]] +name = "e2e-tests" +version = "0.8.0" +dependencies = [ + "anyhow", + "tc-cli", + "tokio", +] + [[package]] name = "ecdsa" version = "0.16.9" diff --git a/Cargo.toml b/Cargo.toml index d2f8c19b3..6d1fa2f90 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -36,6 +36,7 @@ members = [ "tc-subxt/metadata", "tss", "utils/generate-bags", + "e2e-tests", ] default-members = [ "chronicle", diff --git a/e2e-tests/tests/common.rs b/e2e-tests/tests/common.rs index 151b48eec..18fc83140 100644 --- a/e2e-tests/tests/common.rs +++ b/e2e-tests/tests/common.rs @@ -7,7 +7,7 @@ pub struct TestEnv { tc: Tc, } -const CONFIG: &str = "local-evm.yaml"; +const CONFIG: &str = "local-evm-e2e.yaml"; const ENV: &str = "../config/envs/local"; impl TestEnv { @@ -53,7 +53,7 @@ fn build_containers() -> Result { fn docker_up() -> Result { let mut cmd = process::Command::new("docker"); - cmd.arg("compose").arg("--profile=ethereum").arg("up").arg("--wait"); + cmd.arg("compose").arg("--profile=evm").arg("up").arg("-d").arg("--wait"); let mut child = cmd.spawn().context("Error starting containers")?; @@ -64,7 +64,7 @@ fn docker_up() -> Result { fn docker_down() -> Result { let mut cmd = process::Command::new("docker"); - cmd.arg("compose").arg("--profile=ethereum").arg("down"); + cmd.arg("compose").arg("--profile=evm").arg("down"); let mut child = cmd.spawn().context("Error stopping containers")?; From 4b56f1655f77addadbd5c97b06e92909efa373b3 Mon Sep 17 00:00:00 2001 From: Alexander Gryaznov Date: Mon, 17 Feb 2025 20:11:36 +0200 Subject: [PATCH 03/19] setup test --- Cargo.lock | 1 + e2e-tests/Cargo.toml | 1 + e2e-tests/tests/common.rs | 9 ++++++++- 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/Cargo.lock b/Cargo.lock index 2cdeb637f..fc468fe30 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4011,6 +4011,7 @@ version = "0.8.0" dependencies = [ "anyhow", "tc-cli", + "time-primitives", "tokio", ] diff --git a/e2e-tests/Cargo.toml b/e2e-tests/Cargo.toml index e21850ba3..f908bf548 100644 --- a/e2e-tests/Cargo.toml +++ b/e2e-tests/Cargo.toml @@ -12,3 +12,4 @@ repository.workspace = true tokio = { workspace = true, features = ["rt-multi-thread", "macros"] } anyhow.workspace = true tc-cli= { path = "../tc-cli", features = ["testnet", "develop"] } +time-primitives = { workspace = true, features = ["testnet", "develop"] } diff --git a/e2e-tests/tests/common.rs b/e2e-tests/tests/common.rs index 18fc83140..a968cd4b7 100644 --- a/e2e-tests/tests/common.rs +++ b/e2e-tests/tests/common.rs @@ -2,9 +2,10 @@ use anyhow::{Context, Result}; use std::path::Path; use std::process; use tc_cli::{Sender, Tc}; +use time_primitives::{NetworkId, Address}; pub struct TestEnv { - tc: Tc, + pub tc: Tc, } const CONFIG: &str = "local-evm-e2e.yaml"; @@ -19,6 +20,7 @@ impl TestEnv { Ok(TestEnv { tc }) } + /// spawns new testing env pub async fn spawn() -> Result { // if !build_containers()? { // anyhow::bail!("Failed to build containers"); @@ -29,6 +31,11 @@ impl TestEnv { } Self::new().await } + + /// sets up test + pub async fn setup(&self, src: NetworkId, dest: NetworkId) -> Result<(Address, Address)> { + self.tc.setup_test(src, dest).await + } } impl Drop for TestEnv { From 1ac135f7c57140038eb5a3241e135c30f5ae9a40 Mon Sep 17 00:00:00 2001 From: Alexander Gryaznov Date: Mon, 17 Feb 2025 20:51:01 +0200 Subject: [PATCH 04/19] smoke test runs --- Cargo.lock | 4 +++ e2e-tests/Cargo.toml | 6 ++++- e2e-tests/tests/common.rs | 2 +- e2e-tests/tests/smoke.rs | 52 +++++++++++++++++++++++++++++++++++++-- 4 files changed, 60 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index fc468fe30..ba977ca6a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4010,9 +4010,13 @@ name = "e2e-tests" version = "0.8.0" dependencies = [ "anyhow", + "futures", + "hex", "tc-cli", "time-primitives", "tokio", + "tracing", + "tracing-subscriber 0.3.19", ] [[package]] diff --git a/e2e-tests/Cargo.toml b/e2e-tests/Cargo.toml index f908bf548..a1a540814 100644 --- a/e2e-tests/Cargo.toml +++ b/e2e-tests/Cargo.toml @@ -11,5 +11,9 @@ repository.workspace = true [dev-dependencies] tokio = { workspace = true, features = ["rt-multi-thread", "macros"] } anyhow.workspace = true -tc-cli= { path = "../tc-cli", features = ["testnet", "develop"] } +futures.workspace = true time-primitives = { workspace = true, features = ["testnet", "develop"] } +tc-cli= { path = "../tc-cli", features = ["testnet", "develop"] } +tracing.workspace = true +tracing-subscriber = "0.3.18" +hex.workspace = true diff --git a/e2e-tests/tests/common.rs b/e2e-tests/tests/common.rs index a968cd4b7..855e0759a 100644 --- a/e2e-tests/tests/common.rs +++ b/e2e-tests/tests/common.rs @@ -2,7 +2,7 @@ use anyhow::{Context, Result}; use std::path::Path; use std::process; use tc_cli::{Sender, Tc}; -use time_primitives::{NetworkId, Address}; +use time_primitives::{Address, NetworkId}; pub struct TestEnv { pub tc: Tc, diff --git a/e2e-tests/tests/smoke.rs b/e2e-tests/tests/smoke.rs index 8976a8911..b84de8121 100644 --- a/e2e-tests/tests/smoke.rs +++ b/e2e-tests/tests/smoke.rs @@ -1,11 +1,59 @@ +use futures::StreamExt; +use tracing_subscriber::filter::EnvFilter; + mod common; use common::TestEnv; +use time_primitives::NetworkId; + +const SRC: NetworkId = 2; +const DEST: NetworkId = 3; #[tokio::test] // Resembles tc-cli smoke test async fn smoke() { - let _env = TestEnv::spawn().await.expect("Failed to spawn Test Environment"); + let filter = EnvFilter::from_default_env() + .add_directive("tc_cli=info".parse().unwrap()) + .add_directive("gmp_evm=info".parse().unwrap()); + tracing_subscriber::fmt().with_env_filter(filter).init(); + + let env = TestEnv::spawn().await.expect("Failed to spawn Test Environment"); + + let (src_addr, dest_addr) = env.setup(SRC, DEST).await.expect("failed to setup test"); + + let tc = &env.tc; + let mut blocks = tc.finality_notification_stream(); + let (_, start) = blocks.next().await.expect("expected block"); + let gas_limit = tc + .estimate_message_gas_limit(DEST, dest_addr, SRC, src_addr, vec![]) + .await + .unwrap(); + let gas_cost = tc.estimate_message_cost(SRC, DEST, gas_limit, vec![]).await.unwrap(); + + let msg_id = tc + .send_message(SRC, src_addr, DEST, dest_addr, gas_limit, gas_cost, vec![]) + .await + .unwrap(); - todo!() + let mut id = None; + let (exec, end) = loop { + let (_, end) = blocks.next().await.expect("expected block"); + let trace = tc.message_trace(SRC, msg_id).await.unwrap(); + let exec = trace.exec.as_ref().map(|t| t.task); + tracing::info!("waiting for message {}", hex::encode(msg_id)); + id = Some(tc.print_table(id, "message", vec![trace]).await.unwrap()); + if let Some(exec) = exec { + break (exec, end); + } + }; + let blocks = tc.read_events_blocks(exec).await.unwrap(); + let msgs = tc.messages(DEST, dest_addr, blocks).await.unwrap(); + let msg = msgs + .into_iter() + .find(|msg| msg.message_id() == msg_id) + .expect("failed to find message"); + tc.print_table(None, "message", vec![msg]).await.unwrap(); + tc.println(None, format!("received message after {} blocks", end - start)) + .await + .unwrap(); } From 38a9246db2847f7bab7fad97b17b1295907a7ce4 Mon Sep 17 00:00:00 2001 From: Alexander Gryaznov Date: Mon, 17 Feb 2025 20:57:00 +0200 Subject: [PATCH 05/19] tracing-subscriber dep to workspace --- Cargo.toml | 1 + chronicle/Cargo.toml | 2 +- e2e-tests/Cargo.toml | 2 +- gmp/grpc/Cargo.toml | 2 +- slack-bot/Cargo.toml | 2 +- tc-cli/Cargo.toml | 2 +- tss/Cargo.toml | 2 +- 7 files changed, 7 insertions(+), 6 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 6d1fa2f90..3c6df86a2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -60,6 +60,7 @@ serde_json = { version = "1.0.117", default-features = false } simple-mermaid = "0.1" tokio = "1.38.0" tracing = "0.1.40" +tracing-subscriber = "0.3.19" # substrate support libs scale-codec = { package = "parity-scale-codec", version = "3.6.12", default-features = false, features = [ "derive" ] } diff --git a/chronicle/Cargo.toml b/chronicle/Cargo.toml index c3038067d..dccc4c57c 100644 --- a/chronicle/Cargo.toml +++ b/chronicle/Cargo.toml @@ -36,7 +36,7 @@ schnorr-evm = { version = "0.1.0" } sha3 = { version = "0.10" } tide = { version = "0.16.0", default-features = false, features = ["h1-server"] } tracing-panic = "0.1.1" -tracing-subscriber = { version = "0.3.18", features = ["env-filter"] } +tracing-subscriber = { workspace = true, features = ["env-filter"] } [dev-dependencies] ed25519-dalek = "2.1.1" diff --git a/e2e-tests/Cargo.toml b/e2e-tests/Cargo.toml index a1a540814..dd1f74c63 100644 --- a/e2e-tests/Cargo.toml +++ b/e2e-tests/Cargo.toml @@ -15,5 +15,5 @@ futures.workspace = true time-primitives = { workspace = true, features = ["testnet", "develop"] } tc-cli= { path = "../tc-cli", features = ["testnet", "develop"] } tracing.workspace = true -tracing-subscriber = "0.3.18" +tracing-subscriber.workspace = true hex.workspace = true diff --git a/gmp/grpc/Cargo.toml b/gmp/grpc/Cargo.toml index 059cc3317..6577b5630 100644 --- a/gmp/grpc/Cargo.toml +++ b/gmp/grpc/Cargo.toml @@ -21,7 +21,7 @@ serde_json = "1.0.133" time-primitives = { workspace = true, features = ["std"] } tokio = { workspace = true, features = ["macros", "signal"] } tonic = { version = "0.12.3", features = ["transport", "tls", "tls-roots"] } -tracing-subscriber = "0.3.19" +tracing-subscriber.workspace = true [build-dependencies] tonic-build = "0.12.2" diff --git a/slack-bot/Cargo.toml b/slack-bot/Cargo.toml index 2abec994a..a584d5aab 100644 --- a/slack-bot/Cargo.toml +++ b/slack-bot/Cargo.toml @@ -20,4 +20,4 @@ serde_json = "1.0.138" slack-morphism = { version = "2.9.0", features = ["axum", "hyper"] } tokio = { workspace = true, features = [ "macros", "rt-multi-thread", "signal" ]} tracing.workspace = true -tracing-subscriber = { version = "0.3.19", features = ["env-filter"] } +tracing-subscriber = { workspace = true, features = ["env-filter"] } diff --git a/tc-cli/Cargo.toml b/tc-cli/Cargo.toml index 3e610dab6..ba1ff854f 100644 --- a/tc-cli/Cargo.toml +++ b/tc-cli/Cargo.toml @@ -34,7 +34,7 @@ tc-subxt.workspace = true time-primitives = { workspace = true, default-features = true } tokio = { workspace = true, features = [ "macros", "rt-multi-thread", "signal" ]} tracing.workspace = true -tracing-subscriber = "0.3.18" +tracing-subscriber.workspace = true [features] testnet = [ diff --git a/tss/Cargo.toml b/tss/Cargo.toml index 9bfaabbff..967cb5725 100644 --- a/tss/Cargo.toml +++ b/tss/Cargo.toml @@ -19,4 +19,4 @@ rand_core = { version = "0.6.4", features = ["getrandom"] } hex.workspace = true [dev-dependencies] -tracing-subscriber = { version = "0.3.19", features = ["env-filter"] } +tracing-subscriber = { workspace = true, features = ["env-filter"] } From 8b1e06d544a24f6d48186bc9d5f5b0a02d5e62dd Mon Sep 17 00:00:00 2001 From: Alexander Gryaznov Date: Mon, 17 Feb 2025 21:09:12 +0200 Subject: [PATCH 06/19] smoke test passes --- e2e-tests/tests/smoke.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/e2e-tests/tests/smoke.rs b/e2e-tests/tests/smoke.rs index b84de8121..9c2c7d9ef 100644 --- a/e2e-tests/tests/smoke.rs +++ b/e2e-tests/tests/smoke.rs @@ -14,7 +14,8 @@ const DEST: NetworkId = 3; async fn smoke() { let filter = EnvFilter::from_default_env() .add_directive("tc_cli=info".parse().unwrap()) - .add_directive("gmp_evm=info".parse().unwrap()); + .add_directive("gmp_evm=info".parse().unwrap()) + .add_directive("smoke_test=info".parse().unwrap()); tracing_subscriber::fmt().with_env_filter(filter).init(); let env = TestEnv::spawn().await.expect("Failed to spawn Test Environment"); @@ -40,7 +41,7 @@ async fn smoke() { let (_, end) = blocks.next().await.expect("expected block"); let trace = tc.message_trace(SRC, msg_id).await.unwrap(); let exec = trace.exec.as_ref().map(|t| t.task); - tracing::info!("waiting for message {}", hex::encode(msg_id)); + tracing::info!(target: "smoke_test", "waiting for message {}", hex::encode(msg_id)); id = Some(tc.print_table(id, "message", vec![trace]).await.unwrap()); if let Some(exec) = exec { break (exec, end); From 4168ce724e9c5a83f1d4c9ce0248611e168f1c0b Mon Sep 17 00:00:00 2001 From: Alexander Gryaznov Date: Mon, 17 Feb 2025 21:56:11 +0200 Subject: [PATCH 07/19] better tc-cli output --- tc-cli/src/slack.rs | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/tc-cli/src/slack.rs b/tc-cli/src/slack.rs index f7432b18b..2f2468aea 100644 --- a/tc-cli/src/slack.rs +++ b/tc-cli/src/slack.rs @@ -41,11 +41,7 @@ impl Sender { } fn println(&self, _restore: bool, text: &str) { - /*if restore { - print!("\x1B8"); - } - print!("\x1B7");*/ - println!("{text}"); + tracing::info!("{text}"); } pub async fn text(&self, id: Option, text: String) -> Result { @@ -60,7 +56,7 @@ impl Sender { pub async fn csv(&self, id: Option, title: &str, csv: Vec) -> Result { let table = csv_to_table::from_reader(&mut &csv[..])?; - self.println(id.is_some(), &format!("{table}")); + self.println(id.is_some(), &format!("\n{table}")); if let Some(slack) = self.slack.as_ref() { let id = id.map(|id| id.slack).unwrap_or_default(); let file = slack.post_table(id, title.into(), csv).await?; From a67de8f73656c0bb531637f06f6f9adcec44c2ba Mon Sep 17 00:00:00 2001 From: Alexander Gryaznov Date: Mon, 17 Feb 2025 22:05:12 +0200 Subject: [PATCH 08/19] optionally build containers at test spawn --- e2e-tests/tests/common.rs | 8 ++++---- e2e-tests/tests/smoke.rs | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/e2e-tests/tests/common.rs b/e2e-tests/tests/common.rs index 855e0759a..3b2bb035e 100644 --- a/e2e-tests/tests/common.rs +++ b/e2e-tests/tests/common.rs @@ -21,10 +21,10 @@ impl TestEnv { } /// spawns new testing env - pub async fn spawn() -> Result { - // if !build_containers()? { - // anyhow::bail!("Failed to build containers"); - // } + pub async fn spawn(build: bool) -> Result { + if build && !build_containers()? { + anyhow::bail!("Failed to build containers"); + } if !docker_up()? { anyhow::bail!("Failed to start containers"); diff --git a/e2e-tests/tests/smoke.rs b/e2e-tests/tests/smoke.rs index 9c2c7d9ef..d9c01c019 100644 --- a/e2e-tests/tests/smoke.rs +++ b/e2e-tests/tests/smoke.rs @@ -18,7 +18,7 @@ async fn smoke() { .add_directive("smoke_test=info".parse().unwrap()); tracing_subscriber::fmt().with_env_filter(filter).init(); - let env = TestEnv::spawn().await.expect("Failed to spawn Test Environment"); + let env = TestEnv::spawn(false).await.expect("Failed to spawn Test Environment"); let (src_addr, dest_addr) = env.setup(SRC, DEST).await.expect("failed to setup test"); From 369f45c56876db57d096a1e89aee98789c30881f Mon Sep 17 00:00:00 2001 From: Alexander Gryaznov Date: Tue, 18 Feb 2025 12:52:41 +0200 Subject: [PATCH 09/19] build containers first --- e2e-tests/tests/smoke.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/e2e-tests/tests/smoke.rs b/e2e-tests/tests/smoke.rs index d9c01c019..fe672e789 100644 --- a/e2e-tests/tests/smoke.rs +++ b/e2e-tests/tests/smoke.rs @@ -18,7 +18,7 @@ async fn smoke() { .add_directive("smoke_test=info".parse().unwrap()); tracing_subscriber::fmt().with_env_filter(filter).init(); - let env = TestEnv::spawn(false).await.expect("Failed to spawn Test Environment"); + let env = TestEnv::spawn(true).await.expect("Failed to spawn Test Environment"); let (src_addr, dest_addr) = env.setup(SRC, DEST).await.expect("failed to setup test"); From a4ec3e3170378860a91d75305fb610591acf0857 Mon Sep 17 00:00:00 2001 From: Alexander Gryaznov Date: Tue, 18 Feb 2025 14:06:53 +0200 Subject: [PATCH 10/19] fix a test: env config field rename --- config/envs/integration/config.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/config/envs/integration/config.yaml b/config/envs/integration/config.yaml index d644b2fe1..5ad6802e8 100644 --- a/config/envs/integration/config.yaml +++ b/config/envs/integration/config.yaml @@ -47,7 +47,7 @@ networks: network: "testnet" url: "wss://bsc-testnet-rpc.publicnode.com" gateway_funds: 1. - chronicle_target_funds: .1 + chronicle_funds: .1 batch_size: 256 batch_offset: 0 batch_gas_limit: 50000000 @@ -63,7 +63,7 @@ networks: network: "sepolia" url: "wss://arbitrum-sepolia-rpc.publicnode.com" gateway_funds: 1. - chronicle_target_funds: .1 + chronicle_funds: .1 batch_size: 512 batch_offset: 0 batch_gas_limit: 500000000000000 From d15da054fe1ae2c243e427e6dba272b6c6ec24c6 Mon Sep 17 00:00:00 2001 From: Alexander Gryaznov Date: Tue, 18 Feb 2025 14:07:33 +0200 Subject: [PATCH 11/19] make build_docker script run from any dir --- scripts/build_docker.sh | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/scripts/build_docker.sh b/scripts/build_docker.sh index eaeb8a11e..cc99ecc8c 100755 --- a/scripts/build_docker.sh +++ b/scripts/build_docker.sh @@ -3,6 +3,10 @@ set -e set -x +SCRIPT_DIR=$( cd -- "$( dirname -- "${BASH_SOURCE[0]}" )" &> /dev/null && pwd ) +WORKSPACE_ROOT=$SCRIPT_DIR/../ +cd $WORKSPACE_ROOT + # Check for 'uname' and abort if it is not available. uname -v > /dev/null 2>&1 || { echo >&2 "ERROR - requires 'uname' to identify the platform."; exit 1; } @@ -65,19 +69,19 @@ cargo build -p timechain-node -p chronicle -p tc-cli -p gmp-grpc --target "$rust forge build --root analog-gmp -mkdir -p target/docker/tc-cli -rm -rf target/docker/tc-cli/envs -cp -rL config/envs target/docker/tc-cli/envs -rm -rf target/docker/tc-cli/analog-gmp -cp -r analog-gmp target/docker/tc-cli/analog-gmp +mkdir -p $WORKSPACE_ROOT/target/docker/tc-cli +rm -rf $WORKSPACE_ROOT/target/docker/tc-cli/envs +cp -rL $WORKSPACE_ROOT/config/envs target/docker/tc-cli/envs +rm -rf $WORKSPACE_ROOT/target/docker/tc-cli/analog-gmp +cp -r $WORKSPACE_ROOT/analog-gmp $WORKSPACE_ROOT/target/docker/tc-cli/analog-gmp build_image () { - local TARGET="target/$rustTarget/$profile/$1" - local CONTEXT="target/docker/$1" + local TARGET=$WORKSPACE_ROOT"target/$rustTarget/$profile/$1" + local CONTEXT=$WORKSPACE_ROOT"target/docker/$1" mkdir -p $CONTEXT if ! cmp -s $TARGET "$CONTEXT/$1"; then cp $TARGET $CONTEXT - docker build $CONTEXT -f "config/docker/Dockerfile.$1" -t "analoglabs/$1-$environment" + docker build $CONTEXT -f $WORKSPACE_ROOT"config/docker/Dockerfile.$1" -t "analoglabs/$1-$environment" fi } From 895ac053f3d77fecea4fc14c0ca12c465b4c93c5 Mon Sep 17 00:00:00 2001 From: Alexander Gryaznov Date: Tue, 18 Feb 2025 15:43:11 +0200 Subject: [PATCH 12/19] move e2e tests out of its own crate --- Cargo.lock | 28 ++++++++++++++-------------- Cargo.toml | 22 +++++++++++++++++++++- e2e-tests/Cargo.toml | 19 ------------------- e2e-tests/src/lib.rs | 1 - {e2e-tests/tests => tests}/common.rs | 4 ++-- {e2e-tests/tests => tests}/smoke.rs | 0 6 files changed, 37 insertions(+), 37 deletions(-) delete mode 100644 e2e-tests/Cargo.toml delete mode 100644 e2e-tests/src/lib.rs rename {e2e-tests/tests => tests}/common.rs (94%) rename {e2e-tests/tests => tests}/smoke.rs (100%) diff --git a/Cargo.lock b/Cargo.lock index ba977ca6a..845969eb6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4005,20 +4005,6 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "feeef44e73baff3a26d371801df019877a9866a8c493d315ab00177843314f35" -[[package]] -name = "e2e-tests" -version = "0.8.0" -dependencies = [ - "anyhow", - "futures", - "hex", - "tc-cli", - "time-primitives", - "tokio", - "tracing", - "tracing-subscriber 0.3.19", -] - [[package]] name = "ecdsa" version = "0.16.9" @@ -20335,6 +20321,20 @@ dependencies = [ "uint 0.10.0", ] +[[package]] +name = "timechain" +version = "0.8.0" +dependencies = [ + "anyhow", + "futures", + "hex", + "tc-cli", + "time-primitives", + "tokio", + "tracing", + "tracing-subscriber 0.3.19", +] + [[package]] name = "timechain-generate-bags" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index 3c6df86a2..4032da391 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -36,7 +36,6 @@ members = [ "tc-subxt/metadata", "tss", "utils/generate-bags", - "e2e-tests", ] default-members = [ "chronicle", @@ -106,6 +105,27 @@ eth-bridge-runtime-api = { path = "pallets/eth-bridge/runtime-api", default-feat eth-bridge = { path = "pallets/eth-bridge", default-features = false } bridge-multisig = { path = "pallets/bridge-multisig", default-features = false } +[package] +name = "timechain" +authors.workspace = true +edition.workspace = true +version.workspace = true +homepage.workspace = true +license.workspace = true +readme.workspace = true +repository.workspace = true + +[dev-dependencies] +tokio = { workspace = true, features = ["rt-multi-thread", "macros"] } +anyhow.workspace = true +futures.workspace = true +time-primitives = { workspace = true, features = ["testnet", "develop"] } +tc-cli= { path = "tc-cli", features = ["testnet", "develop"] } +tracing.workspace = true +tracing-subscriber.workspace = true +hex.workspace = true + + [profile.release] # Runtime requires unwinding. panic = "unwind" diff --git a/e2e-tests/Cargo.toml b/e2e-tests/Cargo.toml deleted file mode 100644 index dd1f74c63..000000000 --- a/e2e-tests/Cargo.toml +++ /dev/null @@ -1,19 +0,0 @@ -[package] -name = "e2e-tests" -authors.workspace = true -edition.workspace = true -version.workspace = true -homepage.workspace = true -license.workspace = true -readme.workspace = true -repository.workspace = true - -[dev-dependencies] -tokio = { workspace = true, features = ["rt-multi-thread", "macros"] } -anyhow.workspace = true -futures.workspace = true -time-primitives = { workspace = true, features = ["testnet", "develop"] } -tc-cli= { path = "../tc-cli", features = ["testnet", "develop"] } -tracing.workspace = true -tracing-subscriber.workspace = true -hex.workspace = true diff --git a/e2e-tests/src/lib.rs b/e2e-tests/src/lib.rs deleted file mode 100644 index 8b1378917..000000000 --- a/e2e-tests/src/lib.rs +++ /dev/null @@ -1 +0,0 @@ - diff --git a/e2e-tests/tests/common.rs b/tests/common.rs similarity index 94% rename from e2e-tests/tests/common.rs rename to tests/common.rs index 3b2bb035e..c29a11d03 100644 --- a/e2e-tests/tests/common.rs +++ b/tests/common.rs @@ -9,7 +9,7 @@ pub struct TestEnv { } const CONFIG: &str = "local-evm-e2e.yaml"; -const ENV: &str = "../config/envs/local"; +const ENV: &str = "config/envs/local"; impl TestEnv { async fn new() -> Result { @@ -51,7 +51,7 @@ impl Drop for TestEnv { } fn build_containers() -> Result { - let mut cmd = process::Command::new(Path::new("../scripts/build_docker.sh")); + let mut cmd = process::Command::new(Path::new("scripts/build_docker.sh")); let mut child = cmd.spawn().context("Error building containers")?; child.wait().map(|c| c.success()).context("Error building containers: {e}") diff --git a/e2e-tests/tests/smoke.rs b/tests/smoke.rs similarity index 100% rename from e2e-tests/tests/smoke.rs rename to tests/smoke.rs From 6fc1c8bd31d96525e7910858edfe67e9d6e4e526 Mon Sep 17 00:00:00 2001 From: Alexander Gryaznov Date: Tue, 18 Feb 2025 19:06:27 +0200 Subject: [PATCH 13/19] smoke: add chronicle restart & re-test; + refactor --- tests/common.rs | 19 +++++++++++++++++++ tests/smoke.rs | 50 +++++++++++++++++++++++++++++++------------------ 2 files changed, 51 insertions(+), 18 deletions(-) diff --git a/tests/common.rs b/tests/common.rs index c29a11d03..85be60053 100644 --- a/tests/common.rs +++ b/tests/common.rs @@ -36,6 +36,11 @@ impl TestEnv { pub async fn setup(&self, src: NetworkId, dest: NetworkId) -> Result<(Address, Address)> { self.tc.setup_test(src, dest).await } + + /// restart container + pub async fn restart(&self, containers: Vec<&str>) -> Result { + docker_restart(containers) + } } impl Drop for TestEnv { @@ -78,3 +83,17 @@ fn docker_down() -> Result { // Wait for all containers to start child.wait().map(|c| c.success()).context("Error stopping containers: {e}") } + +fn docker_restart(containers: Vec<&str>) -> Result { + let mut cmd = process::Command::new("docker"); + cmd.arg("compose").arg("stop").args(containers.as_slice()); + + let mut child = cmd.spawn().context("Error stopping containers")?; + // wait for the containers to stop + child.wait().map(|c| c.success()).context("Error stopping containers")?; + let mut cmd = process::Command::new("docker"); + cmd.arg("compose").arg("start").args(containers.as_slice()); + let mut child = cmd.spawn().context("Error stopping containers")?; + // wait for the containers to start + child.wait().map(|c| c.success()).context("Error starting containers") +} diff --git a/tests/smoke.rs b/tests/smoke.rs index fe672e789..b8429006d 100644 --- a/tests/smoke.rs +++ b/tests/smoke.rs @@ -1,30 +1,18 @@ use futures::StreamExt; +use tc_cli::Tc; use tracing_subscriber::filter::EnvFilter; mod common; use common::TestEnv; -use time_primitives::NetworkId; +use time_primitives::{Address, NetworkId}; const SRC: NetworkId = 2; const DEST: NetworkId = 3; -#[tokio::test] -// Resembles tc-cli smoke test -async fn smoke() { - let filter = EnvFilter::from_default_env() - .add_directive("tc_cli=info".parse().unwrap()) - .add_directive("gmp_evm=info".parse().unwrap()) - .add_directive("smoke_test=info".parse().unwrap()); - tracing_subscriber::fmt().with_env_filter(filter).init(); - - let env = TestEnv::spawn(true).await.expect("Failed to spawn Test Environment"); - - let (src_addr, dest_addr) = env.setup(SRC, DEST).await.expect("failed to setup test"); - - let tc = &env.tc; - let mut blocks = tc.finality_notification_stream(); - let (_, start) = blocks.next().await.expect("expected block"); +async fn run_smoke(tc: &Tc, src_addr: Address, dest_addr: Address) { + let mut blockstream = tc.finality_notification_stream(); + let (_, start) = blockstream.next().await.expect("expected block"); let gas_limit = tc .estimate_message_gas_limit(DEST, dest_addr, SRC, src_addr, vec![]) .await @@ -38,7 +26,7 @@ async fn smoke() { let mut id = None; let (exec, end) = loop { - let (_, end) = blocks.next().await.expect("expected block"); + let (_, end) = blockstream.next().await.expect("expected block"); let trace = tc.message_trace(SRC, msg_id).await.unwrap(); let exec = trace.exec.as_ref().map(|t| t.task); tracing::info!(target: "smoke_test", "waiting for message {}", hex::encode(msg_id)); @@ -58,3 +46,29 @@ async fn smoke() { .await .unwrap(); } + +#[tokio::test] +// Resembles tc-cli smoke test +async fn smoke() { + let filter = EnvFilter::from_default_env() + .add_directive("tc_cli=info".parse().unwrap()) + .add_directive("gmp_evm=info".parse().unwrap()) + .add_directive("smoke_test=info".parse().unwrap()); + tracing_subscriber::fmt().with_env_filter(filter).init(); + + let env = TestEnv::spawn(true).await.expect("Failed to spawn Test Environment"); + + let (src_addr, dest_addr) = env.setup(SRC, DEST).await.expect("failed to setup test"); + + // Run smoke test + run_smoke(&env.tc, src_addr, dest_addr).await; + + // Restart chronicles + assert!(env + .restart(vec!["chronicle-2-evm", "chronicle-3-evm"]) + .await + .expect("Failed to restart chronicles")); + + // Re-run smoke test: should still work + run_smoke(&env.tc, src_addr, dest_addr).await; +} From 0e3099219c6fea7b983f57f9e98a47430aa2cad5 Mon Sep 17 00:00:00 2001 From: Alexander Gryaznov Date: Wed, 19 Feb 2025 13:19:18 +0200 Subject: [PATCH 14/19] separate unit and integration tests workflows --- .../workflows/pr-test-cargo-integration.yaml | 27 +++++++++++++++++++ ...est-cargo.yaml => pr-test-cargo-unit.yaml} | 2 +- 2 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 .github/workflows/pr-test-cargo-integration.yaml rename .github/workflows/{pr-test-cargo.yaml => pr-test-cargo-unit.yaml} (95%) diff --git a/.github/workflows/pr-test-cargo-integration.yaml b/.github/workflows/pr-test-cargo-integration.yaml new file mode 100644 index 000000000..ea988f1fe --- /dev/null +++ b/.github/workflows/pr-test-cargo-integration.yaml @@ -0,0 +1,27 @@ +name: Check testsuite +on: + pull_request: + types: [labeled, unlabeled, opened, reopened, synchronize] +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true +jobs: + test-cargo: + runs-on: [self-hosted, general] + steps: + - name: Checkout sources + uses: actions/checkout@v4 + with: + submodules: recursive + - name: Build testsuite + uses: ./.github/actions/cargo-command + with: + command: test + args: --all-features --no-run + - name: Run testsuite + uses: ./.github/actions/cargo-command + with: + command: test + args: --all-features --tests + cache: false + annotate: false diff --git a/.github/workflows/pr-test-cargo.yaml b/.github/workflows/pr-test-cargo-unit.yaml similarity index 95% rename from .github/workflows/pr-test-cargo.yaml rename to .github/workflows/pr-test-cargo-unit.yaml index 0df51ced0..5eb6de5d0 100644 --- a/.github/workflows/pr-test-cargo.yaml +++ b/.github/workflows/pr-test-cargo-unit.yaml @@ -38,6 +38,6 @@ jobs: uses: ./.github/actions/cargo-command with: command: test - args: --all-features + args: --all-features --lib --bins cache: false annotate: false From 1f40515c6dfcbae78c8c99d9d66cf83b47c93b79 Mon Sep 17 00:00:00 2001 From: Alexander Gryaznov Date: Wed, 19 Feb 2025 13:29:03 +0200 Subject: [PATCH 15/19] improve workflows naming --- .github/workflows/pr-test-cargo-integration.yaml | 2 +- .github/workflows/pr-test-cargo-unit.yaml | 2 +- .github/workflows/pr-test-compose.yaml | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/pr-test-cargo-integration.yaml b/.github/workflows/pr-test-cargo-integration.yaml index ea988f1fe..fcdbc57bc 100644 --- a/.github/workflows/pr-test-cargo-integration.yaml +++ b/.github/workflows/pr-test-cargo-integration.yaml @@ -1,4 +1,4 @@ -name: Check testsuite +name: Run integration tests on: pull_request: types: [labeled, unlabeled, opened, reopened, synchronize] diff --git a/.github/workflows/pr-test-cargo-unit.yaml b/.github/workflows/pr-test-cargo-unit.yaml index 5eb6de5d0..c253bdbd7 100644 --- a/.github/workflows/pr-test-cargo-unit.yaml +++ b/.github/workflows/pr-test-cargo-unit.yaml @@ -1,4 +1,4 @@ -name: Check testsuite +name: Run unit tests on: pull_request: paths: diff --git a/.github/workflows/pr-test-compose.yaml b/.github/workflows/pr-test-compose.yaml index 50c99b684..e2e156240 100644 --- a/.github/workflows/pr-test-compose.yaml +++ b/.github/workflows/pr-test-compose.yaml @@ -1,5 +1,5 @@ # Triggered via !ci-test-basic tag -name: Check basic integration +name: Run tc-cli smoke test on: pull_request: types: [labeled, unlabeled, opened, reopened, synchronize] From 8e963f1a1608b5a4a94b0acf0bac7b700a78c38f Mon Sep 17 00:00:00 2001 From: Alexander Gryaznov Date: Wed, 19 Feb 2025 13:50:28 +0200 Subject: [PATCH 16/19] separate e2e only, keep other integration --- ...{pr-test-cargo-integration.yaml => pr-test-cargo-e2e.yaml} | 4 ++-- .../workflows/{pr-test-cargo-unit.yaml => pr-test-cargo.yaml} | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) rename .github/workflows/{pr-test-cargo-integration.yaml => pr-test-cargo-e2e.yaml} (89%) rename .github/workflows/{pr-test-cargo-unit.yaml => pr-test-cargo.yaml} (92%) diff --git a/.github/workflows/pr-test-cargo-integration.yaml b/.github/workflows/pr-test-cargo-e2e.yaml similarity index 89% rename from .github/workflows/pr-test-cargo-integration.yaml rename to .github/workflows/pr-test-cargo-e2e.yaml index fcdbc57bc..1eff142c9 100644 --- a/.github/workflows/pr-test-cargo-integration.yaml +++ b/.github/workflows/pr-test-cargo-e2e.yaml @@ -1,4 +1,4 @@ -name: Run integration tests +name: Run end-to-end tests on: pull_request: types: [labeled, unlabeled, opened, reopened, synchronize] @@ -22,6 +22,6 @@ jobs: uses: ./.github/actions/cargo-command with: command: test - args: --all-features --tests + args: --all-features -p timechain --tests cache: false annotate: false diff --git a/.github/workflows/pr-test-cargo-unit.yaml b/.github/workflows/pr-test-cargo.yaml similarity index 92% rename from .github/workflows/pr-test-cargo-unit.yaml rename to .github/workflows/pr-test-cargo.yaml index c253bdbd7..ce00e3023 100644 --- a/.github/workflows/pr-test-cargo-unit.yaml +++ b/.github/workflows/pr-test-cargo.yaml @@ -1,4 +1,4 @@ -name: Run unit tests +name: Run all except e2e tests on: pull_request: paths: @@ -38,6 +38,6 @@ jobs: uses: ./.github/actions/cargo-command with: command: test - args: --all-features --lib --bins + args: --all-features --exclude timechain cache: false annotate: false From 860a7942722f6b9cf3de8834d52ffbf68b0500bc Mon Sep 17 00:00:00 2001 From: Alexander Gryaznov Date: Wed, 19 Feb 2025 13:53:37 +0200 Subject: [PATCH 17/19] rm e2e-tests --- Cargo.lock | 14 ------ Cargo.toml | 1 - e2e-tests/Cargo.toml | 19 -------- e2e-tests/src/lib.rs | 1 - e2e-tests/tests/common.rs | 99 --------------------------------------- e2e-tests/tests/smoke.rs | 74 ----------------------------- 6 files changed, 208 deletions(-) delete mode 100644 e2e-tests/Cargo.toml delete mode 100644 e2e-tests/src/lib.rs delete mode 100644 e2e-tests/tests/common.rs delete mode 100644 e2e-tests/tests/smoke.rs diff --git a/Cargo.lock b/Cargo.lock index 5b3c8bbaf..2f94abde6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4005,20 +4005,6 @@ version = "1.0.18" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "feeef44e73baff3a26d371801df019877a9866a8c493d315ab00177843314f35" -[[package]] -name = "e2e-tests" -version = "0.8.0" -dependencies = [ - "anyhow", - "futures", - "hex", - "tc-cli", - "time-primitives", - "tokio", - "tracing", - "tracing-subscriber 0.3.19", -] - [[package]] name = "ecdsa" version = "0.16.9" diff --git a/Cargo.toml b/Cargo.toml index 74439943c..4032da391 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -36,7 +36,6 @@ members = [ "tc-subxt/metadata", "tss", "utils/generate-bags", - "e2e-tests", ] default-members = [ "chronicle", diff --git a/e2e-tests/Cargo.toml b/e2e-tests/Cargo.toml deleted file mode 100644 index dd1f74c63..000000000 --- a/e2e-tests/Cargo.toml +++ /dev/null @@ -1,19 +0,0 @@ -[package] -name = "e2e-tests" -authors.workspace = true -edition.workspace = true -version.workspace = true -homepage.workspace = true -license.workspace = true -readme.workspace = true -repository.workspace = true - -[dev-dependencies] -tokio = { workspace = true, features = ["rt-multi-thread", "macros"] } -anyhow.workspace = true -futures.workspace = true -time-primitives = { workspace = true, features = ["testnet", "develop"] } -tc-cli= { path = "../tc-cli", features = ["testnet", "develop"] } -tracing.workspace = true -tracing-subscriber.workspace = true -hex.workspace = true diff --git a/e2e-tests/src/lib.rs b/e2e-tests/src/lib.rs deleted file mode 100644 index 8b1378917..000000000 --- a/e2e-tests/src/lib.rs +++ /dev/null @@ -1 +0,0 @@ - diff --git a/e2e-tests/tests/common.rs b/e2e-tests/tests/common.rs deleted file mode 100644 index ecdef939e..000000000 --- a/e2e-tests/tests/common.rs +++ /dev/null @@ -1,99 +0,0 @@ -use anyhow::{Context, Result}; -use std::path::Path; -use std::process; -use tc_cli::{Sender, Tc}; -use time_primitives::{Address, NetworkId}; - -pub struct TestEnv { - pub tc: Tc, -} - -const CONFIG: &str = "local-evm-e2e.yaml"; -const ENV: &str = "../config/envs/local"; - -impl TestEnv { - async fn new() -> Result { - let sender = Sender::new(); - let tc = Tc::new(Path::new(ENV).to_path_buf(), CONFIG, sender) - .await - .context("Error creating Tc client")?; - Ok(TestEnv { tc }) - } - - /// spawns new testing env - pub async fn spawn(build: bool) -> Result { - if build && !build_containers()? { - anyhow::bail!("Failed to build containers"); - } - - if !docker_up()? { - anyhow::bail!("Failed to start containers"); - } - Self::new().await - } - - /// sets up test - pub async fn setup(&self, src: NetworkId, dest: NetworkId) -> Result<(Address, Address)> { - self.tc.setup_test(src, dest).await - } - - /// restart container - pub async fn restart(&self, containers: Vec<&str>) -> Result { - docker_restart(containers) - } -} - -impl Drop for TestEnv { - /// Tear-down logic for the tests - fn drop(&mut self) { - if !docker_down().expect("Failed to stop containers") { - println!( - "Failed to stop containers, please stop by hand with:\n\ - \t $> docker compose --profile=ethereum down" - ); - }; - } -} - -fn build_containers() -> Result { - let mut cmd = process::Command::new(Path::new("../scripts/build_docker.sh")); - let mut child = cmd.spawn().context("Error building containers")?; - - child.wait().map(|c| c.success()).context("Error building containers: {e}") -} - -fn docker_up() -> Result { - let mut cmd = process::Command::new("docker"); - - cmd.arg("compose").arg("--profile=evm").arg("up").arg("-d").arg("--wait"); - - let mut child = cmd.spawn().context("Error starting containers")?; - - // Wait for all containers to start - child.wait().map(|c| c.success()).context("Error starting containers") -} - -fn docker_down() -> Result { - let mut cmd = process::Command::new("docker"); - - cmd.arg("compose").arg("--profile=evm").arg("down"); - - let mut child = cmd.spawn().context("Error stopping containers")?; - - // Wait for all containers to start - child.wait().map(|c| c.success()).context("Error stopping containers: {e}") -} - -fn docker_restart(containers: Vec<&str>) -> Result { - let mut cmd = process::Command::new("docker"); - cmd.arg("compose").arg("stop").args(containers.as_slice()); - - let mut child = cmd.spawn().context("Error stopping containers")?; - // wait for the containers to stop - child.wait().map(|c| c.success()).context("Error stopping containers")?; - let mut cmd = process::Command::new("docker"); - cmd.arg("compose").arg("start").args(containers.as_slice()); - let mut child = cmd.spawn().context("Error stopping containers")?; - // wait for the containers to start - child.wait().map(|c| c.success()).context("Error starting containers") -} diff --git a/e2e-tests/tests/smoke.rs b/e2e-tests/tests/smoke.rs deleted file mode 100644 index b8429006d..000000000 --- a/e2e-tests/tests/smoke.rs +++ /dev/null @@ -1,74 +0,0 @@ -use futures::StreamExt; -use tc_cli::Tc; -use tracing_subscriber::filter::EnvFilter; - -mod common; - -use common::TestEnv; -use time_primitives::{Address, NetworkId}; - -const SRC: NetworkId = 2; -const DEST: NetworkId = 3; - -async fn run_smoke(tc: &Tc, src_addr: Address, dest_addr: Address) { - let mut blockstream = tc.finality_notification_stream(); - let (_, start) = blockstream.next().await.expect("expected block"); - let gas_limit = tc - .estimate_message_gas_limit(DEST, dest_addr, SRC, src_addr, vec![]) - .await - .unwrap(); - let gas_cost = tc.estimate_message_cost(SRC, DEST, gas_limit, vec![]).await.unwrap(); - - let msg_id = tc - .send_message(SRC, src_addr, DEST, dest_addr, gas_limit, gas_cost, vec![]) - .await - .unwrap(); - - let mut id = None; - let (exec, end) = loop { - let (_, end) = blockstream.next().await.expect("expected block"); - let trace = tc.message_trace(SRC, msg_id).await.unwrap(); - let exec = trace.exec.as_ref().map(|t| t.task); - tracing::info!(target: "smoke_test", "waiting for message {}", hex::encode(msg_id)); - id = Some(tc.print_table(id, "message", vec![trace]).await.unwrap()); - if let Some(exec) = exec { - break (exec, end); - } - }; - let blocks = tc.read_events_blocks(exec).await.unwrap(); - let msgs = tc.messages(DEST, dest_addr, blocks).await.unwrap(); - let msg = msgs - .into_iter() - .find(|msg| msg.message_id() == msg_id) - .expect("failed to find message"); - tc.print_table(None, "message", vec![msg]).await.unwrap(); - tc.println(None, format!("received message after {} blocks", end - start)) - .await - .unwrap(); -} - -#[tokio::test] -// Resembles tc-cli smoke test -async fn smoke() { - let filter = EnvFilter::from_default_env() - .add_directive("tc_cli=info".parse().unwrap()) - .add_directive("gmp_evm=info".parse().unwrap()) - .add_directive("smoke_test=info".parse().unwrap()); - tracing_subscriber::fmt().with_env_filter(filter).init(); - - let env = TestEnv::spawn(true).await.expect("Failed to spawn Test Environment"); - - let (src_addr, dest_addr) = env.setup(SRC, DEST).await.expect("failed to setup test"); - - // Run smoke test - run_smoke(&env.tc, src_addr, dest_addr).await; - - // Restart chronicles - assert!(env - .restart(vec!["chronicle-2-evm", "chronicle-3-evm"]) - .await - .expect("Failed to restart chronicles")); - - // Re-run smoke test: should still work - run_smoke(&env.tc, src_addr, dest_addr).await; -} From 2c69c79fcf96346a18ef307e691fd8e64a0913bd Mon Sep 17 00:00:00 2001 From: Alexander Gryaznov Date: Wed, 19 Feb 2025 14:26:25 +0200 Subject: [PATCH 18/19] turn off e2e test workflow, and rm port mappings --- .github/workflows/pr-test-cargo-e2e.yaml | 1 + docker-compose.yml | 8 -------- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/.github/workflows/pr-test-cargo-e2e.yaml b/.github/workflows/pr-test-cargo-e2e.yaml index 1eff142c9..b0670df5a 100644 --- a/.github/workflows/pr-test-cargo-e2e.yaml +++ b/.github/workflows/pr-test-cargo-e2e.yaml @@ -6,6 +6,7 @@ concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: + if: false test-cargo: runs-on: [self-hosted, general] steps: diff --git a/docker-compose.yml b/docker-compose.yml index b67f315de..f1116a4af 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -81,8 +81,6 @@ services: - 'anvil -b 2 --steps-tracing --base-fee 0' environment: ANVIL_IP_ADDR: '0.0.0.0' - ports: - - 8545:8545 profiles: - evm - bridge @@ -101,8 +99,6 @@ services: environment: RUST_LOG: 'tc_subxt=debug,chronicle=debug,tss=debug,gmp_evm=info' RUST_BACKTRACE: 1 - ports: - - 8080:8080 profiles: - evm - bridge @@ -113,8 +109,6 @@ services: - 'anvil -b 2 --steps-tracing --base-fee 0' environment: ANVIL_IP_ADDR: '0.0.0.0' - ports: - - 8546:8545 profiles: - evm @@ -132,8 +126,6 @@ services: environment: RUST_LOG: 'tc_subxt=debug,chronicle=debug,tss=debug,gmp_evm=info' RUST_BACKTRACE: 1 - ports: - - 8081:8080 profiles: - evm From d39e818d98d500ce0c7d37eb0aaadce2cfc94a82 Mon Sep 17 00:00:00 2001 From: Alexander Gryaznov Date: Wed, 19 Feb 2025 15:00:18 +0200 Subject: [PATCH 19/19] fix clippy issues introduced in #1305 --- gmp/evm/src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gmp/evm/src/lib.rs b/gmp/evm/src/lib.rs index 9e847636a..b17083b99 100644 --- a/gmp/evm/src/lib.rs +++ b/gmp/evm/src/lib.rs @@ -594,7 +594,7 @@ impl IConnectorAdmin for Connector { self.backend.get_code(proxy_addr.0 .0.into(), AtBlock::Latest).await?; if !is_proxy_deployed.is_empty() { tracing::debug!("Proxy already deployed, Please upgrade the gateway contract"); - return Ok((t_addr(proxy_addr.into()), 0)); + return Ok((t_addr(proxy_addr), 0)); } // gateway deployment @@ -618,7 +618,7 @@ impl IConnectorAdmin for Connector { let gateway = extract_bytecode(gateway)?; let gateway_addr = - self.deploy_gateway_contract(&config, a_addr(proxy).into(), gateway).await?; + self.deploy_gateway_contract(&config, a_addr(proxy), gateway).await?; let call = sol::Gateway::upgradeCall { newImplementation: gateway_addr, };