Skip to content
Snippets Groups Projects
Commit 5b1a230d authored by Alexandru Gheorghe's avatar Alexandru Gheorghe Committed by GitHub
Browse files

metrics: tests: Fix flaky runtime_can_publish_metrics (#7279)


* metrics: tests: Fix flaky runtime_can_publish_metrics

When an re-org happens wait_for_blocks(2) would actually exit after the second
import of blocks 1, so the conditions for the metric to exist won't be met
hence the occasional test failure.

More details in:
  https://github.com/paritytech/polkadot/issues/7267

Signed-off-by: default avatarAlexandru Gheorghe <alexandru.gheorghe@parity.io>

* metrics: tests: Cleanup un-needed box pin

Signed-off-by: default avatarAlexandru Gheorghe <alexandru.gheorghe@parity.io>

---------

Signed-off-by: default avatarAlexandru Gheorghe <alexandru.gheorghe@parity.io>
parent 86564f1d
Branches
No related merge requests found
...@@ -61,8 +61,8 @@ async fn runtime_can_publish_metrics() { ...@@ -61,8 +61,8 @@ async fn runtime_can_publish_metrics() {
// Start validator Bob. // Start validator Bob.
let _bob = run_validator_node(bob_config, None); let _bob = run_validator_node(bob_config, None);
// Wait for Alice to author two blocks. // Wait for Alice to see two finalized blocks.
alice.wait_for_blocks(2).await; alice.wait_for_finalized_blocks(2).await;
let metrics_uri = format!("http://localhost:{}/metrics", DEFAULT_PROMETHEUS_PORT); let metrics_uri = format!("http://localhost:{}/metrics", DEFAULT_PROMETHEUS_PORT);
let metrics = scrape_prometheus_metrics(&metrics_uri).await; let metrics = scrape_prometheus_metrics(&metrics_uri).await;
......
...@@ -21,7 +21,7 @@ ...@@ -21,7 +21,7 @@
pub mod chain_spec; pub mod chain_spec;
pub use chain_spec::*; pub use chain_spec::*;
use futures::future::Future; use futures::{future::Future, stream::StreamExt};
use polkadot_node_primitives::{CollationGenerationConfig, CollatorFn}; use polkadot_node_primitives::{CollationGenerationConfig, CollatorFn};
use polkadot_node_subsystem::messages::{CollationGenerationMessage, CollatorProtocolMessage}; use polkadot_node_subsystem::messages::{CollationGenerationMessage, CollatorProtocolMessage};
use polkadot_overseer::Handle; use polkadot_overseer::Handle;
...@@ -35,8 +35,9 @@ use polkadot_test_runtime::{ ...@@ -35,8 +35,9 @@ use polkadot_test_runtime::{
ParasCall, ParasSudoWrapperCall, Runtime, SignedExtra, SignedPayload, SudoCall, ParasCall, ParasSudoWrapperCall, Runtime, SignedExtra, SignedPayload, SudoCall,
UncheckedExtrinsic, VERSION, UncheckedExtrinsic, VERSION,
}; };
use sc_chain_spec::ChainSpec; use sc_chain_spec::ChainSpec;
use sc_client_api::execution_extensions::ExecutionStrategies; use sc_client_api::{execution_extensions::ExecutionStrategies, BlockchainEvents};
use sc_network::{ use sc_network::{
config::{NetworkConfiguration, TransportConfig}, config::{NetworkConfiguration, TransportConfig},
multiaddr, NetworkStateInfo, multiaddr, NetworkStateInfo,
...@@ -54,6 +55,7 @@ use sp_keyring::Sr25519Keyring; ...@@ -54,6 +55,7 @@ use sp_keyring::Sr25519Keyring;
use sp_runtime::{codec::Encode, generic, traits::IdentifyAccount, MultiSigner}; use sp_runtime::{codec::Encode, generic, traits::IdentifyAccount, MultiSigner};
use sp_state_machine::BasicExternalities; use sp_state_machine::BasicExternalities;
use std::{ use std::{
collections::HashSet,
net::{Ipv4Addr, SocketAddr}, net::{Ipv4Addr, SocketAddr},
path::PathBuf, path::PathBuf,
sync::Arc, sync::Arc,
...@@ -61,7 +63,6 @@ use std::{ ...@@ -61,7 +63,6 @@ use std::{
use substrate_test_client::{ use substrate_test_client::{
BlockchainEventsExt, RpcHandlersExt, RpcTransactionError, RpcTransactionOutput, BlockchainEventsExt, RpcHandlersExt, RpcTransactionError, RpcTransactionOutput,
}; };
/// Declare an instance of the native executor named `PolkadotTestExecutorDispatch`. Include the wasm binary as the /// Declare an instance of the native executor named `PolkadotTestExecutorDispatch`. Include the wasm binary as the
/// equivalent wasm code. /// equivalent wasm code.
pub struct PolkadotTestExecutorDispatch; pub struct PolkadotTestExecutorDispatch;
...@@ -335,6 +336,20 @@ impl PolkadotTestNode { ...@@ -335,6 +336,20 @@ impl PolkadotTestNode {
self.client.wait_for_blocks(count) self.client.wait_for_blocks(count)
} }
/// Wait for `count` blocks to be finalized and then exit. Similarly with `wait_for_blocks` this function will
/// not return if no block are ever finalized.
pub async fn wait_for_finalized_blocks(&self, count: usize) {
let mut import_notification_stream = self.client.finality_notification_stream();
let mut blocks = HashSet::new();
while let Some(notification) = import_notification_stream.next().await {
blocks.insert(notification.hash);
if blocks.len() == count {
break
}
}
}
/// Register the collator functionality in the overseer of this node. /// Register the collator functionality in the overseer of this node.
pub async fn register_collator( pub async fn register_collator(
&mut self, &mut self,
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment