From 28307356448c02aa9cb37af3188598b3698042a4 Mon Sep 17 00:00:00 2001 From: Dai Ha Date: Wed, 9 Sep 2026 07:52:43 +0700 Subject: [PATCH] t377: raise the logger level in the test, or it asserts on an empty list MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The 9 tests the member wrote failed 7 of 9 on first build. The production code was correct; the test harness was not. logback-test.xml sets dev.ltms.fleet to WARN, so the INFO shape lines were dropped by the level check before any appender saw them. The member copied attach()/detach() from MemberTrustModelReportTest but not the setLevel(INFO) those siblings do at each call site. Doing it inside attach()/detach() covers all nine at once, and restores the original level (null, meaning inherit) rather than a concrete one. Proven by mutation: making the code log the value fails 4 tests, including theValueNeverAppearsInLogOutput — 'the full GITEA_HOST value must never reach the log'. Full build 1459 tests green. --- .../ltms/fleet/GitHostShapeReportTest.java | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/fleetd/src/test/java/dev/ltms/fleet/GitHostShapeReportTest.java b/fleetd/src/test/java/dev/ltms/fleet/GitHostShapeReportTest.java index fdb6ac3..e82f9c8 100644 --- a/fleetd/src/test/java/dev/ltms/fleet/GitHostShapeReportTest.java +++ b/fleetd/src/test/java/dev/ltms/fleet/GitHostShapeReportTest.java @@ -39,8 +39,26 @@ class GitHostShapeReportTest { return FleetConfig.load(f); } + /** + * The level this logger had before {@link #attach()} raised it, so {@link #detach} can put it + * back. {@code null} is a real value here — it means "inherit from the parent" — and that is + * exactly the state this logger starts in, so it must be restored as {@code null} rather than + * as some concrete level. + */ + private static Level originalLevel; + + /** + * fleetd #377: the shape lines are logged at INFO, and {@code logback-test.xml} sets + * {@code dev.ltms.fleet} to WARN — so INFO events are dropped by the level check BEFORE any + * appender sees them. Attaching an appender is therefore not enough: without raising the level + * the list stays empty and every assertion below fails against correct production code. The + * sibling report tests do the same thing at each call site (see + * {@code MemberTrustModelReportTest}); doing it here keeps it in one place. + */ private static ListAppender attach() { Logger logger = (Logger) LoggerFactory.getLogger(Fleetd.class); + originalLevel = logger.getLevel(); + logger.setLevel(Level.INFO); ListAppender appender = new ListAppender<>(); appender.start(); logger.addAppender(appender); @@ -48,7 +66,9 @@ class GitHostShapeReportTest { } private static void detach(ListAppender appender) { - ((Logger) LoggerFactory.getLogger(Fleetd.class)).detachAppender(appender); + Logger logger = (Logger) LoggerFactory.getLogger(Fleetd.class); + logger.detachAppender(appender); + logger.setLevel(originalLevel); } private static List messages(ListAppender appender) {