diff --git a/ordinis-app/src/test/java/cloud/nstart/terravault/ordinis/app/e2e/WebhookE2ETest.java b/ordinis-app/src/test/java/cloud/nstart/terravault/ordinis/app/e2e/WebhookE2ETest.java index 83c9ad5..a13563e 100644 --- a/ordinis-app/src/test/java/cloud/nstart/terravault/ordinis/app/e2e/WebhookE2ETest.java +++ b/ordinis-app/src/test/java/cloud/nstart/terravault/ordinis/app/e2e/WebhookE2ETest.java @@ -60,6 +60,13 @@ import static org.springframework.test.web.servlet.result.MockMvcResultMatchers. "ordinis.webhook.match-interval-ms=200", "ordinis.webhook.send-interval-ms=200", "ordinis.webhook.allowed-hosts=localhost,127.0.0.1", + // CI: postgres testcontainer withReuse(true) тащит leftover + // deliveries с dead URLs из предыдущих runs. Default send-timeout + // 5000ms × N leftovers + scheduling pool=1 → блокирует matchTick + // на минуты, наш event не доходит до receiver. Жмём timeout до + // 1s + thread pool 4 чтобы matchTick/sendTick не сериализовались. + "ordinis.webhook.send-timeout-ms=1000", + "spring.task.scheduling.pool.size=4", // Spring auto-config Kafka не нужно — нет KafkaTemplate потребителей // без OutboxPoller. Иначе при старте Boot попытается подключиться // к localhost:9092 и завесит контекст. @@ -93,10 +100,14 @@ class WebhookE2ETest { // Cleanup leftover state из предыдущего CI run. // Postgres testcontainer withReuse(true) сохраняет данные между // запусками — старые subscriptions с dead URLs дают `findDue()` - // нагрузку (5s timeout × N = слишком долго до нашего нового event'а). - // Очищаем deliveries сначала (FK на subscriptions), потом subscriptions. + // нагрузку (timeout × N = слишком долго до нашего нового event'а). + // Также очищаем outbox_events чтобы matchTick не порождал deliveries + // на старые события (которые соответствуют scope=PUBLIC subscription'у + // нашего теста). + // Order: deliveries (FK), subscriptions, outbox events. deliveryRepo.deleteAllInBatch(); subRepo.deleteAllInBatch(); + outboxRepo.deleteAllInBatch(); receiver = HttpServer.create(new InetSocketAddress("127.0.0.1", 0), 0); receiver.createContext("/hook", exchange -> {