Test for not-validator mode (#167)

* WIP

Forked at: 10533db948
Parent branch: origin/master

* WIP

Forked at: 10533db948
Parent branch: origin/master

* CLEANUP

Forked at: 10533db948
Parent branch: origin/master
This commit is contained in:
Cecile Tonglet
2020-09-16 11:44:52 +02:00
committed by GitHub
parent badf52b1e1
commit 56753b7717
2 changed files with 45 additions and 8 deletions
@@ -79,7 +79,7 @@ async fn integration_test(task_executor: TaskExecutor) {
// register parachain // register parachain
let _ = alice.call_function(function, Alice).await.unwrap(); let _ = alice.call_function(function, Alice).await.unwrap();
// run cumulus charlie // run cumulus charlie (a validator)
let key = Arc::new(sp_core::Pair::generate().0); let key = Arc::new(sp_core::Pair::generate().0);
let polkadot_config = polkadot_test_service::node_config( let polkadot_config = polkadot_test_service::node_config(
|| {}, || {},
@@ -87,15 +87,43 @@ async fn integration_test(task_executor: TaskExecutor) {
Charlie, Charlie,
vec![alice.addr.clone(), bob.addr.clone()], vec![alice.addr.clone(), bob.addr.clone()],
); );
let parachain_config = parachain_config(task_executor.clone(), Charlie, vec![], spec).unwrap(); let charlie_config =
let (charlie_task_manager, charlie_client) = parachain_config(task_executor.clone(), Charlie, vec![], spec.clone()).unwrap();
crate::service::start_node(parachain_config, key, polkadot_config, para_id, true, true) let multiaddr = charlie_config.network.listen_addresses[0].clone();
let (charlie_task_manager, charlie_client, charlie_network) =
crate::service::start_node(charlie_config, key, polkadot_config, para_id, true, true)
.unwrap(); .unwrap();
charlie_client.wait_for_blocks(4).await; charlie_client.wait_for_blocks(4).await;
let peer_id = charlie_network.local_peer_id().clone();
let charlie_addr = MultiaddrWithPeerId { multiaddr, peer_id };
// run cumulus dave (not a validator)
//
// a collator running in non-validator mode should be able to sync blocks from the tip of the
// parachain
let key = Arc::new(sp_core::Pair::generate().0);
let polkadot_config = polkadot_test_service::node_config(
|| {},
task_executor.clone(),
Dave,
vec![alice.addr.clone(), bob.addr.clone()],
);
let dave_config = parachain_config(
task_executor.clone(),
Dave,
vec![charlie_addr],
spec.clone(),
)
.unwrap();
let (dave_task_manager, dave_client, _dave_network) =
crate::service::start_node(dave_config, key, polkadot_config, para_id, false, true)
.unwrap();
dave_client.wait_for_blocks(4).await;
alice.task_manager.clean_shutdown(); alice.task_manager.clean_shutdown();
bob.task_manager.clean_shutdown(); bob.task_manager.clean_shutdown();
charlie_task_manager.clean_shutdown(); charlie_task_manager.clean_shutdown();
dave_task_manager.clean_shutdown();
} }
pub fn parachain_config( pub fn parachain_config(
+13 -4
View File
@@ -26,11 +26,12 @@ use sc_client_api::{Backend as BackendT, BlockBackend, Finalizer, UsageProvider}
use sc_executor::native_executor_instance; use sc_executor::native_executor_instance;
pub use sc_executor::NativeExecutor; pub use sc_executor::NativeExecutor;
use sc_informant::OutputFormat; use sc_informant::OutputFormat;
use sc_network::NetworkService;
use sc_service::{Configuration, PartialComponents, Role, TFullBackend, TFullClient, TaskManager}; use sc_service::{Configuration, PartialComponents, Role, TFullBackend, TFullClient, TaskManager};
use sp_api::ConstructRuntimeApi; use sp_api::ConstructRuntimeApi;
use sp_blockchain::HeaderBackend; use sp_blockchain::HeaderBackend;
use sp_consensus::{BlockImport, Environment, Error as ConsensusError, Proposer}; use sp_consensus::{BlockImport, Environment, Error as ConsensusError, Proposer};
use sp_core::crypto::Pair; use sp_core::{crypto::Pair, H256};
use sp_runtime::traits::{BlakeTwo256, Block as BlockT}; use sp_runtime::traits::{BlakeTwo256, Block as BlockT};
use sp_trie::PrefixedMemoryDB; use sp_trie::PrefixedMemoryDB;
use std::sync::Arc; use std::sync::Arc;
@@ -217,7 +218,11 @@ fn start_node_impl<RuntimeApi, Executor, RB>(
validator: bool, validator: bool,
rpc_ext_builder: RB, rpc_ext_builder: RB,
test: bool, test: bool,
) -> sc_service::error::Result<(TaskManager, Arc<TFullClient<Block, RuntimeApi, Executor>>)> ) -> sc_service::error::Result<(
TaskManager,
Arc<TFullClient<Block, RuntimeApi, Executor>>,
Arc<NetworkService<Block, H256>>,
)>
where where
RuntimeApi: ConstructRuntimeApi<Block, TFullClient<Block, RuntimeApi, Executor>> RuntimeApi: ConstructRuntimeApi<Block, TFullClient<Block, RuntimeApi, Executor>>
+ Send + Send
@@ -308,7 +313,10 @@ where
system_rpc_tx, system_rpc_tx,
})?; })?;
let announce_block = Arc::new(move |hash, data| network.announce_block(hash, data)); let announce_block = {
let network = network.clone();
Arc::new(move |hash, data| network.announce_block(hash, data))
};
if validator { if validator {
let proposer_factory = sc_basic_authorship::ProposerFactory::new( let proposer_factory = sc_basic_authorship::ProposerFactory::new(
@@ -352,7 +360,7 @@ where
start_network.start_network(); start_network.start_network();
Ok((task_manager, client)) Ok((task_manager, client, network))
} }
/// Start a normal parachain node. /// Start a normal parachain node.
@@ -366,6 +374,7 @@ pub fn start_node(
) -> sc_service::error::Result<( ) -> sc_service::error::Result<(
TaskManager, TaskManager,
Arc<TFullClient<Block, parachain_runtime::RuntimeApi, RuntimeExecutor>>, Arc<TFullClient<Block, parachain_runtime::RuntimeApi, RuntimeExecutor>>,
Arc<NetworkService<Block, H256>>,
)> { )> {
start_node_impl::<parachain_runtime::RuntimeApi, RuntimeExecutor, _>( start_node_impl::<parachain_runtime::RuntimeApi, RuntimeExecutor, _>(
parachain_config, parachain_config,