#![recursion_limit = "256"]
#![doc(
html_logo_url = "https://github.com/maidsafe/QA/raw/master/Images/maidsafe_logo.png",
html_favicon_url = "https://maidsafe.net/img/favicon.ico",
test(attr(deny(warnings)))
)]
#![forbid(
arithmetic_overflow,
mutable_transmutes,
no_mangle_const_items,
unknown_crate_types,
unsafe_code
)]
#![warn(
missing_debug_implementations,
missing_docs,
trivial_casts,
trivial_numeric_casts,
unreachable_pub,
unused_extern_crates,
unused_import_braces,
unused_qualifications,
unused_results,
clippy::unicode_not_nfc,
clippy::unwrap_used
)]
#![allow(clippy::result_large_err, clippy::uninlined_format_args)]
#[macro_use]
extern crate tracing;
mod sessions;
mod connections;
mod errors;
pub use api::{
Client, QueriedDataReplicas, RegisterWriteAheadLog, DEFAULT_NETWORK_CONTACTS_FILE_NAME,
};
pub use connections::LinkError;
pub use errors::{Error, Result};
pub use qp2p::Config as QuicP2pConfig;
pub use sn_interface::messaging::data::Error as ErrorMsg;
pub mod api;
pub mod utils;
#[cfg(test)]
mod testnet_grep;
#[cfg(test)]
mod tests {
use crate::testnet_grep::search_testnet_results_per_node;
use sn_interface::{network_knowledge::elder_count, types::log_markers::LogMarker};
use eyre::Result;
#[tokio::test(flavor = "multi_thread")]
#[ignore = "Testnet network_assert_ tests should be excluded from normal tests runs, they need to be run in sequence to ensure validity of checks"]
async fn split_network_assert_health_check() -> Result<()> {
let promoted_to_elder_nodes =
search_testnet_results_per_node(LogMarker::PromotedToElder.to_string())?.len();
let prefix1_prior_elder_nodes = search_testnet_results_per_node(format!(
r"{}: Prefix\(1\)",
LogMarker::StillElderAfterSplit
))?
.len();
let prefix1_new_elder_nodes = search_testnet_results_per_node(format!(
r"{}: Prefix\(1\)",
LogMarker::PromotedToElder
))?
.len();
let prefix0_prior_elder_nodes = search_testnet_results_per_node(format!(
r"{}: Prefix\(0\)",
LogMarker::StillElderAfterSplit
))?
.len();
let prefix0_new_elder_nodes = search_testnet_results_per_node(format!(
r"{}: Prefix\(0\)",
LogMarker::PromotedToElder
))?
.len();
let split_count =
search_testnet_results_per_node(LogMarker::SplitSuccess.to_string())?.len();
let desired_elder_count = elder_count();
println!("Found splits: {:?}", split_count);
println!(
"Desired elder_count() per section: {:?}",
desired_elder_count
);
println!("Promoted to elder so far: {:?}", promoted_to_elder_nodes);
let total_elders = prefix0_prior_elder_nodes
+ prefix0_new_elder_nodes
+ prefix1_new_elder_nodes
+ prefix1_prior_elder_nodes;
println!("Found elders: {:?}", total_elders);
println!(
"Found prefix_0_prior_elders: {:?}",
prefix0_prior_elder_nodes
);
println!("Found prefix_0_new_elders: {:?}", prefix0_new_elder_nodes);
println!(
"Found prefix_1_prior_elders: {:?}",
prefix1_prior_elder_nodes
);
println!("Found prefix_1_new_elders: {:?}", prefix1_new_elder_nodes);
assert!(split_count >= desired_elder_count);
Ok(())
}
}