You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by cz...@apache.org on 2018/09/19 07:06:43 UTC

svn commit: r1841293 - in /felix/trunk/configurator/src: main/java/org/apache/felix/configurator/impl/ main/java/org/apache/felix/configurator/impl/model/ test/java/org/apache/felix/configurator/impl/ test/resources/bundles/

Author: cziegeler
Date: Wed Sep 19 07:06:43 2018
New Revision: 1841293

URL: http://svn.apache.org/viewvc?rev=1841293&view=rev
Log:
FELIX-5932 : Configurator does not update existing Configurations

Modified:
    felix/trunk/configurator/src/main/java/org/apache/felix/configurator/impl/Util.java
    felix/trunk/configurator/src/main/java/org/apache/felix/configurator/impl/model/ConfigList.java
    felix/trunk/configurator/src/test/java/org/apache/felix/configurator/impl/ConfiguratorTest.java
    felix/trunk/configurator/src/test/resources/bundles/2.json
    felix/trunk/configurator/src/test/resources/bundles/2a.json

Modified: felix/trunk/configurator/src/main/java/org/apache/felix/configurator/impl/Util.java
URL: http://svn.apache.org/viewvc/felix/trunk/configurator/src/main/java/org/apache/felix/configurator/impl/Util.java?rev=1841293&r1=1841292&r2=1841293&view=diff
==============================================================================
--- felix/trunk/configurator/src/main/java/org/apache/felix/configurator/impl/Util.java (original)
+++ felix/trunk/configurator/src/main/java/org/apache/felix/configurator/impl/Util.java Wed Sep 19 07:06:43 2018
@@ -91,9 +91,9 @@ public class Util {
 
     public static String getSHA256(final String value) {
         try {
-            StringBuilder builder = new StringBuilder();
-            MessageDigest md = MessageDigest.getInstance("SHA-256");
-            for (byte b : md.digest(value.getBytes("UTF-8")) ) {
+            final StringBuilder builder = new StringBuilder();
+            final MessageDigest md = MessageDigest.getInstance("SHA-256");
+            for (final byte b : md.digest(value.getBytes("UTF-8")) ) {
                 builder.append(String.format("%02x", b));
             }
             return builder.toString();

Modified: felix/trunk/configurator/src/main/java/org/apache/felix/configurator/impl/model/ConfigList.java
URL: http://svn.apache.org/viewvc/felix/trunk/configurator/src/main/java/org/apache/felix/configurator/impl/model/ConfigList.java?rev=1841293&r1=1841292&r2=1841293&view=diff
==============================================================================
--- felix/trunk/configurator/src/main/java/org/apache/felix/configurator/impl/model/ConfigList.java (original)
+++ felix/trunk/configurator/src/main/java/org/apache/felix/configurator/impl/model/ConfigList.java Wed Sep 19 07:06:43 2018
@@ -112,6 +112,7 @@ public class ConfigList implements Seria
     public void addAll(final ConfigList configs) {
         for(final Config cfg : configs) {
             // search if we already have this configuration
+
             for(final Config current : this.configurations) {
                 if ( current.getBundleId() == cfg.getBundleId()
                   && current.getProperties().equals(cfg.getProperties()) ) {
@@ -122,6 +123,7 @@ public class ConfigList implements Seria
                     break;
                 }
             }
+
             this.hasChanges = true;
             this.configurations.add(cfg);
         }

Modified: felix/trunk/configurator/src/test/java/org/apache/felix/configurator/impl/ConfiguratorTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/configurator/src/test/java/org/apache/felix/configurator/impl/ConfiguratorTest.java?rev=1841293&r1=1841292&r2=1841293&view=diff
==============================================================================
--- felix/trunk/configurator/src/test/java/org/apache/felix/configurator/impl/ConfiguratorTest.java (original)
+++ felix/trunk/configurator/src/test/java/org/apache/felix/configurator/impl/ConfiguratorTest.java Wed Sep 19 07:06:43 2018
@@ -145,32 +145,57 @@ public class ConfiguratorTest {
         final Bundle bV1 = setupBundle(2);
         final Bundle bV2 = setupBundle(2, "2a");
 
+        // initial - no configuration
         Configuration c1 = mock(Configuration.class);
         Configuration c2 = mock(Configuration.class);
+        Configuration c3 = mock(Configuration.class);
+        when(c1.getChangeCount()).thenReturn(1L);
+        when(c2.getChangeCount()).thenReturn(1L);
+        when(c3.getChangeCount()).thenReturn(1L);
         when(configurationAdmin.getConfiguration("a", "?")).thenReturn(c1);
         when(configurationAdmin.getConfiguration("b", "?")).thenReturn(c2);
+        when(configurationAdmin.getConfiguration("c", "?")).thenReturn(c3);
 
-        when(c1.getChangeCount()).thenReturn(1L);
-        when(c2.getChangeCount()).thenReturn(1L);
         configurator.processAddBundle(bV1);
-
         configurator.process();
 
-        when(configurationAdmin.listConfigurations("(" + Constants.SERVICE_PID + "=a)")).thenReturn(new Configuration[] {c1});
-        when(configurationAdmin.listConfigurations("(" + Constants.SERVICE_PID + "=b)")).thenReturn(new Configuration[] {c2});
+        final Dictionary<String, Object> props1a = new Hashtable<>();
+        props1a.put("foo", "bar2");
+        final Dictionary<String, Object> props1b = new Hashtable<>();
+        props1b.put("x", "y2");
+        final Dictionary<String, Object> props1c = new Hashtable<>();
+        props1c.put("c", "1");
+
+        InOrder inorder = inOrder(c1,c2,c3);
+        inorder.verify(c1).updateIfDifferent(props1a);
+        inorder.verify(c1).getChangeCount();
+        inorder.verify(c2).updateIfDifferent(props1b);
+        inorder.verify(c2).getChangeCount();
+        inorder.verify(c3).updateIfDifferent(props1c);
+        inorder.verify(c3).getChangeCount();
+        inorder.verifyNoMoreInteractions();
+
+        // c1 and c2 are changed manually -> increase change count, c3 is not changed manually
+        when(c1.getChangeCount()).thenReturn(2L);
+        when(c2.getChangeCount()).thenReturn(2L);
+        when(configurationAdmin.listConfigurations("(service.pid=a)")).thenReturn(new Configuration[] {c1});
+        when(configurationAdmin.listConfigurations("(service.pid=b)")).thenReturn(new Configuration[] {c2});
+        when(configurationAdmin.listConfigurations("(service.pid=c)")).thenReturn(new Configuration[] {c3});
 
         configurator.processAddBundle(bV2);
         configurator.process();
 
-        final Dictionary<String, Object> props1 = new Hashtable<>();
-        props1.put("foo", "bar2");
-        final Dictionary<String, Object> props2 = new Hashtable<>();
-        props2.put("foo", "bar3");
+        final Dictionary<String, Object> props2a = new Hashtable<>();
+        props2a.put("foo", "bar3");
+        final Dictionary<String, Object> props2c = new Hashtable<>();
+        props2c.put("c", "2");
 
-        InOrder inorder = inOrder(c1);
-        inorder.verify(c1).updateIfDifferent(props1);
-        inorder.verify(c1).updateIfDifferent(props2);
+        inorder = inOrder(c1, c2, c3);
+        inorder.verify(c1).updateIfDifferent(props2a);
         inorder.verify(c1).getChangeCount();
+        inorder.verify(c2).getChangeCount();
+        inorder.verify(c3).updateIfDifferent(props2c);
+        inorder.verify(c3).getChangeCount();
         inorder.verifyNoMoreInteractions();
     }
 
@@ -180,16 +205,20 @@ public class ConfiguratorTest {
 
         Configuration c1 = mock(Configuration.class);
         Configuration c2 = mock(Configuration.class);
+        Configuration c3 = mock(Configuration.class);
         when(configurationAdmin.getConfiguration("a", "?")).thenReturn(c1);
         when(configurationAdmin.getConfiguration("b", "?")).thenReturn(c2);
+        when(configurationAdmin.getConfiguration("c", "?")).thenReturn(c3);
 
         when(c1.getChangeCount()).thenReturn(1L);
         when(c2.getChangeCount()).thenReturn(1L);
+        when(c3.getChangeCount()).thenReturn(1L);
         configurator.processAddBundle(b2);
         configurator.process();
 
         when(configurationAdmin.listConfigurations("(" + Constants.SERVICE_PID + "=a)")).thenReturn(new Configuration[] {c1});
         when(configurationAdmin.listConfigurations("(" + Constants.SERVICE_PID + "=b)")).thenReturn(new Configuration[] {c2});
+        when(configurationAdmin.listConfigurations("(" + Constants.SERVICE_PID + "=c)")).thenReturn(new Configuration[] {c3});
 
         final Dictionary<String, Object> props1 = new Hashtable<>();
         props1.put("foo", "bar2");

Modified: felix/trunk/configurator/src/test/resources/bundles/2.json
URL: http://svn.apache.org/viewvc/felix/trunk/configurator/src/test/resources/bundles/2.json?rev=1841293&r1=1841292&r2=1841293&view=diff
==============================================================================
--- felix/trunk/configurator/src/test/resources/bundles/2.json (original)
+++ felix/trunk/configurator/src/test/resources/bundles/2.json Wed Sep 19 07:06:43 2018
@@ -4,5 +4,8 @@
           },
     "b" : {
               "x" : "y2"
-          }
+          },
+    "c" : {
+              "c" : "1"
+          }          
 }
\ No newline at end of file

Modified: felix/trunk/configurator/src/test/resources/bundles/2a.json
URL: http://svn.apache.org/viewvc/felix/trunk/configurator/src/test/resources/bundles/2a.json?rev=1841293&r1=1841292&r2=1841293&view=diff
==============================================================================
--- felix/trunk/configurator/src/test/resources/bundles/2a.json (original)
+++ felix/trunk/configurator/src/test/resources/bundles/2a.json Wed Sep 19 07:06:43 2018
@@ -1,8 +1,13 @@
 {
     "a" : {
+              ":configurator:policy" : "force",
               "foo" : "bar3"
           },
     "b" : {
-              "x" : "y2"
+              "x" : "y3"
+          },
+    "c" : {
+              "c" : "2"
           }
+          
 }
\ No newline at end of file