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