This is an automated email from the ASF dual-hosted git repository. cschneider pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-distribution-journal.git
commit 6b5242157ae0774651905de98fa7b3d46f991dab Author: Christian Schneider <[email protected]> AuthorDate: Wed Jan 29 14:40:59 2020 +0100 SLING-9037 - Add failing test for systemready check --- .../impl/subscriber/DistributionSubscriber.java | 8 +++--- .../journal/impl/subscriber/SubscriberIdle.java | 4 +++ .../journal/impl/subscriber/SubscriberTest.java | 29 ++++++++++++++-------- 3 files changed, 27 insertions(+), 14 deletions(-) diff --git a/src/main/java/org/apache/sling/distribution/journal/impl/subscriber/DistributionSubscriber.java b/src/main/java/org/apache/sling/distribution/journal/impl/subscriber/DistributionSubscriber.java index 14dd87d..44b33fd 100644 --- a/src/main/java/org/apache/sling/distribution/journal/impl/subscriber/DistributionSubscriber.java +++ b/src/main/java/org/apache/sling/distribution/journal/impl/subscriber/DistributionSubscriber.java @@ -136,7 +136,7 @@ public class DistributionSubscriber implements DistributionAgent { @Reference private Packaging packaging; - private SubscriberIdle subscriberIdle; + SubscriberIdle subscriberIdle; private ServiceRegistration<DistributionAgent> componentReg; @@ -175,8 +175,10 @@ public class DistributionSubscriber implements DistributionAgent { requireNonNull(topics); requireNonNull(eventAdmin); requireNonNull(precondition); - - subscriberIdle = new SubscriberIdle(context, SubscriberIdle.DEFAULT_IDLE_TIME_MILLIS); + + // Unofficial config (currently just for test) + Integer idleMillies = (Integer) properties.getOrDefault("idleMillies", SubscriberIdle.DEFAULT_IDLE_TIME_MILLIS); + subscriberIdle = new SubscriberIdle(context, idleMillies); queueNames = getNotEmpty(config.agentNames()); int maxRetries = config.maxRetries(); diff --git a/src/main/java/org/apache/sling/distribution/journal/impl/subscriber/SubscriberIdle.java b/src/main/java/org/apache/sling/distribution/journal/impl/subscriber/SubscriberIdle.java index 250ffda..a05b80c 100644 --- a/src/main/java/org/apache/sling/distribution/journal/impl/subscriber/SubscriberIdle.java +++ b/src/main/java/org/apache/sling/distribution/journal/impl/subscriber/SubscriberIdle.java @@ -71,6 +71,10 @@ public class SubscriberIdle implements SystemReadyCheck, Closeable { public synchronized void busy() { cancelSchedule(); } + + public boolean isReady() { + return isReady.get(); + } /** * Called when processing of a message has finished diff --git a/src/test/java/org/apache/sling/distribution/journal/impl/subscriber/SubscriberTest.java b/src/test/java/org/apache/sling/distribution/journal/impl/subscriber/SubscriberTest.java index d46e5f1..dc8263a 100644 --- a/src/test/java/org/apache/sling/distribution/journal/impl/subscriber/SubscriberTest.java +++ b/src/test/java/org/apache/sling/distribution/journal/impl/subscriber/SubscriberTest.java @@ -45,6 +45,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.concurrent.Semaphore; +import java.util.concurrent.TimeUnit; import org.apache.sling.distribution.journal.impl.shared.DistributionMetricsService; import org.apache.sling.distribution.journal.impl.shared.TestMessageInfo; @@ -172,10 +173,6 @@ public class SubscriberTest { @Mock private DistributionMetricsService distributionMetricsService; - - @Mock - private SubscriberIdle subscriberIdle; - @InjectMocks DistributionSubscriber subscriber; @@ -343,9 +340,17 @@ public class SubscriberTest { } @Test - public void testIdleWhenWatingForGM() { - assumeWaitingForGM(); + public void testReadyWhenWatingForPrecondition() { + Semaphore sem = new Semaphore(0); + assumeWaitingForPrecondition(sem); initSubscriber(); + MessageInfo info = new TestMessageInfo("", 1, 0, 0); + PackageMessage message = BASIC_ADD_PACKAGE; + + packageHandler.handle(info, message); + waitSubscriber(RUNNING); + await("Should report ready").until(subscriber.subscriberIdle::isReady); + sem.release(); } private void initSubscriber() { @@ -353,9 +358,10 @@ public class SubscriberTest { } private void initSubscriber(Map<String, String> overrides) { - Map<String, String> basicProps = ImmutableMap.of( + Map<String, Object> basicProps = ImmutableMap.of( "name", SUB1_AGENT_NAME, - "agentNames", PUB1_AGENT_NAME); + "agentNames", PUB1_AGENT_NAME, + "idleMillies", 1000); Map<String, Object> props = new HashMap<>(); props.putAll(basicProps); props.putAll(overrides); @@ -400,10 +406,11 @@ public class SubscriberTest { when(precondition.canProcess(anyLong(), anyInt())).thenReturn(true); } - private void assumeWaitingForGM() { - when(precondition.canProcess(anyLong(), anyInt())).thenReturn(false); + private void assumeWaitingForPrecondition(Semaphore sem) { + when(precondition.canProcess(anyLong(), anyInt())) + .thenAnswer(invocation -> sem.tryAcquire(10000, TimeUnit.SECONDS)); } - + private final class WaitFor implements Answer<DistributionPackageInfo> { private final Semaphore sem;
