fix(ci): avoid transient event files in native test scan
Release / release (push) Successful in 14m0s
Release / release (push) Successful in 14m0s
This commit is contained in:
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;
|
||||
|
||||
Reference in new issue
Block a user