/** * 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.web; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.io.ByteArrayInputStream; import java.util.concurrent.CountDownLatch; import java.util.concurrent.atomic.AtomicInteger; import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.client.api.Request; import org.eclipse.jetty.client.api.Result; import org.eclipse.jetty.client.util.BufferingResponseListener; import org.eclipse.jetty.client.util.InputStreamContentProvider; import org.eclipse.jetty.http.HttpMethod; import org.eclipse.jetty.http.HttpStatus; import org.junit.Ignore; import org.junit.Test; public class RestPersistentTest extends JettyTestSupport { @Override protected boolean isPersistent() { // need persistent for post/get return true; } @Test(timeout = 60 * 1000) public void testPostAndGetWithQueue() throws Exception { postAndGet("queue"); } @Test(timeout = 60 * 1000) @Ignore("Needs a JIRA") public void testPostAndGetWithTopic() throws Exception { // TODO: problems with topics // postAndGet("topic"); } public void postAndGet(String destinationType) throws Exception { int port = getPort(); final String urlGET="http://localhost:" + port + "/message/upcTest?clientId=consumer1&readTimeout=5000&type="+destinationType; final String urlPOST="http://localhost:" + port + "/message/upcTest?type="+destinationType; final String message1="<itemPolicy><upc>1001</upc></itemPolicy>"; final String property1="terminalNumber=lane1"; final String selector1="terminalNumber='lane1'"; HttpClient httpClient = new HttpClient(); httpClient.start(); //post first message // TODO: a problem with GET before POST // getMessage(httpClient, urlGET, selector1, null); //should NOT receive message1 postMessage(httpClient, urlPOST, property1, message1); getMessage(httpClient, urlGET, selector1, message1); //should receive message1 } private void postMessage(HttpClient httpClient, String url, String properties, String message) throws Exception { final CountDownLatch latch = new CountDownLatch(1); final StringBuffer buf = new StringBuffer(); final AtomicInteger status = new AtomicInteger(); httpClient.newRequest(url+"&"+properties) .header("Content-Type","text/xml") .content(new InputStreamContentProvider(new ByteArrayInputStream(message.getBytes("UTF-8")))) .method(HttpMethod.POST).send(new BufferingResponseListener() { @Override public void onComplete(Result result) { status.getAndSet(result.getResponse().getStatus()); buf.append(getContentAsString()); latch.countDown(); } }); latch.await(); assertTrue("success status", HttpStatus.isSuccess(status.get())); } private void getMessage(HttpClient httpClient, String url, String selector, String expectedMessage) throws Exception { final CountDownLatch latch = new CountDownLatch(1); final StringBuffer buf = new StringBuffer(); final AtomicInteger status = new AtomicInteger(); Request request = httpClient.newRequest(url) .header("accept", "text/xml") .header("Content-Type","text/xml"); if(selector!=null) { request.header("selector", selector); } request.method(HttpMethod.GET).send(new BufferingResponseListener() { @Override public void onComplete(Result result) { status.getAndSet(result.getResponse().getStatus()); buf.append(getContentAsString()); latch.countDown(); } }); latch.await(); assertTrue("success status", HttpStatus.isSuccess(status.get())); if(expectedMessage!=null) { assertNotNull(buf.toString()); assertEquals(expectedMessage, buf.toString().trim()); } } }