/**
* Copyright 2005-2014 Restlet
*
* The contents of this file are subject to the terms of one of the following
* open source licenses: Apache 2.0 or or EPL 1.0 (the "Licenses"). You can
* select the license that you prefer but you may not use this file except in
* compliance with one of these Licenses.
*
* You can obtain a copy of the Apache 2.0 license at
* http://www.opensource.org/licenses/apache-2.0
*
* You can obtain a copy of the EPL 1.0 license at
* http://www.opensource.org/licenses/eclipse-1.0
*
* See the Licenses for the specific language governing permissions and
* limitations under the Licenses.
*
* Alternatively, you can obtain a royalty free commercial license with less
* limitations, transferable or non-transferable, directly at
* http://restlet.com/products/restlet-framework
*
* Restlet is a registered trademark of Restlet S.A.S.
*/
package org.restlet.test;
import org.restlet.Client;
import org.restlet.Component;
import org.restlet.Request;
import org.restlet.Response;
import org.restlet.Restlet;
import org.restlet.data.Header;
import org.restlet.data.MediaType;
import org.restlet.data.Method;
import org.restlet.data.Protocol;
import org.restlet.data.Status;
import org.restlet.engine.header.HeaderConstants;
import org.restlet.representation.StringRepresentation;
import org.restlet.util.Series;
public class HeaderTestCase extends RestletTestCase {
/**
* Restlet that returns as a new Representation the list of values of
* "testHeader" header.
*
*/
public static class TestHeaderRestlet extends Restlet {
@Override
public void handle(Request request, Response response) {
StringBuilder stb = new StringBuilder();
Series<Header> headers = getHttpHeaders(request);
for (Header header : headers) {
if (TEST_HEADER.equalsIgnoreCase(header.getName())) {
stb.append(header.getValue());
stb.append('\n');
}
}
response.setEntity(new StringRepresentation(stb,
MediaType.TEXT_PLAIN));
}
}
/**
* Name of a test header field
*/
private static final String TEST_HEADER = "testHeader";
/**
* Returns the list of HTTP headers of a request as a Form.
*
* @param request
* The request.
* @return The list of headers as a Form object.
*/
private static Series<Header> getHttpHeaders(Request request) {
@SuppressWarnings("unchecked")
Series<Header> headers = (Series<Header>) request.getAttributes().get(
HeaderConstants.ATTRIBUTE_HEADERS);
if (headers == null) {
headers = new Series<Header>(Header.class);
request.getAttributes().put(HeaderConstants.ATTRIBUTE_HEADERS,
headers);
}
return headers;
}
private Client client;
private Component component;
/**
* Handle a new request built according to the parameters and return the
* response object.
*
* @param additionalHeaders
* The list of header used to build the request.
* @return The response of the request.
* @throws Exception
*/
private Response getWithParams(Header... additionalHeaders)
throws Exception {
Request request = new Request(Method.GET, "http://localhost:"
+ TEST_PORT);
Series<Header> headers = getHttpHeaders(request);
for (Header header : additionalHeaders) {
headers.add(header);
}
Response result = client.handle(request);
return result;
}
@Override
public void setUp() throws Exception {
super.setUp();
this.client = new Client(Protocol.HTTP);
if (this.component == null) {
this.component = new Component();
this.component.getServers().add(Protocol.HTTP, TEST_PORT);
this.component.getDefaultHost().attachDefault(
new TestHeaderRestlet());
}
if (!this.component.isStarted()) {
this.component.start();
}
}
@Override
public void tearDown() throws Exception {
this.client.stop();
this.component.stop();
this.component = null;
super.tearDown();
}
/** test with no test header */
public void test0() throws Exception {
Response response = getWithParams();
assertEquals(Status.SUCCESS_OK, response.getStatus());
assertEquals(null, response.getEntity().getText());
}
/** test with one test header */
public void test1() throws Exception {
Response response = getWithParams(new Header(TEST_HEADER, "a"));
assertEquals(Status.SUCCESS_OK, response.getStatus());
assertEquals("a\n", response.getEntity().getText());
}
/** test with two test headers */
public void test2() throws Exception {
Response response = getWithParams(new Header(TEST_HEADER, "a"),
new Header(TEST_HEADER, "b"));
assertEquals(Status.SUCCESS_OK, response.getStatus());
assertEquals("a\nb\n", response.getEntity().getText());
}
}