Author: cziegeler
Date: Thu Oct 20 09:32:32 2011
New Revision: 1186688

URL: http://svn.apache.org/viewvc?rev=1186688&view=rev
Log:
Fix config installer test - it did just count all configuration events coming 
in but not just listen to specific ones. If for whatever reason another 
configuration event occurs, the test case fails. This is fixed now

Modified:
    
sling/trunk/installer/it/src/test/java/org/apache/sling/installer/it/ConfigInstallTest.java

Modified: 
sling/trunk/installer/it/src/test/java/org/apache/sling/installer/it/ConfigInstallTest.java
URL: 
http://svn.apache.org/viewvc/sling/trunk/installer/it/src/test/java/org/apache/sling/installer/it/ConfigInstallTest.java?rev=1186688&r1=1186687&r2=1186688&view=diff
==============================================================================
--- 
sling/trunk/installer/it/src/test/java/org/apache/sling/installer/it/ConfigInstallTest.java
 (original)
+++ 
sling/trunk/installer/it/src/test/java/org/apache/sling/installer/it/ConfigInstallTest.java
 Thu Oct 20 09:32:32 2011
@@ -72,7 +72,9 @@ public class ConfigInstallTest extends O
      * @see 
org.osgi.service.cm.ConfigurationListener#configurationEvent(org.osgi.service.cm.ConfigurationEvent)
      */
     public void configurationEvent(ConfigurationEvent e) {
-       events.add(e);
+        synchronized ( events ) {
+            events.add(e);
+        }
        }
 
        @Test
@@ -162,8 +164,7 @@ public class ConfigInstallTest extends O
        final Configuration c = ca.getConfiguration(cfgPid);
        c.update(cfgData);
         waitForConfigValue("After manual installation", cfgPid, TIMEOUT, 
"foo", "bar");
-               Condition cond = new Condition() { public boolean isTrue() { 
return events.size() == 1; }};
-        waitForCondition("Expected two ConfigurationEvents since beginning of 
test", TIMEOUT, cond);
+        waitForCondition("Expected one ConfigurationEvents since beginning of 
test", TIMEOUT, new ConfigCondition(cfgPid, 1));
 
         installer.updateResources(URL_SCHEME, getInstallableResource(cfgPid, 
cfgData), null);
 
@@ -171,7 +172,54 @@ public class ConfigInstallTest extends O
         cfgData.put("foo", "changed");
         installer.updateResources(URL_SCHEME, getInstallableResource(cfgPid, 
cfgData), null);
         waitForConfigValue("After changing value", cfgPid, TIMEOUT, "foo", 
"changed");
-               cond = new Condition() { public boolean isTrue() { return 
events.size() == 2; }};
-        waitForCondition("Expected two ConfigurationEvents since beginning of 
test", TIMEOUT, cond);
+        waitForCondition("Expected two ConfigurationEvents since beginning of 
test", TIMEOUT, new ConfigCondition(cfgPid, 2));
+    }
+
+    protected final class ConfigCondition extends Condition {
+
+        private final String pid;
+
+        private final int maxCount;
+
+        public ConfigCondition(final String pid, final int count) {
+            this.pid = pid;
+            this.maxCount = count;
+        }
+
+        @Override
+        boolean isTrue() throws Exception {
+            int count = 0;
+            synchronized ( events ) {
+                for(final ConfigurationEvent e : events) {
+                    if ( pid.equals(e.getPid()) ) {
+                        count++;
+                    }
+                }
+            }
+            return count == maxCount;
+        }
+
+        @Override
+        String additionalInfo() {
+            final StringBuilder sb = new StringBuilder("Expected ");
+            sb.append(maxCount);
+            sb.append(" events for ");
+            sb.append(pid);
+            sb.append(". Received events: [");
+            boolean first = true;
+            synchronized ( events ) {
+                for(final ConfigurationEvent e : events) {
+                    if ( !first) {
+                        sb.append(", ");
+                    }
+                    first = false;
+                    sb.append(e.getPid());
+                    sb.append(':');
+                    sb.append(e.getType());
+                }
+            }
+            sb.append("]");
+            return sb.toString();
+        }
     }
 }


Reply via email to