From 56753b7717a624215703c0fdd9be0231e949fb86 Mon Sep 17 00:00:00 2001 From: Cecile Tonglet Date: Wed, 16 Sep 2020 11:44:52 +0200 Subject: [PATCH] Test for not-validator mode (#167) * WIP Forked at: 10533db94871ae9e73ec38571239d3b9f1605909 Parent branch: origin/master * WIP Forked at: 10533db94871ae9e73ec38571239d3b9f1605909 Parent branch: origin/master * CLEANUP Forked at: 10533db94871ae9e73ec38571239d3b9f1605909 Parent branch: origin/master --- .../rococo-parachains/src/integration_test.rs | 36 ++++++++++++++++--- cumulus/rococo-parachains/src/service.rs | 17 ++++++--- 2 files changed, 45 insertions(+), 8 deletions(-) diff --git a/cumulus/rococo-parachains/src/integration_test.rs b/cumulus/rococo-parachains/src/integration_test.rs index 1c66614df6..9b44f36df3 100644 --- a/cumulus/rococo-parachains/src/integration_test.rs +++ b/cumulus/rococo-parachains/src/integration_test.rs @@ -79,7 +79,7 @@ async fn integration_test(task_executor: TaskExecutor) { // register parachain 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 polkadot_config = polkadot_test_service::node_config( || {}, @@ -87,15 +87,43 @@ async fn integration_test(task_executor: TaskExecutor) { Charlie, vec![alice.addr.clone(), bob.addr.clone()], ); - let parachain_config = parachain_config(task_executor.clone(), Charlie, vec![], spec).unwrap(); - let (charlie_task_manager, charlie_client) = - crate::service::start_node(parachain_config, key, polkadot_config, para_id, true, true) + let charlie_config = + parachain_config(task_executor.clone(), Charlie, vec![], spec.clone()).unwrap(); + 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(); 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(); bob.task_manager.clean_shutdown(); charlie_task_manager.clean_shutdown(); + dave_task_manager.clean_shutdown(); } pub fn parachain_config( diff --git a/cumulus/rococo-parachains/src/service.rs b/cumulus/rococo-parachains/src/service.rs index 6905863fef..6c57472d70 100644 --- a/cumulus/rococo-parachains/src/service.rs +++ b/cumulus/rococo-parachains/src/service.rs @@ -26,11 +26,12 @@ use sc_client_api::{Backend as BackendT, BlockBackend, Finalizer, UsageProvider} use sc_executor::native_executor_instance; pub use sc_executor::NativeExecutor; use sc_informant::OutputFormat; +use sc_network::NetworkService; use sc_service::{Configuration, PartialComponents, Role, TFullBackend, TFullClient, TaskManager}; use sp_api::ConstructRuntimeApi; use sp_blockchain::HeaderBackend; 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_trie::PrefixedMemoryDB; use std::sync::Arc; @@ -217,7 +218,11 @@ fn start_node_impl( validator: bool, rpc_ext_builder: RB, test: bool, -) -> sc_service::error::Result<(TaskManager, Arc>)> +) -> sc_service::error::Result<( + TaskManager, + Arc>, + Arc>, +)> where RuntimeApi: ConstructRuntimeApi> + Send @@ -308,7 +313,10 @@ where 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 { let proposer_factory = sc_basic_authorship::ProposerFactory::new( @@ -352,7 +360,7 @@ where start_network.start_network(); - Ok((task_manager, client)) + Ok((task_manager, client, network)) } /// Start a normal parachain node. @@ -366,6 +374,7 @@ pub fn start_node( ) -> sc_service::error::Result<( TaskManager, Arc>, + Arc>, )> { start_node_impl::( parachain_config,