1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17 package org.apache.commons.fileupload;
18
19 import java.io.BufferedReader;
20 import java.io.ByteArrayInputStream;
21 import java.io.IOException;
22 import java.io.InputStream;
23 import java.io.UnsupportedEncodingException;
24 import java.security.Principal;
25 import java.util.Enumeration;
26 import java.util.Locale;
27 import java.util.Map;
28
29 import javax.servlet.RequestDispatcher;
30 import javax.servlet.ServletInputStream;
31 import javax.servlet.http.Cookie;
32 import javax.servlet.http.HttpServletRequest;
33 import javax.servlet.http.HttpSession;
34
35 public class MockHttpServletRequest implements HttpServletRequest {
36
37 private final InputStream m_requestData;
38
39 private long length;
40
41 private String m_strContentType;
42
43 private int readLimit = -1;
44
45 private final Map<String, String> m_headers = new java.util.HashMap<String, String>();
46
47 /**
48 * Creates a new instance with the given request data
49 * and content type.
50 */
51 public MockHttpServletRequest(
52 final byte[] requestData,
53 final String strContentType) {
54 this(new ByteArrayInputStream(requestData),
55 requestData.length, strContentType);
56 }
57
58 /**
59 * Creates a new instance with the given request data
60 * and content type.
61 */
62 public MockHttpServletRequest(
63 final InputStream requestData,
64 final long requestLength,
65 final String strContentType) {
66 m_requestData = requestData;
67 length = requestLength;
68 m_strContentType = strContentType;
69 m_headers.put(FileUploadBase.CONTENT_TYPE, strContentType);
70 }
71
72 /**
73 * @see javax.servlet.http.HttpServletRequest#getAuthType()
74 */
75 public String getAuthType() {
76 return null;
77 }
78
79 /**
80 * @see javax.servlet.http.HttpServletRequest#getCookies()
81 */
82 public Cookie[] getCookies() {
83 return null;
84 }
85
86 /**
87 * @see javax.servlet.http.HttpServletRequest#getDateHeader(String)
88 */
89 public long getDateHeader(String arg0) {
90 return 0;
91 }
92
93 /**
94 * @see javax.servlet.http.HttpServletRequest#getHeader(String)
95 */
96 public String getHeader(String headerName) {
97 return m_headers.get(headerName);
98 }
99
100 /**
101 * @see javax.servlet.http.HttpServletRequest#getHeaders(String)
102 */
103 public Enumeration<String> getHeaders(String arg0) {
104 // todo - implement
105 return null;
106 }
107
108 /**
109 * @see javax.servlet.http.HttpServletRequest#getHeaderNames()
110 */
111 public Enumeration<String> getHeaderNames() {
112 // todo - implement
113 return null;
114 }
115
116 /**
117 * @see javax.servlet.http.HttpServletRequest#getIntHeader(String)
118 */
119 public int getIntHeader(String arg0) {
120 return 0;
121 }
122
123 /**
124 * @see javax.servlet.http.HttpServletRequest#getMethod()
125 */
126 public String getMethod() {
127 return null;
128 }
129
130 /**
131 * @see javax.servlet.http.HttpServletRequest#getPathInfo()
132 */
133 public String getPathInfo() {
134 return null;
135 }
136
137 /**
138 * @see javax.servlet.http.HttpServletRequest#getPathTranslated()
139 */
140 public String getPathTranslated() {
141 return null;
142 }
143
144 /**
145 * @see javax.servlet.http.HttpServletRequest#getContextPath()
146 */
147 public String getContextPath() {
148 return null;
149 }
150
151 /**
152 * @see javax.servlet.http.HttpServletRequest#getQueryString()
153 */
154 public String getQueryString() {
155 return null;
156 }
157
158 /**
159 * @see javax.servlet.http.HttpServletRequest#getRemoteUser()
160 */
161 public String getRemoteUser() {
162 return null;
163 }
164
165 /**
166 * @see javax.servlet.http.HttpServletRequest#isUserInRole(String)
167 */
168 public boolean isUserInRole(String arg0) {
169 return false;
170 }
171
172 /**
173 * @see javax.servlet.http.HttpServletRequest#getUserPrincipal()
174 */
175 public Principal getUserPrincipal() {
176 return null;
177 }
178
179 /**
180 * @see javax.servlet.http.HttpServletRequest#getRequestedSessionId()
181 */
182 public String getRequestedSessionId() {
183 return null;
184 }
185
186 /**
187 * @see javax.servlet.http.HttpServletRequest#getRequestURI()
188 */
189 public String getRequestURI() {
190 return null;
191 }
192
193 /**
194 * @see javax.servlet.http.HttpServletRequest#getRequestURL()
195 */
196 public StringBuffer getRequestURL() {
197 return null;
198 }
199
200 /**
201 * @see javax.servlet.http.HttpServletRequest#getServletPath()
202 */
203 public String getServletPath() {
204 return null;
205 }
206
207 /**
208 * @see javax.servlet.http.HttpServletRequest#getSession(boolean)
209 */
210 public HttpSession getSession(boolean arg0) {
211 return null;
212 }
213
214 /**
215 * @see javax.servlet.http.HttpServletRequest#getSession()
216 */
217 public HttpSession getSession() {
218 return null;
219 }
220
221 /**
222 * @see javax.servlet.http.HttpServletRequest#isRequestedSessionIdValid()
223 */
224 public boolean isRequestedSessionIdValid() {
225 return false;
226 }
227
228 /**
229 * @see javax.servlet.http.HttpServletRequest#isRequestedSessionIdFromCookie()
230 */
231 public boolean isRequestedSessionIdFromCookie() {
232 return false;
233 }
234
235 /**
236 * @see javax.servlet.http.HttpServletRequest#isRequestedSessionIdFromURL()
237 */
238 public boolean isRequestedSessionIdFromURL() {
239 return false;
240 }
241
242 /**
243 * @see javax.servlet.http.HttpServletRequest#isRequestedSessionIdFromUrl()
244 * @deprecated
245 */
246 @Deprecated
247 public boolean isRequestedSessionIdFromUrl() {
248 return false;
249 }
250
251 /**
252 * @see javax.servlet.ServletRequest#getAttribute(String)
253 */
254 public Object getAttribute(String arg0) {
255 return null;
256 }
257
258 /**
259 * @see javax.servlet.ServletRequest#getAttributeNames()
260 */
261 public Enumeration<String> getAttributeNames() {
262 return null;
263 }
264
265 /**
266 * @see javax.servlet.ServletRequest#getCharacterEncoding()
267 */
268 public String getCharacterEncoding() {
269 return null;
270 }
271
272 /**
273 * @see javax.servlet.ServletRequest#setCharacterEncoding(String)
274 */
275 public void setCharacterEncoding(String arg0)
276 throws UnsupportedEncodingException {
277 }
278
279 /**
280 * @see javax.servlet.ServletRequest#getContentLength()
281 */
282 public int getContentLength() {
283 int iLength = 0;
284
285 if (null == m_requestData) {
286 iLength = -1;
287 } else {
288 if (length > Integer.MAX_VALUE) {
289 throw new RuntimeException("Value '" + length + "' is too large to be converted to int");
290 }
291 iLength = (int) length;
292 }
293 return iLength;
294 }
295
296 /**
297 * For testing attack scenarios in SizesTest.
298 */
299 public void setContentLength(long length) {
300 this.length = length;
301 }
302
303 /**
304 * @see javax.servlet.ServletRequest#getContentType()
305 */
306 public String getContentType() {
307 return m_strContentType;
308 }
309
310 /**
311 * @see javax.servlet.ServletRequest#getInputStream()
312 */
313 public ServletInputStream getInputStream() throws IOException {
314 ServletInputStream sis = new MyServletInputStream(m_requestData, readLimit);
315 return sis;
316 }
317
318 /**
319 * Sets the read limit. This can be used to limit the number of bytes to read ahead.
320 *
321 * @param readLimit the read limit to use
322 */
323 public void setReadLimit(int readLimit) {
324 this.readLimit = readLimit;
325 }
326
327 /**
328 * @see javax.servlet.ServletRequest#getParameter(String)
329 */
330 public String getParameter(String arg0) {
331 return null;
332 }
333
334 /**
335 * @see javax.servlet.ServletRequest#getParameterNames()
336 */
337 public Enumeration<String> getParameterNames() {
338 return null;
339 }
340
341 /**
342 * @see javax.servlet.ServletRequest#getParameterValues(String)
343 */
344 public String[] getParameterValues(String arg0) {
345 return null;
346 }
347
348 /**
349 * @see javax.servlet.ServletRequest#getParameterMap()
350 */
351 public Map<String, String[]> getParameterMap() {
352 return null;
353 }
354
355 /**
356 * @see javax.servlet.ServletRequest#getProtocol()
357 */
358 public String getProtocol() {
359 return null;
360 }
361
362 /**
363 * @see javax.servlet.ServletRequest#getScheme()
364 */
365 public String getScheme() {
366 return null;
367 }
368
369 /**
370 * @see javax.servlet.ServletRequest#getServerName()
371 */
372 public String getServerName() {
373 return null;
374 }
375
376 /**
377 * @see javax.servlet.ServletRequest#getLocalName()
378 */
379 @SuppressWarnings("javadoc") // This is a Servlet 2.4 method
380 public String getLocalName() {
381 return null;
382 }
383
384 /**
385 * @see javax.servlet.ServletRequest#getServerPort()
386 */
387 public int getServerPort() {
388 return 0;
389 }
390
391 /**
392 * @see javax.servlet.ServletRequest#getLocalPort()
393 */
394 @SuppressWarnings("javadoc") // This is a Servlet 2.4 method
395 public int getLocalPort() {
396 return 0;
397 }
398
399 /**
400 * @see javax.servlet.ServletRequest#getRemotePort()
401 */
402 @SuppressWarnings("javadoc") // This is a Servlet 2.4 method
403 public int getRemotePort() {
404 return 0;
405 }
406
407 /**
408 * @see javax.servlet.ServletRequest#getReader()
409 */
410 public BufferedReader getReader() throws IOException {
411 return null;
412 }
413
414 /**
415 * @see javax.servlet.ServletRequest#getRemoteAddr()
416 */
417 public String getRemoteAddr() {
418 return null;
419 }
420
421 /**
422 * @see javax.servlet.ServletRequest#getLocalAddr()
423 */
424 @SuppressWarnings("javadoc") // This is a Servlet 2.4 method
425 public String getLocalAddr() {
426 return null;
427 }
428
429 /**
430 * @see javax.servlet.ServletRequest#getRemoteHost()
431 */
432 public String getRemoteHost() {
433 return null;
434 }
435
436 /**
437 * @see javax.servlet.ServletRequest#setAttribute(String, Object)
438 */
439 public void setAttribute(String arg0, Object arg1) {
440 }
441
442 /**
443 * @see javax.servlet.ServletRequest#removeAttribute(String)
444 */
445 public void removeAttribute(String arg0) {
446 }
447
448 /**
449 * @see javax.servlet.ServletRequest#getLocale()
450 */
451 public Locale getLocale() {
452 return null;
453 }
454
455 /**
456 * @see javax.servlet.ServletRequest#getLocales()
457 */
458 public Enumeration<Locale> getLocales() {
459 return null;
460 }
461
462 /**
463 * @see javax.servlet.ServletRequest#isSecure()
464 */
465 public boolean isSecure() {
466 return false;
467 }
468
469 /**
470 * @see javax.servlet.ServletRequest#getRequestDispatcher(String)
471 */
472 public RequestDispatcher getRequestDispatcher(String arg0) {
473 return null;
474 }
475
476 /**
477 * @see javax.servlet.ServletRequest#getRealPath(String)
478 * @deprecated
479 */
480 @Deprecated
481 public String getRealPath(String arg0) {
482 return null;
483 }
484
485 private static class MyServletInputStream
486 extends javax.servlet.ServletInputStream {
487
488 private final InputStream in;
489 private final int readLimit;
490
491 /**
492 * Creates a new instance, which returns the given
493 * streams data.
494 */
495 public MyServletInputStream(InputStream pStream, int readLimit) {
496 in = pStream;
497 this.readLimit = readLimit;
498 }
499
500 @Override
501 public int read() throws IOException {
502 return in.read();
503 }
504
505 @Override
506 public int read(byte b[], int off, int len) throws IOException {
507 if (readLimit > 0) {
508 return in.read(b, off, Math.min(readLimit, len));
509 }
510 return in.read(b, off, len);
511 }
512
513 }
514
515 }