2525import java .util .stream .Stream ;
2626
2727import org .junit .jupiter .api .BeforeEach ;
28+ import org .junit .jupiter .api .RepeatedTest ;
2829import org .junit .jupiter .api .Test ;
2930
3031import io .fabric8 .kubernetes .api .model .ObjectMeta ;
@@ -72,6 +73,7 @@ class InformerEventSourceTest {
7273
7374 private static final String PREV_RESOURCE_VERSION = "0" ;
7475 private static final String DEFAULT_RESOURCE_VERSION = "2" ;
76+ public static final int REPEAT_COUNT = 10 ;
7577
7678 private InformerEventSource <Deployment , TestCustomResource > informerEventSource ;
7779 private final KubernetesClient clientMock = MockKubernetesClient .client (Deployment .class );
@@ -214,7 +216,7 @@ void filtersOnDeleteEvents() {
214216 verify (eventHandlerMock , never ()).handleEvent (any ());
215217 }
216218
217- @ Test
219+ @ RepeatedTest ( REPEAT_COUNT )
218220 void handlesPrevResourceVersionForUpdate () {
219221 withRealTemporaryResourceCache ();
220222
@@ -226,7 +228,7 @@ void handlesPrevResourceVersionForUpdate() {
226228 expectHandleAddEvent (2 , 1 );
227229 }
228230
229- @ Test
231+ @ RepeatedTest ( REPEAT_COUNT )
230232 void handlesPrevResourceVersionForUpdateInCaseOfException () {
231233 withRealTemporaryResourceCache ();
232234
@@ -244,7 +246,7 @@ void handlesPrevResourceVersionForUpdateInCaseOfException() {
244246 expectHandleAddEvent (2 , 1 );
245247 }
246248
247- @ Test
249+ @ RepeatedTest ( REPEAT_COUNT )
248250 void handlesPrevResourceVersionForUpdateInCaseOfMultipleUpdates () {
249251 withRealTemporaryResourceCache ();
250252
@@ -259,7 +261,7 @@ void handlesPrevResourceVersionForUpdateInCaseOfMultipleUpdates() {
259261 expectHandleAddEvent (4 , 2 );
260262 }
261263
262- @ Test
264+ @ RepeatedTest ( REPEAT_COUNT )
263265 void doesNotPropagateEventIfReceivedBeforeUpdate () {
264266 withRealTemporaryResourceCache ();
265267
@@ -271,7 +273,7 @@ void doesNotPropagateEventIfReceivedBeforeUpdate() {
271273 assertNoEventProduced ();
272274 }
273275
274- @ Test
276+ @ RepeatedTest ( REPEAT_COUNT )
275277 void filterAddEventBeforeUpdate () {
276278 withRealTemporaryResourceCache ();
277279
@@ -282,7 +284,7 @@ void filterAddEventBeforeUpdate() {
282284 expectHandleAddEvent (2 );
283285 }
284286
285- @ Test
287+ @ RepeatedTest ( REPEAT_COUNT )
286288 void multipleCachingFilteringUpdates () {
287289 withRealTemporaryResourceCache ();
288290 CountDownLatch latch = sendForEventFilteringUpdate (3 );
@@ -299,7 +301,7 @@ void multipleCachingFilteringUpdates() {
299301 assertNoEventProduced ();
300302 }
301303
302- @ Test
304+ @ RepeatedTest ( REPEAT_COUNT )
303305 void multipleCachingFilteringUpdates_variant2 () {
304306 withRealTemporaryResourceCache ();
305307
@@ -317,7 +319,7 @@ void multipleCachingFilteringUpdates_variant2() {
317319 assertNoEventProduced ();
318320 }
319321
320- @ Test
322+ @ RepeatedTest ( REPEAT_COUNT )
321323 void multipleCachingFilteringUpdates_variant3 () {
322324 withRealTemporaryResourceCache ();
323325
@@ -335,7 +337,7 @@ void multipleCachingFilteringUpdates_variant3() {
335337 assertNoEventProduced ();
336338 }
337339
338- @ Test
340+ @ RepeatedTest ( REPEAT_COUNT )
339341 void multipleCachingFilteringUpdates_variant4 () {
340342 withRealTemporaryResourceCache ();
341343
@@ -353,7 +355,7 @@ void multipleCachingFilteringUpdates_variant4() {
353355 assertNoEventProduced ();
354356 }
355357
356- @ Test
358+ @ RepeatedTest ( REPEAT_COUNT )
357359 void ghostCheckRemovesCachedResourceDuringFilteringUpdate () {
358360 var mes = mock (ManagedInformerEventSource .class );
359361 var mim = mock (InformerManager .class );
@@ -383,7 +385,7 @@ void ghostCheckRemovesCachedResourceDuringFilteringUpdate() {
383385 assertThat (temporaryResourceCache .getResourceFromCache (resourceId )).isEmpty ();
384386 }
385387
386- @ Test
388+ @ RepeatedTest ( REPEAT_COUNT )
387389 void ghostCheckRunsConcurrentlyWithPutResource () {
388390 var mes = mock (ManagedInformerEventSource .class );
389391 var mim = mock (InformerManager .class );
@@ -414,7 +416,7 @@ void ghostCheckRunsConcurrentlyWithPutResource() {
414416 .isPresent ();
415417 }
416418
417- @ Test
419+ @ RepeatedTest ( REPEAT_COUNT )
418420 void filteringUpdateAndGhostCheckWithNamespaceChange () {
419421 var mes = mock (ManagedInformerEventSource .class );
420422 var mim = mock (InformerManager .class );
@@ -448,7 +450,7 @@ void filteringUpdateAndGhostCheckWithNamespaceChange() {
448450 assertThat (temporaryResourceCache .getResourceFromCache (resourceId )).isEmpty ();
449451 }
450452
451- @ Test
453+ @ RepeatedTest ( REPEAT_COUNT )
452454 void propagatesIntermediateEventForExternalUpdateDuringFiltering () {
453455 // Causal-dependency fix: another controller updated the resource between our read
454456 // and our write. The informer delivers that update during our active filter; since
@@ -474,7 +476,7 @@ void propagatesIntermediateEventForExternalUpdateDuringFiltering() {
474476 expectHandleAddEvent (3 , 2 );
475477 }
476478
477- @ Test
479+ @ RepeatedTest ( REPEAT_COUNT )
478480 void doesNotPropagateIntermediateEventForOurOwnIntermediateUpdate () {
479481 // Two consecutive own writes (rv 3 then rv 4) within an open filter window: an
480482 // event for the older own version must be deferred since it's recognized as our own.
0 commit comments