package org.exist.xquery.functions.request; import static org.custommonkey.xmlunit.XMLAssert.assertXMLEqual; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail; import java.io.IOException; import java.io.InputStream; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpStatus; import org.apache.commons.httpclient.NameValuePair; import org.apache.commons.httpclient.methods.GetMethod; import org.exist.http.RESTTest; import org.junit.Test; import org.xml.sax.SAXException; /** * Tests expected behaviour of request:get-header() XQuery function * * @author Adam Retter <adam@exist-db.org> * @version 1.0 */ public class GetHeaderTest extends RESTTest { private final static String HTTP_HEADER_NAME = "header1"; private final static String xquery = "<request-header name=\"" + HTTP_HEADER_NAME + "\">{request:get-header(\"" + HTTP_HEADER_NAME + "\")}</request-header>"; @Test public void testGetNoHeader() { testGetHeader(null); } @Test public void testEmptyHeader() { testGetHeader(""); } @Test public void testHeaderValue() { testGetHeader("value1"); } private void testGetHeader(String headerValue) { GetMethod get = new GetMethod(COLLECTION_ROOT_URL); NameValuePair qsParams[] = { new NameValuePair("_query", xquery), new NameValuePair("_indent", "no") }; StringBuilder xmlExpectedResponse = new StringBuilder( "<exist:result xmlns:exist=\"http://exist.sourceforge.net/NS/exist\" exist:hits=\"1\" exist:start=\"1\" exist:count=\"1\"><request-header name=\"" + HTTP_HEADER_NAME + "\">"); if (headerValue != null) { get.setRequestHeader(HTTP_HEADER_NAME, headerValue); xmlExpectedResponse.append(headerValue); } xmlExpectedResponse.append("</request-header></exist:result>"); get.setQueryString(qsParams); try { int httpResult = client.executeMethod(get); byte buf[] = new byte[1024]; int read = -1; StringBuilder xmlActualResponse = new StringBuilder(); InputStream is = get.getResponseBodyAsStream(); while ((read = is.read(buf)) > -1) { xmlActualResponse.append(new String(buf, 0, read)); } assertEquals(httpResult, HttpStatus.SC_OK); assertXMLEqual(xmlActualResponse.toString(), xmlExpectedResponse .toString()); } catch (HttpException he) { fail(he.getMessage()); } catch (IOException ioe) { fail(ioe.getMessage()); } catch (SAXException sae) { fail(sae.getMessage()); } finally { get.releaseConnection(); } } }