Merge pull request 'fleetd #535: convert FleetdLeadMailboxSelectionTest to CapturedLog' (#536) from worker/535-appender-leak-fe74c1-1 into main
This commit was merged in pull request #536.
This commit is contained in:
@@ -1,15 +1,12 @@
|
|||||||
package dev.ltms.fleet;
|
package dev.ltms.fleet;
|
||||||
|
|
||||||
import ch.qos.logback.classic.Level;
|
import ch.qos.logback.classic.Level;
|
||||||
import ch.qos.logback.classic.Logger;
|
|
||||||
import ch.qos.logback.classic.spi.ILoggingEvent;
|
import ch.qos.logback.classic.spi.ILoggingEvent;
|
||||||
import ch.qos.logback.core.read.ListAppender;
|
|
||||||
import dev.ltms.fleet.config.FleetConfig;
|
import dev.ltms.fleet.config.FleetConfig;
|
||||||
import dev.ltms.fleet.msg.LeadMailbox;
|
import dev.ltms.fleet.msg.LeadMailbox;
|
||||||
|
import dev.ltms.fleet.testing.CapturedLog;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.slf4j.LoggerFactory;
|
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.*;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
@@ -52,29 +49,22 @@ class FleetdLeadMailboxSelectionTest {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static ListAppender<ILoggingEvent> captureFleetdLogs() {
|
private static String joined(CapturedLog captured, Level level) {
|
||||||
Logger logger = (Logger) LoggerFactory.getLogger(Fleetd.class);
|
return captured.events().stream().filter(e -> e.getLevel() == level)
|
||||||
ListAppender<ILoggingEvent> appender = new ListAppender<>();
|
|
||||||
appender.start();
|
|
||||||
logger.addAppender(appender);
|
|
||||||
return appender;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static String joined(ListAppender<ILoggingEvent> appender, Level level) {
|
|
||||||
return appender.list.stream().filter(e -> e.getLevel() == level)
|
|
||||||
.map(ILoggingEvent::getFormattedMessage).reduce("", (a, b) -> a + "\n" + b);
|
.map(ILoggingEvent::getFormattedMessage).reduce("", (a, b) -> a + "\n" + b);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void noCoordinatorBlockLeavesTheFeatureOffSilently() {
|
void noCoordinatorBlockLeavesTheFeatureOffSilently() {
|
||||||
var appender = captureFleetdLogs();
|
try (var captured = CapturedLog.of(Fleetd.class)) {
|
||||||
var opener = new RecordingOpener();
|
var opener = new RecordingOpener();
|
||||||
|
|
||||||
assertNull(Fleetd.openLeadMailbox(null, Map.of(), opener));
|
assertNull(Fleetd.openLeadMailbox(null, Map.of(), opener));
|
||||||
|
|
||||||
assertNull(opener.offeredUri, "nothing configured means nothing is opened");
|
assertNull(opener.offeredUri, "nothing configured means nothing is opened");
|
||||||
assertEquals("", joined(appender, Level.WARN),
|
assertEquals("", joined(captured, Level.WARN),
|
||||||
"an opt-in feature nobody asked for must not warn on every boot");
|
"an opt-in feature nobody asked for must not warn on every boot");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -114,31 +104,33 @@ class FleetdLeadMailboxSelectionTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void warnsAndStaysOffWhenSelfIdIsMissing() {
|
void warnsAndStaysOffWhenSelfIdIsMissing() {
|
||||||
var appender = captureFleetdLogs();
|
try (var captured = CapturedLog.of(Fleetd.class)) {
|
||||||
var opener = new RecordingOpener();
|
var opener = new RecordingOpener();
|
||||||
var coordinator = new FleetConfig.Coordinator(RESOLVED_URI, null, null, null, null);
|
var coordinator = new FleetConfig.Coordinator(RESOLVED_URI, null, null, null, null);
|
||||||
|
|
||||||
assertNull(Fleetd.openLeadMailbox(coordinator, Map.of(), opener));
|
assertNull(Fleetd.openLeadMailbox(coordinator, Map.of(), opener));
|
||||||
|
|
||||||
assertNull(opener.offeredUri, "a mailbox with no owning coord-id has no queue to declare");
|
assertNull(opener.offeredUri, "a mailbox with no owning coord-id has no queue to declare");
|
||||||
String warns = joined(appender, Level.WARN);
|
String warns = joined(captured, Level.WARN);
|
||||||
assertTrue(warns.contains("coordinator.selfId"), () -> "say which key is missing: " + warns);
|
assertTrue(warns.contains("coordinator.selfId"), () -> "say which key is missing: " + warns);
|
||||||
assertFalse(warns.contains(SECRET), () -> "the URI's password must never be logged: " + warns);
|
assertFalse(warns.contains(SECRET), () -> "the URI's password must never be logged: " + warns);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void warnsAndStaysOffWhenTheBrokerIsUnreachableAtBoot() {
|
void warnsAndStaysOffWhenTheBrokerIsUnreachableAtBoot() {
|
||||||
var appender = captureFleetdLogs();
|
try (var captured = CapturedLog.of(Fleetd.class)) {
|
||||||
var opener = new RecordingOpener();
|
var opener = new RecordingOpener();
|
||||||
opener.unreachable = true;
|
opener.unreachable = true;
|
||||||
var coordinator = new FleetConfig.Coordinator(RESOLVED_URI, null, "mac-opus", null, null);
|
var coordinator = new FleetConfig.Coordinator(RESOLVED_URI, null, "mac-opus", null, null);
|
||||||
|
|
||||||
assertNull(Fleetd.openLeadMailbox(coordinator, Map.of(), opener),
|
assertNull(Fleetd.openLeadMailbox(coordinator, Map.of(), opener),
|
||||||
"a down coordination broker turns the feature off; it must never take the daemon down");
|
"a down coordination broker turns the feature off; it must never take the daemon down");
|
||||||
|
|
||||||
String warns = joined(appender, Level.WARN);
|
String warns = joined(captured, Level.WARN);
|
||||||
assertTrue(warns.contains("coord.example"), () -> "name the host that failed: " + warns);
|
assertTrue(warns.contains("coord.example"), () -> "name the host that failed: " + warns);
|
||||||
assertFalse(warns.contains(SECRET), () -> "with credentials stripped: " + warns);
|
assertFalse(warns.contains(SECRET), () -> "with credentials stripped: " + warns);
|
||||||
assertTrue(warns.contains("Connection refused"), () -> "and the real reason: " + warns);
|
assertTrue(warns.contains("Connection refused"), () -> "and the real reason: " + warns);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user