SPR-7695 - Add ETag version of WebRequest.checkNotModified()

This commit is contained in:
Arjen Poutsma
2010-10-29 10:28:47 +00:00
parent 095a36e853
commit 7cc3f49910
5 changed files with 157 additions and 15 deletions

View File

@@ -16,6 +16,7 @@
package org.springframework.web.context.request;
import java.util.Date;
import java.util.Locale;
import java.util.Map;
import javax.servlet.ServletRequest;
@@ -25,27 +26,40 @@ import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import static org.junit.Assert.*;
import org.junit.Before;
import org.junit.Test;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.web.multipart.MultipartRequest;
import static org.junit.Assert.*;
/**
* @author Juergen Hoeller
* @since 26.07.2006
*/
public class ServletWebRequestTests {
private MockHttpServletRequest servletRequest;
private MockHttpServletResponse servletResponse;
private ServletWebRequest request;
@Before
public void setUp() {
servletRequest = new MockHttpServletRequest();
servletResponse = new MockHttpServletResponse();
request = new ServletWebRequest(servletRequest, servletResponse);
}
@Test
public void testParameters() {
MockHttpServletRequest servletRequest = new MockHttpServletRequest();
public void parameters() {
servletRequest.addParameter("param1", "value1");
servletRequest.addParameter("param2", "value2");
servletRequest.addParameter("param2", "value2a");
ServletWebRequest request = new ServletWebRequest(servletRequest);
assertEquals("value1", request.getParameter("param1"));
assertEquals(1, request.getParameterValues("param1").length);
assertEquals("value1", request.getParameterValues("param1")[0]);
@@ -64,19 +78,14 @@ public class ServletWebRequestTests {
}
@Test
public void testLocale() {
MockHttpServletRequest servletRequest = new MockHttpServletRequest();
public void locale() {
servletRequest.addPreferredLocale(Locale.UK);
ServletWebRequest request = new ServletWebRequest(servletRequest);
assertEquals(Locale.UK, request.getLocale());
}
@Test
public void testNativeRequest() {
MockHttpServletRequest servletRequest = new MockHttpServletRequest();
MockHttpServletResponse servletResponse = new MockHttpServletResponse();
ServletWebRequest request = new ServletWebRequest(servletRequest, servletResponse);
public void nativeRequest() {
assertSame(servletRequest, request.getNativeRequest());
assertSame(servletRequest, request.getNativeRequest(ServletRequest.class));
assertSame(servletRequest, request.getNativeRequest(HttpServletRequest.class));
@@ -90,9 +99,7 @@ public class ServletWebRequestTests {
}
@Test
public void testDecoratedNativeRequest() {
MockHttpServletRequest servletRequest = new MockHttpServletRequest();
MockHttpServletResponse servletResponse = new MockHttpServletResponse();
public void decoratedNativeRequest() {
HttpServletRequest decoratedRequest = new HttpServletRequestWrapper(servletRequest);
HttpServletResponse decoratedResponse = new HttpServletResponseWrapper(servletResponse);
ServletWebRequest request = new ServletWebRequest(decoratedRequest, decoratedResponse);
@@ -108,4 +115,65 @@ public class ServletWebRequestTests {
assertNull(request.getNativeResponse(MultipartRequest.class));
}
@Test
public void checkNotModifiedTimeStamp() {
long currentTime = new Date().getTime();
servletRequest.setMethod("GET");
servletRequest.addHeader("If-Modified-Since", currentTime);
request.checkNotModified(currentTime);
assertEquals(304, servletResponse.getStatus());
}
@Test
public void checkModifiedTimeStamp() {
long currentTime = new Date().getTime();
long oneMinuteAgo = currentTime - (1000 * 60);
servletRequest.setMethod("GET");
servletRequest.addHeader("If-Modified-Since", oneMinuteAgo);
request.checkNotModified(currentTime);
assertEquals(200, servletResponse.getStatus());
assertEquals(currentTime, servletResponse.getHeader("Last-Modified"));
}
@Test
public void checkNotModifiedETag() {
String eTag = "Foo";
servletRequest.setMethod("GET");
servletRequest.addHeader("If-None-Match", "\"" + eTag + "\"");
request.checkNotModified(eTag);
assertEquals(304, servletResponse.getStatus());
}
@Test
public void checkModifiedETagNonQuoted() {
String currentETag = "Foo";
String oldEtag = "Bar";
servletRequest.setMethod("GET");
servletRequest.addHeader("If-None-Match", "\"" + oldEtag + "\"");
request.checkNotModified(currentETag);
assertEquals(200, servletResponse.getStatus());
assertEquals("\"" + currentETag + "\"", servletResponse.getHeader("ETag"));
}
@Test
public void checkModifiedETagQuoted() {
String currentETag = "\"Foo\"";
String oldEtag = "Bar";
servletRequest.setMethod("GET");
servletRequest.addHeader("If-None-Match", oldEtag);
request.checkNotModified(currentETag);
assertEquals(200, servletResponse.getStatus());
assertEquals(currentETag, servletResponse.getHeader("ETag"));
}
}