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 =


Reply via email to