From 2a221b4820295d33c9766bdd871e5ee7ec6533d1 Mon Sep 17 00:00:00 2001 From: Nikos Kontakis <wirednkod@gmail.com> Date: Fri, 6 Oct 2023 12:56:28 +0300 Subject: [PATCH] Migrate simple example from Polkadot-sdk repo (#116) In order to ensure that backward compatibility with existing node Zombienet, this PR migrates (as a start) a [simple example of a test from Polkadot-SDK](https://github.com/paritytech/polkadot-sdk/blob/0a6dfdf973b8e7b669eda6e2ed202fb3549a20b9/polkadot/zombienet_tests/smoke/0001-parachains-smoke-test.toml), and fixes some bugs in order to make the test work; --- crates/configuration/src/global_settings.rs | 33 +++++++++++++++++++ crates/configuration/src/network.rs | 13 +++----- crates/configuration/src/parachain.rs | 4 +-- crates/configuration/src/relaychain.rs | 7 ++++ crates/configuration/src/shared/node.rs | 2 +- crates/examples/examples/0001-simple.toml | 30 +++++++++++++++++ .../examples/simple_network_example.rs | 23 +++++++++++++ 7 files changed, 100 insertions(+), 12 deletions(-) create mode 100644 crates/examples/examples/0001-simple.toml create mode 100644 crates/examples/examples/simple_network_example.rs diff --git a/crates/configuration/src/global_settings.rs b/crates/configuration/src/global_settings.rs index 607951e..0e27f18 100644 --- a/crates/configuration/src/global_settings.rs +++ b/crates/configuration/src/global_settings.rs @@ -17,6 +17,7 @@ pub struct GlobalSettings { // TODO: parse both case in zombienet node version to avoid renamed ? #[serde(rename = "timeout")] network_spawn_timeout: Duration, + #[serde(default)] node_spawn_timeout: Duration, local_ip: Option<IpAddr>, } @@ -189,6 +190,38 @@ mod tests { ); } + #[test] + fn global_settings_config_builder_should_succeeds_when_node_spawn_timeout_is_missing() { + let global_settings_config = GlobalSettingsBuilder::new() + .with_bootnodes_addresses(vec![ + "/ip4/10.41.122.55/tcp/45421", + "/ip4/51.144.222.10/tcp/2333", + ]) + .with_network_spawn_timeout(600) + .with_local_ip("10.0.0.1") + .build() + .unwrap(); + + let bootnodes_addresses: Vec<Multiaddr> = vec![ + "/ip4/10.41.122.55/tcp/45421".try_into().unwrap(), + "/ip4/51.144.222.10/tcp/2333".try_into().unwrap(), + ]; + assert_eq!( + global_settings_config.bootnodes_addresses(), + bootnodes_addresses.iter().collect::<Vec<_>>() + ); + assert_eq!(global_settings_config.network_spawn_timeout(), 600); + assert_eq!(global_settings_config.node_spawn_timeout(), 300); + assert_eq!( + global_settings_config + .local_ip() + .unwrap() + .to_string() + .as_str(), + "10.0.0.1" + ); + } + #[test] fn global_settings_builder_should_fails_and_returns_an_error_if_one_bootnode_address_is_invalid( ) { diff --git a/crates/configuration/src/network.rs b/crates/configuration/src/network.rs index 9569f6f..d0a976b 100644 --- a/crates/configuration/src/network.rs +++ b/crates/configuration/src/network.rs @@ -81,9 +81,12 @@ impl NetworkConfig { } // retrieve the defaults relaychain for assigning to nodes if needed - let relaychain_default_command: Option<Command> = + let mut relaychain_default_command: Option<Command> = network_config.relaychain().default_command().cloned(); + if relaychain_default_command.is_none() { + relaychain_default_command = network_config.relaychain().command().cloned(); + } let relaychain_default_image: Option<Image> = network_config.relaychain().default_image().cloned(); @@ -144,14 +147,6 @@ impl NetworkConfig { // Validation checks for parachains network_config.parachains().iter().for_each(|parachain| { - let _ = TryInto::<Chain>::try_into( - parachain - .chain() - .ok_or("chain name must exist") - .unwrap() - .as_str(), - ); - if parachain.default_image().is_some() { let _ = TryInto::<Image>::try_into(parachain.default_image().unwrap().as_str()); } diff --git a/crates/configuration/src/parachain.rs b/crates/configuration/src/parachain.rs index 8dd9c9b..ca29aa0 100644 --- a/crates/configuration/src/parachain.rs +++ b/crates/configuration/src/parachain.rs @@ -105,7 +105,7 @@ pub struct ParachainConfig { default = "default_as_true" )] onboard_as_parachain: bool, - #[serde(rename = "balance")] + #[serde(rename = "balance", default)] initial_balance: U128, default_command: Option<Command>, default_image: Option<Image>, @@ -118,7 +118,7 @@ pub struct ParachainConfig { genesis_state_path: Option<AssetLocation>, genesis_state_generator: Option<Command>, chain_spec_path: Option<AssetLocation>, - #[serde(rename = "cumulus_based")] + #[serde(rename = "cumulus_based", default = "default_as_true")] is_cumulus_based: bool, #[serde(skip_serializing_if = "std::vec::Vec::is_empty", default)] bootnodes_addresses: Vec<Multiaddr>, diff --git a/crates/configuration/src/relaychain.rs b/crates/configuration/src/relaychain.rs index f226b79..f5bc906 100644 --- a/crates/configuration/src/relaychain.rs +++ b/crates/configuration/src/relaychain.rs @@ -28,6 +28,7 @@ pub struct RelaychainConfig { #[serde(skip_serializing_if = "std::vec::Vec::is_empty", default)] nodes: Vec<NodeConfig>, genesis_overrides: Option<serde_json::Value>, + command: Option<Command>, } impl RelaychainConfig { @@ -66,6 +67,11 @@ impl RelaychainConfig { self.chain_spec_path.as_ref() } + /// The non-default command used for nodes. + pub fn command(&self) -> Option<&Command> { + self.command.as_ref() + } + /// The number of `random nominators` to create for chains using staking, this is used in tandem with `max_nominations` to simulate the amount of nominators and nominations. pub fn random_nominators_count(&self) -> Option<u32> { self.random_nominators_count @@ -118,6 +124,7 @@ impl Default for RelaychainConfigBuilder<Initial> { default_db_snapshot: None, default_args: vec![], chain_spec_path: None, + command: None, random_nominators_count: None, max_nominations: None, genesis_overrides: None, diff --git a/crates/configuration/src/shared/node.rs b/crates/configuration/src/shared/node.rs index 9b11d27..cbfa724 100644 --- a/crates/configuration/src/shared/node.rs +++ b/crates/configuration/src/shared/node.rs @@ -66,7 +66,7 @@ pub struct NodeConfig { pub(crate) is_validator: bool, #[serde(alias = "invulnerable", default = "default_as_true")] pub(crate) is_invulnerable: bool, - #[serde(alias = "bootnode")] + #[serde(alias = "bootnode", default)] pub(crate) is_bootnode: bool, #[serde(alias = "balance")] #[serde(default)] diff --git a/crates/examples/examples/0001-simple.toml b/crates/examples/examples/0001-simple.toml new file mode 100644 index 0000000..3a0bc70 --- /dev/null +++ b/crates/examples/examples/0001-simple.toml @@ -0,0 +1,30 @@ +[settings] +timeout = 1000 + +[relaychain] +default_image = "{{ZOMBIENET_INTEGRATION_TEST_IMAGE}}" +chain = "rococo-local" +command = "polkadot" + + [[relaychain.nodes]] + name = "alice" + args = [ "--alice", "-lruntime=debug,parachain=trace" ] + + [[relaychain.nodes]] + name = "bob" + args = [ "--bob", "-lruntime=debug,parachain=trace" ] + +[[parachains]] +id = 100 +addToGenesis = false + + [parachains.collator] + name = "collator01" + image = "{{COL_IMAGE}}" + command = "adder-collator" + args = [ "-lruntime=debug,parachain=trace" ] + +[types.Header] +number = "u64" +parent_hash = "Hash" +post_state = "Hash" \ No newline at end of file diff --git a/crates/examples/examples/simple_network_example.rs b/crates/examples/examples/simple_network_example.rs new file mode 100644 index 0000000..676511c --- /dev/null +++ b/crates/examples/examples/simple_network_example.rs @@ -0,0 +1,23 @@ +// use std::time::Duration; + +use configuration::NetworkConfig; +use orchestrator::Orchestrator; +use provider::NativeProvider; +use support::fs::local::LocalFileSystem; + +#[tokio::main] +async fn main() -> Result<(), Box<dyn std::error::Error>> { + let config = NetworkConfig::load_from_toml("./crates/examples/examples/0001-simple.toml") + .expect("errored?"); + + let fs = LocalFileSystem; + let provider = NativeProvider::new(fs.clone()); + let orchestrator = Orchestrator::new(fs, provider); + orchestrator.spawn(config).await?; + println!("🚀🚀🚀🚀 network deployed"); + // For now let just loop.... + #[allow(clippy::empty_loop)] + loop {} + + // Ok(()) +} -- GitLab