@Test public void checkModifiedTimestamp() { long oneMinuteAgo = currentDate.getTime() - (1000 * 60); servletRequest.addHeader("If-Modified-Since", oneMinuteAgo); assertFalse(request.checkNotModified(currentDate.getTime())); assertEquals(200, servletResponse.getStatus()); assertEquals(currentDate.getTime() / 1000, servletResponse.getDateHeader("Last-Modified") / 1000); }
@Test public void checkNotModifiedTimestampWithLengthPart() { long epochTime = ZonedDateTime.parse(CURRENT_TIME, RFC_1123_DATE_TIME).toInstant().toEpochMilli(); servletRequest.setMethod("GET"); servletRequest.addHeader("If-Modified-Since", "Wed, 09 Apr 2014 09:57:42 GMT; length=13774"); assertTrue(request.checkNotModified(epochTime)); assertEquals(304, servletResponse.getStatus()); assertEquals(epochTime / 1000, servletResponse.getDateHeader("Last-Modified") / 1000); }
@Test public void checkModifiedTimestampWithLengthPart() { long epochTime = ZonedDateTime.parse(CURRENT_TIME, RFC_1123_DATE_TIME).toInstant().toEpochMilli(); servletRequest.setMethod("GET"); servletRequest.addHeader("If-Modified-Since", "Wed, 08 Apr 2014 09:57:42 GMT; length=13774"); assertFalse(request.checkNotModified(epochTime)); assertEquals(200, servletResponse.getStatus()); assertEquals(epochTime / 1000, servletResponse.getDateHeader("Last-Modified") / 1000); }
private boolean isResourceNotModified(ServletServerHttpRequest request, ServletServerHttpResponse response) { ServletWebRequest servletWebRequest = new ServletWebRequest(request.getServletRequest(), response.getServletResponse()); HttpHeaders responseHeaders = response.getHeaders(); String etag = responseHeaders.getETag(); long lastModifiedTimestamp = responseHeaders.getLastModified(); if (request.getMethod() == HttpMethod.GET || request.getMethod() == HttpMethod.HEAD) { responseHeaders.remove(HttpHeaders.ETAG); responseHeaders.remove(HttpHeaders.LAST_MODIFIED); } return servletWebRequest.checkNotModified(etag, lastModifiedTimestamp); }
@Test public void checkNotModifiedETagAndTimestamp() { String etag = "\"Foo\""; servletRequest.addHeader("If-None-Match", etag); servletRequest.addHeader("If-Modified-Since", currentDate.getTime()); assertTrue(request.checkNotModified(etag, currentDate.getTime())); assertEquals(304, servletResponse.getStatus()); assertEquals(etag, servletResponse.getHeader("ETag")); assertEquals(currentDate.getTime() / 1000, servletResponse.getDateHeader("Last-Modified") / 1000); }
@Test public void checkModifiedUnpaddedETag() { String currentETag = "Foo"; String oldETag = "Bar"; servletRequest.addHeader("If-None-Match", oldETag); assertFalse(request.checkNotModified(currentETag)); assertEquals(200, servletResponse.getStatus()); assertEquals(String.format("\"%s\"", currentETag), servletResponse.getHeader("ETag")); }
@Test public void checkNotModifiedUnpaddedETag() { String etag = "Foo"; String paddedETag = String.format("\"%s\"", etag); servletRequest.addHeader("If-None-Match", paddedETag); assertTrue(request.checkNotModified(etag)); assertEquals(304, servletResponse.getStatus()); assertEquals(paddedETag, servletResponse.getHeader("ETag")); }
@Test public void checkNotModifiedETagWeakStrong() { String etag = "\"Foo\""; String weakETag = String.format("W/%s", etag); servletRequest.addHeader("If-None-Match", etag); assertTrue(request.checkNotModified(weakETag)); assertEquals(304, servletResponse.getStatus()); assertEquals(weakETag, servletResponse.getHeader("ETag")); }
@Test public void checkNotModifiedETagStrongWeak() { String etag = "\"Foo\""; servletRequest.addHeader("If-None-Match", String.format("W/%s", etag)); assertTrue(request.checkNotModified(etag)); assertEquals(304, servletResponse.getStatus()); assertEquals(etag, servletResponse.getHeader("ETag")); }
@Test public void checkNotModifiedHeaderAlreadySet() { long epochTime = currentDate.getTime(); servletRequest.addHeader("If-Modified-Since", epochTime); servletResponse.addHeader("Last-Modified", CURRENT_TIME); assertTrue(request.checkNotModified(epochTime)); assertEquals(304, servletResponse.getStatus()); assertEquals(1, servletResponse.getHeaders("Last-Modified").size()); assertEquals(CURRENT_TIME, servletResponse.getHeader("Last-Modified")); }
@Test // SPR-14224 public void checkNotModifiedETagAndModifiedTimestamp() { String etag = "\"Foo\""; servletRequest.addHeader("If-None-Match", etag); long currentEpoch = currentDate.getTime(); long oneMinuteAgo = currentEpoch - (1000 * 60); servletRequest.addHeader("If-Modified-Since", oneMinuteAgo); assertTrue(request.checkNotModified(etag, currentEpoch)); assertEquals(304, servletResponse.getStatus()); assertEquals(etag, servletResponse.getHeader("ETag")); assertEquals(currentDate.getTime() / 1000, servletResponse.getDateHeader("Last-Modified") / 1000); }
@Test public void checkModifiedETagAndNotModifiedTimestamp() { String currentETag = "\"Foo\""; String oldETag = "\"Bar\""; servletRequest.addHeader("If-None-Match", oldETag); long epochTime = currentDate.getTime(); servletRequest.addHeader("If-Modified-Since", epochTime); assertFalse(request.checkNotModified(currentETag, epochTime)); assertEquals(200, servletResponse.getStatus()); assertEquals(currentETag, servletResponse.getHeader("ETag")); assertEquals(currentDate.getTime() / 1000, servletResponse.getDateHeader("Last-Modified") / 1000); }
@Test public void checkNotModifiedTimestampConditionalPut() { long currentEpoch = currentDate.getTime(); long oneMinuteAgo = currentEpoch - (1000 * 60); servletRequest.setMethod("PUT"); servletRequest.addHeader("If-UnModified-Since", currentEpoch); assertFalse(request.checkNotModified(oneMinuteAgo)); assertEquals(200, servletResponse.getStatus()); assertEquals(null, servletResponse.getHeader("Last-Modified")); }
@Test public void checkNotModifiedTimestampConditionalPutConflict() { long currentEpoch = currentDate.getTime(); long oneMinuteAgo = currentEpoch - (1000 * 60); servletRequest.setMethod("PUT"); servletRequest.addHeader("If-UnModified-Since", oneMinuteAgo); assertTrue(request.checkNotModified(currentEpoch)); assertEquals(412, servletResponse.getStatus()); assertEquals(null, servletResponse.getHeader("Last-Modified")); }
@Test public void checkNotModifiedWildcardIsIgnored() { String etag = "\"Foo\""; servletRequest.addHeader("If-None-Match", "*"); assertFalse(request.checkNotModified(etag)); assertEquals(200, servletResponse.getStatus()); assertEquals(etag, servletResponse.getHeader("ETag")); }
@Test public void invokeAndHandle_VoidRequestNotModified() throws Exception { this.request.addHeader("If-Modified-Since", 10 * 1000 * 1000); int lastModifiedTimestamp = 1000 * 1000; this.webRequest.checkNotModified(lastModifiedTimestamp); ServletInvocableHandlerMethod handlerMethod = getHandlerMethod(new Handler(), "notModified"); handlerMethod.invokeAndHandle(this.webRequest, this.mavContainer); assertTrue("Null return value + 'not modified' request should result in 'request handled'", this.mavContainer.isRequestHandled()); }
@Test // SPR-14559 public void checkNotModifiedInvalidIfNoneMatchHeader() { String etag = "\"etagvalue\""; servletRequest.addHeader("If-None-Match", "missingquotes"); assertFalse(request.checkNotModified(etag)); assertEquals(200, servletResponse.getStatus()); assertEquals(etag, servletResponse.getHeader("ETag")); }
@Test public void checkNotModifiedETagWithSeparatorChars() { String etag = "\"Foo, Bar\""; servletRequest.addHeader("If-None-Match", etag); assertTrue(request.checkNotModified(etag)); assertEquals(304, servletResponse.getStatus()); assertEquals(etag, servletResponse.getHeader("ETag")); }
@Test public void checkNotModifiedETag() { String etag = "\"Foo\""; servletRequest.addHeader("If-None-Match", etag); assertTrue(request.checkNotModified(etag)); assertEquals(304, servletResponse.getStatus()); assertEquals(etag, servletResponse.getHeader("ETag")); }
@Test public void checkModifiedETag() { String currentETag = "\"Foo\""; String oldETag = "Bar"; servletRequest.addHeader("If-None-Match", oldETag); assertFalse(request.checkNotModified(currentETag)); assertEquals(200, servletResponse.getStatus()); assertEquals(currentETag, servletResponse.getHeader("ETag")); }