package org.jboss.seam.test.unit.web; import static org.testng.Assert.assertEquals; import java.io.IOException; import java.util.Date; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.jboss.seam.mock.EnhancedMockHttpServletRequest; import org.jboss.seam.mock.EnhancedMockHttpServletResponse; import org.jboss.seam.mock.MockHttpSession; import org.jboss.seam.web.ConditionalAbstractResource; import org.testng.annotations.Test; /** * @author Christian Bauer * */ public class ConditionalRequestTest { @Test public void testNotModifiedOnlyETag() throws Exception { HttpSession session = new MockHttpSession(); EnhancedMockHttpServletRequest request = new EnhancedMockHttpServletRequest(session); EnhancedMockHttpServletResponse response = new EnhancedMockHttpServletResponse(); request.addHeader(ConditionalAbstractResource.HEADER_IF_NONE_MATCH, "\"1234\", \"5678\""); ConditionalAbstractResource resource = new ConditionalAbstractResource() { public void getResource(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { if (!sendConditional(request, response, "\"5678\"", null)) { response.sendError(HttpServletResponse.SC_OK); } } public String getResourcePath() { return null; } }; resource.getResource(request, response); assertEquals(response.getStatus(), HttpServletResponse.SC_NOT_MODIFIED); assertEquals(response.getHeader(ConditionalAbstractResource.HEADER_ETAG), "\"5678\""); } @Test public void testModifiedOnlyETag() throws Exception { HttpSession session = new MockHttpSession(); EnhancedMockHttpServletRequest request = new EnhancedMockHttpServletRequest(session); EnhancedMockHttpServletResponse response = new EnhancedMockHttpServletResponse(); request.addHeader(ConditionalAbstractResource.HEADER_IF_NONE_MATCH, "\"123\", \"456\""); ConditionalAbstractResource resource = new ConditionalAbstractResource() { public void getResource(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { if (!sendConditional(request, response, "\"5678\"", null)) { response.sendError(HttpServletResponse.SC_OK); } } public String getResourcePath() { return null; } }; resource.getResource(request, response); assertEquals(response.getStatus(), HttpServletResponse.SC_OK); assertEquals(response.getHeader(ConditionalAbstractResource.HEADER_ETAG), "\"5678\""); } @Test public void testNotModifiedOnlyLastModified() throws Exception { HttpSession session = new MockHttpSession(); EnhancedMockHttpServletRequest request = new EnhancedMockHttpServletRequest(session); EnhancedMockHttpServletResponse response = new EnhancedMockHttpServletResponse(); final Long currentTime = new Date().getTime(); request.addHeader(ConditionalAbstractResource.HEADER_IF_MODIFIED_SINCE, currentTime); ConditionalAbstractResource resource = new ConditionalAbstractResource() { public void getResource(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { if (!sendConditional(request, response, null, currentTime)) { response.sendError(HttpServletResponse.SC_OK); } } public String getResourcePath() { return null; } }; resource.getResource(request, response); assertEquals(response.getStatus(), HttpServletResponse.SC_NOT_MODIFIED); assertEquals(response.getHeader(ConditionalAbstractResource.HEADER_LAST_MODIFIED), currentTime); } @Test public void testModifiedOnlyLastModified() throws Exception { HttpSession session = new MockHttpSession(); EnhancedMockHttpServletRequest request = new EnhancedMockHttpServletRequest(session); EnhancedMockHttpServletResponse response = new EnhancedMockHttpServletResponse(); final Long currentTime = new Date().getTime(); request.addHeader(ConditionalAbstractResource.HEADER_IF_MODIFIED_SINCE, currentTime); ConditionalAbstractResource resource = new ConditionalAbstractResource() { public void getResource(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { if (!sendConditional(request, response, null, currentTime + 5000)) { response.sendError(HttpServletResponse.SC_OK); } } public String getResourcePath() { return null; } }; resource.getResource(request, response); assertEquals(response.getStatus(), HttpServletResponse.SC_OK); assertEquals(response.getHeader(ConditionalAbstractResource.HEADER_LAST_MODIFIED), currentTime + 5000); } @Test public void testNotModifiedETagLastModified() throws Exception { HttpSession session = new MockHttpSession(); EnhancedMockHttpServletRequest request = new EnhancedMockHttpServletRequest(session); EnhancedMockHttpServletResponse response = new EnhancedMockHttpServletResponse(); final Long currentTime = new Date().getTime(); request.addHeader(ConditionalAbstractResource.HEADER_IF_MODIFIED_SINCE, currentTime); request.addHeader(ConditionalAbstractResource.HEADER_IF_NONE_MATCH, "\"1234\", \"5678\""); ConditionalAbstractResource resource = new ConditionalAbstractResource() { public void getResource(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { if (!sendConditional(request, response, "\"5678\"", currentTime)) { response.sendError(HttpServletResponse.SC_OK); } } public String getResourcePath() { return null; } }; resource.getResource(request, response); assertEquals(response.getStatus(), HttpServletResponse.SC_NOT_MODIFIED); assertEquals(response.getHeader(ConditionalAbstractResource.HEADER_LAST_MODIFIED), currentTime); assertEquals(response.getHeader(ConditionalAbstractResource.HEADER_ETAG), "\"5678\""); } @Test public void testModifiedETagLastModified() throws Exception { HttpSession session = new MockHttpSession(); EnhancedMockHttpServletRequest request = new EnhancedMockHttpServletRequest(session); EnhancedMockHttpServletResponse response = new EnhancedMockHttpServletResponse(); final Long currentTime = new Date().getTime(); request.addHeader(ConditionalAbstractResource.HEADER_IF_MODIFIED_SINCE, currentTime); request.addHeader(ConditionalAbstractResource.HEADER_IF_NONE_MATCH, "\"1234\", \"5678\""); ConditionalAbstractResource resource = new ConditionalAbstractResource() { public void getResource(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { if (!sendConditional(request, response, "\"5678\"", currentTime + 5000)) { response.sendError(HttpServletResponse.SC_OK); } } public String getResourcePath() { return null; } }; resource.getResource(request, response); assertEquals(response.getStatus(), HttpServletResponse.SC_OK); assertEquals(response.getHeader(ConditionalAbstractResource.HEADER_LAST_MODIFIED), currentTime + 5000); assertEquals(response.getHeader(ConditionalAbstractResource.HEADER_ETAG), "\"5678\""); } }