Fix unit tests and bugs of EncodableDiscreteResources

Change-Id: Iea3b39dbdcfabaf23fa7e7ef6cb8a98bfe432081
diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/EncodableDiscreteResources.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/EncodableDiscreteResources.java
index a3cc840..7ec9de0 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/EncodableDiscreteResources.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/EncodableDiscreteResources.java
@@ -66,6 +66,17 @@
         return new EncodableDiscreteResources(parent, values);
     }
 
+    private static DiscreteResources of(DiscreteResource parent, Map<Class<?>, EncodedDiscreteResources> map) {
+        if (isEmpty(map)) {
+            return DiscreteResources.empty();
+        }
+        return new EncodableDiscreteResources(parent, map);
+    }
+
+    private static boolean isEmpty(Map<Class<?>, EncodedDiscreteResources> map) {
+        return map.values().stream().allMatch(EncodedDiscreteResources::isEmpty);
+    }
+
     EncodableDiscreteResources(DiscreteResource parent, Map<Class<?>, EncodedDiscreteResources> map) {
         this.parent = parent;
         this.map = map;
@@ -73,6 +84,9 @@
 
     @Override
     public Optional<DiscreteResource> lookup(DiscreteResourceId id) {
+        if (!id.parent().filter(parent.id()::equals).isPresent()) {
+            return Optional.empty();
+        }
         DiscreteResource resource = Resources.discrete(id).resource();
         Class<?> cls = getClass(resource);
         return Optional.ofNullable(map.get(cls))
@@ -92,7 +106,7 @@
                                     Map.Entry::getValue,
                                     EncodedDiscreteResources::difference,
                                     LinkedHashMap::new));
-            return new EncodableDiscreteResources(parent, newMap);
+            return of(parent, newMap);
         } else if (other instanceof EmptyDiscreteResources) {
             return this;
         }
@@ -102,8 +116,7 @@
 
     @Override
     public boolean isEmpty() {
-        return map.values().stream()
-                .allMatch(x -> x.isEmpty());
+        return isEmpty(map);
     }
 
     @Override
@@ -125,7 +138,7 @@
                                     EncodedDiscreteResources::add,
                                     LinkedHashMap::new
                             ));
-            return new EncodableDiscreteResources(parent, newMap);
+            return of(parent, newMap);
         } else if (other instanceof EmptyDiscreteResources) {
             return this;
         }