package org.infinispan.spring.session.util; import java.util.concurrent.TimeUnit; import java.util.function.Supplier; import java.util.stream.Stream; import org.springframework.context.ApplicationEvent; import org.springframework.session.events.AbstractSessionEvent; public class EventsWaiter { public static void assertNumberOfEvents(Supplier<Stream<ApplicationEvent>> eventCollector, Class<? extends AbstractSessionEvent> eventClass, int expectedNumberOfEvents, int timeout, TimeUnit timeoutUnit) { long stopTime = System.currentTimeMillis() + timeoutUnit.toMillis(timeout); long eventsCollected = -1; while (System.currentTimeMillis() < stopTime) { eventsCollected = eventCollector.get() .filter(e -> e.getClass() == eventClass) .count(); if (expectedNumberOfEvents == eventsCollected) { return; } } throw new AssertionError("Expected " + expectedNumberOfEvents + " events of a class " + eventClass.getSimpleName() + " but found " + eventsCollected); } }