fix(test): WebhookE2ETest — cleanup leftover state в @BeforeEach
CI fail: ConditionTimeout 60s в recordCreate_dispatchedToWebhookReceiver. Logs показали 'Webhook sendTick: 2 due deliveries' через 1с после boot — dispatcher грузился leftover'ами из предыдущего CI run (Postgres testcontainer с withReuse=true сохраняет данные между запусками). Старые subscriptions с dead URLs ели 5s timeout каждая × N циклов до того как наш новый event дойдёт до receiver. Локально работало потому что DB была свежая. Фикс: - В @BeforeEach: deliveryRepo.deleteAllInBatch() + subRepo.deleteAllInBatch() - Order важен: deliveries first (FK на subscriptions) Локально 2/2 passed за 10.8s. Race-warnings StaleObjectStateException в логах — dispatcher держит entity в Hibernate session и пытается save после нашего deleteAll'а; assertion'ы это не задевает.
This commit is contained in:
@@ -90,6 +90,14 @@ class WebhookE2ETest {
|
|||||||
|
|
||||||
@BeforeEach
|
@BeforeEach
|
||||||
void startReceiver() throws IOException {
|
void startReceiver() throws IOException {
|
||||||
|
// Cleanup leftover state из предыдущего CI run.
|
||||||
|
// Postgres testcontainer withReuse(true) сохраняет данные между
|
||||||
|
// запусками — старые subscriptions с dead URLs дают `findDue()`
|
||||||
|
// нагрузку (5s timeout × N = слишком долго до нашего нового event'а).
|
||||||
|
// Очищаем deliveries сначала (FK на subscriptions), потом subscriptions.
|
||||||
|
deliveryRepo.deleteAllInBatch();
|
||||||
|
subRepo.deleteAllInBatch();
|
||||||
|
|
||||||
receiver = HttpServer.create(new InetSocketAddress("127.0.0.1", 0), 0);
|
receiver = HttpServer.create(new InetSocketAddress("127.0.0.1", 0), 0);
|
||||||
receiver.createContext("/hook", exchange -> {
|
receiver.createContext("/hook", exchange -> {
|
||||||
byte[] body = exchange.getRequestBody().readAllBytes();
|
byte[] body = exchange.getRequestBody().readAllBytes();
|
||||||
|
|||||||
Reference in New Issue
Block a user