Add execute_with to TestExternalities (#3793)

This function executes the given closure in a context where the test
externalities are set. This makes the srml tests easier to write, as the
test externalities need to be created anyway.
This commit is contained in:
Bastian Köcher
2019-10-10 15:01:30 +02:00
committed by GitHub
parent 34c7338211
commit 4dbc9265ee
44 changed files with 2369 additions and 2645 deletions
-2
View File
@@ -16,7 +16,6 @@ runtime_io = { package = "sr-io", path = "../sr-io", default-features = false }
log = { version = "0.4.8", optional = true }
paste = "0.1.6"
rand = { version = "0.7.2", optional = true }
externalities = { package = "substrate-externalities", path = "../externalities", optional = true }
impl-trait-for-tuples = "0.1.2"
[dev-dependencies]
@@ -38,5 +37,4 @@ std = [
"primitives/std",
"app-crypto/std",
"rand",
"externalities",
]
-3
View File
@@ -73,9 +73,6 @@ pub use sr_arithmetic::helpers_128bit;
/// Re-export big_uint stiff.
pub use sr_arithmetic::biguint;
#[cfg(feature = "std")]
pub use externalities::set_and_run_with_externalities;
/// An abstraction over justification for a block's validity under a consensus algorithm.
///
/// Essentially a finality proof. The exact formulation will vary between consensus
@@ -512,7 +512,6 @@ impl<'a> HeadersIterator<'a> {
#[cfg(test)]
mod tests {
use super::*;
use crate::set_and_run_with_externalities;
use runtime_io::TestExternalities;
use substrate_offchain::testing;
use primitives::offchain::OffchainExt;
@@ -523,7 +522,7 @@ mod tests {
let mut t = TestExternalities::default();
t.register_extension(OffchainExt::new(offchain));
set_and_run_with_externalities(&mut t, || {
t.execute_with(|| {
let request: Request = Request::get("http://localhost:1234");
let pending = request
.add_header("X-Auth", "hunter2")
@@ -564,7 +563,7 @@ mod tests {
let mut t = TestExternalities::default();
t.register_extension(OffchainExt::new(offchain));
set_and_run_with_externalities(&mut t, || {
t.execute_with(|| {
let pending = Request::default()
.method(Method::Post)
.url("http://localhost:1234")
@@ -113,6 +113,13 @@ impl<H: Hasher<Out=H256>, N: ChangesTrieBlockNumber> TestExternalities<H, N> {
self.backend.update(top.chain(children).collect())
}
/// Execute the given closure while `self` is set as externalities.
///
/// Returns the result of the given closure.
pub fn execute_with<R>(&mut self, execute: impl FnOnce() -> R) -> R {
externalities::set_and_run_with_externalities(self, execute)
}
}
impl<H: Hasher<Out=H256>, N: ChangesTrieBlockNumber> std::fmt::Debug for TestExternalities<H, N> {
+8 -17
View File
@@ -321,7 +321,6 @@ mod tests {
use runtime_io::TestExternalities;
use substrate_test_runtime_client::{AccountKeyring, Sr25519Keyring};
use sr_primitives::set_and_run_with_externalities;
use crate::{Header, Transfer, WASM_BINARY};
use primitives::{NeverNativeValue, map, traits::CodeExecutor};
use substrate_executor::{NativeExecutor, WasmExecutionMethod, native_executor_instance};
@@ -371,18 +370,14 @@ mod tests {
extrinsics: vec![],
};
set_and_run_with_externalities(&mut new_test_ext(), || polish_block(&mut b));
new_test_ext().execute_with(|| polish_block(&mut b));
block_executor(b, &mut new_test_ext());
}
#[test]
fn block_import_works_native() {
block_import_works(|b, ext| {
set_and_run_with_externalities(ext, || {
execute_block(b);
});
});
block_import_works(|b, ext| ext.execute_with(|| execute_block(b)));
}
#[test]
@@ -420,7 +415,7 @@ mod tests {
};
let mut dummy_ext = new_test_ext();
set_and_run_with_externalities(&mut dummy_ext, || polish_block(&mut b1));
dummy_ext.execute_with(|| polish_block(&mut b1));
let mut b2 = Block {
header: Header {
@@ -446,26 +441,26 @@ mod tests {
],
};
set_and_run_with_externalities(&mut dummy_ext, || polish_block(&mut b2));
dummy_ext.execute_with(|| polish_block(&mut b2));
drop(dummy_ext);
let mut t = new_test_ext();
set_and_run_with_externalities(&mut t, || {
t.execute_with(|| {
assert_eq!(balance_of(AccountKeyring::Alice.into()), 111);
assert_eq!(balance_of(AccountKeyring::Bob.into()), 0);
});
block_executor(b1, &mut t);
set_and_run_with_externalities(&mut t, || {
t.execute_with(|| {
assert_eq!(balance_of(AccountKeyring::Alice.into()), 42);
assert_eq!(balance_of(AccountKeyring::Bob.into()), 69);
});
block_executor(b2, &mut t);
set_and_run_with_externalities(&mut t, || {
t.execute_with(|| {
assert_eq!(balance_of(AccountKeyring::Alice.into()), 0);
assert_eq!(balance_of(AccountKeyring::Bob.into()), 42);
assert_eq!(balance_of(AccountKeyring::Charlie.into()), 69);
@@ -474,11 +469,7 @@ mod tests {
#[test]
fn block_import_with_transaction_works_native() {
block_import_with_transaction_works(|b, ext| {
set_and_run_with_externalities(ext, || {
execute_block(b);
});
});
block_import_with_transaction_works(|b, ext| ext.execute_with(|| execute_block(b)));
}
#[test]