mirror of
https://github.com/Nanaloveyuki/BitLogger.git
synced 2026-05-30 15:42:25 +00:00
Add cross-target async compatibility runtime
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
async test "shutdown drains pending records" {
|
||||
inspect(async_runtime_mode_label(async_runtime_mode()) == "native_worker" || async_runtime_mode_label(async_runtime_mode()) == "compatibility", content="true")
|
||||
let written : Ref[Array[String]] = Ref::new([])
|
||||
let flushes : Ref[Int] = Ref::new(0)
|
||||
let logger = async_logger(
|
||||
@@ -148,3 +149,59 @@ test "async build config stringify roundtrips nested logger and async fields" {
|
||||
AsyncFlushPolicy::Shutdown => "Shutdown"
|
||||
}, content="Shutdown")
|
||||
}
|
||||
|
||||
test "async runtime capability helpers stay consistent" {
|
||||
let mode = async_runtime_mode()
|
||||
let state = async_runtime_state()
|
||||
let worker_supported = match mode {
|
||||
AsyncRuntimeMode::NativeWorker => true
|
||||
AsyncRuntimeMode::Compatibility => false
|
||||
}
|
||||
inspect(
|
||||
async_runtime_mode_label(mode) == "native_worker" || async_runtime_mode_label(mode) == "compatibility",
|
||||
content="true",
|
||||
)
|
||||
inspect(async_runtime_supports_background_worker() == worker_supported, content="true")
|
||||
inspect(async_runtime_mode_label(state.mode) == async_runtime_mode_label(mode), content="true")
|
||||
inspect(state.background_worker == worker_supported, content="true")
|
||||
inspect(
|
||||
stringify_async_runtime_state(state),
|
||||
content=if worker_supported {
|
||||
"{\"mode\":\"native_worker\",\"background_worker\":true}"
|
||||
} else {
|
||||
"{\"mode\":\"compatibility\",\"background_worker\":false}"
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
async test "run drains queued records in compatibility backends too" {
|
||||
let written : Ref[Array[String]] = Ref::new([])
|
||||
let logger = async_logger(
|
||||
@bitlogger.callback_sink(fn(rec) {
|
||||
written.val.push(rec.message)
|
||||
}),
|
||||
config=AsyncLoggerConfig::new(
|
||||
max_pending=4,
|
||||
overflow=AsyncOverflowPolicy::DropNewest,
|
||||
max_batch=2,
|
||||
linger_ms=5,
|
||||
flush=AsyncFlushPolicy::Never,
|
||||
),
|
||||
min_level=@bitlogger.Level::Info,
|
||||
target="async.compat",
|
||||
)
|
||||
|
||||
@async.with_task_group(group => {
|
||||
logger.info("one")
|
||||
logger.info("two")
|
||||
inspect(logger.pending_count(), content="2")
|
||||
group.spawn_bg(() => logger.run())
|
||||
logger.shutdown()
|
||||
})
|
||||
|
||||
inspect(logger.is_closed(), content="true")
|
||||
inspect(logger.pending_count(), content="0")
|
||||
inspect(written.val.length(), content="2")
|
||||
inspect(written.val[0], content="one")
|
||||
inspect(written.val[1], content="two")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user