Author: ajaquith
Date: Thu Jun 12 22:02:16 2008
New Revision: 667337

URL: http://svn.apache.org/viewvc?rev=667337&view=rev
Log:
Removed TestHttpServletRequest, TestHttpServletResponse, TestHttpSession, 
TestFilterChain, TestFilterConfig, TestServletContext in favor of the 
much-superior Stripes mock objects. TestEngine was retrofitted with the Stripes 
mocks and all unit tests were also changed. In particular, take note of the 
TestEngine.newHttpRequest() factory method, which should be used to create test 
request objects.

Removed:
    incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/TestFilterChain.java
    incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/TestFilterConfig.java
    incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/TestHttpServletRequest.java
    incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/TestHttpServletResponse.java
    incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/TestHttpSession.java
    incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/TestServletContext.java
Modified:
    incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/TestEngine.java
    incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/TestJDBCDataSource.java
    incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/WikiSessionTest.java

Modified: incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/TestEngine.java
URL: 
http://svn.apache.org/viewvc/incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/TestEngine.java?rev=667337&r1=667336&r2=667337&view=diff
==============================================================================
--- incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/TestEngine.java (original)
+++ incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/TestEngine.java Thu Jun 12 
22:02:16 2008
@@ -3,8 +3,14 @@
 import java.util.Properties;
 import java.io.*;
 
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
 
+import net.sourceforge.stripes.mock.MockHttpServletRequest;
+import net.sourceforge.stripes.mock.MockHttpSession;
+import net.sourceforge.stripes.mock.MockServletContext;
+
 import org.apache.log4j.Logger;
 
 import com.ecyrd.jspwiki.attachment.Attachment;
@@ -57,11 +63,14 @@
     public TestEngine( Properties props )
         throws WikiException
     {
-        super( props );
+        super( new MockServletContext( "test" ), "test", props );
+        
+        // Stash the WikiEngine in the servlet context
+        ServletContext servletContext = this.getServletContext();
+        servletContext.setAttribute("com.ecyrd.jspwiki.WikiEngine", this);
 
         // Set up long-running admin session
-        TestHttpServletRequest request = new TestHttpServletRequest();
-        request.setRemoteAddr( "53.33.128.9" );
+        HttpServletRequest request = newHttpRequest();
         m_adminWikiSession = WikiSession.getWikiSession( this, request );
         this.getAuthenticationManager().login( m_adminWikiSession,
                 Users.ADMIN,
@@ -69,8 +78,7 @@
         m_adminSession = request.getSession();
 
         // Set up a test Janne session
-        request = new TestHttpServletRequest();
-        request.setRemoteAddr( "42.22.17.8" );
+        request = newHttpRequest();
         m_janneWikiSession = WikiSession.getWikiSession( this, request );
         this.getAuthenticationManager().login( m_janneWikiSession,
                 Users.JANNE,
@@ -78,11 +86,33 @@
         m_janneSession = request.getSession();
 
         // Set up guest session
-        request = new TestHttpServletRequest();
-        request.setRemoteAddr( "42.22.17.8" );
+        request = newHttpRequest();
         m_guestWikiSession = WikiSession.getWikiSession( this, request );
     }
+    
+    /**
+     * Creates a correctly-instantiated mock HttpServletRequest with an 
associated
+     * HttpSession.
+     * @return the new request
+     */
+    public MockHttpServletRequest newHttpRequest()
+    {
+        return newHttpRequest( "/Wiki.jsp" );
+    }
 
+    /**
+     * Creates a correctly-instantiated mock HttpServletRequest with an 
associated
+     * HttpSession and path.
+     * @param path the path relative to the wiki context, for example 
"/Wiki.jsp"
+     * @return the new request
+     */
+    public MockHttpServletRequest newHttpRequest( String path )
+    {
+        MockHttpServletRequest request = new MockHttpServletRequest( 
"/JSPWiki", path );
+        request.setSession( new MockHttpSession( this.getServletContext() ) );
+        return request;
+    }
+    
     public static void emptyWorkDir()
     {
         Properties properties = new Properties();
@@ -255,8 +285,8 @@
         throws WikiException
     {
         // Build new request and associate our admin session
-        TestHttpServletRequest request = new TestHttpServletRequest();
-        request.m_session = m_adminSession;
+        MockHttpServletRequest request = new MockHttpServletRequest( 
"/JSPWiki", "/Wiki.jsp" );
+        request.setSession( m_adminSession );
 
         // Create page and wiki context
         WikiPage page = new WikiPage( this, pageName );
@@ -268,8 +298,8 @@
         throws WikiException
     {
         // Build new request and associate our Janne session
-        TestHttpServletRequest request = new TestHttpServletRequest();
-        request.m_session = m_janneSession;
+        MockHttpServletRequest request = new MockHttpServletRequest( 
"/JSPWiki", "/Wiki.jsp" );
+        request.setSession( m_janneSession );
 
         // Create page and wiki context
         WikiPage page = new WikiPage( this, pageName );

Modified: 
incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/TestJDBCDataSource.java
URL: 
http://svn.apache.org/viewvc/incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/TestJDBCDataSource.java?rev=667337&r1=667336&r2=667337&view=diff
==============================================================================
--- incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/TestJDBCDataSource.java 
(original)
+++ incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/TestJDBCDataSource.java Thu 
Jun 12 22:02:16 2008
@@ -126,8 +126,8 @@
     /**
      * Initialization method that reads a File, and attempts to locate and load
      * the JDBC driver from properties specified therein.
-     * @throws SQLException
      * @param file the file containing the JDBC properties
+     * @throws SQLException
      */
     protected void initializeJDBC( File file ) throws Exception
     {

Modified: incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/WikiSessionTest.java
URL: 
http://svn.apache.org/viewvc/incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/WikiSessionTest.java?rev=667337&r1=667336&r2=667337&view=diff
==============================================================================
--- incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/WikiSessionTest.java 
(original)
+++ incubator/jspwiki/trunk/tests/com/ecyrd/jspwiki/WikiSessionTest.java Thu 
Jun 12 22:02:16 2008
@@ -6,9 +6,7 @@
 import java.util.Properties;
 import java.util.Set;
 
-import javax.servlet.Filter;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
+import javax.servlet.*;
 import javax.servlet.http.Cookie;
 import javax.servlet.http.HttpServletRequest;
 
@@ -16,6 +14,8 @@
 import junit.framework.TestCase;
 import junit.framework.TestSuite;
 
+import net.sourceforge.stripes.mock.*;
+
 import org.apache.commons.lang.ArrayUtils;
 
 import com.ecyrd.jspwiki.auth.AuthenticationManager;
@@ -29,7 +29,7 @@
 public class WikiSessionTest extends TestCase
 {
 
-    private WikiEngine m_engine = null;
+    private TestEngine m_engine = null;
     
     protected void setUp() throws Exception
     {
@@ -107,16 +107,12 @@
     
     public void testIPAddress() throws ServletException, IOException
     {
-        TestHttpSession session = new TestHttpSession();
-        TestHttpServletRequest request;
+        MockHttpServletRequest request;
         WikiSession wikiSession;
         
         // A naked HTTP request without userPrincipal/remoteUser should be 
anonymous
-        request = new TestHttpServletRequest();
+        request = m_engine.newHttpRequest();
         request.setUserPrincipal( null );
-        request.setRemoteUser( null );
-        request.setRemoteAddr( "127.0.0.1" );
-        request.m_session = session;
         runSecurityFilter(m_engine, request);
         wikiSession = WikiSession.getWikiSession( m_engine, request );
         assertTrue( wikiSession.isAnonymous());
@@ -124,51 +120,12 @@
     
     public void testUserPrincipal() throws ServletException, IOException
     {
-        TestHttpSession session = new TestHttpSession();
-        TestHttpServletRequest request;
+        MockHttpServletRequest request;
         WikiSession wikiSession;
         
         // Changing the UserPrincipal value should cause the user to be 
authenticated...
-        request = new TestHttpServletRequest();
+        request = m_engine.newHttpRequest();
         request.setUserPrincipal( new WikiPrincipal( "Fred Flintstone") );
-        request.setRemoteUser( null );
-        request.setRemoteAddr( "127.0.0.1" );
-        request.m_session = session;
-        runSecurityFilter(m_engine, request);
-        wikiSession = WikiSession.getWikiSession( m_engine, request );
-        assertTrue( wikiSession.isAuthenticated());
-        assertEquals( "Fred Flintstone", 
wikiSession.getUserPrincipal().getName() );
-    }
-        
-    public void testRemoteUser() throws ServletException, IOException
-    {
-        TestHttpSession session = new TestHttpSession();
-        TestHttpServletRequest request;
-        WikiSession wikiSession;
-            
-        // If we set the remoteUser field is set, that's what will count as 
authenticated
-        request = new TestHttpServletRequest();
-        request.setRemoteUser( "fred" );
-        request.setRemoteAddr( "127.0.0.1" );
-        request.m_session = session;
-        runSecurityFilter(m_engine, request);
-        wikiSession = WikiSession.getWikiSession( m_engine, request );
-        assertTrue( wikiSession.isAuthenticated());
-        assertEquals( "fred", wikiSession.getUserPrincipal().getName() );
-    }
-        
-    public void testUserPrincipalAndRemoteUser() throws ServletException, 
IOException
-    {
-        TestHttpSession session = new TestHttpSession();
-        TestHttpServletRequest request;
-        WikiSession wikiSession;
-        
-        // If we twiddle the remoteUser field too, it should still prefer the 
UserPrincipal value...
-        request = new TestHttpServletRequest();
-        request.setUserPrincipal( new WikiPrincipal( "Fred Flintstone") );
-        request.setRemoteUser( "fred" );
-        request.setRemoteAddr( "127.0.0.1" );
-        request.m_session = session;
         runSecurityFilter(m_engine, request);
         wikiSession = WikiSession.getWikiSession( m_engine, request );
         assertTrue( wikiSession.isAuthenticated());
@@ -177,18 +134,14 @@
         
     public void testAssertionCookie() throws ServletException, IOException
     {
-        TestHttpSession session = new TestHttpSession();
-        TestHttpServletRequest request;
+        MockHttpServletRequest request;
         WikiSession wikiSession;
         
         // Adding the magic "assertion cookie" should  set asserted status.
-        request = new TestHttpServletRequest();
+        request = m_engine.newHttpRequest();
         request.setUserPrincipal( null );
-        request.setRemoteUser( null );
-        request.setRemoteAddr( "127.0.0.1" );
-        request.m_session = session;
         String cookieName = CookieAssertionLoginModule.PREFS_COOKIE_NAME;
-        request.m_cookies = new Cookie[] { new Cookie( cookieName, 
"FredFlintstone" ) };
+        request.setCookies( new Cookie[] { new Cookie( cookieName, 
"FredFlintstone" ) } );
         runSecurityFilter(m_engine, request);
         wikiSession = WikiSession.getWikiSession( m_engine, request );
         assertTrue( wikiSession.isAsserted());
@@ -197,12 +150,11 @@
 
     public void testAuthenticationCookieDefaults() throws ServletException, 
IOException
     {
-        TestHttpSession session = new TestHttpSession();
-        TestHttpServletRequest request;
+        MockHttpServletRequest request;
         WikiSession wikiSession;
         
         // Set the authentication cookie first
-        TestHttpServletResponse response = new TestHttpServletResponse();
+        MockHttpServletResponse response = new MockHttpServletResponse();
         CookieAuthenticationLoginModule.setLoginCookie( m_engine, response, 
"Fred Flintstone" );
         Cookie[] cookies = response.getCookies();
         assertEquals(1, cookies.length);
@@ -210,12 +162,9 @@
         
         // Adding the magic "authentication cookie" should NOT count as 
authenticated in the default case
         // (because cookie authentication is OFF).
-        request = new TestHttpServletRequest();
+        request = m_engine.newHttpRequest();
         request.setUserPrincipal( null );
-        request.setRemoteUser( null );
-        request.setRemoteAddr( "127.0.0.1" );
-        request.m_session = session;
-        request.m_cookies = new Cookie[] { new Cookie( "JSPWikiUID", uid ) };
+        request.setCookies( new Cookie[] { new Cookie( "JSPWikiUID", uid ) } );
         runSecurityFilter(m_engine, request);
         wikiSession = WikiSession.getWikiSession( m_engine, request );
         assertTrue( wikiSession.isAnonymous());
@@ -223,7 +172,7 @@
         assertEquals( "127.0.0.1", wikiSession.getUserPrincipal().getName() );
         
         // Clear the authentication cookie
-        response = new TestHttpServletResponse();
+        response = new MockHttpServletResponse();
         CookieAuthenticationLoginModule.clearLoginCookie( m_engine, request, 
response );
     }
     
@@ -234,24 +183,20 @@
         props.setProperty( AuthenticationManager.PROP_ALLOW_COOKIE_AUTH, 
"true");
         m_engine = new TestEngine( props );
         
-        TestHttpSession session = new TestHttpSession();
-        TestHttpServletRequest request;
+        MockHttpServletRequest request;
         WikiSession wikiSession;
         
         // Set the authentication cookie first
-        TestHttpServletResponse response = new TestHttpServletResponse();
+        MockHttpServletResponse response = new MockHttpServletResponse();
         CookieAuthenticationLoginModule.setLoginCookie( m_engine, response, 
"Fred Flintstone" );
         Cookie[] cookies = response.getCookies();
         assertEquals(1, cookies.length);
         String uid = cookies[0].getValue();
         
         // Adding the magic "authentication cookie" should count as 
authenticated
-        request = new TestHttpServletRequest();
+        request = m_engine.newHttpRequest();
         request.setUserPrincipal( null );
-        request.setRemoteUser( null );
-        request.setRemoteAddr( "127.0.0.1" );
-        request.m_session = session;
-        request.m_cookies = new Cookie[] { new Cookie( "JSPWikiUID", uid ) };
+        request.setCookies( new Cookie[] { new Cookie( "JSPWikiUID", uid ) } );
         runSecurityFilter(m_engine, request);
         wikiSession = WikiSession.getWikiSession( m_engine, request );
         assertFalse( wikiSession.isAnonymous());
@@ -259,7 +204,7 @@
         assertEquals( "Fred Flintstone", 
wikiSession.getUserPrincipal().getName() );
         
         // Clear the authentication cookie
-        response = new TestHttpServletResponse();
+        response = new MockHttpServletResponse();
         CookieAuthenticationLoginModule.clearLoginCookie( m_engine, request, 
response );
     }
     
@@ -269,14 +214,13 @@
      * @return the new session
      * @throws Exception
      */
-    public static WikiSession anonymousSession( WikiEngine engine ) throws 
Exception
+    public static WikiSession anonymousSession( TestEngine engine ) throws 
Exception
     {
         // Build anon session
-        TestHttpServletRequest request = new TestHttpServletRequest();
-        request.setRemoteAddr( "53.33.128.9" );
+        MockHttpServletRequest request = engine.newHttpRequest();
         
         // Log in
-        runSecurityFilter(engine, request);
+        runSecurityFilter( engine, request );
         
         // Make sure the user is actually anonymous
         WikiSession session = WikiSession.getWikiSession( engine, request );
@@ -287,12 +231,12 @@
         return session;
     }
 
-    public static WikiSession assertedSession( WikiEngine engine, String name 
) throws Exception
+    public static WikiSession assertedSession( TestEngine engine, String name 
) throws Exception
     {
         return assertedSession( engine, name, new Principal[0] );
     }
     
-    public static WikiSession assertedSession( WikiEngine engine, String name, 
Principal[] roles ) throws Exception
+    public static WikiSession assertedSession( TestEngine engine, String name, 
Principal[] roles ) throws Exception
     {
         // We can use cookies right?
         if ( !engine.getAuthenticationManager().allowsCookieAssertions() )
@@ -301,14 +245,13 @@
         }
         
         // Build anon session
-        TestHttpServletRequest request = new TestHttpServletRequest();
+        MockHttpServletRequest request = engine.newHttpRequest();
         Set<String> r = new HashSet<String>();
         for ( int i = 0; i < roles.length; i++ )
         {
             r.add( roles[i].getName() );
         }
-        request.setRoles( r.toArray( new String[r.size()]) );
-        request.setRemoteAddr( "53.33.128.9" );
+        request.setRoles( r );
         
         // Set cookie
         Cookie cookie = new Cookie( 
CookieAssertionLoginModule.PREFS_COOKIE_NAME, name );
@@ -322,16 +265,15 @@
         return session;
     }
     
-    public static WikiSession adminSession( WikiEngine engine ) throws 
Exception
+    public static WikiSession adminSession( TestEngine engine ) throws 
Exception
     {
         return authenticatedSession( engine, Users.ADMIN, Users.ADMIN_PASS );
     }
     
-    public static WikiSession authenticatedSession( WikiEngine engine, String 
id, String password ) throws Exception
+    public static WikiSession authenticatedSession( TestEngine engine, String 
id, String password ) throws Exception
     {
         // Build anon session
-        TestHttpServletRequest request = new TestHttpServletRequest();
-        request.setRemoteAddr( "53.33.128.9" );
+        MockHttpServletRequest request = engine.newHttpRequest();
         
         // Log in as anon
         runSecurityFilter(engine, request);
@@ -348,17 +290,16 @@
         return session;
     }
     
-    public static WikiSession containerAuthenticatedSession( WikiEngine 
engine, String id, Principal[] roles ) throws Exception
+    public static WikiSession containerAuthenticatedSession( TestEngine 
engine, String id, Principal[] roles ) throws Exception
     {
         // Build container session
-        TestHttpServletRequest request = new TestHttpServletRequest();
+        MockHttpServletRequest request = engine.newHttpRequest();
         Set<String> r = new HashSet<String>();
         for ( int i = 0; i < roles.length; i++ )
         {
             r.add( roles[i].getName() );
         }
-        request.setRoles( r.toArray( new String[r.size()]) );
-        request.setRemoteAddr( "53.33.128.9" );
+        request.setRoles( r );
         request.setUserPrincipal( new WikiPrincipal( id ) );
         
         // Log in
@@ -373,14 +314,59 @@
         return session;
     }
     
+    /**
+     * "Scaffolding" method that runs the session security filter on a mock 
request. We do this by creating a
+     * complete mock servlet context and filter chain, and running the request 
through it. 
+     * @param engine the wiki engine
+     * @param request the mock request to pass itnto the 
+     * @throws ServletException
+     * @throws IOException
+     */
     private static void runSecurityFilter(WikiEngine engine, 
HttpServletRequest request) throws ServletException, IOException
     {
+        // Create a mock servlet context and stash the wiki engine in it
+        ServletContext servletCtx = new MockServletContext( "JSPWiki" );
+        servletCtx.setAttribute( "com.ecyrd.jspwiki.WikiEngine", engine );
+        
+        // Create a mock filter configuration and add the servlet context we 
just created
+        MockFilterConfig filterConfig = new MockFilterConfig();
+        filterConfig.setFilterName( "WikiServletFilter" );
+        filterConfig.setServletContext( servletCtx );
+        
+        // Create the security filter and run the request  through it
         Filter filter = new WikiServletFilter();
-        FilterConfig filterConfig = new TestFilterConfig(new 
TestServletContext(engine));
+        MockFilterChain chain = new MockFilterChain();
+        chain.addFilter( filter );
+        Servlet servlet = new MockServlet();
+        chain.setServlet( servlet );
         filter.init(filterConfig);
-        filter.doFilter(request, null, new TestFilterChain());
+        filter.doFilter(request, null, chain );
     }
 
+    private static class MockServlet implements Servlet
+    {
+        private ServletConfig m_config;
+        
+        public void destroy() { }
+
+        public ServletConfig getServletConfig()
+        {
+            return m_config;
+        }
+
+        public String getServletInfo()
+        {
+            return "Mock servlet";
+        }
+
+        public void init( ServletConfig config ) throws ServletException
+        {
+            m_config = config;
+        }
+
+        public void service( ServletRequest request, ServletResponse response 
) throws ServletException, IOException { }
+    }
+    
     public static Test suite() 
     {
         return new TestSuite( WikiSessionTest.class );


Reply via email to