ndlesiecki 2003/06/26 08:07:56
Modified: framework/src/java/share/org/apache/cactus/client/connector/http
DefaultHttpClient.java
framework/src/java/share/org/apache/cactus WebRequest.java
AbstractWebServerTestCase.java
Added: framework/src/java/share/org/apache/cactus/util
UniqueGenerator.java
framework/src/java/share/org/apache/cactus
RequestDirectives.java
Removed: framework/src/java/share/org/apache/cactus/util NetUtil.java
Log:
Added the concept of request directives and moved functionality there.
CVS: ----------------------------------------------------------------------
CVS: PR:
CVS: If this change addresses a PR in the problem report tracking
CVS: database, then enter the PR number(s) here.
CVS: Obtained from:
CVS: If this change has been taken from another system, such as NCSA,
CVS: then name the system in this line, otherwise delete it.
CVS: Submitted by:
CVS: If this code has been contributed to Apache by someone else; i.e.,
CVS: they sent us a patch or a new module, then include their name/email
CVS: address here. If this is your work then delete this line.
CVS: Reviewed by:
CVS: If we are doing pre-commit code reviews and someone else has
CVS: reviewed your changes, include their name(s) here.
CVS: If you have not had it reviewed then delete this line.
Revision Changes Path
1.1
jakarta-cactus/framework/src/java/share/org/apache/cactus/util/UniqueGenerator.java
Index: UniqueGenerator.java
===================================================================
/*
* ====================================================================
*
* 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 acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Cactus" and "Apache Software
* Foundation" 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"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* 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/>.
*
*/
package org.apache.cactus.util;
import org.apache.cactus.AbstractWebServerTestCase;
/**
* Generates a quasi-unique id for a test case.
*
* @author <a href="mailto:[EMAIL PROTECTED]>Nicholas Lesiecki</a>
*
* @version $Id: UniqueGenerator.java,v 1.1 2003/06/26 15:07:56 ndlesiecki Exp $
*/
public class UniqueGenerator
{
/**
* Counter with synchronized access to prevent possibly
* identical ids from two threads requesting an id in the
* same millisecond.
*/
private static int count = 0;
/**
* Lock for count.
*/
private static Object lock = new Object();
/**
* @param theTestCase TestCase to generate a unique id for.
* @return The unique id.
*/
public static String generate(AbstractWebServerTestCase theTestCase)
{
String id = String.valueOf(System.identityHashCode(theTestCase));
synchronized (lock)
{
id += count++;
}
id += System.currentTimeMillis();
id += fullNameHash(theTestCase);
return id;
}
/**
* @param theTestCase The TestCase to generate a hash for.
* @return The hash code of the full name of the testCase.
*/
private static String fullNameHash(AbstractWebServerTestCase theTestCase)
{
String name;
if (theTestCase.isWrappingATest())
{
name = theTestCase.getWrappedTestName();
}
else
{
name = theTestCase.getClass().getName();
}
//the test method
name += theTestCase.getName();
return String.valueOf(name.hashCode());
}
}
1.8 +8 -6
jakarta-cactus/framework/src/java/share/org/apache/cactus/client/connector/http/DefaultHttpClient.java
Index: DefaultHttpClient.java
===================================================================
RCS file:
/home/cvs/jakarta-cactus/framework/src/java/share/org/apache/cactus/client/connector/http/DefaultHttpClient.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- DefaultHttpClient.java 22 Jun 2003 03:39:14 -0000 1.7
+++ DefaultHttpClient.java 26 Jun 2003 15:07:56 -0000 1.8
@@ -59,6 +59,7 @@
import java.net.HttpURLConnection;
import org.apache.cactus.HttpServiceDefinition;
+import org.apache.cactus.RequestDirectives;
import org.apache.cactus.ServiceEnumeration;
import org.apache.cactus.WebRequest;
import org.apache.cactus.WebTestResult;
@@ -222,17 +223,18 @@
throws Throwable
{
WebRequest resultsRequest = new WebRequest(this.configuration);
-
- resultsRequest.addCactusCommand(
- HttpServiceDefinition.SERVICE_NAME_PARAM,
- ServiceEnumeration.GET_RESULTS_SERVICE.toString());
+ RequestDirectives directives = new RequestDirectives(resultsRequest);
+ directives.setService(ServiceEnumeration.GET_RESULTS_SERVICE);
+// resultsRequest.addCactusCommand(
+// HttpServiceDefinition.SERVICE_NAME_PARAM,
+// ServiceEnumeration.GET_RESULTS_SERVICE.toString());
// Use the same redirector as was used by the original request
resultsRequest.setRedirectorName(
theOriginalRequest.getRedirectorName());
//also copy the unique id to get the correct test results
- resultsRequest.setUniqueId(theOriginalRequest.getUniqueId());
+ directives.setId(new RequestDirectives(theOriginalRequest).getId());
// Add authentication details
if (theOriginalRequest.getAuthentication() != null)
1.24 +17 -51
jakarta-cactus/framework/src/java/share/org/apache/cactus/WebRequest.java
Index: WebRequest.java
===================================================================
RCS file:
/home/cvs/jakarta-cactus/framework/src/java/share/org/apache/cactus/WebRequest.java,v
retrieving revision 1.23
retrieving revision 1.24
diff -u -r1.23 -r1.24
--- WebRequest.java 22 Jun 2003 17:22:37 -0000 1.23
+++ WebRequest.java 26 Jun 2003 15:07:56 -0000 1.24
@@ -288,15 +288,22 @@
((WebConfiguration) getConfiguration()).getRedirectorURL(this),
getConfiguration());
- WebRequest request = new WebRequest(
+ WebRequest obtainSessionIdRequest = new WebRequest(
(WebConfiguration) getConfiguration());
- addCactusCommand(HttpServiceDefinition.SERVICE_NAME_PARAM,
- ServiceEnumeration.CREATE_SESSION_SERVICE.toString());
+
+
+ //Not sure whether I should be adding the service parameter to
+ //this request (this) or to the obtainSessionIdRequest
+ //seems obvious that it should be the obtainSessionIdRequest
+ RequestDirectives directives =
+ new RequestDirectives(obtainSessionIdRequest);
+ directives.setService(ServiceEnumeration.CREATE_SESSION_SERVICE);
HttpURLConnection resultConnection;
try
{
- resultConnection = helper.connect(request, getConfiguration());
+ resultConnection =
+ helper.connect(obtainSessionIdRequest, getConfiguration());
}
catch (Throwable e)
{
@@ -308,9 +315,11 @@
WebResponse response;
try
{
- response = (WebResponse) new WebResponseObjectFactory().
- getResponseObject(WebResponse.class.getName(), request,
- resultConnection);
+ response =
+ (WebResponse) new WebResponseObjectFactory().getResponseObject(
+ WebResponse.class.getName(),
+ obtainSessionIdRequest,
+ resultConnection);
}
catch (ClientException e)
{
@@ -339,48 +348,5 @@
return sessionCookie;
}
- /**
- * Adds a cactus-specific command to the URL
- * The URL is used to allow the user to send whatever he wants
- * in the request body. For example a file, ...
- *
- * @param theCommandName The name of the command to add--must start with
- * "Cactus_"
- * @param theCommandValue Value of the command
- */
- public void addCactusCommand(String theCommandName, String theCommandValue)
- {
- if (!theCommandName.startsWith(HttpServiceDefinition.COMMAND_PREFIX))
- {
- throw new IllegalArgumentException("Cactus commands must begin"
- + " with" + HttpServiceDefinition.COMMAND_PREFIX + ". The"
- + " offending command was [" + theCommandName + "]");
- }
- addParameter(theCommandName, theCommandValue, GET_METHOD);
- }
-
- /**
- * Sets the unique id of the test case. Also adds
- * a cactus command consisting of the id
- * to the actual HTTP request.
- * @param theUniqueId new uniqueId for the test case associated
- * with this request
- */
- public void setUniqueId(String theUniqueId)
- {
- if (this.uniqueId != null)
- {
- throw new IllegalStateException("uniqueId already set!");
- }
- this.uniqueId = theUniqueId;
- addCactusCommand(HttpServiceDefinition.TEST_ID_PARAM, theUniqueId);
- }
- /**
- * @return Gets the unique id of the test case
- */
- public String getUniqueId()
- {
- return this.uniqueId;
- }
}
1.11 +20 -50
jakarta-cactus/framework/src/java/share/org/apache/cactus/AbstractWebServerTestCase.java
Index: AbstractWebServerTestCase.java
===================================================================
RCS file:
/home/cvs/jakarta-cactus/framework/src/java/share/org/apache/cactus/AbstractWebServerTestCase.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- AbstractWebServerTestCase.java 22 Jun 2003 09:29:22 -0000 1.10
+++ AbstractWebServerTestCase.java 26 Jun 2003 15:07:56 -0000 1.11
@@ -65,7 +65,7 @@
import org.apache.cactus.client.connector.http.DefaultHttpClient;
import org.apache.cactus.configuration.WebConfiguration;
-import org.apache.cactus.util.NetUtil;
+import org.apache.cactus.util.UniqueGenerator;
import org.apache.commons.logging.LogFactory;
/**
@@ -245,28 +245,19 @@
{
// Add the class name, the method name, to the request to simulate and
// automatic session creation flag to the request
- addCactusCommand(
- HttpServiceDefinition.CLASS_NAME_PARAM,
- this.getClass().getName(),
- theRequest);
- addCactusCommand(
- HttpServiceDefinition.METHOD_NAME_PARAM,
- this.getCurrentTestMethod(),
- theRequest);
- addCactusCommand(
- HttpServiceDefinition.AUTOSESSION_NAME_PARAM,
- theRequest.getAutomaticSession() ? "true" : "false",
- theRequest);
+ RequestDirectives directives = new RequestDirectives(theRequest);
+ directives.setClassName(this.getClass().getName());
+ directives.setMethodName(this.getCurrentTestMethod());
+ directives.setAutoSession(
+ theRequest.getAutomaticSession() ? "true" : "false");
- theRequest.setUniqueId(generateUniqueId());
+
+ directives.setId(UniqueGenerator.generate(this));
// Add the wrapped test if it is not equal to our current instance
- if (wrappingATest())
+ if (isWrappingATest())
{
- addCactusCommand(
- HttpServiceDefinition.WRAPPED_CLASS_NAME_PARAM,
- wrappedTestName(),
- theRequest);
+ directives.setWrappedTestName(getWrappedTestName());
}
// Add the simulated URL (if one has been defined)
if (theRequest.getURL() != null)
@@ -283,47 +274,26 @@
}
/**
- * Shortcut to the wrappedTest's name.
+ * @return The wrappedTest's name, if any.
*/
- private String wrappedTestName()
+ public String getWrappedTestName()
{
- return getWrappedTest().getClass().getName();
+ if (isWrappingATest())
+ {
+ return getWrappedTest().getClass().getName();
+ }
+ return null;
}
/**
- * Shortcut to determine wrapping of status.
+ * @return whether this test case wraps another
*/
- private boolean wrappingATest()
+ public boolean isWrappingATest()
{
return getWrappedTest() != this;
}
- /**
- * Generates a (possibly) unique id for this testcase.
- */
- private String generateUniqueId()
- {
- String id = "testCase:" + this.getClass().getName() + "_";
- id += "testMethod:" + this.getCurrentTestMethod() + "_";
- if (wrappingATest())
- {
- id += "wrapping:" + wrappedTestName() + "_";
- }
- id += "thread:" + Thread.currentThread().toString() + "_";
- id += "runtime_hash:" + Runtime.getRuntime().hashCode() + "_";
- id += "client_ip:" + NetUtil.getIp() + "_";
- id += "time:" + System.currentTimeMillis() + "_";
- return id;
- }
- /**
- * Shortcut to [EMAIL PROTECTED] WebRequest#addCactusCommand}.
- */
- private void addCactusCommand(String theCommandName,
- String theCommandValue, WebRequest theRequest)
- {
- theRequest.addCactusCommand(theCommandName, theCommandValue);
- }
/**
* Runs a test case. This method is overriden from the JUnit
1.1
jakarta-cactus/framework/src/java/share/org/apache/cactus/RequestDirectives.java
Index: RequestDirectives.java
===================================================================
/*
* ====================================================================
*
* 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 acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Cactus" and "Apache Software
* Foundation" 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"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* 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/>.
*
*/
package org.apache.cactus;
/**
* Encapsulates the Cactus-specific URL parameters added to the WebRequest.
*
* @author <a href="mailto:[EMAIL PROTECTED]>Nicholas Lesiecki</a>
*
* @version $Id: RequestDirectives.java,v 1.1 2003/06/26 15:07:56 ndlesiecki Exp $
*/
public class RequestDirectives
{
/**
* The WebRequest that the directives modifies.
*/
private WebRequest underlyingRequest;
/**
* @param theRequest The WebRequest to read directives from or
* apply directives to.
*/
public RequestDirectives(WebRequest theRequest)
{
this.underlyingRequest = theRequest;
}
/**
* Adds a cactus-specific command to the URL of the WebRequest
* The URL is used to allow the user to send whatever he wants
* in the request body. For example a file, ...
*
* @param theCommandName The name of the command to add--must start with
* "Cactus_"
* @param theCommandValue Value of the command
*/
public void addCactusCommand(String theCommandName, String theCommandValue)
{
if (!theCommandName.startsWith(HttpServiceDefinition.COMMAND_PREFIX))
{
throw new IllegalArgumentException(
"Cactus commands must begin"
+ " with" + HttpServiceDefinition.COMMAND_PREFIX
+ ". The offending command was [" + theCommandName
+ "]");
}
underlyingRequest.addParameter(
theCommandName,
theCommandValue,
WebRequest.GET_METHOD);
}
/**
* @param theId new id for the test case associated
* with this request
*/
public void setId(String theId)
{
if (getId() != null)
{
throw new IllegalStateException("uniqueId already set!");
}
addCactusCommand(HttpServiceDefinition.TEST_ID_PARAM, theId);
}
/**
* @return Gets the unique id of the test case
*/
public String getId()
{
return underlyingRequest.getParameterGet(
HttpServiceDefinition.TEST_ID_PARAM);
}
/**
* @param theName name of the test class.
*/
public void setClassName(String theName)
{
addCactusCommand(
HttpServiceDefinition.CLASS_NAME_PARAM,
theName);
}
/**
* @param theName The name of the wrapped test.
*/
public void setWrappedTestName(String theName)
{
addCactusCommand(
HttpServiceDefinition.WRAPPED_CLASS_NAME_PARAM,
theName);
}
/**
* @param theMethodName name of the test method to execute.
*/
public void setMethodName(String theMethodName)
{
addCactusCommand(
HttpServiceDefinition.METHOD_NAME_PARAM,
theMethodName);
}
/**
* @param theService The service to request of the redirector.
*/
public void setService(ServiceEnumeration theService)
{
addCactusCommand(HttpServiceDefinition.SERVICE_NAME_PARAM,
theService.toString());
}
/**
* @param hasAutoSession A "boolean string" indicating
* whether or not to use the
* autoSession option.
*/
public void setAutoSession(String hasAutoSession)
{
addCactusCommand(
HttpServiceDefinition.AUTOSESSION_NAME_PARAM,
hasAutoSession);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]