Skip to content

Commit 6cf4da0

Browse files
authored
Improvements on Test Flakyness (#572)
1 parent 6027f91 commit 6cf4da0

File tree

4 files changed

+17
-13
lines changed

4 files changed

+17
-13
lines changed

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/retry/GenericRetryExecution.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ public class GenericRetryExecution implements RetryExecution {
66

77
private final GenericRetry genericRetry;
88

9-
private int lastAttemptIndex = 0;
10-
private long currentInterval;
9+
private volatile int lastAttemptIndex = 0;
10+
private volatile long currentInterval;
1111

1212
public GenericRetryExecution(GenericRetry genericRetry) {
1313
this.genericRetry = genericRetry;

operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/DefaultEventHandlerTest.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -152,14 +152,14 @@ public void executesTheControllerInstantlyAfterErrorIfEventsBuffered() {
152152
PostExecutionControl postExecutionControl =
153153
PostExecutionControl.exceptionDuringExecution(new RuntimeException("test"));
154154

155+
when(eventDispatcherMock.handleExecution(any()))
156+
.thenReturn(postExecutionControl)
157+
.thenReturn(PostExecutionControl.defaultDispatch());
158+
155159
// start processing an event
156160
defaultEventHandlerWithRetry.handleEvent(event);
157-
// buffer an another event
161+
// buffer another event
158162
defaultEventHandlerWithRetry.handleEvent(event);
159-
verify(eventDispatcherMock, timeout(SEPARATE_EXECUTION_TIMEOUT).times(1))
160-
.handleExecution(any());
161-
162-
defaultEventHandlerWithRetry.eventProcessingFinished(executionScope, postExecutionControl);
163163

164164
ArgumentCaptor<ExecutionScope> executionScopeArgumentCaptor =
165165
ArgumentCaptor.forClass(ExecutionScope.class);
@@ -191,15 +191,14 @@ public void successfulExecutionResetsTheRetry() {
191191
ArgumentCaptor.forClass(ExecutionScope.class);
192192

193193
defaultEventHandlerWithRetry.handleEvent(event);
194-
195194
verify(eventDispatcherMock, timeout(SEPARATE_EXECUTION_TIMEOUT).times(1))
196195
.handleExecution(any());
197-
defaultEventHandlerWithRetry.handleEvent(event);
198196

197+
defaultEventHandlerWithRetry.handleEvent(event);
199198
verify(eventDispatcherMock, timeout(SEPARATE_EXECUTION_TIMEOUT).times(2))
200199
.handleExecution(any());
201-
defaultEventHandlerWithRetry.handleEvent(event);
202200

201+
defaultEventHandlerWithRetry.handleEvent(event);
203202
verify(eventDispatcherMock, timeout(SEPARATE_EXECUTION_TIMEOUT).times(3))
204203
.handleExecution(executionScopeArgumentCaptor.capture());
205204
log.info("Finished successfulExecutionResetsTheRetry");

operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/OperatorExtension.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -135,6 +135,11 @@ public <T extends HasMetadata> T replace(Class<T> type, T resource) {
135135
return kubernetesClient.resources(type).inNamespace(namespace).replace(resource);
136136
}
137137

138+
public <T extends HasMetadata> T get(Class<T> type, String name) {
139+
return kubernetesClient.resources(type).inNamespace(namespace).withName(name).get();
140+
}
141+
142+
138143
@SuppressWarnings("unchecked")
139144
protected void before(ExtensionContext context) {
140145
namespace = context.getRequiredTestClass().getSimpleName();

operator-framework/src/test/java/io/javaoperatorsdk/operator/SubResourceUpdateIT.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@
1212
import io.javaoperatorsdk.operator.sample.subresource.SubResourceTestCustomResource;
1313
import io.javaoperatorsdk.operator.sample.subresource.SubResourceTestCustomResourceController;
1414
import io.javaoperatorsdk.operator.sample.subresource.SubResourceTestCustomResourceSpec;
15-
import io.javaoperatorsdk.operator.sample.subresource.SubResourceTestCustomResourceStatus;
1615
import io.javaoperatorsdk.operator.support.TestUtils;
1716

17+
import static io.javaoperatorsdk.operator.sample.subresource.SubResourceTestCustomResourceStatus.State.SUCCESS;
1818
import static org.assertj.core.api.Assertions.assertThat;
1919
import static org.awaitility.Awaitility.await;
2020

@@ -87,7 +87,7 @@ public void updateCustomResourceAfterSubResourceChange() {
8787
awaitStatusUpdated(resource.getMetadata().getName());
8888

8989
// wait for sure, there are no more events
90-
waitXms(200);
90+
waitXms(500);
9191
// there is no event on status update processed
9292
assertThat(TestUtils.getNumberOfExecutions(operator))
9393
.isEqualTo(3);
@@ -104,7 +104,7 @@ void awaitStatusUpdated(String name) {
104104
assertThat(cr).isNotNull();
105105
assertThat(cr.getStatus()).isNotNull();
106106
assertThat(cr.getStatus().getState())
107-
.isEqualTo(SubResourceTestCustomResourceStatus.State.SUCCESS);
107+
.isEqualTo(SUCCESS);
108108
});
109109
}
110110

0 commit comments

Comments
 (0)