Fix for ONOS-4315

- Additional log on error
- Allow count=0 using CountDownCompleter
- test case to detect the issue (@Ignored by default right now)
- other bug fixes found along the way

Based on patch by Madan@China

Change-Id: I7d6cb8c214052859900ef7ee0337a7e1c8a9d295
diff --git a/utils/misc/src/main/java/org/onlab/util/CountDownCompleter.java b/utils/misc/src/main/java/org/onlab/util/CountDownCompleter.java
index e3ef9be..ef17bc4 100644
--- a/utils/misc/src/main/java/org/onlab/util/CountDownCompleter.java
+++ b/utils/misc/src/main/java/org/onlab/util/CountDownCompleter.java
@@ -45,10 +45,13 @@
      * @param onCompleteCallback callback to invoke when completer is completed
      */
     public CountDownCompleter(T object, long count, Consumer<T> onCompleteCallback) {
-        checkState(count > 0, "count must be positive");
+        checkState(count >= 0, "count must be non-negative");
         this.counter = new AtomicLong(count);
         this.object = checkNotNull(object);
         this.onCompleteCallback = checkNotNull(onCompleteCallback);
+        if (count == 0) {
+            onCompleteCallback.accept(object);
+        }
     }
 
     /**