fix(ci): avoid transient event files in native test scan
Release / release (push) Successful in 14m0s

This commit is contained in:
dmg committed 2026-09-25 17:06:08 -04:00
1 parent 897a0606ba
commit fcbc2814c2
1 file changed
+28 -7
@@ -18,6 +18,20 @@ class BasicAttackEventsNativeTest {
@TempDir Path data;
@BeforeAll static void bootstrap() throws Exception { NativeRuntime.bootstrap(); }
@Test void eventSnapshotReadsExportedSegmentsWithoutEnteringTransientPendingTree() throws Exception {
var events = data.resolve("events");
var day = events.resolve(java.time.LocalDate.now(java.time.ZoneOffset.UTC).toString());
var pending = events.resolve("pending");
Files.createDirectories(day); Files.createDirectories(pending);
Files.writeString(day.resolve("events-exported-0.jsonl"),
"{\"type\":\"games.dmg.minecraft.fantasystick.combat.damage\"}\n");
Files.writeString(pending.resolve("transient.jsonl"),
"{\"type\":\"games.dmg.minecraft.fantasystick.action.observed\"}\n");
var exported = records();
assertEquals(1, exported.size(), "Only durable exported date-segments are authoritative test evidence");
assertTrue(is(exported.getFirst(), "combat.damage"));
}
@Test void acceptedNativeBasicHitHasOneCorrelatedDamageRecordAndRealFinalAmount() throws Exception {
try (var fixture = new FantasyStickLifecycleNativeTest.Fixture(data)) {
fixture.plugin.setEnabled(true);
@@ -396,13 +410,20 @@ class BasicAttackEventsNativeTest {
var result = new ArrayList<JsonObject>();
var directory = data.resolve("events");
if (!Files.exists(directory)) return result;
try (var paths = Files.walk(directory)) {
for (var path : paths.filter(p -> p.getFileName().toString().endsWith(".jsonl")).toList()) {
var content = Files.readString(path);
int end = content.lastIndexOf('\n');
if (end < 0) continue;
for (var line : content.substring(0, end).lines().toList())
if (!line.isBlank()) result.add(JsonParser.parseString(line).getAsJsonObject());
// Only date-segment directories contain exported records. Walking the entire tree races the
// writer's create/move/delete of transient files under events/pending during the live poll.
try (var days = Files.list(directory)) {
for (var day : days.filter(path -> path.getFileName().toString().matches("\\d{4}-\\d{2}-\\d{2}")
&& Files.isDirectory(path, java.nio.file.LinkOption.NOFOLLOW_LINKS)).toList()) {
try (var segments = Files.list(day)) {
for (var path : segments.filter(p -> p.getFileName().toString().endsWith(".jsonl")).toList()) {
var content = Files.readString(path);
int end = content.lastIndexOf('\n');
if (end < 0) continue;
for (var line : content.substring(0, end).lines().toList())
if (!line.isBlank()) result.add(JsonParser.parseString(line).getAsJsonObject());
}
}
}
}
return result;