Browse Source

MockHttpServletResponse.getDateHeader returns -1 for non-existent header

Includes consistent getDateHeader results in both MockHttpServletResponse variants (spring-test and spring-web)

Issue: SPR-16160
pull/1587/head
Juergen Hoeller 8 years ago
parent
commit
80a0cf71f4
  1. 25
      spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java
  2. 6
      spring-test/src/test/java/org/springframework/mock/web/MockHttpServletResponseTests.java
  3. 51
      spring-web/src/test/java/org/springframework/mock/web/test/MockHttpServletResponse.java
  4. 151
      spring-web/src/test/java/org/springframework/web/context/request/ServletWebRequestHttpMethodsTests.java

25
spring-test/src/main/java/org/springframework/mock/web/MockHttpServletResponse.java

@ -23,6 +23,7 @@ import java.io.OutputStreamWriter;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.io.Writer; import java.io.Writer;
import java.text.DateFormat;
import java.text.ParseException; import java.text.ParseException;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.ArrayList; import java.util.ArrayList;
@ -517,27 +518,33 @@ public class MockHttpServletResponse implements HttpServletResponse {
setHeaderValue(name, formatDate(value)); setHeaderValue(name, formatDate(value));
} }
@Override
public void addDateHeader(String name, long value) {
addHeaderValue(name, formatDate(value));
}
public long getDateHeader(String name) { public long getDateHeader(String name) {
SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT, Locale.US); String headerValue = getHeader(name);
dateFormat.setTimeZone(GMT); if (headerValue == null) {
return -1;
}
try { try {
return dateFormat.parse(getHeader(name)).getTime(); return newDateFormat().parse(getHeader(name)).getTime();
} }
catch (ParseException ex) { catch (ParseException ex) {
throw new IllegalArgumentException( throw new IllegalArgumentException(
"Value for header '" + name + "' is not a valid Date: " + getHeader(name)); "Value for header '" + name + "' is not a valid Date: " + headerValue);
} }
} }
@Override private String formatDate(long date) {
public void addDateHeader(String name, long value) { return newDateFormat().format(new Date(date));
addHeaderValue(name, formatDate(value));
} }
private String formatDate(long date) { private DateFormat newDateFormat() {
SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT, Locale.US); SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT, Locale.US);
dateFormat.setTimeZone(GMT); dateFormat.setTimeZone(GMT);
return dateFormat.format(new Date(date)); return dateFormat;
} }
@Override @Override

6
spring-test/src/test/java/org/springframework/mock/web/MockHttpServletResponseTests.java

@ -291,6 +291,12 @@ public class MockHttpServletResponseTests {
response.getDateHeader("Last-Modified"); response.getDateHeader("Last-Modified");
} }
@Test // SPR-16160
public void getNonExistentDateHeader() {
assertNull(response.getHeader("Last-Modified"));
assertEquals(-1, response.getDateHeader("Last-Modified"));
}
@Test // SPR-10414 @Test // SPR-10414
public void modifyStatusAfterSendError() throws IOException { public void modifyStatusAfterSendError() throws IOException {
response.sendError(HttpServletResponse.SC_NOT_FOUND); response.sendError(HttpServletResponse.SC_NOT_FOUND);

51
spring-web/src/test/java/org/springframework/mock/web/test/MockHttpServletResponse.java

@ -23,16 +23,17 @@ import java.io.OutputStreamWriter;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.io.Writer; import java.io.Writer;
import java.time.Instant; import java.text.DateFormat;
import java.time.ZoneId; import java.text.ParseException;
import java.time.ZonedDateTime; import java.text.SimpleDateFormat;
import java.time.format.DateTimeParseException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.Date;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Map; import java.util.Map;
import java.util.TimeZone;
import javax.servlet.ServletOutputStream; import javax.servlet.ServletOutputStream;
import javax.servlet.http.Cookie; import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
@ -44,8 +45,6 @@ import org.springframework.util.LinkedCaseInsensitiveMap;
import org.springframework.util.StringUtils; import org.springframework.util.StringUtils;
import org.springframework.web.util.WebUtils; import org.springframework.web.util.WebUtils;
import static java.time.format.DateTimeFormatter.*;
/** /**
* Mock implementation of the {@link javax.servlet.http.HttpServletResponse} interface. * Mock implementation of the {@link javax.servlet.http.HttpServletResponse} interface.
* *
@ -60,7 +59,9 @@ public class MockHttpServletResponse implements HttpServletResponse {
private static final String CHARSET_PREFIX = "charset="; private static final String CHARSET_PREFIX = "charset=";
private static final ZoneId GMT = ZoneId.of("GMT"); private static final String DATE_FORMAT = "EEE, dd MMM yyyy HH:mm:ss zzz";
private static final TimeZone GMT = TimeZone.getTimeZone("GMT");
//--------------------------------------------------------------------- //---------------------------------------------------------------------
@ -292,7 +293,7 @@ public class MockHttpServletResponse implements HttpServletResponse {
this.characterEncoding = null; this.characterEncoding = null;
this.contentLength = 0; this.contentLength = 0;
this.contentType = null; this.contentType = null;
this.locale = null; this.locale = Locale.getDefault();
this.cookies.clear(); this.cookies.clear();
this.headers.clear(); this.headers.clear();
this.status = HttpServletResponse.SC_OK; this.status = HttpServletResponse.SC_OK;
@ -302,9 +303,7 @@ public class MockHttpServletResponse implements HttpServletResponse {
@Override @Override
public void setLocale(Locale locale) { public void setLocale(Locale locale) {
this.locale = locale; this.locale = locale;
if (locale != null) { doAddHeaderValue(HttpHeaders.ACCEPT_LANGUAGE, locale.toLanguageTag(), true);
doAddHeaderValue(HttpHeaders.ACCEPT_LANGUAGE, locale.toLanguageTag(), true);
}
} }
@Override @Override
@ -507,25 +506,33 @@ public class MockHttpServletResponse implements HttpServletResponse {
setHeaderValue(name, formatDate(value)); setHeaderValue(name, formatDate(value));
} }
@Override
public void addDateHeader(String name, long value) {
addHeaderValue(name, formatDate(value));
}
public long getDateHeader(String name) { public long getDateHeader(String name) {
String headerValue = getHeader(name);
if (headerValue == null) {
return -1;
}
try { try {
return ZonedDateTime.parse(getHeader(name), RFC_1123_DATE_TIME).toInstant().toEpochMilli(); return newDateFormat().parse(getHeader(name)).getTime();
} }
catch (DateTimeParseException ex) { catch (ParseException ex) {
throw new IllegalArgumentException( throw new IllegalArgumentException(
"Value for header '" + name + "' is not a valid Date: " + getHeader(name)); "Value for header '" + name + "' is not a valid Date: " + headerValue);
} }
} }
@Override private String formatDate(long date) {
public void addDateHeader(String name, long value) { return newDateFormat().format(new Date(date));
addHeaderValue(name, formatDate(value));
} }
private String formatDate(long date) { private DateFormat newDateFormat() {
Instant instant = Instant.ofEpochMilli(date); SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT, Locale.US);
ZonedDateTime zonedDateTime = ZonedDateTime.ofInstant(instant, GMT); dateFormat.setTimeZone(GMT);
return RFC_1123_DATE_TIME.format(zonedDateTime); return dateFormat;
} }
@Override @Override
@ -576,7 +583,7 @@ public class MockHttpServletResponse implements HttpServletResponse {
HttpHeaders headers = new HttpHeaders(); HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.ACCEPT_LANGUAGE, value.toString()); headers.add(HttpHeaders.ACCEPT_LANGUAGE, value.toString());
List<Locale> locales = headers.getAcceptLanguageAsLocales(); List<Locale> locales = headers.getAcceptLanguageAsLocales();
setLocale(locales.isEmpty() ? null : locales.get(0)); this.locale = (!locales.isEmpty() ? locales.get(0) : Locale.getDefault());
return true; return true;
} }
else { else {

151
spring-web/src/test/java/org/springframework/web/context/request/ServletWebRequestHttpMethodsTests.java

@ -16,8 +16,6 @@
package org.springframework.web.context.request; package org.springframework.web.context.request;
import java.time.Instant;
import java.time.ZoneId;
import java.time.ZonedDateTime; import java.time.ZonedDateTime;
import java.util.Arrays; import java.util.Arrays;
import java.util.Date; import java.util.Date;
@ -36,7 +34,8 @@ import static java.time.format.DateTimeFormatter.*;
import static org.junit.Assert.*; import static org.junit.Assert.*;
/** /**
* Parameterized tests for ServletWebRequest * Parameterized tests for {@link ServletWebRequest}.
*
* @author Juergen Hoeller * @author Juergen Hoeller
* @author Brian Clozel * @author Brian Clozel
* @author Markus Malkusch * @author Markus Malkusch
@ -44,8 +43,6 @@ import static org.junit.Assert.*;
@RunWith(Parameterized.class) @RunWith(Parameterized.class)
public class ServletWebRequestHttpMethodsTests { public class ServletWebRequestHttpMethodsTests {
private static final ZoneId GMT = ZoneId.of("GMT");
private static final String CURRENT_TIME = "Wed, 9 Apr 2014 09:57:42 GMT"; private static final String CURRENT_TIME = "Wed, 9 Apr 2014 09:57:42 GMT";
private MockHttpServletRequest servletRequest; private MockHttpServletRequest servletRequest;
@ -62,8 +59,7 @@ public class ServletWebRequestHttpMethodsTests {
@Parameters(name = "{0}") @Parameters(name = "{0}")
static public Iterable<Object[]> safeMethods() { static public Iterable<Object[]> safeMethods() {
return Arrays.asList(new Object[][] { return Arrays.asList(new Object[][] {
{"GET"}, {"GET"}, {"HEAD"}
{"HEAD"}
}); });
} }
@ -99,11 +95,11 @@ public class ServletWebRequestHttpMethodsTests {
@Test // SPR-14559 @Test // SPR-14559
public void checkNotModifiedInvalidIfNoneMatchHeader() { public void checkNotModifiedInvalidIfNoneMatchHeader() {
String eTag = "\"etagvalue\""; String etag = "\"etagvalue\"";
servletRequest.addHeader("If-None-Match", "missingquotes"); servletRequest.addHeader("If-None-Match", "missingquotes");
assertFalse(request.checkNotModified(eTag)); assertFalse(request.checkNotModified(etag));
assertEquals(200, servletResponse.getStatus()); assertEquals(200, servletResponse.getStatus());
assertEquals(eTag, servletResponse.getHeader("ETag")); assertEquals(etag, servletResponse.getHeader("ETag"));
} }
@Test @Test
@ -119,15 +115,13 @@ public class ServletWebRequestHttpMethodsTests {
} }
@Test @Test
public void checkNotModifiedTimestamp() throws Exception { public void checkNotModifiedTimestamp() {
long epochTime = currentDate.getTime(); long epochTime = currentDate.getTime();
servletRequest.addHeader("If-Modified-Since", epochTime); servletRequest.addHeader("If-Modified-Since", epochTime);
assertTrue(request.checkNotModified(epochTime)); assertTrue(request.checkNotModified(epochTime));
assertEquals(304, servletResponse.getStatus()); assertEquals(304, servletResponse.getStatus());
assertEquals(RFC_1123_DATE_TIME.format(Instant.ofEpochMilli(epochTime).atZone(GMT)), assertEquals(currentDate.getTime() / 1000, servletResponse.getDateHeader("Last-Modified") / 1000);
servletResponse.getHeader("Last-Modified"));
} }
@Test @Test
@ -136,191 +130,170 @@ public class ServletWebRequestHttpMethodsTests {
servletRequest.addHeader("If-Modified-Since", oneMinuteAgo); servletRequest.addHeader("If-Modified-Since", oneMinuteAgo);
assertFalse(request.checkNotModified(currentDate.getTime())); assertFalse(request.checkNotModified(currentDate.getTime()));
assertEquals(200, servletResponse.getStatus()); assertEquals(200, servletResponse.getStatus());
assertEquals(RFC_1123_DATE_TIME.format(currentDate.toInstant().atZone(GMT)), assertEquals(currentDate.getTime() / 1000, servletResponse.getDateHeader("Last-Modified") / 1000);
servletResponse.getHeader("Last-Modified"));
} }
@Test @Test
public void checkNotModifiedETag() { public void checkNotModifiedETag() {
String eTag = "\"Foo\""; String etag = "\"Foo\"";
servletRequest.addHeader("If-None-Match", eTag); servletRequest.addHeader("If-None-Match", etag);
assertTrue(request.checkNotModified(eTag));
assertTrue(request.checkNotModified(etag));
assertEquals(304, servletResponse.getStatus()); assertEquals(304, servletResponse.getStatus());
assertEquals(eTag, servletResponse.getHeader("ETag")); assertEquals(etag, servletResponse.getHeader("ETag"));
} }
@Test @Test
public void checkNotModifiedETagWithSeparatorChars() { public void checkNotModifiedETagWithSeparatorChars() {
String eTag = "\"Foo, Bar\""; String etag = "\"Foo, Bar\"";
servletRequest.addHeader("If-None-Match", eTag); servletRequest.addHeader("If-None-Match", etag);
assertTrue(request.checkNotModified(eTag));
assertTrue(request.checkNotModified(etag));
assertEquals(304, servletResponse.getStatus()); assertEquals(304, servletResponse.getStatus());
assertEquals(eTag, servletResponse.getHeader("ETag")); assertEquals(etag, servletResponse.getHeader("ETag"));
} }
@Test @Test
public void checkModifiedETag() { public void checkModifiedETag() {
String currentETag = "\"Foo\""; String currentETag = "\"Foo\"";
String oldEtag = "Bar"; String oldETag = "Bar";
servletRequest.addHeader("If-None-Match", oldEtag); servletRequest.addHeader("If-None-Match", oldETag);
assertFalse(request.checkNotModified(currentETag)); assertFalse(request.checkNotModified(currentETag));
assertEquals(200, servletResponse.getStatus()); assertEquals(200, servletResponse.getStatus());
assertEquals(currentETag, servletResponse.getHeader("ETag")); assertEquals(currentETag, servletResponse.getHeader("ETag"));
} }
@Test @Test
public void checkNotModifiedUnpaddedETag() { public void checkNotModifiedUnpaddedETag() {
String eTag = "Foo"; String etag = "Foo";
String paddedEtag = String.format("\"%s\"", eTag); String paddedETag = String.format("\"%s\"", etag);
servletRequest.addHeader("If-None-Match", paddedEtag); servletRequest.addHeader("If-None-Match", paddedETag);
assertTrue(request.checkNotModified(eTag));
assertTrue(request.checkNotModified(etag));
assertEquals(304, servletResponse.getStatus()); assertEquals(304, servletResponse.getStatus());
assertEquals(paddedEtag, servletResponse.getHeader("ETag")); assertEquals(paddedETag, servletResponse.getHeader("ETag"));
} }
@Test @Test
public void checkModifiedUnpaddedETag() { public void checkModifiedUnpaddedETag() {
String currentETag = "Foo"; String currentETag = "Foo";
String oldEtag = "Bar"; String oldETag = "Bar";
servletRequest.addHeader("If-None-Match", oldEtag); servletRequest.addHeader("If-None-Match", oldETag);
assertFalse(request.checkNotModified(currentETag)); assertFalse(request.checkNotModified(currentETag));
assertEquals(200, servletResponse.getStatus()); assertEquals(200, servletResponse.getStatus());
assertEquals(String.format("\"%s\"", currentETag), servletResponse.getHeader("ETag")); assertEquals(String.format("\"%s\"", currentETag), servletResponse.getHeader("ETag"));
} }
@Test @Test
public void checkNotModifiedWildcardIsIgnored() { public void checkNotModifiedWildcardIsIgnored() {
String eTag = "\"Foo\""; String etag = "\"Foo\"";
servletRequest.addHeader("If-None-Match", "*"); servletRequest.addHeader("If-None-Match", "*");
assertFalse(request.checkNotModified(eTag)); assertFalse(request.checkNotModified(etag));
assertEquals(200, servletResponse.getStatus()); assertEquals(200, servletResponse.getStatus());
assertEquals(eTag, servletResponse.getHeader("ETag")); assertEquals(etag, servletResponse.getHeader("ETag"));
} }
@Test @Test
public void checkNotModifiedETagAndTimestamp() { public void checkNotModifiedETagAndTimestamp() {
String eTag = "\"Foo\""; String etag = "\"Foo\"";
servletRequest.addHeader("If-None-Match", eTag); servletRequest.addHeader("If-None-Match", etag);
servletRequest.addHeader("If-Modified-Since", currentDate.getTime()); servletRequest.addHeader("If-Modified-Since", currentDate.getTime());
assertTrue(request.checkNotModified(eTag, currentDate.getTime())); assertTrue(request.checkNotModified(etag, currentDate.getTime()));
assertEquals(304, servletResponse.getStatus()); assertEquals(304, servletResponse.getStatus());
assertEquals(eTag, servletResponse.getHeader("ETag")); assertEquals(etag, servletResponse.getHeader("ETag"));
assertEquals(RFC_1123_DATE_TIME.format(currentDate.toInstant().atZone(GMT)), assertEquals(currentDate.getTime() / 1000, servletResponse.getDateHeader("Last-Modified") / 1000);
servletResponse.getHeader("Last-Modified"));
} }
@Test // SPR-14224 @Test // SPR-14224
public void checkNotModifiedETagAndModifiedTimestamp() { public void checkNotModifiedETagAndModifiedTimestamp() {
String eTag = "\"Foo\""; String etag = "\"Foo\"";
servletRequest.addHeader("If-None-Match", eTag); servletRequest.addHeader("If-None-Match", etag);
long currentEpoch = currentDate.getTime(); long currentEpoch = currentDate.getTime();
long oneMinuteAgo = currentEpoch - (1000 * 60); long oneMinuteAgo = currentEpoch - (1000 * 60);
servletRequest.addHeader("If-Modified-Since", oneMinuteAgo); servletRequest.addHeader("If-Modified-Since", oneMinuteAgo);
assertTrue(request.checkNotModified(eTag, currentEpoch)); assertTrue(request.checkNotModified(etag, currentEpoch));
assertEquals(304, servletResponse.getStatus()); assertEquals(304, servletResponse.getStatus());
assertEquals(eTag, servletResponse.getHeader("ETag")); assertEquals(etag, servletResponse.getHeader("ETag"));
assertEquals(RFC_1123_DATE_TIME.format(Instant.ofEpochMilli(currentEpoch).atZone(GMT)), assertEquals(currentDate.getTime() / 1000, servletResponse.getDateHeader("Last-Modified") / 1000);
servletResponse.getHeader("Last-Modified"));
} }
@Test @Test
public void checkModifiedETagAndNotModifiedTimestamp() throws Exception { public void checkModifiedETagAndNotModifiedTimestamp() {
String currentETag = "\"Foo\""; String currentETag = "\"Foo\"";
String oldEtag = "\"Bar\""; String oldETag = "\"Bar\"";
servletRequest.addHeader("If-None-Match", oldEtag); servletRequest.addHeader("If-None-Match", oldETag);
long epochTime = currentDate.getTime(); long epochTime = currentDate.getTime();
servletRequest.addHeader("If-Modified-Since", epochTime); servletRequest.addHeader("If-Modified-Since", epochTime);
assertFalse(request.checkNotModified(currentETag, epochTime)); assertFalse(request.checkNotModified(currentETag, epochTime));
assertEquals(200, servletResponse.getStatus()); assertEquals(200, servletResponse.getStatus());
assertEquals(currentETag, servletResponse.getHeader("ETag")); assertEquals(currentETag, servletResponse.getHeader("ETag"));
assertEquals(RFC_1123_DATE_TIME.format(Instant.ofEpochMilli(epochTime).atZone(GMT)), assertEquals(currentDate.getTime() / 1000, servletResponse.getDateHeader("Last-Modified") / 1000);
servletResponse.getHeader("Last-Modified"));
} }
@Test @Test
public void checkNotModifiedETagWeakStrong() { public void checkNotModifiedETagWeakStrong() {
String eTag = "\"Foo\""; String etag = "\"Foo\"";
String weakEtag = String.format("W/%s", eTag); String weakETag = String.format("W/%s", etag);
servletRequest.addHeader("If-None-Match", eTag); servletRequest.addHeader("If-None-Match", etag);
assertTrue(request.checkNotModified(weakEtag));
assertTrue(request.checkNotModified(weakETag));
assertEquals(304, servletResponse.getStatus()); assertEquals(304, servletResponse.getStatus());
assertEquals(weakEtag, servletResponse.getHeader("ETag")); assertEquals(weakETag, servletResponse.getHeader("ETag"));
} }
@Test @Test
public void checkNotModifiedETagStrongWeak() { public void checkNotModifiedETagStrongWeak() {
String eTag = "\"Foo\""; String etag = "\"Foo\"";
servletRequest.addHeader("If-None-Match", String.format("W/%s", eTag)); servletRequest.addHeader("If-None-Match", String.format("W/%s", etag));
assertTrue(request.checkNotModified(eTag));
assertTrue(request.checkNotModified(etag));
assertEquals(304, servletResponse.getStatus()); assertEquals(304, servletResponse.getStatus());
assertEquals(eTag, servletResponse.getHeader("ETag")); assertEquals(etag, servletResponse.getHeader("ETag"));
} }
@Test @Test
public void checkNotModifiedMultipleETags() { public void checkNotModifiedMultipleETags() {
String eTag = "\"Bar\""; String etag = "\"Bar\"";
String multipleETags = String.format("\"Foo\", %s", eTag); String multipleETags = String.format("\"Foo\", %s", etag);
servletRequest.addHeader("If-None-Match", multipleETags); servletRequest.addHeader("If-None-Match", multipleETags);
assertTrue(request.checkNotModified(eTag)); assertTrue(request.checkNotModified(etag));
assertEquals(304, servletResponse.getStatus()); assertEquals(304, servletResponse.getStatus());
assertEquals(eTag, servletResponse.getHeader("ETag")); assertEquals(etag, servletResponse.getHeader("ETag"));
} }
@Test @Test
public void checkNotModifiedTimestampWithLengthPart() throws Exception { public void checkNotModifiedTimestampWithLengthPart() {
long epochTime = ZonedDateTime.parse(CURRENT_TIME, RFC_1123_DATE_TIME).toInstant().toEpochMilli(); long epochTime = ZonedDateTime.parse(CURRENT_TIME, RFC_1123_DATE_TIME).toInstant().toEpochMilli();
servletRequest.setMethod("GET"); servletRequest.setMethod("GET");
servletRequest.addHeader("If-Modified-Since", "Wed, 09 Apr 2014 09:57:42 GMT; length=13774"); servletRequest.addHeader("If-Modified-Since", "Wed, 09 Apr 2014 09:57:42 GMT; length=13774");
assertTrue(request.checkNotModified(epochTime)); assertTrue(request.checkNotModified(epochTime));
assertEquals(304, servletResponse.getStatus()); assertEquals(304, servletResponse.getStatus());
assertEquals(RFC_1123_DATE_TIME.format(Instant.ofEpochMilli(epochTime).atZone(GMT)), assertEquals(epochTime / 1000, servletResponse.getDateHeader("Last-Modified") / 1000);
servletResponse.getHeader("Last-Modified"));
} }
@Test @Test
public void checkModifiedTimestampWithLengthPart() throws Exception { public void checkModifiedTimestampWithLengthPart() {
long epochTime = ZonedDateTime.parse(CURRENT_TIME, RFC_1123_DATE_TIME).toInstant().toEpochMilli(); long epochTime = ZonedDateTime.parse(CURRENT_TIME, RFC_1123_DATE_TIME).toInstant().toEpochMilli();
servletRequest.setMethod("GET"); servletRequest.setMethod("GET");
servletRequest.addHeader("If-Modified-Since", "Wed, 08 Apr 2014 09:57:42 GMT; length=13774"); servletRequest.addHeader("If-Modified-Since", "Wed, 08 Apr 2014 09:57:42 GMT; length=13774");
assertFalse(request.checkNotModified(epochTime)); assertFalse(request.checkNotModified(epochTime));
assertEquals(200, servletResponse.getStatus()); assertEquals(200, servletResponse.getStatus());
assertEquals(RFC_1123_DATE_TIME.format(Instant.ofEpochMilli(epochTime).atZone(GMT)), assertEquals(epochTime / 1000, servletResponse.getDateHeader("Last-Modified") / 1000);
servletResponse.getHeader("Last-Modified"));
} }
@Test @Test
public void checkNotModifiedTimestampConditionalPut() throws Exception { public void checkNotModifiedTimestampConditionalPut() {
long currentEpoch = currentDate.getTime(); long currentEpoch = currentDate.getTime();
long oneMinuteAgo = currentEpoch - (1000 * 60); long oneMinuteAgo = currentEpoch - (1000 * 60);
servletRequest.setMethod("PUT"); servletRequest.setMethod("PUT");
@ -332,7 +305,7 @@ public class ServletWebRequestHttpMethodsTests {
} }
@Test @Test
public void checkNotModifiedTimestampConditionalPutConflict() throws Exception { public void checkNotModifiedTimestampConditionalPutConflict() {
long currentEpoch = currentDate.getTime(); long currentEpoch = currentDate.getTime();
long oneMinuteAgo = currentEpoch - (1000 * 60); long oneMinuteAgo = currentEpoch - (1000 * 60);
servletRequest.setMethod("PUT"); servletRequest.setMethod("PUT");

Loading…
Cancel
Save