package org.apache.sling.crankstart.launcher; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import java.io.IOException; import org.apache.commons.io.IOUtils; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.auth.AuthScope; import org.apache.http.auth.UsernamePasswordCredentials; import org.apache.http.client.ClientProtocolException; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.util.EntityUtils; import org.apache.sling.commons.json.JSONException; import org.apache.sling.commons.json.JSONObject; import org.apache.sling.crankstart.junit.CrankstartSetup; import org.apache.sling.testing.tools.http.RequestBuilder; import org.apache.sling.testing.tools.http.RequestExecutor; /** General testing utilities and constants */ public class U { public static final String ADMIN = "admin"; public static final int LONG_TIMEOUT_SECONDS = 10; public static final int LONG_TIMEOUT_MSEC = LONG_TIMEOUT_SECONDS * 1000; public static final int STD_INTERVAL = 250; public static final String SLING_API_BUNDLE = "org.apache.sling.api"; static final String [] DEFAULT_MODELS = { "/crankstart-model.txt", "/provisioning-model/base.txt", "/provisioning-model/sling-extensions.txt", "/provisioning-model/start-level-99.txt", "/provisioning-model/crankstart-tests.txt" }; static void setAdminCredentials(DefaultHttpClient c) { c.getCredentialsProvider().setCredentials( AuthScope.ANY, new UsernamePasswordCredentials(ADMIN, ADMIN)); c.addRequestInterceptor(new PreemptiveAuthInterceptor(), 0); } static void closeConnection(HttpResponse r) throws IOException { if(r != null && r.getEntity() != null) { EntityUtils.consume(r.getEntity()); } } /** Get JSON bundle data from webconsole */ static JSONObject getBundleData(CrankstartSetup C, DefaultHttpClient client, String symbolicName) throws ClientProtocolException, IOException, JSONException { final RequestBuilder b = new RequestBuilder(C.getBaseUrl()); final RequestExecutor e = new RequestExecutor(client); return new JSONObject(e.execute( b.buildGetRequest("/system/console/bundles/" + symbolicName + ".json") .withCredentials(U.ADMIN, U.ADMIN) ).assertStatus(200) .getContent()); } public static String getContent(HttpResponse response) throws IOException{ final HttpEntity e = response.getEntity(); if(e == null) { throw new IOException("Response does not provide an Entity"); } String encoding = "UTF-8"; if(response.getEntity().getContentEncoding() != null) { encoding = response.getEntity().getContentEncoding().getValue(); } try { return IOUtils.toString(e.getContent(), encoding); } finally { e.consumeContent(); } } public static void assertHttpGet(CrankstartSetup C, DefaultHttpClient client, String path, String expectedContent) throws Exception { final HttpUriRequest get = new HttpGet(C.getBaseUrl() + path); HttpResponse response = null; try { response = client.execute(get); assertEquals("Expecting 200 response at " + path, 200, response.getStatusLine().getStatusCode()); assertNotNull("Expecting response entity", response.getEntity()); final String content = getContent(response); assertEquals(expectedContent, content); } finally { U.closeConnection(response); } } }