mirror of
https://github.com/sigp/lighthouse.git
synced 2026-03-04 01:01:41 +00:00
## Issue Addressed #1494 ## Proposed Changes - Give the TaskExecutor the sender side of a channel that a task can clone to request shutting down - The receiver side of this channel is in environment and now we block until ctrl+c or an internal shutdown signal is received - The swarm now informs when it has reached 0 listeners - The network receives this message and requests the shutdown
78 lines
2.7 KiB
Rust
78 lines
2.7 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 eth2_libp2p::Enr;
|
|
use slog::Logger;
|
|
use sloggers::{null::NullLoggerBuilder, Build};
|
|
use std::str::FromStr;
|
|
use std::sync::Arc;
|
|
use store::config::StoreConfig;
|
|
use tokio::runtime::Runtime;
|
|
use types::{test_utils::generate_deterministic_keypairs, MinimalEthSpec};
|
|
|
|
fn get_logger() -> Logger {
|
|
let builder = NullLoggerBuilder;
|
|
builder.build().expect("should build logger")
|
|
}
|
|
|
|
#[test]
|
|
fn test_dht_persistence() {
|
|
let log = get_logger();
|
|
|
|
let beacon_chain = Arc::new(
|
|
BeaconChainHarness::new(
|
|
MinimalEthSpec,
|
|
generate_deterministic_keypairs(8),
|
|
StoreConfig::default(),
|
|
)
|
|
.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 = Runtime::new().unwrap();
|
|
|
|
let (signal, exit) = exit_future::signal();
|
|
let (shutdown_tx, _) = futures::channel::mpsc::channel(1);
|
|
let executor = environment::TaskExecutor::new(
|
|
runtime.handle().clone(),
|
|
exit,
|
|
log.clone(),
|
|
shutdown_tx,
|
|
);
|
|
|
|
let mut config = NetworkConfig::default();
|
|
config.libp2p_port = 21212;
|
|
config.discovery_port = 21212;
|
|
config.boot_nodes_enr = enrs.clone();
|
|
runtime.spawn(async move {
|
|
// Create a new network service which implicitly gets dropped at the
|
|
// end of the block.
|
|
|
|
let _ = NetworkService::start(beacon_chain.clone(), &config, executor)
|
|
.await
|
|
.unwrap();
|
|
drop(signal);
|
|
});
|
|
runtime.shutdown_timeout(tokio::time::Duration::from_millis(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"
|
|
);
|
|
}
|
|
}
|