You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by ma...@apache.org on 2010/10/14 16:58:33 UTC

svn commit: r1022565 - /felix/trunk/dependencymanager/test/src/test/java/org/apache/felix/dm/test/ResourceDependencyTest.java

Author: marrs
Date: Thu Oct 14 14:58:33 2010
New Revision: 1022565

URL: http://svn.apache.org/viewvc?rev=1022565&view=rev
Log:
Extended the test case.

Modified:
    felix/trunk/dependencymanager/test/src/test/java/org/apache/felix/dm/test/ResourceDependencyTest.java

Modified: felix/trunk/dependencymanager/test/src/test/java/org/apache/felix/dm/test/ResourceDependencyTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/dependencymanager/test/src/test/java/org/apache/felix/dm/test/ResourceDependencyTest.java?rev=1022565&r1=1022564&r2=1022565&view=diff
==============================================================================
--- felix/trunk/dependencymanager/test/src/test/java/org/apache/felix/dm/test/ResourceDependencyTest.java (original)
+++ felix/trunk/dependencymanager/test/src/test/java/org/apache/felix/dm/test/ResourceDependencyTest.java Thu Oct 14 14:58:33 2010
@@ -33,10 +33,10 @@ import java.util.Map.Entry;
 
 import junit.framework.Assert;
 
+import org.apache.felix.dm.Component;
 import org.apache.felix.dm.DependencyManager;
 import org.apache.felix.dm.ResourceHandler;
 import org.apache.felix.dm.ResourceUtil;
-import org.apache.felix.dm.Component;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.ops4j.pax.exam.Option;
@@ -70,14 +70,15 @@ public class ResourceDependencyTest exte
             .setImplementation(c)
             .add(m.createResourceDependency()
                 .setFilter("(&(path=/path/to/*.txt)(host=localhost))")
-                .setCallbacks("add", "remove"));
+                .setCallbacks("add", "change", "remove"));
         Component dynamicProxyConsumer = m.createComponent()
             .setFactory(new ResourceConsumerFactory(e), "create")
             .add(m.createResourceDependency()
                     .setFilter("(path=*.doc)")
                     .setCallbacks("add", null)); 
+        ResourceProvider provider = new ResourceProvider(e);
         Component resourceProvider = m.createComponent()
-            .setImplementation(new ResourceProvider(e))
+            .setImplementation(provider)
             .add(m.createServiceDependency()
                 .setService(ResourceHandler.class)
                 .setCallbacks("add", "remove"));
@@ -97,6 +98,13 @@ public class ResourceDependencyTest exte
         // ensure the resource was injected properly
         e.waitForStep(4, 5000);
         
+        // now change a resource and see if it gets propagated to the consumer
+        provider.changeResource();
+        
+        // wait for change callback
+        e.waitForStep(5, 5000);
+        e.step(6);
+        
         // cleanup
         m.remove(dynamicProxyConsumer);
         m.remove(resourceProvider);
@@ -118,6 +126,9 @@ public class ResourceDependencyTest exte
             m_counter++;
             m_ensure.step();
         }
+        public void change(URL resource) {
+            m_ensure.step();
+        }
         public void remove(URL resource) {
             m_counter--;
         }
@@ -129,7 +140,7 @@ public class ResourceDependencyTest exte
     static class ResourceProvider {
         private volatile BundleContext m_context;
         private final Ensure m_ensure;
-        private final Map m_handlers = new HashMap();
+        private final Map<ResourceHandler, Filter> m_handlers = new HashMap<ResourceHandler, Filter>();
         private URL[] m_resources;
         
         public ResourceProvider(Ensure ensure) {
@@ -159,13 +170,26 @@ public class ResourceDependencyTest exte
             synchronized (m_handlers) {
                 m_handlers.put(handler, filter);
             }
+            for (int i = 0; i < m_resources.length; i++) {
+                if (filter.match(ResourceUtil.createProperties(m_resources[i]))) {
+                    handler.added(m_resources[i]);
+                }
+            }
+        }
+
+        public void changeResource() {
+            Filter filter;
+            for (Entry<ResourceHandler, Filter> entry : m_handlers.entrySet()) {
                 for (int i = 0; i < m_resources.length; i++) {
-                    if (filter.match(ResourceUtil.createProperties(m_resources[i]))) {
-                        handler.added(m_resources[i]);
+                    if (i == 0) {
+                        if (entry.getValue().match(ResourceUtil.createProperties(m_resources[i]))) {
+                            entry.getKey().changed(m_resources[i]); 
+                        }
                     }
                 }
             }
-
+        }
+        
         public void remove(ServiceReference ref, ResourceHandler handler) {
             Filter filter;
             synchronized (m_handlers) {
@@ -175,12 +199,12 @@ public class ResourceDependencyTest exte
         }
 
         private void removeResources(ResourceHandler handler, Filter filter) {
-                for (int i = 0; i < m_resources.length; i++) {
-                    if (filter.match(ResourceUtil.createProperties(m_resources[i]))) {
-                        handler.removed(m_resources[i]);
-                    }
+            for (int i = 0; i < m_resources.length; i++) {
+                if (filter.match(ResourceUtil.createProperties(m_resources[i]))) {
+                    handler.removed(m_resources[i]);
                 }
             }
+        }
 
         public void destroy() {
             Entry[] handlers;
@@ -190,8 +214,6 @@ public class ResourceDependencyTest exte
             for (int i = 0; i < handlers.length; i++) {
                 removeResources((ResourceHandler) handlers[i].getKey(), (Filter) handlers[i].getValue());
             }
-            
-            System.out.println("DESTROY..." + m_handlers.size());
         }
     }
     
@@ -201,7 +223,6 @@ public class ResourceDependencyTest exte
             m_ensure = ensure;
         }
         public Object create() {
-            System.out.println("create");
             ResourceConsumer resourceConsumer = new ResourceConsumer(m_ensure);
             // create a dynamic proxy for the ResourceProvider
             return Proxy.newProxyInstance(resourceConsumer.getClass().getClassLoader(), resourceConsumer.getClass().getInterfaces(), new DynamicProxyHandler(resourceConsumer, m_ensure));
@@ -219,7 +240,6 @@ public class ResourceDependencyTest exte
 
         public void add(URL resource) {
             m_ensure.step(4);
-            System.out.println("Add resource: " + resource);
         }
 
         public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {