in src/main/java/org/apache/sling/commons/testing/integration/HttpTestBase.java [212:284]
protected void waitForSlingStartup() throws Exception {
// Use a static flag to make sure this runs only once in our test suite
// we must synchronize on this if we don't 2 threads could enter the check concurrently
// which would leave to random results.
synchronized(startupCheckLock) {
if (slingStartupOk != null) {
if(slingStartupOk) {
return;
}
fail("Sling services not available. Already checked in earlier tests.");
}
if ( System.getProperty(PROPERTY_SKIP_STARTUP_CHECK) != null ) {
slingStartupOk = true;
return;
}
slingStartupOk = false;
}
System.err.println("Checking if the required Sling services are started (timeout " + READY_TIMEOUT_SECONDS + " seconds)...");
System.err.println(
"(base URLs=" + HTTP_BASE_URL + " and " + WEBDAV_BASE_URL
+ "; servlet context="+ SERVLET_CONTEXT
+ "; readiness type=" + readinessCheckExtension + " : " + readinessCheckContentTypePrefix
);
// Try creating a node on server, every 500msec, until ok, with timeout
final List<String> exceptionMessages = new LinkedList<String>();
final long maxMsecToWait = READY_TIMEOUT_SECONDS * 1000L;
final long startupTime = System.currentTimeMillis();
String lastException = "";
int nTimesOk = 0;
// Wait until slingServerReady returns true this many times,
// as in some cases more initializations might take place after
// this returns true
final int MIN_TIMES_OK = 4;
while(!slingStartupOk && (System.currentTimeMillis() < startupTime + maxMsecToWait) ) {
try {
if(slingServerReady()) {
nTimesOk++;
if(nTimesOk >= MIN_TIMES_OK) {
slingStartupOk = true;
break;
}
} else {
nTimesOk = 0;
}
} catch(Exception e) {
nTimesOk = 0;
final String newX = e.toString();
if(!lastException.equals(newX)) {
exceptionMessages.add(newX);
}
lastException = newX;
}
Thread.sleep(500L);
}
if(slingStartupOk) {
log.info("Sling server found ready after {} msec", System.currentTimeMillis() - startupTime);
} else {
StringBuffer msg = new StringBuffer("Server does not seem to be ready, after ");
msg.append(maxMsecToWait).append(" msec, got the following ").append(exceptionMessages.size()).append(" Exceptions:");
for (String e: exceptionMessages) {
msg.append(e).append("\n");
}
System.err.println(msg);
fail(msg.toString());
}
System.err.println("Sling services seem to be started, continuing with integration tests.");
}