epugh 2003/09/26 10:49:47
Modified: xdocs changes.xml
src/test/org/apache/turbine/modules ActionLoaderTest.java
src/test/org/apache/turbine/modules/actions
VelocityActionThrowsException.java
conf TurbineResources.properties
Log:
Unit test testing the bubble exceptions property
Revision Changes Path
1.65 +5 -0 jakarta-turbine-2/xdocs/changes.xml
Index: changes.xml
===================================================================
RCS file: /home/cvs/jakarta-turbine-2/xdocs/changes.xml,v
retrieving revision 1.64
retrieving revision 1.65
diff -u -r1.64 -r1.65
--- changes.xml 26 Sep 2003 00:39:51 -0000 1.64
+++ changes.xml 26 Sep 2003 17:49:46 -0000 1.65
@@ -75,6 +75,11 @@
<p>
<ul>
<li>
+ doXXX events would eat exceptions while doPerform would bubble them up.
+ Added property action.event.bubbleexception which is true by default that
+ applies to both types and either bubbles them up, or logs and sinks them.
+ </li>
+ <li>
The intake validators were fixed so that fields with required=false
rules no longer attempt to execute the remaining rules when no
input is provided. A minLength > 0 rule is no longer synonymous
1.2 +209 -123
jakarta-turbine-2/src/test/org/apache/turbine/modules/ActionLoaderTest.java
Index: ActionLoaderTest.java
===================================================================
RCS file:
/home/cvs/jakarta-turbine-2/src/test/org/apache/turbine/modules/ActionLoaderTest.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ActionLoaderTest.java 11 Sep 2003 15:00:09 -0000 1.1
+++ ActionLoaderTest.java 26 Sep 2003 17:49:46 -0000 1.2
@@ -1,9 +1,63 @@
package org.apache.turbine.modules;
+/* ====================================================================
+ * The Apache Software License, Version 1.1
+ *
+ * Copyright (c) 2001-2003 The Apache Software Foundation. All rights
+ * reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. The end-user documentation included with the redistribution,
+ * if any, must include the following acknowledgment:
+ * "This product includes software developed by the
+ * Apache Software Foundation (http://www.apache.org/)."
+ * Alternately, this acknowledgment may appear in the software itself,
+ * if and wherever such third-party acknowledgments normally appear.
+ *
+ * 4. The names "Apache" and "Apache Software Foundation" and
+ * "Apache Turbine" must not be used to endorse or promote products
+ * derived from this software without prior written permission. For
+ * written permission, please contact [EMAIL PROTECTED]
+ *
+ * 5. Products derived from this software may not be called "Apache",
+ * "Apache Turbine", nor may "Apache" appear in their name, without
+ * prior written permission of the Apache Software Foundation.
+ *
+ * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ */
+
import java.util.Vector;
import javax.servlet.ServletConfig;
import javax.servlet.http.HttpServletResponse;
-import org.apache.turbine.modules.ActionLoader;
-import org.apache.turbine.modules.PageLoader;
+
+import org.apache.turbine.Turbine;
import org.apache.turbine.om.security.User;
import org.apache.turbine.services.TurbineServices;
import org.apache.turbine.services.rundata.RunDataService;
@@ -16,131 +70,163 @@
import com.mockobjects.servlet.MockHttpServletResponse;
import com.mockobjects.servlet.MockServletConfig;
/**
- * This test case is to verify whether Exceptions in Velocity actions are
- * properly bubbled up.
+ * This test case is to verify whether exceptions in Velocity actions are
+ * properly bubbled up when action.event.bubbleexception=true. Or, if
+ * action.event.bubbleexception=false, then the exceptions should be
+ * logged and sunk.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Eric Pugh</a>
*/
-public class ActionLoaderTest extends BaseTestCase
-{
- private static TurbineConfig tc = null;
- private static TemplateService ts = null;
- private MockServletConfig config = null;
- private EnhancedMockHttpServletRequest request = null;
- private EnhancedMockHttpSession session = null;
- private HttpServletResponse response = null;
- private static ServletConfig sc = null;
- /*
- * @see TestCase#setUp()
- */
- protected void setUp() throws Exception
- {
- super.setUp();
- config = new MockServletConfig();
- config.setupNoParameters();
- request = new EnhancedMockHttpServletRequest();
- request.setupServerName("bob");
- request.setupGetProtocol("http");
- request.setupScheme("scheme");
- request.setupPathInfo("damn");
- request.setupGetServletPath("damn2");
- request.setupGetContextPath("wow");
- request.setupGetContentType("html/text");
- request.setupAddHeader("Content-type", "html/text");
- request.setupAddHeader("Accept-Language", "en-US");
- Vector v = new Vector();
- request.setupGetParameterNames(v.elements());
- session = new EnhancedMockHttpSession();
- response = new MockHttpServletResponse();
- session.setupGetAttribute(User.SESSION_KEY, null);
- request.setSession(session);
- sc = config;
- tc = new TurbineConfig(".",
"/conf/test/CompleteTurbineResources.properties");
- tc.initialize();
- }
- /*
- * @see TestCase#tearDown()
- */
- protected void tearDown() throws Exception
- {
- super.tearDown();
- if (tc != null)
- {
- tc.dispose();
- }
- }
- /**
- * Constructor for VelocityErrorScreenTest.
- * @param arg0
- */
- public ActionLoaderTest(String arg0) throws Exception
- {
- super(arg0);
- }
- /**
- * This unit test verifies that if your standard doPerform is called,
- * and it throws an Exception, the exception is bubbled up out of the
ActionLoader...
+public class ActionLoaderTest extends BaseTestCase {
+ private static TurbineConfig tc = null;
+ private static TemplateService ts = null;
+ private MockServletConfig config = null;
+ private EnhancedMockHttpServletRequest request = null;
+ private EnhancedMockHttpSession session = null;
+ private HttpServletResponse response = null;
+ private static ServletConfig sc = null;
+ /*
+ * @see TestCase#setUp()
+ */
+ protected void setUp() throws Exception {
+ super.setUp();
+ config = new MockServletConfig();
+ config.setupNoParameters();
+ request = new EnhancedMockHttpServletRequest();
+ request.setupServerName("bob");
+ request.setupGetProtocol("http");
+ request.setupScheme("scheme");
+ request.setupPathInfo("damn");
+ request.setupGetServletPath("damn2");
+ request.setupGetContextPath("wow");
+ request.setupGetContentType("html/text");
+ request.setupAddHeader("Content-type", "html/text");
+ request.setupAddHeader("Accept-Language", "en-US");
+ Vector v = new Vector();
+ request.setupGetParameterNames(v.elements());
+ session = new EnhancedMockHttpSession();
+ response = new MockHttpServletResponse();
+ session.setupGetAttribute(User.SESSION_KEY, null);
+ request.setSession(session);
+ sc = config;
+ tc =
+ new TurbineConfig(
+ ".",
+ "/conf/test/CompleteTurbineResources.properties");
+ tc.initialize();
+ }
+ /*
+ * @see TestCase#tearDown()
+ */
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ if (tc != null) {
+ tc.dispose();
+ }
+ }
+ /**
+ * Constructor for VelocityErrorScreenTest.
+ * @param arg0
+ */
+ public ActionLoaderTest(String arg0) throws Exception {
+ super(arg0);
+ }
+ /**
+ * This unit test verifies that if your standard doPerform is called,
+ * and it throws an Exception, the exception is bubbled up out of the
ActionLoader...
+ *
+ * @throws Exception If something goes wrong with the unit test
+ */
+ public void testDoPerformBubblesException() throws Exception {
+ RunData data = getRunData();
+ try {
+ String defaultPage = "VelocityPage";
+ ActionLoader.getInstance().exec(data, data.getAction());
+ fail("Should have thrown an exception");
+ } catch (Exception e) {
+ //good
+ }
+ }
+ /**
+ * This unit test verifies that if an Action Event doEventSubmit_ is called,
and it throws an Exception, the
+ * exception is bubbled up out of the ActionLoader...
+ *
+ * @throws Exception If something goes wrong with the unit test
+ */
+ public void testActionEventBubblesException() throws Exception {
+ // can't seem to figure out how to setup the Mock Request with the
right parameters...
+ request.setupAddParameter("eventSubmit_doCauseexception", "foo");
+ RunData data = getRunData();
+ data.getParameters().add("eventSubmit_doCauseexception", "foo");
+ assertTrue(
+
data.getParameters().containsKey("eventSubmit_doCauseexception"));
+ try {
+ String defaultPage = "VelocityPage";
+ ActionLoader.getInstance().exec(data, data.getAction());
+ fail("Should have bubbled out an exception thrown by the
action.");
+ } catch (Exception e) {
+ //good
+ }
+ }
+
+ /**
+ * This unit test verifies that if your standard doPerform is called,
+ * and it throws an Exception, if the action.event.bubbleexception
+ * property is set to false then the exception is NOT bubbled up
+ *
+ * @throws Exception If something goes wrong with the unit test
+ */
+ public void testDoPerformDoesntBubbleException() throws Exception {
+
Turbine.getConfiguration().setProperty("action.event.bubbleexception",Boolean.FALSE);
+
assertFalse(Turbine.getConfiguration().getBoolean("action.event.bubbleexception"));
+ RunData data = getRunData();
+ try {
+ String defaultPage = "VelocityPage";
+ ActionLoader.getInstance().exec(data, data.getAction());
+
+ } catch (Exception e) {
+ fail("Should NOT have thrown an exception:" + e.getMessage());
+ }
+ }
+ /**
+ * This unit test verifies that if an Action Event doEventSubmit_ is called,
+ * and it throws an Exception, if the action.event.bubbleexception
+ * property is set to false then the exception is NOT bubbled up
*
* @throws Exception If something goes wrong with the unit test
*/
- public void testDoPerformBubblesException() throws Exception
- {
- RunData data = getRunData();
- data.setAction("VelocityActionThrowsException");
- try
- {
- String defaultPage = "VelocityPage";
- ActionLoader.getInstance().exec(data, data.getAction());
- fail("Should have thrown an exception");
- }
- catch (Exception e)
- {
- //good
- }
- }
- /**
- * This unit test verifies that if an Action Event doEventSubmit_ is called,
and it throws an Exception, the
- * exception is bubbled up out of the ActionLoader...
- *
- * @throws Exception If something goes wrong with the unit test
- */
- public void testActionEventBubblesException() throws Exception
- {
- // can't seem to figure out how to setup the Mock Request with the right
parameters...
- request.setupAddParameter("eventSubmit_doCauseexception", "foo");
- RunData data = getRunData();
- data.getParameters().add("eventSubmit_doCauseexception", "foo");
-
assertTrue(data.getParameters().containsKey("eventSubmit_doCauseexception"));
- data.setAction("VelocityActionThrowsException");
- try
- {
- String defaultPage = "VelocityPage";
- ActionLoader.getInstance().exec(data, data.getAction());
- fail("Should have bubbled out an exception thrown by the action.");
- }
- catch (Exception e)
- {
- //good
- }
- }
- public void testNonexistentActionCausesError() throws Exception
- {
- RunData data = getRunData();
- data.setAction("ImaginaryAction");
- try
- {
- PageLoader.getInstance().exec(data, "boo");
- fail("Should have thrown an exception");
- }
- catch (Exception e)
- {
- //good
- }
- }
- private RunData getRunData() throws Exception
- {
- RunDataService rds = (RunDataService)
TurbineServices.getInstance().getService(RunDataService.SERVICE_NAME);
- RunData runData = rds.getRunData(request, response, config);
- return runData;
- }
+ public void testActionEventDoesntBubbleException() throws Exception {
+ // can't seem to figure out how to setup the Mock Request with the
right parameters...
+
Turbine.getConfiguration().setProperty("action.event.bubbleexception",Boolean.FALSE);
+ request.setupAddParameter("eventSubmit_doCauseexception", "foo");
+ RunData data = getRunData();
+ data.getParameters().add("eventSubmit_doCauseexception", "foo");
+ assertTrue(
+
data.getParameters().containsKey("eventSubmit_doCauseexception"));
+
+ try {
+ String defaultPage = "VelocityPage";
+ ActionLoader.getInstance().exec(data, data.getAction());
+ } catch (Exception e) {
+ fail("Should NOT have thrown an exception:" + e.getMessage());
+ }
+ }
+ public void testNonexistentActionCausesError() throws Exception {
+ RunData data = getRunData();
+ data.setAction("ImaginaryAction");
+ try {
+ PageLoader.getInstance().exec(data, "boo");
+ fail("Should have thrown an exception");
+ } catch (Exception e) {
+ //good
+ }
+ }
+ private RunData getRunData() throws Exception {
+ RunDataService rds =
+ (RunDataService) TurbineServices.getInstance().getService(
+ RunDataService.SERVICE_NAME);
+ RunData runData = rds.getRunData(request, response, config);
+ runData.setAction("VelocityActionThrowsException");
+ return runData;
+ }
}
1.2 +1 -1
jakarta-turbine-2/src/test/org/apache/turbine/modules/actions/VelocityActionThrowsException.java
Index: VelocityActionThrowsException.java
===================================================================
RCS file:
/home/cvs/jakarta-turbine-2/src/test/org/apache/turbine/modules/actions/VelocityActionThrowsException.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- VelocityActionThrowsException.java 11 Sep 2003 15:00:09 -0000 1.1
+++ VelocityActionThrowsException.java 26 Sep 2003 17:49:46 -0000 1.2
@@ -89,6 +89,6 @@
public void doCauseexception(RunData data, Context context) throws Exception
{
log.debug("Calling doCauseexception");
- throw new Exception("From Actin Event
VelocityActionThrowsException.doCauseexception an Exception is always thrown!");
+ throw new Exception("From Action Event
VelocityActionThrowsException.doCauseexception an Exception is always thrown!");
}
}
1.52 +8 -1 jakarta-turbine-2/conf/TurbineResources.properties
Index: TurbineResources.properties
===================================================================
RCS file: /home/cvs/jakarta-turbine-2/conf/TurbineResources.properties,v
retrieving revision 1.51
retrieving revision 1.52
diff -u -r1.51 -r1.52
--- TurbineResources.properties 2 Sep 2003 13:28:28 -0000 1.51
+++ TurbineResources.properties 26 Sep 2003 17:49:47 -0000 1.52
@@ -217,6 +217,13 @@
#
action.eventsubmit.needsvalue = false
+#
+# Set this value to false if you want perform your own error trapping.
+# Otherwise when an exception in an do<xxx> or doPerform method occurs
+# then Turbine will hand control over to your specified error screen
+#
+action.event.bubbleexception = true
+
# -------------------------------------------------------------------
#
# J N D I C O N T E X T S
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]