[Httpunit-commit] CVS: httpunit/test/com/meterware/servletunit ConfigTest.java,1.3,1.4 JUnitServletT
Brought to you by:
russgold
|
From: Russell G. <rus...@us...> - 2003-02-19 19:18:07
|
Update of /cvsroot/httpunit/httpunit/test/com/meterware/servletunit
In directory sc8-pr-cvs1:/tmp/cvs-serv2393/test/com/meterware/servletunit
Modified Files:
ConfigTest.java JUnitServletTest.java WebXMLString.java
WebXMLTest.java
Log Message:
Share ServletContext, autoload servlets as required
Index: ConfigTest.java
===================================================================
RCS file: /cvsroot/httpunit/httpunit/test/com/meterware/servletunit/ConfigTest.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- ConfigTest.java 20 May 2002 16:00:44 -0000 1.3
+++ ConfigTest.java 19 Feb 2003 19:17:59 -0000 1.4
@@ -2,7 +2,7 @@
/********************************************************************************************************************
* $Id$
*
-* Copyright (c) 2000-2001, Russell Gold
+* Copyright (c) 2000-2001,2003, Russell Gold
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
* documentation files (the "Software"), to deal in the Software without restriction, including without limitation
@@ -27,6 +27,7 @@
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
+import javax.servlet.ServletContext;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -65,6 +66,24 @@
assertNotNull( "No response received", response );
assertEquals( "content type", "text/plain", response.getContentType() );
assertEquals( "servlet name is " + ConfigServlet.class.getName(), response.getText() );
+ }
+
+
+ public void testContextAttributes() throws Exception {
+ final String servlet1Name = "something/interesting";
+ final String servlet2Name = "something/else";
+
+ ServletRunner sr = new ServletRunner();
+ sr.registerServlet( servlet1Name, ConfigServlet.class.getName() );
+ sr.registerServlet( servlet2Name, ConfigServlet.class.getName() );
+ ServletUnitClient wc = sr.newClient();
+ InvocationContext ic1 = wc.newInvocation( "http://localhost/" + servlet1Name );
+ ServletContext sc1 = ic1.getServlet().getServletConfig().getServletContext();
+ sc1.setAttribute( "sample", "found me" );
+
+ InvocationContext ic2 = wc.newInvocation( "http://localhost/" + servlet2Name );
+ ServletContext sc2 = ic2.getServlet().getServletConfig().getServletContext();
+ assertEquals( "attribute 'sample'", "found me", sc2.getAttribute( "sample") );
}
Index: JUnitServletTest.java
===================================================================
RCS file: /cvsroot/httpunit/httpunit/test/com/meterware/servletunit/JUnitServletTest.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- JUnitServletTest.java 17 Oct 2002 23:50:51 -0000 1.4
+++ JUnitServletTest.java 19 Feb 2003 19:18:00 -0000 1.5
@@ -2,7 +2,7 @@
/********************************************************************************************************************
* $Id$
*
- * Copyright (c) 2001-2002, Russell Gold
+ * Copyright (c) 2001-2003, Russell Gold
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
* documentation files (the "Software"), to deal in the Software without restriction, including without limitation
@@ -129,7 +129,7 @@
Properties params = new Properties();
params.setProperty( "color", "red" );
params.setProperty( "age", "12" );
- wxs.addServlet( "/SimpleServlet", SimpleGetServlet.class, params );
+ wxs.addServlet( "simple", "/SimpleServlet", SimpleGetServlet.class, params );
wxs.addServlet( "/JUnit", TestRunnerServlet.class );
MyFactory._runner = _runner = new ServletRunner( wxs.asInputStream() );
Index: WebXMLString.java
===================================================================
RCS file: /cvsroot/httpunit/httpunit/test/com/meterware/servletunit/WebXMLString.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- WebXMLString.java 30 Jan 2002 21:21:11 -0000 1.2
+++ WebXMLString.java 19 Feb 2003 19:18:00 -0000 1.3
@@ -2,7 +2,7 @@
/********************************************************************************************************************
* $Id$
*
- * Copyright (c) 2001, Russell Gold
+ * Copyright (c) 2001-2003, Russell Gold
*
* Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated
* documentation files (the "Software"), to deal in the Software without restriction, including without limitation
@@ -31,10 +31,20 @@
/**
* A class which allows dynamic creation of Servlet configuration XML
- * @author <a href="mailto:rus...@ac...">Russell Gold</a>
+ * @author <a href="mailto:rus...@ht...">Russell Gold</a>
**/
class WebXMLString {
+ private ArrayList _servlets = new ArrayList();
+ private ArrayList _mappings = new ArrayList();
+ private ArrayList _servletNames = new ArrayList();
+
+ private String _loginConfig = "";
+ private Hashtable _resources = new Hashtable();
+ private Hashtable _initParams = new Hashtable();
+ private Hashtable _contextParams = new Hashtable();
+ private Hashtable _loadOnStartup = new Hashtable();
+
ByteArrayInputStream asInputStream() throws UnsupportedEncodingException {
return new ByteArrayInputStream( asText().getBytes( "UTF-8" ) );
}
@@ -49,13 +59,15 @@
result.append( "</param-name>\n <param-value>" ).append( entry.getValue() ).append( "</param-value>\n </context-param>\n" );
}
for (int i = _servlets.size() - 1; i >= 0; i--) {
- result.append( " <servlet>\n <servlet-name>servlet_" ).append( i ).append( "</servlet-name>\n" );
+ Object name = _servletNames.get( i );
+ result.append( " <servlet>\n <servlet-name>" ).append( name ).append( "</servlet-name>\n" );
result.append( " <servlet-class>" ).append( ((Class) _servlets.get( i )).getName() ).append( "</servlet-class>\n" );
- appendParams( result, "init-param", (Hashtable) _initParams.get( new Integer( i ) ) );
+ appendParams( result, "init-param", (Hashtable) _initParams.get( name ) );
+ appendLoadOnStartup( result, _loadOnStartup.get( name ) );
result.append( " </servlet>\n" );
}
for (int i = _mappings.size() - 1; i >= 0; i--) {
- result.append( " <servlet-mapping>\n <servlet-name>servlet_" ).append( i ).append( "</servlet-name>\n" );
+ result.append( " <servlet-mapping>\n <servlet-name>" ).append( _servletNames.get( i ) ).append( "</servlet-name>\n" );
result.append( " <url-pattern>" ).append( _mappings.get( i ) ).append( "</url-pattern>\n </servlet-mapping>\n" );
}
for (Enumeration e = _resources.elements(); e.hasMoreElements();) {
@@ -67,6 +79,14 @@
}
+ private void appendLoadOnStartup( StringBuffer result, Object startupOrder ) {
+ if (startupOrder == null) return;
+ result.append( " <load-on-startup" );
+ if (startupOrder instanceof Number) result.append( ">" ).append( startupOrder ).append( "</load-on-startup>\n" );
+ else result.append( "/>\n" );
+ }
+
+
private void appendParams( StringBuffer result, String tagName, Hashtable params ) {
if (params == null) return;
for (Iterator it = params.entrySet().iterator(); it.hasNext();) {
@@ -84,14 +104,30 @@
void addServlet( String urlPattern, Class servletClass ) {
+ addServlet( "servlet_" + _servlets.size(), urlPattern, servletClass );
+ }
+
+
+ void addServlet( String name, String urlPattern, Class servletClass ) {
_servlets.add( servletClass );
_mappings.add( urlPattern );
+ _servletNames.add( name );
}
- void addServlet( String urlPattern, Class servletClass, Properties initParams ) {
- _initParams.put( new Integer( _servlets.size() ), initParams );
- addServlet( urlPattern, servletClass );
+ void addServlet( String name, String urlPattern, Class servletClass, Properties initParams ) {
+ _initParams.put( name, initParams );
+ addServlet( name, urlPattern, servletClass );
+ }
+
+
+ void setLoadOnStartup( String servletName ) {
+ _loadOnStartup.put( servletName, Boolean.TRUE );
+ }
+
+
+ void setLoadOnStartup( String servletName, int i ) {
+ _loadOnStartup.put( servletName, new Integer(i) );
}
@@ -131,14 +167,6 @@
void addAuthorizedRole( String resourceName, String roleName ) {
getWebResource( resourceName ).addAuthorizedRole( roleName );
}
-
-
- private ArrayList _servlets = new ArrayList();
- private ArrayList _mappings = new ArrayList();
- private String _loginConfig = "";
- private Hashtable _resources = new Hashtable();
- private Hashtable _initParams = new Hashtable();
- private Hashtable _contextParams = new Hashtable();
private WebResourceSpec getWebResource( String resourceName ) {
Index: WebXMLTest.java
===================================================================
RCS file: /cvsroot/httpunit/httpunit/test/com/meterware/servletunit/WebXMLTest.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- WebXMLTest.java 13 Feb 2003 20:25:56 -0000 1.14
+++ WebXMLTest.java 19 Feb 2003 19:18:00 -0000 1.15
@@ -31,6 +31,7 @@
import java.util.Arrays;
import javax.servlet.ServletException;
+import javax.servlet.ServletConfig;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -117,12 +118,13 @@
Properties params = new Properties();
params.setProperty( "color", "red" );
params.setProperty( "age", "12" );
- wxs.addServlet( "/SimpleServlet", SimpleGetServlet.class, params );
+ wxs.addServlet( "simple", "/SimpleServlet", SimpleGetServlet.class, params );
ServletRunner sr = new ServletRunner( toInputStream( wxs.asText() ) );
ServletUnitClient client = sr.newClient();
InvocationContext ic = client.newInvocation( "http://localhost/SimpleServlet" );
- assertNull( "init parameter 'gender' should be null", ic.getServlet().getServletConfig().getInitParameter( "gender" ) );
+ ServletConfig servletConfig = ic.getServlet().getServletConfig();
+ assertNull( "init parameter 'gender' should be null", servletConfig.getInitParameter( "gender" ) );
assertEquals( "init parameter via config", "red", ic.getServlet().getServletConfig().getInitParameter( "color" ) );
assertEquals( "init parameter directly", "12", ((HttpServlet) ic.getServlet()).getInitParameter( "age" ) );
}
@@ -288,6 +290,44 @@
}
+ /**
+ * Verifies that only those servlets designated will pre-load when the application is initialized.
+ * SimpleGetServlet and each of its subclasses adds its classname to the 'initialized' context attribute.
+ */
+ public void testLoadOnStartup() throws Exception {
+ WebXMLString wxs = new WebXMLString();
+ wxs.addServlet( "servlet1", "one", Servlet1.class );
+ wxs.setLoadOnStartup( "servlet1" );
+ wxs.addServlet( "servlet2", "two", Servlet2.class );
+ wxs.addServlet( "servlet3", "three", Servlet3.class );
+
+ ServletRunner sr = new ServletRunner( toInputStream( wxs.asText() ) );
+ ServletUnitClient wc = sr.newClient();
+ InvocationContext ic = wc.newInvocation( "http://localhost/three" );
+ assertEquals( "Initialized servlets", "Servlet1,Servlet3", ic.getServlet().getServletConfig().getServletContext().getAttribute( "initialized" ) );
+ }
+
+
+ /**
+ * Verifies that servlets pre-load in the order specified.
+ * SimpleGetServlet and each of its subclasses adds its classname to the 'initialized' context attribute.
+ */
+ public void testLoadOrder() throws Exception {
+ WebXMLString wxs = new WebXMLString();
+ wxs.addServlet( "servlet1", "one", Servlet1.class );
+ wxs.setLoadOnStartup( "servlet1", 2 );
+ wxs.addServlet( "servlet2", "two", Servlet2.class );
+ wxs.setLoadOnStartup( "servlet2", 3 );
+ wxs.addServlet( "servlet3", "three", Servlet3.class );
+ wxs.setLoadOnStartup( "servlet3", 1 );
+
+ ServletRunner sr = new ServletRunner( toInputStream( wxs.asText() ) );
+ ServletUnitClient wc = sr.newClient();
+ InvocationContext ic = wc.newInvocation( "http://localhost/two" );
+ assertEquals( "Initialized servlets", "Servlet3,Servlet1,Servlet2", ic.getServlet().getServletConfig().getServletContext().getAttribute( "initialized" ) );
+ }
+
+
//===============================================================================================================
@@ -329,6 +369,21 @@
static class SimpleGetServlet extends HttpServlet {
static String RESPONSE_TEXT = "the desired content\r\n";
+
+ public void init() throws ServletException {
+ ServletConfig servletConfig = getServletConfig();
+ String initialized = (String) servletConfig.getServletContext().getAttribute( "initialized" );
+ if (initialized == null) initialized = getLocalName();
+ else initialized = initialized + "," + getLocalName();
+ servletConfig.getServletContext().setAttribute( "initialized", initialized );
+ }
+
+ private String getLocalName() {
+ String className = getClass().getName();
+ int dollarIndex = className.indexOf( '$' );
+ if (dollarIndex < 0) return className;
+ return className.substring( dollarIndex+1 );
+ }
protected void doGet( HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException {
resp.setContentType( "text/html" );
|