/**
* 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());
}
}
}