mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-10 04:01:51 +00:00
## Issue Addressed #3006 ## Proposed Changes This PR changes the default behaviour of lighthouse to ignore discovered IPs that are not globally routable. It adds a CLI flag, --enable-local-discovery to permit the non-global IPs in discovery. NOTE: We should take care in merging this as I will break current set-ups that rely on local IP discovery. I made this the non-default behaviour because we dont really want to be wasting resources attempting to connect to non-routable addresses and we dont want to propagate these to others (on the chance we can connect to one of these local nodes), improving discoveries efficiency.
93 lines
3.4 KiB
Rust
93 lines
3.4 KiB
Rust
#[cfg(not(debug_assertions))]
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use crate::persisted_dht::load_dht;
|
|
use crate::{NetworkConfig, NetworkService};
|
|
use beacon_chain::test_utils::BeaconChainHarness;
|
|
use lighthouse_network::Enr;
|
|
use slog::{o, Drain, Level, Logger};
|
|
use sloggers::{null::NullLoggerBuilder, Build};
|
|
use std::str::FromStr;
|
|
use std::sync::Arc;
|
|
use tokio::runtime::Runtime;
|
|
use types::MinimalEthSpec;
|
|
|
|
fn get_logger(actual_log: bool) -> Logger {
|
|
if actual_log {
|
|
let drain = {
|
|
let decorator = slog_term::TermDecorator::new().build();
|
|
let decorator =
|
|
logging::AlignedTermDecorator::new(decorator, logging::MAX_MESSAGE_WIDTH);
|
|
let drain = slog_term::FullFormat::new(decorator).build().fuse();
|
|
let drain = slog_async::Async::new(drain).chan_size(2048).build();
|
|
drain.filter_level(Level::Debug)
|
|
};
|
|
|
|
Logger::root(drain.fuse(), o!())
|
|
} else {
|
|
let builder = NullLoggerBuilder;
|
|
builder.build().expect("should build logger")
|
|
}
|
|
}
|
|
|
|
#[test]
|
|
fn test_dht_persistence() {
|
|
let log = get_logger(false);
|
|
|
|
let beacon_chain = BeaconChainHarness::builder(MinimalEthSpec)
|
|
.default_spec()
|
|
.deterministic_keypairs(8)
|
|
.fresh_ephemeral_store()
|
|
.build()
|
|
.chain;
|
|
|
|
let store = beacon_chain.store.clone();
|
|
|
|
let enr1 = Enr::from_str("enr:-IS4QHCYrYZbAKWCBRlAy5zzaDZXJBGkcnh4MHcBFZntXNFrdvJjX04jRzjzCBOonrkTfj499SZuOh8R33Ls8RRcy5wBgmlkgnY0gmlwhH8AAAGJc2VjcDI1NmsxoQPKY0yuDUmstAHYpMa2_oxVtw0RW_QAdpzBQA8yWM0xOIN1ZHCCdl8").unwrap();
|
|
let enr2 = Enr::from_str("enr:-IS4QJ2d11eu6dC7E7LoXeLMgMP3kom1u3SE8esFSWvaHoo0dP1jg8O3-nx9ht-EO3CmG7L6OkHcMmoIh00IYWB92QABgmlkgnY0gmlwhH8AAAGJc2VjcDI1NmsxoQIB_c-jQMOXsbjWkbN-Oj99H57gfId5pfb4wa1qxwV4CIN1ZHCCIyk").unwrap();
|
|
let enrs = vec![enr1, enr2];
|
|
|
|
let runtime = Arc::new(Runtime::new().unwrap());
|
|
|
|
let (signal, exit) = exit_future::signal();
|
|
let (shutdown_tx, _) = futures::channel::mpsc::channel(1);
|
|
let executor = task_executor::TaskExecutor::new(
|
|
Arc::downgrade(&runtime),
|
|
exit,
|
|
log.clone(),
|
|
shutdown_tx,
|
|
);
|
|
|
|
let mut config = NetworkConfig::default();
|
|
config.discv5_config.table_filter = |_| true; // Do not ignore local IPs
|
|
config.libp2p_port = 21212;
|
|
config.upnp_enabled = false;
|
|
config.discovery_port = 21212;
|
|
config.boot_nodes_enr = enrs.clone();
|
|
runtime.block_on(async move {
|
|
// Create a new network service which implicitly gets dropped at the
|
|
// end of the block.
|
|
|
|
let _network_service =
|
|
NetworkService::start(beacon_chain.clone(), &config, executor, None)
|
|
.await
|
|
.unwrap();
|
|
drop(signal);
|
|
});
|
|
|
|
let raw_runtime = Arc::try_unwrap(runtime).unwrap();
|
|
raw_runtime.shutdown_timeout(tokio::time::Duration::from_secs(300));
|
|
|
|
// Load the persisted dht from the store
|
|
let persisted_enrs = load_dht(store);
|
|
assert!(
|
|
persisted_enrs.contains(&enrs[0]),
|
|
"should have persisted the first ENR to store"
|
|
);
|
|
assert!(
|
|
persisted_enrs.contains(&enrs[1]),
|
|
"should have persisted the second ENR to store"
|
|
);
|
|
}
|
|
}
|