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;
     

Reply via email to