/* (c) 2014 - 2016 Open Source Geospatial Foundation - all rights reserved * (c) 2001 - 2013 OpenPlans * This code is licensed under the GPL 2.0 license, available at the root * application directory. */ package org.geoserver.filters; import static org.junit.Assert.assertEquals; import java.io.BufferedReader; import java.util.Map; import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; import org.junit.Test; import org.springframework.web.util.WebUtils; import org.springframework.mock.web.MockHttpServletRequest; public class BufferedRequestWrapperTest extends RequestWrapperTestSupport { @Test public void testGetInputStream() throws Exception { for (int i = 0; i < testStrings.length; i++) { doInputStreamTest(testStrings[i]); } } @Test public void testGetReader() throws Exception { for (int i = 0; i < testStrings.length; i++) { doGetReaderTest(testStrings[i]); } } public void doInputStreamTest(String testString) throws Exception { HttpServletRequest req = makeRequest(testString, null); BufferedRequestWrapper wrapper = new BufferedRequestWrapper(req, WebUtils.DEFAULT_CHARACTER_ENCODING, testString.getBytes()); ServletInputStream sis = req.getInputStream(); byte b[] = new byte[32]; int amountRead; while ((sis.readLine(b, 0, 32)) > 0) { /* clear out the request body */ } sis = wrapper.getInputStream(); StringBuffer buff = new StringBuffer(); while ((amountRead = sis.readLine(b, 0, 32)) != 0) { buff.append(new String(b, 0, amountRead)); } assertEquals(buff.toString(), testString); } public void doGetReaderTest(String testString) throws Exception { HttpServletRequest req = makeRequest(testString, null); BufferedReader br = req.getReader(); while ((br.readLine()) != null) { /* clear out the body */ } BufferedRequestWrapper wrapper = new BufferedRequestWrapper(req, WebUtils.DEFAULT_CHARACTER_ENCODING, testString.getBytes()); StringBuffer buff = new StringBuffer(); int c; br = wrapper.getReader(); while ((c = br.read()) != -1) { buff.append((char) c); } assertEquals(buff.toString(), testString); } @Test public void testMixedRequest() throws Exception { String body = "a=1&b=2"; String queryString = "c=3&d=4"; HttpServletRequest req = makeRequest(body, queryString); BufferedReader br = req.getReader(); while ((br.readLine()) != null) { /* clear out the body */ } BufferedRequestWrapper wrapper = new BufferedRequestWrapper(req, "UTF-8", body.getBytes()); Map params = wrapper.getParameterMap(); assertEquals(4, params.size()); assertEquals("1", ((String[]) params.get("a"))[0]); assertEquals("2", ((String[]) params.get("b"))[0]); assertEquals("3", ((String[]) params.get("c"))[0]); assertEquals("4", ((String[]) params.get("d"))[0]); } @Test public void testNoContentType() throws Exception { String body = "a=1&b=2"; String queryString = "c=3&d=4"; MockHttpServletRequest req = makeRequest(body, queryString); // reset the content type req.setContentType(null); BufferedReader br = req.getReader(); while ((br.readLine()) != null) { /* clear out the body */ } // should not NPE like it did BufferedRequestWrapper wrapper = new BufferedRequestWrapper(req, "UTF-8", body.getBytes()); Map params = wrapper.getParameterMap(); assertEquals(0, params.size()); } @Test public void testEmptyPost() throws Exception { MockHttpServletRequest req = makeRequest("", ""); // reset the content type req.setContentType(null); BufferedReader br = req.getReader(); while ((br.readLine()) != null) { /* clear out the body */ } // should not NPE like it did BufferedRequestWrapper wrapper = new BufferedRequestWrapper(req, "UTF-8", "".getBytes()); Map params = wrapper.getParameterMap(); assertEquals(0, params.size()); } }