diff --git a/polkadot/node/network/bridge/src/rx/tests.rs b/polkadot/node/network/bridge/src/rx/tests.rs
index 42faaee68361bcc851a8e2f776b76505b2808c06..d98b1d4f085629e472ad2f02dd4b1d5c8f33866b 100644
--- a/polkadot/node/network/bridge/src/rx/tests.rs
+++ b/polkadot/node/network/bridge/src/rx/tests.rs
@@ -291,6 +291,27 @@ type VirtualOverseer = TestSubsystemContextHandle<NetworkBridgeRxMessage>;
 struct TestHarness {
 	network_handle: TestNetworkHandle,
 	virtual_overseer: VirtualOverseer,
+	shared: Shared,
+}
+
+// wait until all needed validation and collation peers have connected.
+async fn await_peer_connections(
+	shared: &Shared,
+	num_validation_peers: usize,
+	num_collation_peers: usize,
+) {
+	loop {
+		{
+			let shared = shared.0.lock();
+			if shared.validation_peers.len() == num_validation_peers &&
+				shared.collation_peers.len() == num_collation_peers
+			{
+				break
+			}
+		}
+
+		futures_timer::Delay::new(std::time::Duration::from_millis(100)).await;
+	}
 }
 
 fn test_harness<T: Future<Output = VirtualOverseer>>(
@@ -306,13 +327,14 @@ fn test_harness<T: Future<Output = VirtualOverseer>>(
 	let (context, virtual_overseer) =
 		polkadot_node_subsystem_test_helpers::make_subsystem_context(pool);
 	let network_stream = network.event_stream();
+	let shared = Shared::default();
 
 	let bridge = NetworkBridgeRx {
 		network_service: network,
 		authority_discovery_service: discovery,
 		metrics: Metrics(None),
 		sync_oracle,
-		shared: Shared::default(),
+		shared: shared.clone(),
 		peerset_protocol_names,
 	};
 
@@ -320,7 +342,7 @@ fn test_harness<T: Future<Output = VirtualOverseer>>(
 		.map_err(|_| panic!("subsystem execution failed"))
 		.map(|_| ());
 
-	let test_fut = test(TestHarness { network_handle, virtual_overseer });
+	let test_fut = test(TestHarness { network_handle, virtual_overseer, shared });
 
 	futures::pin_mut!(test_fut);
 	futures::pin_mut!(network_bridge);
@@ -386,7 +408,7 @@ async fn assert_sends_collation_event_to_all(
 fn send_our_view_upon_connection() {
 	let (oracle, handle) = make_sync_oracle(false);
 	test_harness(Box::new(oracle), |test_harness| async move {
-		let TestHarness { mut network_handle, mut virtual_overseer } = test_harness;
+		let TestHarness { mut network_handle, mut virtual_overseer, shared } = test_harness;
 
 		let peer = PeerId::random();
 
@@ -411,6 +433,8 @@ fn send_our_view_upon_connection() {
 			.connect_peer(peer.clone(), PeerSet::Collation, ObservedRole::Full)
 			.await;
 
+		await_peer_connections(&shared, 1, 1).await;
+
 		let view = view![head];
 		let actions = network_handle.next_network_actions(2).await;
 		assert_network_actions_contains(
@@ -437,7 +461,7 @@ fn send_our_view_upon_connection() {
 fn sends_view_updates_to_peers() {
 	let (oracle, handle) = make_sync_oracle(false);
 	test_harness(Box::new(oracle), |test_harness| async move {
-		let TestHarness { mut network_handle, mut virtual_overseer } = test_harness;
+		let TestHarness { mut network_handle, mut virtual_overseer, shared } = test_harness;
 
 		let peer_a = PeerId::random();
 		let peer_b = PeerId::random();
@@ -458,6 +482,8 @@ fn sends_view_updates_to_peers() {
 			.connect_peer(peer_b.clone(), PeerSet::Collation, ObservedRole::Full)
 			.await;
 
+		await_peer_connections(&shared, 1, 1).await;
+
 		let actions = network_handle.next_network_actions(2).await;
 		let wire_message =
 			WireMessage::<protocol_v1::ValidationProtocol>::ViewUpdate(View::default()).encode();
@@ -506,7 +532,7 @@ fn sends_view_updates_to_peers() {
 fn do_not_send_view_update_until_synced() {
 	let (oracle, handle) = make_sync_oracle(true);
 	test_harness(Box::new(oracle), |test_harness| async move {
-		let TestHarness { mut network_handle, mut virtual_overseer } = test_harness;
+		let TestHarness { mut network_handle, mut virtual_overseer, shared } = test_harness;
 
 		let peer_a = PeerId::random();
 		let peer_b = PeerId::random();
@@ -519,6 +545,8 @@ fn do_not_send_view_update_until_synced() {
 			.connect_peer(peer_b.clone(), PeerSet::Collation, ObservedRole::Full)
 			.await;
 
+		await_peer_connections(&shared, 1, 1).await;
+
 		{
 			let actions = network_handle.next_network_actions(2).await;
 			let wire_message =
@@ -600,7 +628,7 @@ fn do_not_send_view_update_until_synced() {
 #[test]
 fn do_not_send_view_update_when_only_finalized_block_changed() {
 	test_harness(done_syncing_oracle(), |test_harness| async move {
-		let TestHarness { mut network_handle, mut virtual_overseer } = test_harness;
+		let TestHarness { mut network_handle, mut virtual_overseer, shared } = test_harness;
 
 		let peer_a = PeerId::random();
 		let peer_b = PeerId::random();
@@ -612,6 +640,8 @@ fn do_not_send_view_update_when_only_finalized_block_changed() {
 			.connect_peer(peer_b.clone(), PeerSet::Validation, ObservedRole::Full)
 			.await;
 
+		await_peer_connections(&shared, 2, 0).await;
+
 		let hash_a = Hash::repeat_byte(1);
 
 		virtual_overseer
@@ -660,7 +690,7 @@ fn do_not_send_view_update_when_only_finalized_block_changed() {
 #[test]
 fn peer_view_updates_sent_via_overseer() {
 	test_harness(done_syncing_oracle(), |test_harness| async move {
-		let TestHarness { mut network_handle, mut virtual_overseer } = test_harness;
+		let TestHarness { mut network_handle, mut virtual_overseer, shared } = test_harness;
 
 		let peer = PeerId::random();
 
@@ -668,6 +698,8 @@ fn peer_view_updates_sent_via_overseer() {
 			.connect_peer(peer.clone(), PeerSet::Validation, ObservedRole::Full)
 			.await;
 
+		await_peer_connections(&shared, 1, 0).await;
+
 		let view = view![Hash::repeat_byte(1)];
 
 		// bridge will inform about all connected peers.
@@ -710,7 +742,7 @@ fn peer_view_updates_sent_via_overseer() {
 #[test]
 fn peer_messages_sent_via_overseer() {
 	test_harness(done_syncing_oracle(), |test_harness| async move {
-		let TestHarness { mut network_handle, mut virtual_overseer } = test_harness;
+		let TestHarness { mut network_handle, mut virtual_overseer, shared } = test_harness;
 
 		let peer = PeerId::random();
 
@@ -718,6 +750,8 @@ fn peer_messages_sent_via_overseer() {
 			.connect_peer(peer.clone(), PeerSet::Validation, ObservedRole::Full)
 			.await;
 
+		await_peer_connections(&shared, 1, 0).await;
+
 		// bridge will inform about all connected peers.
 		{
 			assert_sends_validation_event_to_all(
@@ -782,7 +816,7 @@ fn peer_messages_sent_via_overseer() {
 #[test]
 fn peer_disconnect_from_just_one_peerset() {
 	test_harness(done_syncing_oracle(), |test_harness| async move {
-		let TestHarness { mut network_handle, mut virtual_overseer } = test_harness;
+		let TestHarness { mut network_handle, mut virtual_overseer, shared } = test_harness;
 
 		let peer = PeerId::random();
 
@@ -793,6 +827,8 @@ fn peer_disconnect_from_just_one_peerset() {
 			.connect_peer(peer.clone(), PeerSet::Collation, ObservedRole::Full)
 			.await;
 
+		await_peer_connections(&shared, 1, 1).await;
+
 		// bridge will inform about all connected peers.
 		{
 			assert_sends_validation_event_to_all(
@@ -874,7 +910,7 @@ fn peer_disconnect_from_just_one_peerset() {
 #[test]
 fn relays_collation_protocol_messages() {
 	test_harness(done_syncing_oracle(), |test_harness| async move {
-		let TestHarness { mut network_handle, mut virtual_overseer } = test_harness;
+		let TestHarness { mut network_handle, mut virtual_overseer, shared } = test_harness;
 
 		let peer_a = PeerId::random();
 		let peer_b = PeerId::random();
@@ -886,6 +922,8 @@ fn relays_collation_protocol_messages() {
 			.connect_peer(peer_b.clone(), PeerSet::Collation, ObservedRole::Full)
 			.await;
 
+		await_peer_connections(&shared, 1, 1).await;
+
 		// bridge will inform about all connected peers.
 		{
 			assert_sends_validation_event_to_all(
@@ -978,7 +1016,7 @@ fn relays_collation_protocol_messages() {
 #[test]
 fn different_views_on_different_peer_sets() {
 	test_harness(done_syncing_oracle(), |test_harness| async move {
-		let TestHarness { mut network_handle, mut virtual_overseer } = test_harness;
+		let TestHarness { mut network_handle, mut virtual_overseer, shared } = test_harness;
 
 		let peer = PeerId::random();
 
@@ -989,6 +1027,8 @@ fn different_views_on_different_peer_sets() {
 			.connect_peer(peer.clone(), PeerSet::Collation, ObservedRole::Full)
 			.await;
 
+		await_peer_connections(&shared, 1, 1).await;
+
 		// bridge will inform about all connected peers.
 		{
 			assert_sends_validation_event_to_all(
@@ -1065,7 +1105,7 @@ fn different_views_on_different_peer_sets() {
 #[test]
 fn sent_views_include_finalized_number_update() {
 	test_harness(done_syncing_oracle(), |test_harness| async move {
-		let TestHarness { mut network_handle, mut virtual_overseer } = test_harness;
+		let TestHarness { mut network_handle, mut virtual_overseer, shared } = test_harness;
 
 		let peer_a = PeerId::random();
 
@@ -1073,6 +1113,8 @@ fn sent_views_include_finalized_number_update() {
 			.connect_peer(peer_a.clone(), PeerSet::Validation, ObservedRole::Full)
 			.await;
 
+		await_peer_connections(&shared, 1, 0).await;
+
 		let hash_a = Hash::repeat_byte(1);
 		let hash_b = Hash::repeat_byte(2);
 
@@ -1110,7 +1152,7 @@ fn sent_views_include_finalized_number_update() {
 #[test]
 fn view_finalized_number_can_not_go_down() {
 	test_harness(done_syncing_oracle(), |test_harness| async move {
-		let TestHarness { mut network_handle, virtual_overseer } = test_harness;
+		let TestHarness { mut network_handle, virtual_overseer, shared } = test_harness;
 
 		let peer_a = PeerId::random();
 
@@ -1118,6 +1160,8 @@ fn view_finalized_number_can_not_go_down() {
 			.connect_peer(peer_a.clone(), PeerSet::Validation, ObservedRole::Full)
 			.await;
 
+		await_peer_connections(&shared, 1, 0).await;
+
 		network_handle
 			.peer_message(
 				peer_a.clone(),