This repository has been archived by the owner on Nov 15, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2.7k
try-runtime-cli: execute-block
& create-snapshot
tests
#14343
Merged
paritytech-processbot
merged 24 commits into
paritytech:master
from
Szegoo:try-runtime-tests
Jun 24, 2023
Merged
Changes from all commits
Commits
Show all changes
24 commits
Select commit
Hold shift + click to select a range
4bb74f2
execute-block test
Szegoo cb9720c
test create-snapshot
Szegoo 2644c25
oops
Szegoo 64ed955
Update utils/frame/try-runtime/cli/tests/create_snapshot.rs
Szegoo aa7e6a7
Update utils/frame/try-runtime/cli/tests/create_snapshot.rs
Szegoo 2989dfc
Update utils/frame/try-runtime/cli/tests/create_snapshot.rs
Szegoo af1cfde
remove snapshot
Szegoo c1d5b80
execute block: new log
Szegoo c3a964d
use prefix & make tempfile a dev dependencie
Szegoo e7a54ab
Update utils/frame/try-runtime/cli/tests/execute_block.rs
Szegoo d3a9ca9
Update utils/frame/try-runtime/cli/tests/create_snapshot.rs
Szegoo 6ce396e
".git/.scripts/commands/fmt/fmt.sh"
7d274e6
Merge remote-tracking branch 'origin/master' into try-runtime-tests
f439f28
--at option in execute-block test
Szegoo 84a27de
fixes & use --at option in create-snapshot test
Szegoo 7581859
hmm
Szegoo 8fc182a
fmt
Szegoo b7c157b
remove nonsense
Szegoo f1c77b4
Update utils/frame/try-runtime/cli/tests/create_snapshot.rs
Szegoo 08b881c
Update utils/frame/try-runtime/cli/tests/execute_block.rs
Szegoo e78e7e4
remove unnecessary test modules
Szegoo 4e3e29b
try to load snapshot file
Szegoo 2c689d5
Merge branch 'paritytech:master' into try-runtime-tests
Szegoo daab1cc
fix
Szegoo File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,95 @@ | ||
// This file is part of Substrate. | ||
|
||
// Copyright (C) Parity Technologies (UK) Ltd. | ||
// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 | ||
|
||
// This program is free software: you can redistribute it and/or modify | ||
// it under the terms of the GNU General Public License as published by | ||
// the Free Software Foundation, either version 3 of the License, or | ||
// (at your option) any later version. | ||
|
||
// This program is distributed in the hope that it will be useful, | ||
// but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
// GNU General Public License for more details. | ||
|
||
// You should have received a copy of the GNU General Public License | ||
// along with this program. If not, see <https://www.gnu.org/licenses/>. | ||
|
||
#![cfg(unix)] | ||
#![cfg(feature = "try-runtime")] | ||
|
||
use assert_cmd::cargo::cargo_bin; | ||
use node_primitives::Hash; | ||
use regex::Regex; | ||
use remote_externalities::{Builder, Mode, OfflineConfig, SnapshotConfig}; | ||
use sp_runtime::testing::{Block as RawBlock, ExtrinsicWrapper}; | ||
use std::{ | ||
path::{Path, PathBuf}, | ||
process, | ||
time::Duration, | ||
}; | ||
use substrate_cli_test_utils as common; | ||
use tokio::process::{Child, Command}; | ||
|
||
type Block = RawBlock<ExtrinsicWrapper<Hash>>; | ||
|
||
#[tokio::test] | ||
async fn create_snapshot_works() { | ||
// Build substrate so binaries used in the test use the latest code. | ||
common::build_substrate(&["--features=try-runtime"]); | ||
|
||
let temp_dir = tempfile::Builder::new() | ||
.prefix("try-runtime-cli-test-dir") | ||
.tempdir() | ||
.expect("Failed to create a tempdir"); | ||
let snap_file_path = temp_dir.path().join("snapshot.snap"); | ||
|
||
common::run_with_timeout(Duration::from_secs(60), async move { | ||
fn create_snapshot(ws_url: &str, snap_file: &PathBuf, at: Hash) -> Child { | ||
Command::new(cargo_bin("substrate")) | ||
.stdout(process::Stdio::piped()) | ||
.stderr(process::Stdio::piped()) | ||
.args(&["try-runtime", "--runtime=existing"]) | ||
.args(&["create-snapshot", format!("--uri={}", ws_url).as_str()]) | ||
.arg(snap_file) | ||
.args(&["--at", format!("{:?}", at).as_str()]) | ||
.kill_on_drop(true) | ||
.spawn() | ||
.unwrap() | ||
} | ||
|
||
// Start a node and wait for it to begin finalizing blocks | ||
let mut node = common::KillChildOnDrop(common::start_node()); | ||
let ws_url = common::extract_info_from_output(node.stderr.take().unwrap()).0.ws_url; | ||
common::wait_n_finalized_blocks(3, &ws_url).await; | ||
|
||
let block_number = 2; | ||
let block_hash = common::block_hash(block_number, &ws_url).await.unwrap(); | ||
|
||
// Try to create a snapshot. | ||
let mut snapshot_creation = create_snapshot(&ws_url, &snap_file_path, block_hash); | ||
|
||
let re = Regex::new(r#".*writing snapshot of (\d+) bytes to .*"#).unwrap(); | ||
let matched = | ||
common::wait_for_stream_pattern_match(snapshot_creation.stderr.take().unwrap(), re) | ||
.await; | ||
|
||
// Assert that the snapshot creation succeded. | ||
assert!(matched.is_ok(), "Failed to create snapshot"); | ||
|
||
let snapshot_is_on_disk = Path::new(&snap_file_path).exists(); | ||
assert!(snapshot_is_on_disk, "Snapshot was not written to disk"); | ||
|
||
// Try and load the snapshot we have created by running `create-snapshot`. | ||
let snapshot_loading_result = Builder::<Block>::new() | ||
.mode(Mode::Offline(OfflineConfig { | ||
state_snapshot: SnapshotConfig { path: snap_file_path }, | ||
})) | ||
.build() | ||
.await; | ||
|
||
assert!(snapshot_loading_result.is_ok(), "Snapshot couldn't be loaded"); | ||
}) | ||
.await; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,70 @@ | ||
// This file is part of Substrate. | ||
|
||
// Copyright (C) Parity Technologies (UK) Ltd. | ||
// SPDX-License-Identifier: GPL-3.0-or-later WITH Classpath-exception-2.0 | ||
|
||
// This program is free software: you can redistribute it and/or modify | ||
// it under the terms of the GNU General Public License as published by | ||
// the Free Software Foundation, either version 3 of the License, or | ||
// (at your option) any later version. | ||
|
||
// This program is distributed in the hope that it will be useful, | ||
// but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
// GNU General Public License for more details. | ||
|
||
// You should have received a copy of the GNU General Public License | ||
// along with this program. If not, see <https://www.gnu.org/licenses/>. | ||
|
||
#![cfg(unix)] | ||
#![cfg(feature = "try-runtime")] | ||
|
||
use assert_cmd::cargo::cargo_bin; | ||
use node_primitives::Hash; | ||
use regex::Regex; | ||
use std::{process, time::Duration}; | ||
use substrate_cli_test_utils as common; | ||
use tokio::process::{Child, Command}; | ||
|
||
#[tokio::test] | ||
async fn block_execution_works() { | ||
// Build substrate so binaries used in the test use the latest code. | ||
common::build_substrate(&["--features=try-runtime"]); | ||
|
||
common::run_with_timeout(Duration::from_secs(60), async move { | ||
fn execute_block(ws_url: &str, at: Hash) -> Child { | ||
Command::new(cargo_bin("substrate")) | ||
.stdout(process::Stdio::piped()) | ||
.stderr(process::Stdio::piped()) | ||
.args(&["try-runtime", "--runtime=existing"]) | ||
.args(&["execute-block"]) | ||
.args(&["live", format!("--uri={}", ws_url).as_str()]) | ||
.args(&["--at", format!("{:?}", at).as_str()]) | ||
.kill_on_drop(true) | ||
.spawn() | ||
.unwrap() | ||
} | ||
|
||
// Start a node and wait for it to begin finalizing blocks | ||
let mut node = common::KillChildOnDrop(common::start_node()); | ||
let ws_url = common::extract_info_from_output(node.stderr.take().unwrap()).0.ws_url; | ||
common::wait_n_finalized_blocks(3, &ws_url).await; | ||
|
||
let block_number = 1; | ||
let block_hash = common::block_hash(block_number, &ws_url).await.unwrap(); | ||
|
||
// Try to execute the block. | ||
let mut block_execution = execute_block(&ws_url, block_hash); | ||
|
||
// The execute-block command is actually executing the next block. | ||
let expected_output = | ||
format!(r#".*Block #{} successfully executed"#, block_number.saturating_add(1)); | ||
let re = Regex::new(expected_output.as_str()).unwrap(); | ||
let matched = | ||
common::wait_for_stream_pattern_match(block_execution.stderr.take().unwrap(), re).await; | ||
|
||
// Assert that the block-execution process has executed a block. | ||
assert!(matched.is_ok()); | ||
}) | ||
.await; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Just some ideas, we could do stuff here like:
Probably most of it in JSON, so we can render it eventually (like chopsticks already does for state changes).
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Should this be done in this PR?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
No. Just some ideas for the future 😄