58870fc6d3
## Issue Addressed Fix #2585 ## Proposed Changes Provide a canonical version of test_logger that can be used throughout lighthouse. ## Additional Info This allows tests to conditionally emit logging data by adding test_logger as the default logger. And then when executing `cargo test --features logging/test_logger` log output will be visible: wink@3900x:~/lighthouse/common/logging/tests/test-feature-test_logger (Add-test_logger-as-feature-to-logging) $ cargo test --features logging/test_logger Finished test [unoptimized + debuginfo] target(s) in 0.02s Running unittests (target/debug/deps/test_logger-e20115db6a5e3714) running 1 test Sep 10 12:53:45.212 INFO hi, module: test_logger:8 test tests::test_fn_with_logging ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests test-logger running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Or, in normal scenarios where logging isn't needed, executing `cargo test` the log output will not be visible: wink@3900x:~/lighthouse/common/logging/tests/test-feature-test_logger (Add-test_logger-as-feature-to-logging) $ cargo test Finished test [unoptimized + debuginfo] target(s) in 0.02s Running unittests (target/debug/deps/test_logger-02e02f8d41e8cf8a) running 1 test test tests::test_fn_with_logging ... ok test result: ok. 1 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s Doc-tests test-logger running 0 tests test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.00s
88 lines
2.5 KiB
Rust
88 lines
2.5 KiB
Rust
use logging::test_logger;
|
|
use slasher::{test_utils::indexed_att, Config, Error, Slasher};
|
|
use tempfile::tempdir;
|
|
use types::Epoch;
|
|
|
|
#[test]
|
|
fn attestation_pruning_empty_wrap_around() {
|
|
let tempdir = tempdir().unwrap();
|
|
let mut config = Config::new(tempdir.path().into()).for_testing();
|
|
config.validator_chunk_size = 1;
|
|
config.chunk_size = 16;
|
|
config.history_length = 16;
|
|
|
|
let slasher = Slasher::open(config.clone(), test_logger()).unwrap();
|
|
|
|
let v = vec![0];
|
|
let history_length = config.history_length as u64;
|
|
|
|
let mut current_epoch = Epoch::new(history_length - 1);
|
|
|
|
slasher.accept_attestation(indexed_att(v.clone(), 0, history_length - 1, 0));
|
|
slasher.process_queued(current_epoch).unwrap();
|
|
slasher.prune_database(current_epoch).unwrap();
|
|
|
|
// Delete the previous attestation
|
|
current_epoch = Epoch::new(2 * history_length + 2);
|
|
slasher.prune_database(current_epoch).unwrap();
|
|
|
|
// Add an attestation that would be surrounded with the modulo considered
|
|
slasher.accept_attestation(indexed_att(
|
|
v,
|
|
2 * history_length - 3,
|
|
2 * history_length - 2,
|
|
1,
|
|
));
|
|
slasher.process_queued(current_epoch).unwrap();
|
|
}
|
|
|
|
// Test that pruning can recover from a `MapFull` error
|
|
#[test]
|
|
fn pruning_with_map_full() {
|
|
let tempdir = tempdir().unwrap();
|
|
let mut config = Config::new(tempdir.path().into()).for_testing();
|
|
config.validator_chunk_size = 1;
|
|
config.chunk_size = 16;
|
|
config.history_length = 1024;
|
|
config.max_db_size_mbs = 1;
|
|
|
|
let slasher = Slasher::open(config, test_logger()).unwrap();
|
|
|
|
let v = vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12];
|
|
|
|
let mut current_epoch = Epoch::new(0);
|
|
|
|
loop {
|
|
slasher.accept_attestation(indexed_att(
|
|
v.clone(),
|
|
(current_epoch - 1).as_u64(),
|
|
current_epoch.as_u64(),
|
|
0,
|
|
));
|
|
if let Err(Error::DatabaseError(lmdb::Error::MapFull)) =
|
|
slasher.process_queued(current_epoch)
|
|
{
|
|
break;
|
|
}
|
|
current_epoch += 1;
|
|
}
|
|
|
|
loop {
|
|
slasher.prune_database(current_epoch).unwrap();
|
|
|
|
slasher.accept_attestation(indexed_att(
|
|
v.clone(),
|
|
(current_epoch - 1).as_u64(),
|
|
current_epoch.as_u64(),
|
|
0,
|
|
));
|
|
match slasher.process_queued(current_epoch) {
|
|
Ok(_) => break,
|
|
Err(Error::DatabaseError(lmdb::Error::MapFull)) => {
|
|
current_epoch += 1;
|
|
}
|
|
Err(e) => panic!("{:?}", e),
|
|
}
|
|
}
|
|
}
|