You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by pd...@apache.org on 2015/02/23 00:35:39 UTC

svn commit: r1661581 - in /felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest: components/ConfigurationDependencyAnnotation.java tests/ConfigurationDependencyAnnotationTest.java

Author: pderop
Date: Sun Feb 22 23:35:38 2015
New Revision: 1661581

URL: http://svn.apache.org/r1661581
Log:
Added test for FELIX-4777

Added:
    felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/ConfigurationDependencyAnnotation.java
    felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/tests/ConfigurationDependencyAnnotationTest.java

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/ConfigurationDependencyAnnotation.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/ConfigurationDependencyAnnotation.java?rev=1661581&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/ConfigurationDependencyAnnotation.java (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/components/ConfigurationDependencyAnnotation.java Sun Feb 22 23:35:38 2015
@@ -0,0 +1,97 @@
+package org.apache.felix.dm.runtime.itest.components;
+
+import java.util.Dictionary;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.felix.dm.annotation.api.Component;
+import org.apache.felix.dm.annotation.api.ConfigurationDependency;
+import org.apache.felix.dm.annotation.api.Init;
+import org.apache.felix.dm.annotation.api.ServiceDependency;
+import org.apache.felix.dm.annotation.api.Start;
+import org.apache.felix.dm.annotation.api.Stop;
+import org.apache.felix.dm.itest.util.Ensure;
+import org.junit.Assert;
+
+public class ConfigurationDependencyAnnotation {
+    @Component
+    public static class ConfigurableComponent {
+        public final static String ENSURE = "ConfigurableComponent";
+        
+        volatile Ensure m_ensure;
+        volatile Dictionary<String, String> m_conf;
+
+        @ConfigurationDependency
+        void updated(Dictionary<String, String> conf) {
+            m_conf = conf;
+        }
+        
+        @ServiceDependency(filter="(name=" + ENSURE + ")")
+        void bind(Ensure ensure) {
+            m_ensure = ensure;
+            Assert.assertNotNull(m_conf);
+            Assert.assertEquals("bar", m_conf.get("foo"));
+            m_ensure.step(1);
+        }
+        
+        @Start
+        void start() {
+            m_ensure.step(2);
+        }
+        
+        @Stop
+        void stop() {
+            m_ensure.step(3);
+        }
+    }
+    
+    @Component
+    public static class ConfigurableComponentWithDynamicExtraConfiguration {
+        public final static String ENSURE = "ConfigurableComponentWithDynamicExtraConfiguration";
+        
+        volatile Ensure m_ensure;
+        volatile Dictionary<String, String> m_conf;
+
+        @ConfigurationDependency
+        void updated(Dictionary<String, String> conf) {
+            m_conf = conf;
+        }
+        
+        @ServiceDependency(filter="(name=" + ENSURE + ")")
+        void bind(Ensure ensure) {
+            m_ensure = ensure;
+            Assert.assertNotNull(m_conf);
+            Assert.assertEquals("bar", m_conf.get("foo"));
+            m_ensure.step(1);
+        }
+        
+        @Init
+        Map<String, String> init() {
+            Assert.assertNotNull(m_conf);
+            String dynamicPid = m_conf.get("dynamicPid");
+            Assert.assertNotNull(dynamicPid);
+            Map<String, String> map = new HashMap<>();
+            map.put("dynamicConfig.pid", m_conf.get("dynamicPid"));
+            m_ensure.step(2);
+            return map;
+        }
+        
+        @ConfigurationDependency(name="dynamicConfig")
+        void extraConfiguration(Dictionary<String, String> dynamicConf) {
+            if (dynamicConf != null) {
+                Assert.assertEquals("bar2", dynamicConf.get("foo2"));
+                m_ensure.step(3);
+            }
+        }        
+        
+        @Start
+        void start() {
+            m_ensure.step(4);
+        }
+        
+        @Stop
+        void stop() {
+            m_ensure.step(5);
+        }
+    }
+}

Added: felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/tests/ConfigurationDependencyAnnotationTest.java
URL: http://svn.apache.org/viewvc/felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/tests/ConfigurationDependencyAnnotationTest.java?rev=1661581&view=auto
==============================================================================
--- felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/tests/ConfigurationDependencyAnnotationTest.java (added)
+++ felix/sandbox/pderop/dependencymanager/org.apache.felix.dependencymanager.runtime.itest/src/org/apache/felix/dm/runtime/itest/tests/ConfigurationDependencyAnnotationTest.java Sun Feb 22 23:35:38 2015
@@ -0,0 +1,81 @@
+package org.apache.felix.dm.runtime.itest.tests;
+
+import java.io.IOException;
+import java.util.Hashtable;
+
+import org.apache.felix.dm.itest.util.Ensure;
+import org.apache.felix.dm.itest.util.TestBase;
+import org.apache.felix.dm.runtime.itest.components.ConfigurationDependencyAnnotation.ConfigurableComponent;
+import org.apache.felix.dm.runtime.itest.components.ConfigurationDependencyAnnotation.ConfigurableComponentWithDynamicExtraConfiguration;
+import org.junit.Assert;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.service.cm.ConfigurationAdmin;
+
+public class ConfigurationDependencyAnnotationTest extends TestBase {
+
+    private final static int MAXWAIT = 5000;
+
+    
+    /**
+     * Tests the ConfigurationDependency annotation.
+     */
+    @SuppressWarnings({ "serial", "rawtypes", "unchecked" })
+    public void testConfigurationDependencyAnnotation() throws Throwable {
+        Ensure e = new Ensure();
+        ServiceRegistration sr = register(e, ConfigurableComponent.ENSURE);
+        ConfigurationAdmin cm = (ConfigurationAdmin) context.getService(context.getServiceReference(ConfigurationAdmin.class.getName()));
+        try {
+            org.osgi.service.cm.Configuration cf = cm.getConfiguration(ConfigurableComponent.class.getName(), null);
+            cf.update(new Hashtable() {
+                {
+                    put("foo", "bar");
+                }
+            });
+            e.waitForStep(1, MAXWAIT);
+            cf.delete();
+            e.waitForStep(3, MAXWAIT);
+            e.ensure();
+            sr.unregister();
+        } catch (IOException err) {
+            err.printStackTrace();
+            Assert.fail("can't create factory configuration");
+        }
+    }
+    
+    /**
+     * Tests a Component two ConfigurationDependency (the second one is "instance bound" 
+     * and its pid is declared from the init method).
+     */
+   @SuppressWarnings({ "serial", "rawtypes", "unchecked" })
+    public void testConfigurationDependencyWithAnotherExtraDynamicConfigurationAnnotation() throws Throwable {
+        Ensure e = new Ensure();
+        ServiceRegistration sr = register(e, ConfigurableComponentWithDynamicExtraConfiguration.ENSURE);
+        ConfigurationAdmin cm = (ConfigurationAdmin) context.getService(context.getServiceReference(ConfigurationAdmin.class.getName()));
+        try {
+            org.osgi.service.cm.Configuration cf = cm.getConfiguration(ConfigurableComponentWithDynamicExtraConfiguration.class.getName(), null);
+            cf.update(new Hashtable() {
+                {
+                    put("foo", "bar");
+                    put("dynamicPid", "dynamicPid"); // Pid of the second Configuration Dependency.
+                }
+            });
+            org.osgi.service.cm.Configuration extraCf = cm.getConfiguration("dynamicPid", null);
+            extraCf.update(new Hashtable() {
+                {
+                    put("foo2", "bar2");
+                }
+            });
+
+            e.waitForStep(4, MAXWAIT);
+            cf.delete();
+            extraCf.delete();
+            e.waitForStep(5, MAXWAIT);
+            e.ensure();
+            sr.unregister();
+        } catch (IOException err) {
+            err.printStackTrace();
+            Assert.fail("can't create factory configuration");
+        }
+    }
+
+}