v0.1.2-pre.005
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
// file: crates/ksp-logging-lib/tests/runtime.rs
|
||||
// version: 2
|
||||
// version: 3
|
||||
|
||||
//! Integration tests for global initialization, takeover filtering, non-blocking outputs and hot reload.
|
||||
|
||||
@@ -62,6 +62,50 @@ fn read_directory_text(path: &std::path::Path) -> std::string::String {
|
||||
return output;
|
||||
}
|
||||
|
||||
fn exercise_concurrent_reload(guard: &mut ksp_logging_lib::LoggingGuard, disabled: &ksp_logging_lib::LoggingSettings) {
|
||||
let quiet_console = ksp_logging_lib::LoggingSettings::new(
|
||||
ksp_logging_lib::LogFilterLevel::Off,
|
||||
ksp_logging_lib::SpanEvents::Off,
|
||||
std::option::Option::Some(ksp_logging_lib::ConsoleSettings::stderr()),
|
||||
std::option::Option::None,
|
||||
);
|
||||
let stop = std::sync::Arc::new(std::sync::atomic::AtomicBool::new(false));
|
||||
let barrier = std::sync::Arc::new(std::sync::Barrier::new(5));
|
||||
let mut threads = std::vec::Vec::new();
|
||||
for worker_index in 0..4_u32 {
|
||||
let worker_stop = std::sync::Arc::clone(&stop);
|
||||
let worker_barrier = std::sync::Arc::clone(&barrier);
|
||||
threads.push(std::thread::spawn(move || {
|
||||
worker_barrier.wait();
|
||||
let mut sequence = 0_u64;
|
||||
while !worker_stop.load(std::sync::atomic::Ordering::Relaxed) {
|
||||
ksp_logging_lib::trace!(target: LOGGING_TARGET, worker_index, sequence, "concurrent reload probe");
|
||||
sequence = sequence.wrapping_add(1);
|
||||
}
|
||||
return;
|
||||
}));
|
||||
}
|
||||
barrier.wait();
|
||||
let mut reloads_succeeded = true;
|
||||
for reload_index in 0..32_u32 {
|
||||
let settings = if reload_index % 2 == 0 { &quiet_console } else { disabled };
|
||||
let reload_result = ksp_logging_lib::reinitialize(guard, settings);
|
||||
if reload_result.is_err() {
|
||||
reloads_succeeded = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
stop.store(true, std::sync::atomic::Ordering::Relaxed);
|
||||
let mut joins_succeeded = true;
|
||||
for thread in threads {
|
||||
if thread.join().is_err() {
|
||||
joins_succeeded = false;
|
||||
}
|
||||
}
|
||||
assert!(reloads_succeeded);
|
||||
assert!(joins_succeeded);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn global_runtime_supports_takeover_non_blocking_outputs_hot_reload_and_single_initialization() {
|
||||
let root = test_root_directory();
|
||||
@@ -117,6 +161,7 @@ fn global_runtime_supports_takeover_non_blocking_outputs_hot_reload_and_single_i
|
||||
assert_eq!(guard.settings(), &console_enabled);
|
||||
assert!(logging_trace_enabled());
|
||||
assert!(!external_error_enabled());
|
||||
exercise_concurrent_reload(&mut guard, &disabled);
|
||||
let log_directory = root.join("logs");
|
||||
let file_enabled = ksp_logging_lib::LoggingSettings::new(
|
||||
ksp_logging_lib::LogFilterLevel::Info,
|
||||
|
||||
Reference in New Issue
Block a user