/** * */ package org.archive.wayback.accesspoint.proxy; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import junit.framework.TestCase; import org.archive.wayback.ResultURIConverter; import org.easymock.EasyMock; import org.easymock.IAnswer; /** * Test for {@link ProxyAccessPoint}. */ public class ProxyAccessPointTest extends TestCase { /* (non-Javadoc) * @see junit.framework.TestCase#setUp() */ protected void setUp() throws Exception { super.setUp(); } /** * {@code ProxyAccessPoint} recognizes Archival-URL style request and redirects * it to either calendar view (if timestamp is {@code "*"}) or replay of specific capture * (if timestamp is explicit). * Check if queryString part is property included in the redirect URL (ARI-3903). * @throws Exception */ public void testHandleProxy() throws Exception { // request.getRequestURL() returns URL without queryString. final String REQUEST_PROTOCOL_AND_HOST = "http://wayback.archive-it.org:8081"; // request.getRequestURI() returns path part only. final String REQUEST_URI = "/3548/20140430194857/http://www.example.edu/index.php"; // request.getQueryString() does not include "?" final String QUERY_STRING = "id=860233"; HttpServletRequest request = EasyMock.createNiceMock(HttpServletRequest.class); EasyMock.expect(request.getRequestURL()).andStubAnswer(new IAnswer<StringBuffer>() { @Override public StringBuffer answer() throws Throwable { return new StringBuffer(REQUEST_PROTOCOL_AND_HOST + REQUEST_URI); } }); EasyMock.expect(request.getRequestURI()).andStubReturn(REQUEST_URI); EasyMock.expect(request.getQueryString()).andStubReturn(QUERY_STRING); ResultURIConverter archivalToProxy = EasyMock.createMock(ResultURIConverter.class); EasyMock.expect( archivalToProxy.makeReplayURI("20140430194857", "http://www.example.edu/index.php?id=860233")) .andReturn("http://got-it-right/"); HttpServletResponse response = EasyMock.createMock(HttpServletResponse.class); response.sendRedirect("http://got-it-right/"); ProxyConfigSelector configSelector = EasyMock.createNiceMock(ProxyConfigSelector.class); EasyMock.expect(configSelector.resolveConfig(request)).andReturn("3548"); // not setting nonProxyAccessPoint ProxyAccessPoint cut = new ProxyAccessPoint(); cut.setReplayPrefix("//wayback.archive-it.org:8081"); cut.setConfigSelector(configSelector); cut.setArchivalToProxyConverter(archivalToProxy); EasyMock.replay(request, response, archivalToProxy, configSelector); boolean r = cut.handleProxy(request, response); EasyMock.verify(response, archivalToProxy); assertTrue("handleProxy return value", r); } }