From 01859044a3f55033ed902db19eb3ccc3e3ea5017 Mon Sep 17 00:00:00 2001 From: csviri Date: Thu, 17 Mar 2022 09:21:35 +0100 Subject: [PATCH] fix: flaky test --- .../operator/processing/event/EventProcessor.java | 4 ++++ .../processing/event/EventProcessorTest.java | 12 ++++++++++++ 2 files changed, 16 insertions(+) diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventProcessor.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventProcessor.java index 4e7ffa4660..96d6a28fb2 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventProcessor.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventProcessor.java @@ -364,4 +364,8 @@ public String toString() { return controllerName + " -> " + executionScope; } } + + public synchronized boolean isUnderProcessing(ResourceID resourceID) { + return underProcessing.contains(resourceID); + } } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/EventProcessorTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/EventProcessorTest.java index 0e968e13a7..0a124ea21d 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/EventProcessorTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/EventProcessorTest.java @@ -1,5 +1,6 @@ package io.javaoperatorsdk.operator.processing.event; +import java.time.Duration; import java.util.List; import java.util.Optional; import java.util.UUID; @@ -24,6 +25,7 @@ import static io.javaoperatorsdk.operator.TestUtils.testCustomResource; import static org.assertj.core.api.Assertions.assertThat; +import static org.awaitility.Awaitility.await; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.ArgumentMatchers.isNull; import static org.mockito.Mockito.*; @@ -152,16 +154,20 @@ void successfulExecutionResetsTheRetry() { eventProcessorWithRetry.handleEvent(event); verify(reconciliationDispatcherMock, timeout(SEPARATE_EXECUTION_TIMEOUT).times(1)) .handleExecution(any()); + waitUntilProcessingFinished(eventProcessorWithRetry, event.getRelatedCustomResourceID()); eventProcessorWithRetry.handleEvent(event); verify(reconciliationDispatcherMock, timeout(SEPARATE_EXECUTION_TIMEOUT).times(2)) .handleExecution(any()); + waitUntilProcessingFinished(eventProcessorWithRetry, event.getRelatedCustomResourceID()); eventProcessorWithRetry.handleEvent(event); verify(reconciliationDispatcherMock, timeout(SEPARATE_EXECUTION_TIMEOUT).times(3)) .handleExecution(executionScopeArgumentCaptor.capture()); + waitUntilProcessingFinished(eventProcessorWithRetry, event.getRelatedCustomResourceID()); log.info("Finished successfulExecutionResetsTheRetry"); + List executionScopes = executionScopeArgumentCaptor.getAllValues(); assertThat(executionScopes).hasSize(3); @@ -171,6 +177,12 @@ void successfulExecutionResetsTheRetry() { assertThat(executionScopes.get(1).getRetryInfo().isLastAttempt()).isEqualTo(false); } + private void waitUntilProcessingFinished(EventProcessor eventProcessor, + ResourceID relatedCustomResourceID) { + await().atMost(Duration.ofSeconds(3)) + .until(() -> !eventProcessor.isUnderProcessing(relatedCustomResourceID)); + } + @Test void scheduleTimedEventIfInstructedByPostExecutionControl() { var testDelay = 10000L;