/** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.activemq.karaf.itest; import static org.junit.Assert.assertEquals; import static org.ops4j.pax.exam.CoreOptions.mavenBundle; import java.io.IOException; import java.net.URI; import java.util.concurrent.Callable; import org.apache.http.client.CredentialsProvider; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.utils.URIBuilder; import org.apache.http.impl.client.BasicCredentialsProvider; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClientBuilder; import org.apache.http.util.EntityUtils; import org.junit.Test; import org.ops4j.pax.exam.Configuration; import org.ops4j.pax.exam.Option; import org.ops4j.pax.exam.options.WrappedUrlProvisionOption; public class ActiveMQBrokerFeatureTest extends AbstractFeatureTest { static final String WEB_CONSOLE_URL = "http://localhost:8181/activemqweb/"; @Configuration public static Option[] configure() { return new Option[] // { configure("connector", "activemq-broker"), // // To access web console //mavenBundle("commons-codec", "commons-codec").versionAsInProject(), mavenBundle("org.apache.httpcomponents", "httpcore-osgi").version("4.4.4"), mavenBundle("org.apache.httpcomponents", "httpclient-osgi").version("4.5.2"), configureBrokerStart() }; } protected String installWrappedBundle(WrappedUrlProvisionOption option) { return executeCommand("bundle:install 'wrap:" + option.getURL() + "'"); } @Test(timeout=5 * 60 * 1000) public void test() throws Throwable { assertBrokerStarted(); JMSTester jms = new JMSTester(); jms.produceAndConsume(sessionFactory); jms.tempSendReceive(); jms.close(); } private void produceMessageWebConsole(String nameAndPayload) throws Exception { CredentialsProvider credsProvider = new BasicCredentialsProvider(); credsProvider.setCredentials( new org.apache.http.auth.AuthScope("httpbin.org", 80), new org.apache.http.auth.UsernamePasswordCredentials(KarafShellHelper.USER, KarafShellHelper.PASSWORD)); CloseableHttpClient client = HttpClientBuilder.create() // .setDefaultCredentialsProvider(credsProvider) .build(); System.err.println(executeCommand("activemq:bstat").trim()); System.err.println("attempting to access web console.."); withinReason(new Callable<Boolean>() { public Boolean call() throws Exception { CloseableHttpResponse response = client.execute(new HttpGet(WEB_CONSOLE_URL + "index.jsp")); return response.getStatusLine().getStatusCode() != 200; } }); System.err.println("attempting publish via web console.."); // need to first get the secret CloseableHttpResponse response = client.execute(new HttpGet(WEB_CONSOLE_URL + "send.jsp")); int code = response.getStatusLine().getStatusCode(); assertEquals("getting send succeeded", 200, code); String secret = getSecret(EntityUtils.toString(response.getEntity())); URI sendUri = new URIBuilder(WEB_CONSOLE_URL + "sendMessage.action") // .addParameter("secret", secret) // .addParameter("JMSText", nameAndPayload) .addParameter("JMSDestination", nameAndPayload) .addParameter("JMSDestinationType", "queue") .build(); HttpPost post = new HttpPost(sendUri); CloseableHttpResponse sendResponse = client.execute(post); assertEquals("post succeeded, " + post, 302, sendResponse.getStatusLine().getStatusCode()); System.err.println(executeCommand("activemq:bstat").trim()); } private String getSecret(String response) throws IOException { final String secretMarker = "<input type=\"hidden\" name=\"secret\" value=\""; String secret = response.substring(response.indexOf(secretMarker) + secretMarker.length()); secret = secret.substring(0, secret.indexOf("\"/>")); return secret; } @Test public void testSendReceiveWeb() throws Throwable { assertBrokerStarted(); JMSTester jms = new JMSTester(); final String nameAndPayload = String.valueOf(System.currentTimeMillis()); produceMessageWebConsole(nameAndPayload); assertEquals("got our message", nameAndPayload, jms.consumeMessage(nameAndPayload)); jms.tempSendReceive(); jms.close(); } }