epic-12: after epic audit and init commit

This commit is contained in:
2026-05-16 11:42:00 +04:00
commit c77277af0b
461 changed files with 28958 additions and 0 deletions
@@ -0,0 +1,161 @@
import com.correx.core.events.types.InferenceRequestId
import com.correx.core.events.types.ProviderId
import com.correx.core.events.types.SessionId
import com.correx.core.events.types.StageId
import com.correx.core.inference.FinishReason
import com.correx.core.inference.ProviderHealth
import com.correx.core.inference.TokenUsage
import com.correx.core.kernel.replay.ReplayInferenceProvider
import com.correx.core.kernel.retry.exception.ReplayArtifactMissingException
import com.correx.infrastructure.persistence.InMemoryEventStore
import com.correx.testing.fixtures.InferenceFixtures
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.test.runTest
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertThrows
class ReplayInferenceProviderTest {
private lateinit var eventStore: InMemoryEventStore
private lateinit var replayProvider: ReplayInferenceProvider
@BeforeEach
fun setup() {
eventStore = InMemoryEventStore()
replayProvider = ReplayInferenceProvider(eventStore)
}
@Test
fun `response carries correct tokensUsed and latencyMs when matching stageId`() = runTest {
val sessionId = SessionId("s1")
val stageId = StageId("stage1")
val requestId = InferenceRequestId("req1")
val providerId = ProviderId("test-provider")
val tokensUsed = TokenUsage(promptTokens = 100, completionTokens = 200)
val latencyMs = 500L
// Record an inference completed event
eventStore.append(
InferenceFixtures.newInferenceCompletedEvent(
requestId = requestId,
sessionId = sessionId,
stageId = stageId,
providerId = providerId,
tokensUsed = tokensUsed,
latencyMs = latencyMs,
),
)
val request = InferenceFixtures.inferenceRequest(
sessionId = sessionId,
stageId = stageId,
requestId = requestId,
)
val response = replayProvider.infer(request)
Assertions.assertEquals(request.requestId, response.requestId)
Assertions.assertEquals(tokensUsed, response.tokensUsed)
Assertions.assertEquals(latencyMs, response.latencyMs)
Assertions.assertEquals("", response.text)
Assertions.assertEquals(FinishReason.Stop, response.finishReason)
}
@Test
fun `ReplayArtifactMissingException thrown when event for different stageId`(): Unit = runBlocking {
val sessionId = SessionId("s1")
val stageId1 = StageId("stage1")
val stageId2 = StageId("stage2")
val requestId = InferenceRequestId("req1")
val providerId = ProviderId("test-provider")
// Record event for stage1
eventStore.append(
InferenceFixtures.newInferenceCompletedEvent(
requestId = requestId,
sessionId = sessionId,
stageId = stageId1,
providerId = providerId,
tokensUsed = TokenUsage(promptTokens = 100, completionTokens = 200),
latencyMs = 500L,
),
)
val request = InferenceFixtures.inferenceRequest(
sessionId = sessionId,
stageId = stageId2, // Different stage
requestId = requestId,
)
assertThrows<ReplayArtifactMissingException> {
replayProvider.infer(request)
}
}
@Test
fun `ReplayArtifactMissingException thrown when event store is empty`(): Unit = runBlocking {
val sessionId = SessionId("s1")
val stageId = StageId("stage1")
val requestId = InferenceRequestId("req1")
val request = InferenceFixtures.inferenceRequest(
sessionId = sessionId,
stageId = stageId,
requestId = requestId,
)
assertThrows<ReplayArtifactMissingException> {
replayProvider.infer(request)
}
}
@Test
fun `text is empty string by design`() = runTest {
val sessionId = SessionId("s1")
val stageId = StageId("stage1")
val requestId = InferenceRequestId("req1")
val providerId = ProviderId("test-provider")
eventStore.append(
InferenceFixtures.newInferenceCompletedEvent(
requestId = requestId,
sessionId = sessionId,
stageId = stageId,
providerId = providerId,
tokensUsed = TokenUsage(promptTokens = 100, completionTokens = 50),
latencyMs = 300L,
),
)
val request = InferenceFixtures.inferenceRequest(
sessionId = sessionId,
stageId = stageId,
requestId = requestId,
)
val response = replayProvider.infer(request)
Assertions.assertEquals("", response.text)
}
@Test
fun `capabilities returns empty set`() {
val capabilities = replayProvider.capabilities()
Assertions.assertTrue(capabilities.isEmpty())
}
@Test
fun `healthCheck returns Healthy`() = runTest {
val health = replayProvider.healthCheck()
Assertions.assertEquals(ProviderHealth.Healthy, health)
}
@Test
fun `id is ReplayProvider`() {
Assertions.assertEquals(ProviderId("replay-provider"), replayProvider.id)
}
}