in src/main/java/org/apache/sling/commons/testing/integration/HttpTestBase.java [287:372]
protected boolean slingServerReady() throws Exception {
// create a node on the server
final String time = String.valueOf(System.currentTimeMillis());
final String url = HTTP_BASE_URL + "/WaitForSlingStartup/" + time;
// add some properties to the node
final Map<String,String> props = new HashMap<String,String>();
props.put("time", time);
// POST, get URL of created node and get content
String urlOfNewNode = null;
try {
urlOfNewNode = testClient.createNode(url, props, null, true);
final GetMethod get = new GetMethod(urlOfNewNode + readinessCheckExtension);
final int status = httpClient.executeMethod(get);
if(status!=200) {
throw new HttpStatusCodeException(200, status, "GET", urlOfNewNode);
}
final Header h = get.getResponseHeader("Content-Type");
final String contentType = h==null ? "" : h.getValue();
if(!contentType.startsWith(readinessCheckContentTypePrefix)) {
throw new IOException("Expected Content-Type=" + readinessCheckContentTypePrefix + " but got '" + contentType + "' for URL=" + urlOfNewNode);
}
final String content = get.getResponseBodyAsString();
if(!content.contains(time)) {
throw new IOException("Content does not contain '" + time + "' (" + content + ") at URL=" + urlOfNewNode);
}
} finally {
if(urlOfNewNode != null) {
try {
testClient.delete(urlOfNewNode);
} catch(Exception ignore) {
}
}
}
// Also check that the WebDAV root is ready
{
// need the trailing slash in case the base URL is the context root
final String webDavUrl = WEBDAV_BASE_URL + "/";
final HttpAnyMethod options = new HttpAnyMethod("OPTIONS",webDavUrl);
final int status = httpClient.executeMethod(options);
if(status!=200) {
throw new HttpStatusCodeException(200, status, "OPTIONS", webDavUrl);
}
// The Allow header tells us that we're talking to a WebDAV server
final Header h = options.getResponseHeader("Allow");
if(h == null) {
throw new IOException("Response does not contain Allow header, at URL=" + webDavUrl);
} else if(h.getValue() == null) {
throw new IOException("Allow header has null value at URL=" + webDavUrl);
} else if(!h.getValue().contains("PROPFIND")) {
throw new IOException("Allow header (" + h.getValue() + " does not contain PROPFIND, at URL=" + webDavUrl);
}
}
// And check optional additional URLs for readyness
// Defined by system properties like
// launchpad.ready.1 = GET:/tmp/someUrl:200:expectedRegexpInResponse
{
for(int i=0; i <= MAX_READY_URL_INDEX ; i++) {
final String propName = READY_URL_PROP_PREFIX + i;
final String readyDef = System.getProperty(propName, "");
final String [] parts = readyDef.split(":");
if(parts.length == 4) {
final String info = propName + "=" + readyDef;
final HttpAnyMethod m = new HttpAnyMethod(parts[0],HTTP_BASE_URL + parts[1]);
final int expectedStatus = Integer.valueOf(parts[2]);
final int status = httpClient.executeMethod(m);
if(expectedStatus != status) {
throw new IOException("Status " + status + " does not match expected value: " + info);
}
final String content = m.getResponseBodyAsString();
final Pattern p = Pattern.compile("(?s).*" + parts[3] + ".*");
if(!p.matcher(content).matches()) {
throw new IOException("Content does not match expected regexp:" + info + ", content=" + content);
}
}
}
}
return true;
}