1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.web.context.request;
18
19 import java.util.Date;
20 import java.util.Locale;
21 import java.util.Map;
22 import javax.servlet.ServletRequest;
23 import javax.servlet.ServletResponse;
24 import javax.servlet.http.HttpServletRequest;
25 import javax.servlet.http.HttpServletRequestWrapper;
26 import javax.servlet.http.HttpServletResponse;
27 import javax.servlet.http.HttpServletResponseWrapper;
28
29 import org.junit.Before;
30 import org.junit.Test;
31
32 import org.springframework.mock.web.test.MockHttpServletRequest;
33 import org.springframework.mock.web.test.MockHttpServletResponse;
34 import org.springframework.web.multipart.MultipartRequest;
35
36 import static org.junit.Assert.*;
37
38
39
40
41
42
43 public class ServletWebRequestTests {
44
45 private MockHttpServletRequest servletRequest;
46
47 private MockHttpServletResponse servletResponse;
48
49 private ServletWebRequest request;
50
51 @Before
52 public void setUp() {
53 servletRequest = new MockHttpServletRequest();
54 servletResponse = new MockHttpServletResponse();
55 request = new ServletWebRequest(servletRequest, servletResponse);
56 }
57
58 @Test
59 public void parameters() {
60 servletRequest.addParameter("param1", "value1");
61 servletRequest.addParameter("param2", "value2");
62 servletRequest.addParameter("param2", "value2a");
63
64 assertEquals("value1", request.getParameter("param1"));
65 assertEquals(1, request.getParameterValues("param1").length);
66 assertEquals("value1", request.getParameterValues("param1")[0]);
67 assertEquals("value2", request.getParameter("param2"));
68 assertEquals(2, request.getParameterValues("param2").length);
69 assertEquals("value2", request.getParameterValues("param2")[0]);
70 assertEquals("value2a", request.getParameterValues("param2")[1]);
71
72 Map<String, String[]> paramMap = request.getParameterMap();
73 assertEquals(2, paramMap.size());
74 assertEquals(1, paramMap.get("param1").length);
75 assertEquals("value1", paramMap.get("param1")[0]);
76 assertEquals(2, paramMap.get("param2").length);
77 assertEquals("value2", paramMap.get("param2")[0]);
78 assertEquals("value2a", paramMap.get("param2")[1]);
79 }
80
81 @Test
82 public void locale() {
83 servletRequest.addPreferredLocale(Locale.UK);
84
85 assertEquals(Locale.UK, request.getLocale());
86 }
87
88 @Test
89 public void nativeRequest() {
90 assertSame(servletRequest, request.getNativeRequest());
91 assertSame(servletRequest, request.getNativeRequest(ServletRequest.class));
92 assertSame(servletRequest, request.getNativeRequest(HttpServletRequest.class));
93 assertSame(servletRequest, request.getNativeRequest(MockHttpServletRequest.class));
94 assertNull(request.getNativeRequest(MultipartRequest.class));
95 assertSame(servletResponse, request.getNativeResponse());
96 assertSame(servletResponse, request.getNativeResponse(ServletResponse.class));
97 assertSame(servletResponse, request.getNativeResponse(HttpServletResponse.class));
98 assertSame(servletResponse, request.getNativeResponse(MockHttpServletResponse.class));
99 assertNull(request.getNativeResponse(MultipartRequest.class));
100 }
101
102 @Test
103 public void decoratedNativeRequest() {
104 HttpServletRequest decoratedRequest = new HttpServletRequestWrapper(servletRequest);
105 HttpServletResponse decoratedResponse = new HttpServletResponseWrapper(servletResponse);
106 ServletWebRequest request = new ServletWebRequest(decoratedRequest, decoratedResponse);
107 assertSame(decoratedRequest, request.getNativeRequest());
108 assertSame(decoratedRequest, request.getNativeRequest(ServletRequest.class));
109 assertSame(decoratedRequest, request.getNativeRequest(HttpServletRequest.class));
110 assertSame(servletRequest, request.getNativeRequest(MockHttpServletRequest.class));
111 assertNull(request.getNativeRequest(MultipartRequest.class));
112 assertSame(decoratedResponse, request.getNativeResponse());
113 assertSame(decoratedResponse, request.getNativeResponse(ServletResponse.class));
114 assertSame(decoratedResponse, request.getNativeResponse(HttpServletResponse.class));
115 assertSame(servletResponse, request.getNativeResponse(MockHttpServletResponse.class));
116 assertNull(request.getNativeResponse(MultipartRequest.class));
117 }
118
119 @Test
120 public void checkNotModifiedTimestampForGET() {
121 long currentTime = new Date().getTime();
122 servletRequest.setMethod("GET");
123 servletRequest.addHeader("If-Modified-Since", currentTime);
124
125 assertTrue(request.checkNotModified(currentTime));
126 assertEquals(304, servletResponse.getStatus());
127 }
128
129 @Test
130 public void checkModifiedTimestampForGET() {
131 long currentTime = new Date().getTime();
132 long oneMinuteAgo = currentTime - (1000 * 60);
133 servletRequest.setMethod("GET");
134 servletRequest.addHeader("If-Modified-Since", oneMinuteAgo);
135
136 assertFalse(request.checkNotModified(currentTime));
137 assertEquals(200, servletResponse.getStatus());
138 assertEquals("" + currentTime, servletResponse.getHeader("Last-Modified"));
139 }
140
141 @Test
142 public void checkNotModifiedTimestampForHEAD() {
143 long currentTime = new Date().getTime();
144 servletRequest.setMethod("HEAD");
145 servletRequest.addHeader("If-Modified-Since", currentTime);
146
147 assertTrue(request.checkNotModified(currentTime));
148 assertEquals(304, servletResponse.getStatus());
149 }
150
151 @Test
152 public void checkModifiedTimestampForHEAD() {
153 long currentTime = new Date().getTime();
154 long oneMinuteAgo = currentTime - (1000 * 60);
155 servletRequest.setMethod("HEAD");
156 servletRequest.addHeader("If-Modified-Since", oneMinuteAgo);
157
158 assertFalse(request.checkNotModified(currentTime));
159 assertEquals(200, servletResponse.getStatus());
160 assertEquals(""+currentTime, servletResponse.getHeader("Last-Modified"));
161 }
162
163 @Test
164 public void checkNotModifiedTimestampWithLengthPart() {
165 long currentTime = Date.parse("Wed, 09 Apr 2014 09:57:42 GMT");
166 servletRequest.setMethod("GET");
167 servletRequest.addHeader("If-Modified-Since", "Wed, 09 Apr 2014 09:57:42 GMT; length=13774");
168
169 assertTrue(request.checkNotModified(currentTime));
170 assertEquals(304, servletResponse.getStatus());
171 }
172
173 @Test
174 public void checkModifiedTimestampWithLengthPart() {
175 long currentTime = Date.parse("Wed, 09 Apr 2014 09:57:42 GMT");
176 servletRequest.setMethod("GET");
177 servletRequest.addHeader("If-Modified-Since", "Wed, 08 Apr 2014 09:57:42 GMT; length=13774");
178
179 assertFalse(request.checkNotModified(currentTime));
180 assertEquals(200, servletResponse.getStatus());
181 assertEquals("" + currentTime, servletResponse.getHeader("Last-Modified"));
182 }
183
184 @Test
185 public void checkNotModifiedETagForGET() {
186 String eTag = "\"Foo\"";
187 servletRequest.setMethod("GET");
188 servletRequest.addHeader("If-None-Match", eTag );
189
190 assertTrue(request.checkNotModified(eTag));
191 assertEquals(304, servletResponse.getStatus());
192 }
193
194 @Test
195 public void checkModifiedETagForGET() {
196 String currentETag = "\"Foo\"";
197 String oldEtag = "Bar";
198 servletRequest.setMethod("GET");
199 servletRequest.addHeader("If-None-Match", oldEtag);
200
201 assertFalse(request.checkNotModified(currentETag));
202 assertEquals(200, servletResponse.getStatus());
203 assertEquals(currentETag, servletResponse.getHeader("ETag"));
204 }
205
206 @Test
207 public void checkNotModifiedETagForHEAD() {
208 String eTag = "\"Foo\"";
209 servletRequest.setMethod("HEAD");
210 servletRequest.addHeader("If-None-Match", eTag );
211
212 assertTrue(request.checkNotModified(eTag));
213 assertEquals(304, servletResponse.getStatus());
214 }
215
216 @Test
217 public void checkModifiedETagForHEAD() {
218 String currentETag = "\"Foo\"";
219 String oldEtag = "Bar";
220 servletRequest.setMethod("HEAD");
221 servletRequest.addHeader("If-None-Match", oldEtag);
222
223 assertFalse(request.checkNotModified(currentETag));
224 assertEquals(200, servletResponse.getStatus());
225 assertEquals(currentETag, servletResponse.getHeader("ETag"));
226 }
227
228 }