@@ -23,7 +23,7 @@ use polkadot_primitives::parachain::{Info, Scheduling};
2323use polkadot_primitives:: Hash as PHash ;
2424use polkadot_runtime:: { Header , OnlyStakingAndClaims , Runtime , SignedExtra , SignedPayload } ;
2525use polkadot_runtime_common:: { parachains, registrar, BlockHashCount } ;
26- use regex :: Regex ;
26+ use serde_json :: Value ;
2727use sp_arithmetic:: traits:: SaturatedConversion ;
2828use sp_runtime:: generic;
2929use sp_version:: RuntimeVersion ;
@@ -62,6 +62,11 @@ jsonrpsee::rpc_api! {
6262 #[ rpc( method = "state_getRuntimeVersion" ) ]
6363 fn runtime_version( ) -> RuntimeVersion ;
6464 }
65+
66+ System {
67+ #[ rpc( method = "system_networkState" ) ]
68+ fn network_state( ) -> Value ;
69+ }
6570}
6671
6772// Adapted from
@@ -140,21 +145,6 @@ impl<'a> ChildHelper<'a> {
140145 Ok ( & self . stderr )
141146 }
142147
143- fn read_stderr ( & mut self , size : usize ) -> io:: Result < & str > {
144- let mut buffer = vec ! [ 0 ; size] ;
145- let size = self
146- . child
147- . stderr
148- . as_mut ( )
149- . ok_or_else ( || io:: Error :: new ( io:: ErrorKind :: Other , "stderr not captured" ) ) ?
150- . read ( & mut buffer) ?;
151-
152- self . stderr
153- . push_str ( & String :: from_utf8_lossy ( & buffer[ ..size] ) ) ;
154-
155- Ok ( & self . stderr )
156- }
157-
158148 fn terminate ( & mut self ) {
159149 match self . child . try_wait ( ) {
160150 Ok ( Some ( _) ) => return ,
@@ -223,13 +213,17 @@ fn wait_for_tcp<A: net::ToSocketAddrs>(address: A) -> io::Result<()> {
223213 }
224214}
225215
226- #[ test]
216+ #[ async_std :: test]
227217#[ ignore]
228- fn integration_test ( ) {
218+ async fn integration_test ( ) {
229219 assert ! (
230220 !tcp_port_is_open( "127.0.0.1:9933" ) ,
231221 "tcp port is already open 127.0.0.1:9933, this test cannot be run" ,
232222 ) ;
223+ assert ! (
224+ !tcp_port_is_open( "127.0.0.1:9934" ) ,
225+ "tcp port is already open 127.0.0.1:9934, this test cannot be run" ,
226+ ) ;
233227
234228 // start alice
235229 let polkadot_alice_dir = tempdir ( ) . unwrap ( ) ;
@@ -243,9 +237,8 @@ fn integration_test() {
243237 . arg ( "--unsafe-rpc-expose" )
244238 . spawn ( )
245239 . unwrap ( ) ;
246- let mut polkadot_alice_child = ChildHelper :: new ( "alice" , & mut polkadot_alice) ;
240+ let polkadot_alice_child = ChildHelper :: new ( "alice" , & mut polkadot_alice) ;
247241 wait_for_tcp ( "127.0.0.1:9933" ) . unwrap ( ) ;
248- let polkadot_alice_id = find_local_node_identity ( & mut polkadot_alice_child) ;
249242
250243 // start bob
251244 let polkadot_bob_dir = tempdir ( ) . unwrap ( ) ;
@@ -256,10 +249,12 @@ fn integration_test() {
256249 . arg ( "--base-path" )
257250 . arg ( polkadot_bob_dir. path ( ) )
258251 . arg ( "--bob" )
252+ . arg ( "--unsafe-rpc-expose" )
253+ . arg ( "--rpc-port=9934" )
259254 . spawn ( )
260255 . unwrap ( ) ;
261- let mut polkadot_bob_child = ChildHelper :: new ( "bob" , & mut polkadot_bob) ;
262- let polkadot_bob_id = find_local_node_identity ( & mut polkadot_bob_child ) ;
256+ let polkadot_bob_child = ChildHelper :: new ( "bob" , & mut polkadot_bob) ;
257+ wait_for_tcp ( "127.0.0.1:9934" ) . unwrap ( ) ;
263258
264259 // wait a bit for some relay chains blocks to be generated
265260 thread:: sleep ( Duration :: from_secs ( 10 ) ) ;
@@ -273,31 +268,43 @@ fn integration_test() {
273268 let output = & cmd. stdout ;
274269 let genesis_state = hex:: decode ( & output[ 2 ..output. len ( ) - 1 ] ) . unwrap ( ) ;
275270
276- // connect RPC client
277- let transport_client =
271+ // connect RPC clients
272+ let transport_client_alice =
278273 jsonrpsee:: transport:: http:: HttpTransportClient :: new ( "http://127.0.0.1:9933" ) ;
279- let mut client = jsonrpsee:: raw:: RawClient :: new ( transport_client) ;
274+ let mut client_alice = jsonrpsee:: raw:: RawClient :: new ( transport_client_alice) ;
275+ let transport_client_bob =
276+ jsonrpsee:: transport:: http:: HttpTransportClient :: new ( "http://127.0.0.1:9934" ) ;
277+ let mut client_bob = jsonrpsee:: raw:: RawClient :: new ( transport_client_bob) ;
278+
279+ // retrieve nodes network id
280+ let polkadot_alice_id = System :: network_state ( & mut client_alice) . await . unwrap ( ) [ "peerId" ]
281+ . as_str ( )
282+ . unwrap ( )
283+ . to_string ( ) ;
284+ let polkadot_bob_id = System :: network_state ( & mut client_bob) . await . unwrap ( ) [ "peerId" ]
285+ . as_str ( )
286+ . unwrap ( )
287+ . to_string ( ) ;
280288
281289 // retrieve runtime version
282- let runtime_version =
283- async_std:: task:: block_on ( async { State :: runtime_version ( & mut client) . await . unwrap ( ) } ) ;
290+ let runtime_version = State :: runtime_version ( & mut client_alice) . await . unwrap ( ) ;
284291
285292 // get the current block
286- let current_block_hash =
287- async_std:: task:: block_on ( async { Chain :: block_hash ( & mut client, None ) . await . unwrap ( ) } )
288- . unwrap ( ) ;
289- let current_block = async_std:: task:: block_on ( async {
290- Chain :: header ( & mut client, current_block_hash)
291- . await
292- . unwrap ( )
293- } )
294- . unwrap ( )
295- . number
296- . saturated_into :: < u64 > ( ) ;
293+ let current_block_hash = Chain :: block_hash ( & mut client_alice, None )
294+ . await
295+ . unwrap ( )
296+ . unwrap ( ) ;
297+ let current_block = Chain :: header ( & mut client_alice, current_block_hash)
298+ . await
299+ . unwrap ( )
300+ . unwrap ( )
301+ . number
302+ . saturated_into :: < u64 > ( ) ;
297303
298- let genesis_block =
299- async_std:: task:: block_on ( async { Chain :: block_hash ( & mut client, 0 ) . await . unwrap ( ) } )
300- . unwrap ( ) ;
304+ let genesis_block = Chain :: block_hash ( & mut client_alice, 0 )
305+ . await
306+ . unwrap ( )
307+ . unwrap ( ) ;
301308
302309 // create and sign transaction
303310 let wasm =
@@ -357,10 +364,10 @@ fn integration_test() {
357364 sp_runtime:: MultiSignature :: Sr25519 ( signature) ,
358365 extra,
359366 ) ;
360- let _register_block_hash = async_std :: task :: block_on ( async {
361- Author :: submit_extrinsic ( & mut client , format ! ( "0x{}" , hex:: encode( ex. encode( ) ) ) ) . await
362- } )
363- . unwrap ( ) ;
367+ let _register_block_hash =
368+ Author :: submit_extrinsic ( & mut client_alice , format ! ( "0x{}" , hex:: encode( ex. encode( ) ) ) )
369+ . await
370+ . unwrap ( ) ;
364371
365372 // run cumulus
366373 let cumulus_dir = tempdir ( ) . unwrap ( ) ;
@@ -395,17 +402,3 @@ fn integration_test() {
395402 "no parachain blocks seems to have been produced" ,
396403 ) ;
397404}
398-
399- fn find_local_node_identity ( instance : & mut ChildHelper ) -> String {
400- let regex = Regex :: new ( r"Local node identity is: (.+)\n" ) . unwrap ( ) ;
401-
402- loop {
403- let s = instance. read_stderr ( 200 ) . unwrap ( ) ;
404-
405- if let Some ( captures) = regex. captures ( s) {
406- break captures. get ( 1 ) . unwrap ( ) . as_str ( ) . to_string ( ) ;
407- } else if s. len ( ) > 2000 {
408- panic ! ( "could not find node identity" ) ;
409- }
410- }
411- }
0 commit comments