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 );