From f46041690be514dd4b83c90804a07deff2ac263d Mon Sep 17 00:00:00 2001 From: Brian Neumann-Fopiano Date: Tue, 29 Sep 2026 18:37:15 -0400 Subject: [PATCH] Test timing freshness gate - Test that capture drops generation timings once generation is idle - Test that capture carries the engine timing averages while fresh - Remove the hand-built idle snapshot test that passed without the gate --- .../IrisIntegrationServiceTest.java | 20 ------------- .../runtime/EngineTelemetrySnapshotTest.java | 30 +++++++++++++++++++ 2 files changed, 30 insertions(+), 20 deletions(-) diff --git a/adapters/bukkit/plugin/src/test/java/art/arcane/iris/integration/IrisIntegrationServiceTest.java b/adapters/bukkit/plugin/src/test/java/art/arcane/iris/integration/IrisIntegrationServiceTest.java index 4e4600e6e..a0717ce4c 100644 --- a/adapters/bukkit/plugin/src/test/java/art/arcane/iris/integration/IrisIntegrationServiceTest.java +++ b/adapters/bukkit/plugin/src/test/java/art/arcane/iris/integration/IrisIntegrationServiceTest.java @@ -97,26 +97,6 @@ public class IrisIntegrationServiceTest { assertFalse(nether.samples().get(IntegrationMetricSchema.IRIS_PREGEN_REMAINING).available()); } - @Test - public void idleWorldsPublishGenerationTimingsAsUnavailable() { - long now = System.currentTimeMillis(); - EngineTelemetrySnapshot idle = new EngineTelemetrySnapshot( - now, "minecraft:overworld", "world", "dimension", true, false, false, false, - 12L, 3L, 0.25D, 20L, 20L, 0D, 0L, 2, 0, 1L, 4L, 1L, 10D, Map.of()); - IrisIntegrationService service = new IrisIntegrationService( - () -> telemetry(List.of(idle), IrisTelemetrySnapshot.PregenSnapshot.INACTIVE, now) - ); - - IntegrationMetricSample total = service.sampleMetrics(Set.of(IntegrationMetricSchema.IRIS_GENERATION_TOTAL_MS)) - .get(IntegrationMetricSchema.IRIS_GENERATION_TOTAL_MS); - IntegrationMetricSample worldTotal = service.metricGroups().get(0).samples() - .get(IntegrationMetricSchema.IRIS_GENERATION_TOTAL_MS); - - assertFalse(total.available()); - assertEquals("timing-not-available", total.message()); - assertFalse(worldTotal.available()); - } - @Test public void publishesEveryManagedWorldWithoutAWorldCountCap() { long now = System.currentTimeMillis(); diff --git a/core/src/test/java/art/arcane/iris/generation/runtime/EngineTelemetrySnapshotTest.java b/core/src/test/java/art/arcane/iris/generation/runtime/EngineTelemetrySnapshotTest.java index ec1cb4b00..c596c7bce 100644 --- a/core/src/test/java/art/arcane/iris/generation/runtime/EngineTelemetrySnapshotTest.java +++ b/core/src/test/java/art/arcane/iris/generation/runtime/EngineTelemetrySnapshotTest.java @@ -7,6 +7,9 @@ import java.util.List; import java.util.Map; import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.RETURNS_DEEP_STUBS; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; public class EngineTelemetrySnapshotTest { @Test @@ -138,6 +141,33 @@ public class EngineTelemetrySnapshotTest { assertEquals(1, EngineTelemetrySnapshot.aggregate(snapshots).worldCount()); } + @Test + public void captureLeavesOutGenerationTimingsOnceGenerationHasGoneIdle() { + Engine engine = engineWithTimings(Map.of("total", 12D, "terrain", 4D)); + + EngineTelemetrySnapshot snapshot = EngineTelemetrySnapshot.capture(engine, 0D, false, 5_000L); + + assertEquals(Map.of(), snapshot.generationTimingsMs()); + } + + @Test + public void captureCarriesTheEngineTimingAveragesWhileGenerationIsFresh() { + Engine engine = engineWithTimings(Map.of("total", 12D, "terrain", 4D)); + + EngineTelemetrySnapshot snapshot = EngineTelemetrySnapshot.capture(engine, 3D, true, 5_000L); + + assertEquals(Map.of("total", 12D, "terrain", 4D), snapshot.generationTimingsMs()); + assertEquals(3D, snapshot.chunksPerSecond(), 0D); + } + + private static Engine engineWithTimings(Map averages) { + Engine engine = mock(Engine.class, RETURNS_DEEP_STUBS); + when(engine.getWorld().identity()).thenReturn("minecraft:overworld"); + when(engine.getWorld().name()).thenReturn("world"); + when(engine.getMetrics().telemetryAverages()).thenReturn(averages); + return engine; + } + private static EngineTelemetrySnapshot snapshot( String identity, String name,