Skip to content
This repository has been archived by the owner on Nov 15, 2023. It is now read-only.

Commit

Permalink
test-utils: programatically spawn dev nodes (#14704)
Browse files Browse the repository at this point in the history
* allow spinning up dev node in background without binary

* improve comments

* restore rust-toolchain

* remove rust-toolchain

* tweak start_node_without_binary api

* Update test-utils/cli/src/lib.rs

Co-authored-by: Alexandru Vasile <60601340+lexnv@users.noreply.github.com>

* address commends

* use &str

* update example

* update comment

* update docs

* Revert "update docs"

This reverts commit e18677f.

* use node-cli instead of node-template

* fix feature

* fix feature

* fix features

---------

Co-authored-by: Alexandru Vasile <60601340+lexnv@users.noreply.github.com>
  • Loading branch information
liamaharon and lexnv authored Aug 8, 2023
1 parent cffd582 commit c0ee512
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 2 deletions.
3 changes: 3 additions & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion bin/node/cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -184,7 +184,8 @@ try-runtime = [
"pallet-balances/try-runtime",
"pallet-im-online/try-runtime",
"pallet-timestamp/try-runtime",
"sp-runtime/try-runtime"
"sp-runtime/try-runtime",
"substrate-cli-test-utils/try-runtime"
]

[[bench]]
Expand Down
6 changes: 6 additions & 0 deletions test-utils/cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,10 @@ nix = "0.26.2"
regex = "1.7.3"
tokio = { version = "1.22.0", features = ["full"] }
node-primitives = { path = "../../bin/node/primitives" }
node-cli = { path = "../../bin/node/cli" }
sc-cli = { path = "../../client/cli" }
sc-service = { path = "../../client/service" }
futures = "0.3.28"

[features]
try-runtime = ["node-cli/try-runtime"]
32 changes: 32 additions & 0 deletions test-utils/cli/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,38 @@ use std::{
};
use tokio::io::{AsyncBufReadExt, AsyncRead};

/// Similar to [`crate::start_node`] spawns a node, but works in environments where the substrate
/// binary is not accessible with `cargo_bin("substrate-node")`, and allows customising the args
/// passed in.
///
/// Helpful if you need a Substrate dev node running in the background of a project external to
/// `substrate`.
///
/// The downside compared to using [`crate::start_node`] is that this method is blocking rather than
/// returning a [`Child`]. Therefore, you may want to call this method inside a new thread.
///
/// # Example
/// ```ignore
/// // Spawn a dev node.
/// let _ = std::thread::spawn(move || {
/// match common::start_node_inline(vec!["--dev", "--rpc-port=12345"]) {
/// Ok(_) => {}
/// Err(e) => {
/// panic!("Node exited with error: {}", e);
/// }
/// }
/// });
/// ```
pub fn start_node_inline(args: Vec<&str>) -> Result<(), sc_service::error::Error> {
use sc_cli::SubstrateCli;

// Prepend the args with some dummy value because the first arg is skipped.
let cli_call = std::iter::once("node-template").chain(args);
let cli = node_cli::Cli::from_iter(cli_call);
let runner = cli.create_runner(&cli.run).unwrap();
runner.run_node_until_exit(|config| async move { node_cli::service::new_full(config, cli) })
}

/// Starts a new Substrate node in development mode with a temporary chain.
///
/// This function creates a new Substrate node using the `substrate` binary.
Expand Down
3 changes: 2 additions & 1 deletion utils/frame/try-runtime/cli/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -55,5 +55,6 @@ tokio = "1.27.0"
try-runtime = [
"sp-debug-derive/force-debug",
"frame-try-runtime/try-runtime",
"sp-runtime/try-runtime"
"sp-runtime/try-runtime",
"substrate-cli-test-utils/try-runtime"
]

0 comments on commit c0ee512

Please sign in to comment.