Author: veithen
Date: Mon Aug 18 15:47:11 2008
New Revision: 686887
URL: http://svn.apache.org/viewvc?rev=686887&view=rev
Log:
Transport test kit: Implemented reusing of test resources (JMS providers, Axis
server instances, etc.) between test cases. This reduces the time it takes to
execute the tests.
Added:
synapse/trunk/java/modules/transports/src/test/java/org/apache/synapse/transport/testkit/tests/TestResourceSet.java
Modified:
synapse/trunk/java/modules/transports/src/test/java/org/apache/synapse/transport/testkit/TransportTestSuite.java
synapse/trunk/java/modules/transports/src/test/java/org/apache/synapse/transport/testkit/tests/TestResource.java
synapse/trunk/java/modules/transports/src/test/java/org/apache/synapse/transport/testkit/tests/TransportTestCase.java
synapse/trunk/java/modules/transports/src/test/java/org/apache/synapse/transport/vfs/VFSTransportSenderTest.java
Modified:
synapse/trunk/java/modules/transports/src/test/java/org/apache/synapse/transport/testkit/TransportTestSuite.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/src/test/java/org/apache/synapse/transport/testkit/TransportTestSuite.java?rev=686887&r1=686886&r2=686887&view=diff
==============================================================================
---
synapse/trunk/java/modules/transports/src/test/java/org/apache/synapse/transport/testkit/TransportTestSuite.java
(original)
+++
synapse/trunk/java/modules/transports/src/test/java/org/apache/synapse/transport/testkit/TransportTestSuite.java
Mon Aug 18 15:47:11 2008
@@ -20,11 +20,13 @@
package org.apache.synapse.transport.testkit;
import java.text.ParseException;
+import java.util.Enumeration;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import junit.framework.Test;
+import junit.framework.TestResult;
import junit.framework.TestSuite;
import org.apache.axiom.soap.SOAP11Constants;
@@ -45,6 +47,7 @@
import org.apache.synapse.transport.testkit.message.RESTMessage.Parameter;
import org.apache.synapse.transport.testkit.server.AsyncEndpointFactory;
import org.apache.synapse.transport.testkit.server.EndpointFactory;
+import org.apache.synapse.transport.testkit.tests.TestResourceSet;
import org.apache.synapse.transport.testkit.tests.TransportTestCase;
import org.apache.synapse.transport.testkit.tests.async.BinaryTestCase;
import org.apache.synapse.transport.testkit.tests.async.RESTTestCase;
@@ -77,10 +80,10 @@
});
private final List<FilterExpression> excludes = new
LinkedList<FilterExpression>();
- private final boolean reuseServer;
+ private final boolean reuseResources;
- public TransportTestSuite(boolean reuseServer) {
- this.reuseServer = reuseServer;
+ public TransportTestSuite(boolean reuseResources) {
+ this.reuseResources = reuseResources;
}
public TransportTestSuite() {
@@ -161,63 +164,45 @@
return;
}
}
+ ttest.setManaged(reuseResources);
+ ttest.getResourceSet().resolve();
}
super.addTest(test);
}
-/*
@Override
public void run(TestResult result) {
- if (!reuseServer) {
+ if (!reuseResources) {
super.run(result);
} else {
- LinkedList<Test> tests = new LinkedList<Test>();
+ TestResourceSet resourceSet = null;
for (Enumeration<?> e = tests(); e.hasMoreElements(); ) {
- tests.add((Test)e.nextElement());
- }
- while (!tests.isEmpty()) {
- if (result.shouldStop()) {
- return;
- }
- Test test = tests.removeFirst();
- if (test instanceof AsyncMessageTestCase) {
- AsyncMessageTestCase<?,?> listenerTest =
(AsyncMessageTestCase<?,?>)test;
- Channel<?> channel = listenerTest.getChannel();
- ListenerTestServer server;
+ Test test = (Test)e.nextElement();
+ if (test instanceof TransportTestCase) {
+ TransportTestCase ttest = (TransportTestCase)test;
+ TestResourceSet newResourceSet = ttest.getResourceSet();
try {
- server = new ListenerTestServer();
- server.start(channel);
- } catch (Throwable t) {
- result.addError(this, t);
- return;
- }
- listenerTest.setServer(server);
- runTest(test, result);
- for (Iterator<Test> it = tests.iterator(); it.hasNext(); )
{
- if (result.shouldStop()) {
- return;
+ if (resourceSet == null) {
+ newResourceSet.setUp();
+ } else {
+ newResourceSet.setUp(resourceSet);
}
- test = it.next();
- if (test instanceof AsyncMessageTestCase) {
- listenerTest = (AsyncMessageTestCase<?,?>)test;
- if (listenerTest.getChannel() == channel) {
- it.remove();
- listenerTest.setServer(server);
- runTest(test, result);
- }
- }
- }
- try {
- server.stop();
} catch (Throwable t) {
result.addError(this, t);
return;
}
- } else {
- runTest(test, result);
+ resourceSet = newResourceSet;
+ }
+ runTest(test, result);
+ }
+ if (resourceSet != null) {
+ try {
+ resourceSet.tearDown();
+ } catch (Throwable t) {
+ result.addError(this, t);
+ return;
}
}
}
}
-*/
}
Modified:
synapse/trunk/java/modules/transports/src/test/java/org/apache/synapse/transport/testkit/tests/TestResource.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/src/test/java/org/apache/synapse/transport/testkit/tests/TestResource.java?rev=686887&r1=686886&r2=686887&view=diff
==============================================================================
---
synapse/trunk/java/modules/transports/src/test/java/org/apache/synapse/transport/testkit/tests/TestResource.java
(original)
+++
synapse/trunk/java/modules/transports/src/test/java/org/apache/synapse/transport/testkit/tests/TestResource.java
Mon Aug 18 15:47:11 2008
@@ -21,11 +21,15 @@
import java.lang.reflect.Method;
import java.lang.reflect.Type;
+import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
+import java.util.Set;
import org.apache.synapse.transport.testkit.Adapter;
+import com.sun.org.omg.CORBA.Initializer;
+
public class TestResource {
private static class Initializer {
private final Method method;
@@ -58,22 +62,21 @@
}
private final Object instance;
+ private final Object target;
+ private final Set<TestResource> directDependencies = new
HashSet<TestResource>();
private final LinkedList<Initializer> initializers = new
LinkedList<Initializer>();
private final List<Finalizer> finalizers = new LinkedList<Finalizer>();
- private boolean resolved;
public TestResource(Object instance) {
this.instance = instance;
- }
-
- public void resolve(List<TestResource> resources) {
- if (resolved) {
- return;
- }
Object target = instance;
while (target instanceof Adapter) {
target = ((Adapter)target).getTarget();
}
+ this.target = target;
+ }
+
+ public void resolve(List<TestResource> resources) {
for (Class<?> clazz = target.getClass(); !clazz.equals(Object.class);
clazz = clazz.getSuperclass()) {
for (Method method : clazz.getDeclaredMethods()) {
@@ -102,6 +105,7 @@
if (res == null) {
throw new Error(target.getClass().getName() + "
depends on " + parameterClass.getName() + ", but none found");
}
+ directDependencies.add(res);
args[i] = res.getInstance();
}
method.setAccessible(true);
@@ -112,7 +116,6 @@
}
}
}
- resolved = true;
}
public Object getInstance() {
@@ -130,4 +133,31 @@
finalizer.execute();
}
}
+
+ public Object[] getAllDependencies() {
+ Set<Object> set = new HashSet<Object>();
+ collectDependencies(set);
+ return set.toArray();
+ }
+
+ private void collectDependencies(Set<Object> set) {
+ for (TestResource dependency : directDependencies) {
+ set.add(dependency.getInstance());
+ dependency.collectDependencies(set);
+ }
+ }
+
+ @Override
+ public String toString() {
+ String result = getShortName(instance.getClass());
+ if (target != instance) {
+ result += "(" + getShortName(target.getClass()) + ")";
+ }
+ return result;
+ }
+
+ private static String getShortName(Class<?> clazz) {
+ String name = clazz.getName();
+ return name.substring(name.lastIndexOf('.')+1);
+ }
}
Added:
synapse/trunk/java/modules/transports/src/test/java/org/apache/synapse/transport/testkit/tests/TestResourceSet.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/src/test/java/org/apache/synapse/transport/testkit/tests/TestResourceSet.java?rev=686887&view=auto
==============================================================================
---
synapse/trunk/java/modules/transports/src/test/java/org/apache/synapse/transport/testkit/tests/TestResourceSet.java
(added)
+++
synapse/trunk/java/modules/transports/src/test/java/org/apache/synapse/transport/testkit/tests/TestResourceSet.java
Mon Aug 18 15:47:11 2008
@@ -0,0 +1,130 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.synapse.transport.testkit.tests;
+
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+public class TestResourceSet {
+ private static Log log = LogFactory.getLog(TestResourceSet.class);
+
+ private final List<TestResource> resources = new
LinkedList<TestResource>();
+ private boolean resolved;
+
+ public void addResource(Object resource) {
+ if (resolved) {
+ throw new IllegalStateException();
+ }
+ // TODO: we should not allow null resources
+ if (resource != null) {
+ resources.add(new TestResource(resource));
+ }
+ }
+
+ public void addResources(Object... resources) {
+ for (Object resource : resources) {
+ addResource(resource);
+ }
+ }
+
+ public void resolve() {
+ if (resolved) {
+ return;
+ }
+ for (TestResource resource : resources) {
+ resource.resolve(resources);
+ }
+ resolved = true;
+ }
+
+ public void setUp() throws Exception {
+ setUp(resources);
+ }
+
+ private static void setUp(List<TestResource> resources) throws Exception {
+ if (!resources.isEmpty()) {
+ log.info("Setting up: " + resources);
+ for (TestResource resource : resources) {
+ resource.setUp();
+ }
+ }
+ }
+
+ private TestResource lookup(Object instance) {
+ for (TestResource resource : resources) {
+ if (resource.getInstance() == instance) {
+ return resource;
+ }
+ }
+ return null;
+ }
+
+ public void setUp(TestResourceSet old) throws Exception {
+ List<TestResource> oldResourcesToTearDown = new
LinkedList<TestResource>();
+ List<TestResource> resourcesToSetUp = new
LinkedList<TestResource>(resources);
+ List<TestResource> resourcesToKeep = new LinkedList<TestResource>();
+ for (TestResource oldResource : old.resources) {
+ boolean keep;
+ TestResource resource = lookup(oldResource.getInstance());
+ if (resource == null) {
+ keep = false;
+ } else {
+ keep = true;
+ for (Object instance : oldResource.getAllDependencies()) {
+ if (lookup(instance) == null) {
+ keep = false;
+ break;
+ }
+ }
+ }
+ if (keep) {
+ resourcesToSetUp.remove(resource);
+ resourcesToKeep.add(resource);
+ } else {
+ oldResourcesToTearDown.add(oldResource);
+ }
+ }
+ tearDown(oldResourcesToTearDown);
+ log.debug("Keeping: " + resourcesToKeep);
+ setUp(resourcesToSetUp);
+ }
+
+ public void tearDown() throws Exception {
+ tearDown(resources);
+ }
+
+ private static void tearDown(List<TestResource> resources) throws
Exception {
+ if (!resources.isEmpty()) {
+ log.info("Tearing down: " + resources);
+ for (ListIterator<TestResource> it =
resources.listIterator(resources.size()); it.hasPrevious(); ) {
+ it.previous().tearDown();
+ }
+ }
+ }
+
+ @Override
+ public String toString() {
+ return resources.toString();
+ }
+}
Modified:
synapse/trunk/java/modules/transports/src/test/java/org/apache/synapse/transport/testkit/tests/TransportTestCase.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/src/test/java/org/apache/synapse/transport/testkit/tests/TransportTestCase.java?rev=686887&r1=686886&r2=686887&view=diff
==============================================================================
---
synapse/trunk/java/modules/transports/src/test/java/org/apache/synapse/transport/testkit/tests/TransportTestCase.java
(original)
+++
synapse/trunk/java/modules/transports/src/test/java/org/apache/synapse/transport/testkit/tests/TransportTestCase.java
Mon Aug 18 15:47:11 2008
@@ -19,9 +19,6 @@
package org.apache.synapse.transport.testkit.tests;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.ListIterator;
import java.util.Map;
import junit.framework.TestCase;
@@ -30,27 +27,22 @@
import org.apache.synapse.transport.testkit.name.NameUtils;
public abstract class TransportTestCase extends TestCase {
- private final List<TestResource> resources = new
LinkedList<TestResource>();
+ private final TestResourceSet resourceSet = new TestResourceSet();
protected final ContentTypeMode contentTypeMode;
protected final String contentType;
private Map<String,String> nameComponents;
- private boolean manageServer = true;
+ private boolean managed;
public TransportTestCase(ContentTypeMode contentTypeMode, String
contentType, Object... resources) {
this.contentTypeMode = contentTypeMode;
this.contentType = contentType;
- for (Object resource : resources) {
- addResource(resource);
- }
+ resourceSet.addResources(resources);
}
protected void addResource(Object resource) {
- // TODO: we should not allow null resources
- if (resource != null) {
- resources.add(new TestResource(resource));
- }
+ resourceSet.addResource(resource);
}
public Map<String,String> getNameComponents() {
@@ -80,25 +72,26 @@
return testName;
}
-// public void setServer(ListenerTestServer server){
-// this.server = server;
-// manageServer = false;
-// }
+ public void setManaged(boolean managed) {
+ this.managed = managed;
+ }
+ public TestResourceSet getResourceSet() {
+ return resourceSet;
+ }
+
@Override
protected void setUp() throws Exception {
- for (TestResource resource : resources) {
- resource.resolve(resources);
- }
- for (TestResource resource : resources) {
- resource.setUp();
+ if (!managed) {
+ resourceSet.resolve();
+ resourceSet.setUp();
}
}
@Override
protected void tearDown() throws Exception {
- for (ListIterator<TestResource> it =
resources.listIterator(resources.size()); it.hasPrevious(); ) {
- it.previous().tearDown();
+ if (!managed) {
+ resourceSet.tearDown();
}
}
}
\ No newline at end of file
Modified:
synapse/trunk/java/modules/transports/src/test/java/org/apache/synapse/transport/vfs/VFSTransportSenderTest.java
URL:
http://svn.apache.org/viewvc/synapse/trunk/java/modules/transports/src/test/java/org/apache/synapse/transport/vfs/VFSTransportSenderTest.java?rev=686887&r1=686886&r2=686887&view=diff
==============================================================================
---
synapse/trunk/java/modules/transports/src/test/java/org/apache/synapse/transport/vfs/VFSTransportSenderTest.java
(original)
+++
synapse/trunk/java/modules/transports/src/test/java/org/apache/synapse/transport/vfs/VFSTransportSenderTest.java
Mon Aug 18 15:47:11 2008
@@ -40,7 +40,7 @@
public class VFSTransportSenderTest extends TestCase {
public static TestSuite suite() {
- TransportTestSuite suite = new TransportTestSuite();
+ TransportTestSuite suite = new TransportTestSuite(false);
VFSTestEnvironment env = new VFSTestEnvironment();
TransportDescriptionFactory tdf =