From f7863083d4a540c26e2cdeceacecda70327e4f2f Mon Sep 17 00:00:00 2001 From: Nanaloveyuki Date: Sun, 14 Jun 2026 02:40:35 +0800 Subject: [PATCH] :white_check_mark: cover runtime file reopen helpers --- src/BitLogger_test.mbt | 101 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 101 insertions(+) diff --git a/src/BitLogger_test.mbt b/src/BitLogger_test.mbt index b107327..041f93d 100644 --- a/src/BitLogger_test.mbt +++ b/src/BitLogger_test.mbt @@ -631,6 +631,107 @@ test "runtime sink queued file helpers preserve queue-aware file runtime state" } } +test "runtime sink plain file reopen helpers and failure resets work directly" { + let sink = RuntimeSink::File(file_sink("runtime-reopen-direct.log")) + if sink.file_available() { + inspect(sink.close(), content="true") + inspect(sink.file_reopen_append(), content="true") + inspect(sink.file_available(), content="true") + inspect(sink.file_append_mode(), content="true") + inspect(sink.file_open_failures(), content="0") + Logger::new(sink, min_level=Level::Info, target="runtime.reopen.direct").info("reopened") + inspect(sink.file_write_failures(), content="0") + inspect(sink.file_reopen_truncate(), content="true") + inspect(sink.file_append_mode(), content="false") + inspect(sink.file_reopen(), content="true") + inspect(sink.file_append_mode(), content="false") + inspect(sink.file_reopen_with_current_policy(), content="true") + inspect(sink.file_append_mode(), content="false") + inspect(sink.file_reopen_append(), content="true") + inspect(sink.file_append_mode(), content="true") + inspect(sink.file_reset_failure_counters(), content="true") + inspect(sink.file_open_failures(), content="0") + inspect(sink.file_write_failures(), content="0") + inspect(sink.file_flush_failures(), content="0") + inspect(sink.file_rotation_failures(), content="0") + inspect(sink.close(), content="true") + } else { + inspect(sink.file_append_mode(), content="true") + inspect(sink.file_open_failures(), content="1") + Logger::new(sink, min_level=Level::Info, target="runtime.reopen.direct").info("dropped") + inspect(sink.file_write_failures(), content="1") + inspect(sink.file_reopen_append(), content="false") + inspect(sink.file_open_failures(), content="2") + inspect(sink.file_reopen_truncate(), content="false") + inspect(sink.file_append_mode(), content="false") + inspect(sink.file_reopen_with_current_policy(), content="false") + inspect(sink.file_open_failures(), content="4") + inspect(sink.file_reopen_append(), content="false") + inspect(sink.file_append_mode(), content="true") + inspect(sink.file_open_failures(), content="5") + inspect(sink.file_reset_failure_counters(), content="true") + inspect(sink.file_open_failures(), content="0") + inspect(sink.file_write_failures(), content="0") + inspect(sink.file_flush_failures(), content="0") + inspect(sink.file_rotation_failures(), content="0") + } +} + +test "runtime sink queued file reopen helpers and failure resets work directly" { + let sink = RuntimeSink::QueuedFile( + queued_sink(file_sink("runtime-reopen-queued.log"), max_pending=2), + ) + if sink.file_available() { + inspect(sink.file_close(), content="true") + inspect(sink.file_reopen_append(), content="true") + inspect(sink.file_available(), content="true") + inspect(sink.file_append_mode(), content="true") + inspect(sink.file_open_failures(), content="0") + let logger = Logger::new(sink, min_level=Level::Info, target="runtime.reopen.queued") + logger.info("one") + logger.info("two") + inspect(sink.pending_count(), content="2") + inspect(sink.file_reopen_truncate(), content="true") + inspect(sink.file_append_mode(), content="false") + inspect(sink.file_reopen(), content="true") + inspect(sink.file_append_mode(), content="false") + inspect(sink.file_reopen_with_current_policy(), content="true") + inspect(sink.file_append_mode(), content="false") + inspect(sink.file_reopen_append(), content="true") + inspect(sink.file_append_mode(), content="true") + inspect(sink.file_reset_failure_counters(), content="true") + inspect(sink.file_open_failures(), content="0") + inspect(sink.file_write_failures(), content="0") + inspect(sink.file_flush_failures(), content="0") + inspect(sink.file_rotation_failures(), content="0") + inspect(sink.file_close(), content="true") + } else { + inspect(sink.file_append_mode(), content="true") + inspect(sink.file_open_failures(), content="1") + let logger = Logger::new(sink, min_level=Level::Info, target="runtime.reopen.queued") + logger.info("one") + inspect(sink.pending_count(), content="1") + inspect(sink.file_write_failures(), content="0") + inspect(sink.file_flush(), content="false") + inspect(sink.pending_count(), content="0") + inspect(sink.file_write_failures(), content="1") + inspect(sink.file_reopen_append(), content="false") + inspect(sink.file_open_failures(), content="2") + inspect(sink.file_reopen_truncate(), content="false") + inspect(sink.file_append_mode(), content="false") + inspect(sink.file_reopen_with_current_policy(), content="false") + inspect(sink.file_open_failures(), content="4") + inspect(sink.file_reopen_append(), content="false") + inspect(sink.file_append_mode(), content="true") + inspect(sink.file_open_failures(), content="5") + inspect(sink.file_reset_failure_counters(), content="true") + inspect(sink.file_open_failures(), content="0") + inspect(sink.file_write_failures(), content="0") + inspect(sink.file_flush_failures(), content="0") + inspect(sink.file_rotation_failures(), content="0") + } +} + test "configured logger exposes file sink observability helpers" { let logger = build_logger( LoggerConfig::new(