This is an automated email from the ASF dual-hosted git repository.

enorman pushed a commit to branch master
in repository 
https://gitbox.apache.org/repos/asf/sling-org-apache-sling-jcr-contentloader.git


The following commit(s) were added to refs/heads/master by this push:
     new 892c1af  Attempt to stabilize intermittent test failures that happen 
due to the bundle content loading not being complete before the assertions 
happen.
892c1af is described below

commit 892c1af042297a322a6139e871951b8f54f77711
Author: Eric Norman <[email protected]>
AuthorDate: Mon Dec 17 12:56:21 2018 -0800

    Attempt to stabilize intermittent test failures that happen due to the
    bundle content loading not being complete before the assertions happen.
---
 .../contentloader/it/ContentloaderTestSupport.java | 40 +++++++++++++++++-----
 1 file changed, 32 insertions(+), 8 deletions(-)

diff --git 
a/src/test/java/org/apache/sling/jcr/contentloader/it/ContentloaderTestSupport.java
 
b/src/test/java/org/apache/sling/jcr/contentloader/it/ContentloaderTestSupport.java
index 5bc7617..e5e5bca 100644
--- 
a/src/test/java/org/apache/sling/jcr/contentloader/it/ContentloaderTestSupport.java
+++ 
b/src/test/java/org/apache/sling/jcr/contentloader/it/ContentloaderTestSupport.java
@@ -18,11 +18,21 @@
  */
 package org.apache.sling.jcr.contentloader.it;
 
+import static 
org.apache.sling.testing.paxexam.SlingOptions.slingQuickstartOakTar;
+import static 
org.apache.sling.testing.paxexam.SlingOptions.slingResourcePresence;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.fail;
+import static org.ops4j.pax.exam.CoreOptions.junitBundles;
+import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
+import static org.ops4j.pax.exam.cm.ConfigurationAdminOptions.newConfiguration;
+
 import java.io.IOException;
 import java.io.InputStream;
 import java.util.Arrays;
 import java.util.Objects;
 import java.util.UUID;
+import java.util.concurrent.TimeUnit;
 
 import javax.inject.Inject;
 import javax.jcr.Session;
@@ -44,14 +54,6 @@ import org.osgi.framework.Constants;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import static 
org.apache.sling.testing.paxexam.SlingOptions.slingQuickstartOakTar;
-import static 
org.apache.sling.testing.paxexam.SlingOptions.slingResourcePresence;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.ops4j.pax.exam.CoreOptions.junitBundles;
-import static org.ops4j.pax.exam.CoreOptions.mavenBundle;
-import static org.ops4j.pax.exam.cm.ConfigurationAdminOptions.newConfiguration;
-
 public abstract class ContentloaderTestSupport extends TestSupport {
 
     @Inject
@@ -88,6 +90,28 @@ public abstract class ContentloaderTestSupport extends 
TestSupport {
             final Bundle bundle = 
bundleContext.installBundle(bundleSymbolicName, is);
             bundle.start();
         }
+        
+               // stabilize the downstream assertions by waiting a moment for 
the background content loading 
+        // to be processed.  Retry the checking a few times (if necessary) 
since the timing is tricky.
+        String contentLoadedPath = 
String.format("/var/sling/bundle-content/%s", bundleSymbolicName);
+        long timeoutSeconds = 30;
+        long timeout = System.currentTimeMillis() + 
TimeUnit.SECONDS.toMillis(timeoutSeconds);
+        boolean retry = true;
+        do {
+               if (session.itemExists(contentLoadedPath)) {
+                       //stop looping
+                       retry = false;
+               } else {
+                       if (System.currentTimeMillis() > timeout) {
+                               fail("RetryLoop failed, condition is false 
after " + timeoutSeconds + " seconds: " 
+                                       + "A content loaded node expected at " 
+ contentLoadedPath);
+                       } else {
+                    logger.warn("Bundle content not loaded yet, retrying after 
a short delay, path={}", contentLoadedPath);
+                    Thread.sleep(200);
+                    session.refresh(false);
+                       }                       
+               }
+        } while (retry);        
     }
 
     @After

Reply via email to