2020import java .util .Arrays ;
2121import java .util .Date ;
2222import java .util .Locale ;
23+ import java .util .TimeZone ;
2324
2425import org .junit .Before ;
2526import org .junit .Test ;
4243@ RunWith (Parameterized .class )
4344public class ServletWebRequestHttpMethodsTests {
4445
46+ private static final String CURRENT_TIME = "Wed, 09 Apr 2014 09:57:42 GMT" ;
47+
4548 private SimpleDateFormat dateFormat ;
4649
4750 private MockHttpServletRequest servletRequest ;
@@ -50,6 +53,8 @@ public class ServletWebRequestHttpMethodsTests {
5053
5154 private ServletWebRequest request ;
5255
56+ private Date currentDate ;
57+
5358 @ Parameter
5459 public String method ;
5560
@@ -63,33 +68,57 @@ static public Iterable<Object[]> safeMethods() {
6368
6469 @ Before
6570 public void setUp () {
71+ currentDate = new Date ();
6672 dateFormat = new SimpleDateFormat ("EEE, dd MMM yyyy HH:mm:ss z" , Locale .US );
73+ dateFormat .setTimeZone (TimeZone .getTimeZone ("GMT" ));
6774 servletRequest = new MockHttpServletRequest (method , "http://example.org" );
6875 servletResponse = new MockHttpServletResponse ();
6976 request = new ServletWebRequest (servletRequest , servletResponse );
7077 }
7178
7279 @ Test
73- public void checkNotModifiedTimestamp () {
74- long currentTime = new Date ().getTime ();
75- servletRequest .addHeader ("If-Modified-Since" , currentTime );
80+ public void checkNotModifiedNon2xxStatus () {
81+ long epochTime = currentDate .getTime ();
82+ servletRequest .addHeader ("If-Modified-Since" , epochTime );
83+ servletResponse .setStatus (304 );
84+
85+ assertFalse (request .checkNotModified (epochTime ));
86+ assertEquals (304 , servletResponse .getStatus ());
87+ assertNull (servletResponse .getHeader ("Last-Modified" ));
88+ }
89+
90+ @ Test
91+ public void checkNotModifiedHeaderAlreadySet () {
92+ long epochTime = currentDate .getTime ();
93+ servletRequest .addHeader ("If-Modified-Since" , epochTime );
94+ servletResponse .addHeader ("Last-Modified" , CURRENT_TIME );
95+
96+ assertFalse (request .checkNotModified (epochTime ));
97+ assertEquals (200 , servletResponse .getStatus ());
98+ assertEquals (1 , servletResponse .getHeaders ("Last-Modified" ).size ());
99+ assertEquals (CURRENT_TIME , servletResponse .getHeader ("Last-Modified" ));
100+ }
101+
102+ @ Test
103+ public void checkNotModifiedTimestamp () throws Exception {
104+ long epochTime = currentDate .getTime ();
105+ servletRequest .addHeader ("If-Modified-Since" , epochTime );
76106
77- assertTrue (request .checkNotModified (currentTime ));
107+ assertTrue (request .checkNotModified (epochTime ));
78108
79109 assertEquals (304 , servletResponse .getStatus ());
80- assertEquals ("" + currentTime , servletResponse .getHeader ("Last-Modified" ));
110+ assertEquals (dateFormat . format ( currentDate ) , servletResponse .getHeader ("Last-Modified" ));
81111 }
82112
83113 @ Test
84114 public void checkModifiedTimestamp () {
85- long currentTime = new Date ().getTime ();
86- long oneMinuteAgo = currentTime - (1000 * 60 );
115+ long oneMinuteAgo = currentDate .getTime () - (1000 * 60 );
87116 servletRequest .addHeader ("If-Modified-Since" , oneMinuteAgo );
88117
89- assertFalse (request .checkNotModified (currentTime ));
118+ assertFalse (request .checkNotModified (currentDate . getTime () ));
90119
91120 assertEquals (200 , servletResponse .getStatus ());
92- assertEquals ("" + currentTime , servletResponse .getHeader ("Last-Modified" ));
121+ assertEquals (dateFormat . format ( currentDate ) , servletResponse .getHeader ("Last-Modified" ));
93122 }
94123
95124 @ Test
@@ -154,44 +183,43 @@ public void checkNotModifiedWildcardETag() {
154183 public void checkNotModifiedETagAndTimestamp () {
155184 String eTag = "\" Foo\" " ;
156185 servletRequest .addHeader ("If-None-Match" , eTag );
157- long currentTime = new Date ().getTime ();
158- servletRequest .addHeader ("If-Modified-Since" , currentTime );
186+ servletRequest .addHeader ("If-Modified-Since" , currentDate .getTime ());
159187
160- assertTrue (request .checkNotModified (eTag , currentTime ));
188+ assertTrue (request .checkNotModified (eTag , currentDate . getTime () ));
161189
162190 assertEquals (304 , servletResponse .getStatus ());
163191 assertEquals (eTag , servletResponse .getHeader ("ETag" ));
164- assertEquals ("" + currentTime , servletResponse .getHeader ("Last-Modified" ));
192+ assertEquals (dateFormat . format ( currentDate ) , servletResponse .getHeader ("Last-Modified" ));
165193 }
166194
167195 @ Test
168196 public void checkNotModifiedETagAndModifiedTimestamp () {
169197 String eTag = "\" Foo\" " ;
170198 servletRequest .addHeader ("If-None-Match" , eTag );
171- long currentTime = new Date () .getTime ();
172- long oneMinuteAgo = currentTime - (1000 * 60 );
199+ long currentEpoch = currentDate .getTime ();
200+ long oneMinuteAgo = currentEpoch - (1000 * 60 );
173201 servletRequest .addHeader ("If-Modified-Since" , oneMinuteAgo );
174202
175- assertFalse (request .checkNotModified (eTag , currentTime ));
203+ assertFalse (request .checkNotModified (eTag , currentEpoch ));
176204
177205 assertEquals (200 , servletResponse .getStatus ());
178206 assertEquals (eTag , servletResponse .getHeader ("ETag" ));
179- assertEquals ("" + currentTime , servletResponse .getHeader ("Last-Modified" ));
207+ assertEquals (dateFormat . format ( currentDate ) , servletResponse .getHeader ("Last-Modified" ));
180208 }
181209
182210 @ Test
183- public void checkModifiedETagAndNotModifiedTimestamp () {
211+ public void checkModifiedETagAndNotModifiedTimestamp () throws Exception {
184212 String currentETag = "\" Foo\" " ;
185213 String oldEtag = "\" Bar\" " ;
186214 servletRequest .addHeader ("If-None-Match" , oldEtag );
187- long currentTime = new Date () .getTime ();
188- servletRequest .addHeader ("If-Modified-Since" , currentTime );
215+ long epochTime = currentDate .getTime ();
216+ servletRequest .addHeader ("If-Modified-Since" , epochTime );
189217
190- assertFalse (request .checkNotModified (currentETag , currentTime ));
218+ assertFalse (request .checkNotModified (currentETag , epochTime ));
191219
192220 assertEquals (200 , servletResponse .getStatus ());
193221 assertEquals (currentETag , servletResponse .getHeader ("ETag" ));
194- assertEquals ("" + currentTime , servletResponse .getHeader ("Last-Modified" ));
222+ assertEquals (dateFormat . format ( currentDate ) , servletResponse .getHeader ("Last-Modified" ));
195223 }
196224
197225 @ Test
@@ -231,26 +259,26 @@ public void checkNotModifiedMultipleETags() {
231259
232260 @ Test
233261 public void checkNotModifiedTimestampWithLengthPart () throws Exception {
234- long currentTime = dateFormat .parse ("Wed, 09 Apr 2014 09:57:42 GMT" ).getTime ();
262+ long epochTime = dateFormat .parse (CURRENT_TIME ).getTime ();
235263 servletRequest .setMethod ("GET" );
236264 servletRequest .addHeader ("If-Modified-Since" , "Wed, 09 Apr 2014 09:57:42 GMT; length=13774" );
237265
238- assertTrue (request .checkNotModified (currentTime ));
266+ assertTrue (request .checkNotModified (epochTime ));
239267
240268 assertEquals (304 , servletResponse .getStatus ());
241- assertEquals ("" + currentTime , servletResponse .getHeader ("Last-Modified" ));
269+ assertEquals (CURRENT_TIME , servletResponse .getHeader ("Last-Modified" ));
242270 }
243271
244272 @ Test
245273 public void checkModifiedTimestampWithLengthPart () throws Exception {
246- long currentTime = dateFormat .parse ("Wed, 09 Apr 2014 09:57:42 GMT" ).getTime ();
274+ long epochTime = dateFormat .parse (CURRENT_TIME ).getTime ();
247275 servletRequest .setMethod ("GET" );
248276 servletRequest .addHeader ("If-Modified-Since" , "Wed, 08 Apr 2014 09:57:42 GMT; length=13774" );
249277
250- assertFalse (request .checkNotModified (currentTime ));
278+ assertFalse (request .checkNotModified (epochTime ));
251279
252280 assertEquals (200 , servletResponse .getStatus ());
253- assertEquals ("" + currentTime , servletResponse .getHeader ("Last-Modified" ));
281+ assertEquals (CURRENT_TIME , servletResponse .getHeader ("Last-Modified" ));
254282 }
255283
256284}
0 commit comments