/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.web.filter; import javax.servlet.http.HttpServletRequestWrapper; import org.springframework.mock.web.MockFilterChain; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpServletResponse; import junit.framework.TestCase; public class ASCIICharactersFilterTest extends TestCase { private MockHttpServletRequest request = new MockHttpServletRequest(); private MockHttpServletResponse response = new MockHttpServletResponse(); private MockFilterChain chain = new MockFilterChain(); public void testASCIICharacters() throws Exception { request.setProtocol( "http" ); request.setServerName( "localhost" ); request.setCharacterEncoding( "UTF-8" ); request.setParameter( "param1", "12345" ); request.setParameter( "param2", "ABCd" ); request.setParameter( "param3", "%00" ); request.setParameter( "param4", "?key1=%00" ); request.setParameter( "param5", "?key1=%00&key2=555" ); request.setParameter( "param6", "page=2&op=browse&selecteddomainkey=&selectedmenukey=&loadmainstartpage=true" ); request.setParameter( "param7", "adminpage?page=2&op=browse&selecteddomainkey=%0p&selectedmenukey=&loadmainstartpage=true" ); request.setParameter( "param8", "adminpage?page=2&page=%00&page=ABc" ); request.setParameter( "param9", "a?key1=%00" ); request.setParameter( "param10", "\u0000" ); request.setParameter( "param11", "English-speaking world" ); request.setParameter( "param12", "100%" ); request.setParameter( "param13", "rya@enonic.com" ); request.setParameter( "param14", "\u001F" ); request.setParameter( "param15", "\u0020" ); request.setParameter( "param16", "\u0011" ); request.setParameter( "param17", "\u007F" ); request.setParameter( "param18", "\u007E" ); request.setParameter( "param19", "\t" ); request.setParameter( "param20", "\r" ); request.setParameter( "param22", "Bl\u00e5b\u00e6r" ); // Blueberry in Norwegian request.setParameter( "param23", "\u0447\u0435\u0440\u043D\u0438\u043A\u0431" ); // Blueberry in Russian request.setParameter( "param24", "x>10" ); // CMS-156 case request.setParameter( "param25", "x>=10" ); // CMS-156 case ASCIICharactersFilter filter = new ASCIICharactersFilter(); filter.doFilter( request, response, chain ); HttpServletRequestWrapper result = (HttpServletRequestWrapper) chain.getRequest(); // verify assertEquals( "12345", result.getParameter( "param1" ) ); assertEquals( "ABCd", result.getParameter( "param2" ) ); assertEquals( "%00", result.getParameter( "param3" ) ); assertEquals( "?key1=%00", result.getParameter( "param4" ) ); assertEquals( "?key1=%00&key2=555", result.getParameter( "param5" ) ); assertEquals( "page=2&op=browse&selecteddomainkey=&selectedmenukey=&loadmainstartpage=true", result.getParameter( "param6" ) ); assertEquals( "adminpage?page=2&op=browse&selecteddomainkey=%0p&selectedmenukey=&loadmainstartpage=true", result.getParameter( "param7" ) ); assertEquals( "adminpage?page=2&page=%00&page=ABc", result.getParameter( "param8" ) ); assertEquals( "a?key1=%00", result.getParameter( "param9" ) ); assertEquals( "", result.getParameter( "param10" ) ); assertEquals( "English-speaking world", result.getParameter( "param11" ) ); assertEquals( "100%", result.getParameter( "param12" ) ); assertEquals( "rya@enonic.com", result.getParameter( "param13" ) ); assertEquals( "", result.getParameter( "param14" ) ); assertEquals( "\u0020", result.getParameter( "param15" ) ); assertEquals( "", result.getParameter( "param16" ) ); assertEquals( "", result.getParameter( "param17" ) ); assertEquals( "\u007E", result.getParameter( "param18" ) ); assertEquals( "\t", result.getParameter( "param19" ) ); assertEquals( "\r", result.getParameter( "param20" ) ); assertEquals( "Bl\u00e5b\u00e6r", result.getParameter( "param22" ) ); assertEquals( "\u0447\u0435\u0440\u043D\u0438\u043A\u0431", result.getParameter( "param23" ) ); assertEquals( "x>10", result.getParameter( "param24" ) ); assertEquals( "x>=10", result.getParameter( "param25" ) ); } }