/*******************************************************************************
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*******************************************************************************/
package org.apache.wink.server.internal;
import java.util.Arrays;
import javax.servlet.ServletRequest;
import junit.framework.TestCase;
import org.apache.wink.server.internal.servlet.WebSphereParametersFilter;
import org.springframework.mock.web.MockFilterChain;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
public class WebSphereParametersTest extends TestCase {
/*
* Test GET parameters.
*/
public void testGetParametersFilter() throws Exception {
// create mock servlet objects
MockHttpServletRequest request = new MockHttpServletRequest();
request.setMethod("GET");
request.setQueryString("a&b=&c=1&c=2");
MockHttpServletResponse response = new MockHttpServletResponse();
MockFilterChain chain = new MockFilterChain();
// test query parameters before parsing
assertEquals("Query parameters are not empty before parsing", 0, request.getParameterMap()
.size());
// invoke filter
new WebSphereParametersFilter().doFilter(request, response, chain);
// test query parameters
assertEquals("There are not 3 query parameters", 3, chain.getRequest().getParameterMap()
.size());
assertParameters(chain.getRequest(), "a", "b", "c");
}
/*
* Test POST (+GET) parameters.
*/
public void testPostParametersFilter() throws Exception {
// create mock servlet objects
MockHttpServletRequest request = new MockHttpServletRequest();
request.setMethod("POST");
request.setQueryString("a&b=&c=1&c=2");
request.setContentType(WebSphereParametersFilter.CONTENT_TYPE_WWW_FORM_URLENCODED);
request.setContent("d&e=&f=1&f=2".getBytes());
MockHttpServletResponse response = new MockHttpServletResponse();
MockFilterChain chain = new MockFilterChain();
// test query parameters before parsing
assertEquals("Query parameters are not empty before parsing", 0, request.getParameterMap()
.size());
// invoke filter
new WebSphereParametersFilter().doFilter(request, response, chain);
// test query and POST parameters
assertEquals("There are not 6 query parameters", 6, chain.getRequest().getParameterMap()
.size());
assertParameters(chain.getRequest(), "a", "b", "c");
assertParameters(chain.getRequest(), "d", "e", "f");
}
private static void assertParameters(ServletRequest request,
String nameNonValue,
String nameEmpty,
String nameDouble12) {
assertEquals("Parameter " + nameNonValue + " has value", "", request
.getParameter(nameNonValue));
assertEquals("Parameter " + nameEmpty + " is not empty", "", request
.getParameter(nameEmpty));
assertEquals("Parameter " + nameDouble12 + " has not two values",
Arrays.asList("1", "2"),
Arrays.asList(request.getParameterValues(nameDouble12)));
}
}