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;
}
diff --git a/core/store/dist/src/test/java/org/onosproject/store/resource/impl/EncodableDiscreteResourcesTest.java b/core/store/dist/src/test/java/org/onosproject/store/resource/impl/EncodableDiscreteResourcesTest.java
index b5785f6..40f20b6 100644
--- a/core/store/dist/src/test/java/org/onosproject/store/resource/impl/EncodableDiscreteResourcesTest.java
+++ b/core/store/dist/src/test/java/org/onosproject/store/resource/impl/EncodableDiscreteResourcesTest.java
@@ -62,9 +62,9 @@
@Test
public void testIfResourceIsNotFound() {
DiscreteResource res1 = Resources.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(1)).resource();
- DiscreteResource res2 = Resources.discrete(DeviceId.deviceId("b"), PortNumber.portNumber(1)).resource();
+ DiscreteResource res2 = Resources.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(2)).resource();
- DiscreteResources sut = GenericDiscreteResources.of(ImmutableSet.of(res1));
+ DiscreteResources sut = EncodableDiscreteResources.of(ImmutableSet.of(res1));
assertThat(sut.lookup(res2.id()), is(Optional.empty()));
}
@@ -72,39 +72,39 @@
@Test
public void testIfDifferenceIsEmpty() {
DiscreteResource res1 = Resources.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(1)).resource();
- DiscreteResource res2 = Resources.discrete(DeviceId.deviceId("b"), PortNumber.portNumber(1)).resource();
+ DiscreteResource res2 = Resources.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(2)).resource();
- DiscreteResources sut = GenericDiscreteResources.of(ImmutableSet.of(res1, res2));
+ DiscreteResources sut = EncodableDiscreteResources.of(ImmutableSet.of(res1, res2));
- DiscreteResources other = GenericDiscreteResources.of(ImmutableSet.of(res1, res2));
+ DiscreteResources other = EncodableDiscreteResources.of(ImmutableSet.of(res1, res2));
- DiscreteResources expected = GenericDiscreteResources.of(ImmutableSet.of());
+ DiscreteResources expected = DiscreteResources.empty();
assertThat(sut.difference(other), is(expected));
}
@Test
public void testIfDifferenceIsNotEmpty() {
DiscreteResource res1 = Resources.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(1)).resource();
- DiscreteResource res2 = Resources.discrete(DeviceId.deviceId("b"), PortNumber.portNumber(1)).resource();
+ DiscreteResource res2 = Resources.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(2)).resource();
- DiscreteResources sut = GenericDiscreteResources.of(ImmutableSet.of(res1, res2));
+ DiscreteResources sut = EncodableDiscreteResources.of(ImmutableSet.of(res1, res2));
- DiscreteResources other = GenericDiscreteResources.of(ImmutableSet.of(res1));
+ DiscreteResources other = EncodableDiscreteResources.of(ImmutableSet.of(res1));
- DiscreteResources expected = GenericDiscreteResources.of(ImmutableSet.of(res2));
+ DiscreteResources expected = EncodableDiscreteResources.of(ImmutableSet.of(res2));
assertThat(sut.difference(other), is(expected));
}
@Test
public void testIfDifferenceIsNotChanged() {
DiscreteResource res1 = Resources.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(1)).resource();
- DiscreteResource res2 = Resources.discrete(DeviceId.deviceId("b"), PortNumber.portNumber(1)).resource();
+ DiscreteResource res2 = Resources.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(2)).resource();
- DiscreteResources sut = GenericDiscreteResources.of(ImmutableSet.of(res1));
+ DiscreteResources sut = EncodableDiscreteResources.of(ImmutableSet.of(res1));
- DiscreteResources other = GenericDiscreteResources.of(ImmutableSet.of(res2));
+ DiscreteResources other = EncodableDiscreteResources.of(ImmutableSet.of(res2));
- DiscreteResources expected = GenericDiscreteResources.of(ImmutableSet.of(res1));
+ DiscreteResources expected = EncodableDiscreteResources.of(ImmutableSet.of(res1));
assertThat(sut.difference(other), is(expected));
}
@@ -112,17 +112,17 @@
public void testDifferenceFromEmpty() {
DiscreteResource res1 = Resources.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(1)).resource();
- DiscreteResources sut = GenericDiscreteResources.of(ImmutableSet.of(res1));
+ DiscreteResources sut = EncodableDiscreteResources.of(ImmutableSet.of(res1));
- DiscreteResources other = GenericDiscreteResources.of(ImmutableSet.of());
+ DiscreteResources other = DiscreteResources.empty();
- DiscreteResources expected = GenericDiscreteResources.of(ImmutableSet.of(res1));
+ DiscreteResources expected = EncodableDiscreteResources.of(ImmutableSet.of(res1));
assertThat(sut.difference(other), is(expected));
}
@Test
public void testEmpty() {
- DiscreteResources sut = GenericDiscreteResources.of(ImmutableSet.of());
+ DiscreteResources sut = EncodableDiscreteResources.of(ImmutableSet.of());
assertThat(sut.isEmpty(), is(true));
}
@@ -131,7 +131,7 @@
public void testNotEmpty() {
DiscreteResource res1 = Resources.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(1)).resource();
- DiscreteResources sut = GenericDiscreteResources.of(ImmutableSet.of(res1));
+ DiscreteResources sut = EncodableDiscreteResources.of(ImmutableSet.of(res1));
assertThat(sut.isEmpty(), is(false));
}
@@ -140,7 +140,7 @@
public void testIfResourceIsContained() {
DiscreteResource res1 = Resources.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(1)).resource();
- DiscreteResources sut = GenericDiscreteResources.of(ImmutableSet.of(res1));
+ DiscreteResources sut = EncodableDiscreteResources.of(ImmutableSet.of(res1));
assertThat(sut.containsAny(ImmutableSet.of(res1)), is(true));
}
@@ -148,9 +148,9 @@
@Test
public void testIfResourceIsNotContained() {
DiscreteResource res1 = Resources.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(1)).resource();
- DiscreteResource res2 = Resources.discrete(DeviceId.deviceId("b"), PortNumber.portNumber(1)).resource();
+ DiscreteResource res2 = Resources.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(2)).resource();
- DiscreteResources sut = GenericDiscreteResources.of(ImmutableSet.of(res1));
+ DiscreteResources sut = EncodableDiscreteResources.of(ImmutableSet.of(res1));
assertThat(sut.containsAny(ImmutableSet.of(res2)), is(false));
}
@@ -159,7 +159,7 @@
public void testContainsWithEmpty() {
DiscreteResource res1 = Resources.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(1)).resource();
- DiscreteResources sut = GenericDiscreteResources.of(ImmutableSet.of(res1));
+ DiscreteResources sut = EncodableDiscreteResources.of(ImmutableSet.of(res1));
assertThat(sut.containsAny(ImmutableSet.of()), is(false));
}
@@ -167,22 +167,22 @@
@Test
public void testAdd() {
DiscreteResource res1 = Resources.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(1)).resource();
- DiscreteResource res2 = Resources.discrete(DeviceId.deviceId("b"), PortNumber.portNumber(1)).resource();
+ DiscreteResource res2 = Resources.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(2)).resource();
- DiscreteResources sut = GenericDiscreteResources.of(ImmutableSet.of(res1));
+ DiscreteResources sut = EncodableDiscreteResources.of(ImmutableSet.of(res1));
- DiscreteResources other = GenericDiscreteResources.of(ImmutableSet.of(res2));
+ DiscreteResources other = EncodableDiscreteResources.of(ImmutableSet.of(res2));
- DiscreteResources expected = GenericDiscreteResources.of(ImmutableSet.of(res1, res2));
+ DiscreteResources expected = EncodableDiscreteResources.of(ImmutableSet.of(res1, res2));
assertThat(sut.add(other), is(expected));
}
@Test
public void testValues() {
DiscreteResource res1 = Resources.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(1)).resource();
- DiscreteResource res2 = Resources.discrete(DeviceId.deviceId("b"), PortNumber.portNumber(1)).resource();
+ DiscreteResource res2 = Resources.discrete(DeviceId.deviceId("a"), PortNumber.portNumber(2)).resource();
- DiscreteResources sut = GenericDiscreteResources.of(ImmutableSet.of(res1, res2));
+ DiscreteResources sut = EncodableDiscreteResources.of(ImmutableSet.of(res1, res2));
assertThat(sut.values(), is(ImmutableSet.of(res1, res2)));
}