Sho SHIMIZU
Committed by Gerrit Code Review

Make sure to supply Kryo serializable set to constructor

Change-Id: Ida776fc3e7fbcacb604ae578865f2a280970101c
...@@ -16,7 +16,6 @@ ...@@ -16,7 +16,6 @@
16 package org.onosproject.store.resource.impl; 16 package org.onosproject.store.resource.impl;
17 17
18 import com.google.common.base.MoreObjects; 18 import com.google.common.base.MoreObjects;
19 -import com.google.common.collect.ImmutableSet;
20 import com.google.common.collect.Sets; 19 import com.google.common.collect.Sets;
21 20
22 import org.onosproject.net.resource.DiscreteResource; 21 import org.onosproject.net.resource.DiscreteResource;
...@@ -41,7 +40,7 @@ final class GenericDiscreteResources implements DiscreteResources { ...@@ -41,7 +40,7 @@ final class GenericDiscreteResources implements DiscreteResources {
41 } 40 }
42 41
43 private GenericDiscreteResources(Set<DiscreteResource> values) { 42 private GenericDiscreteResources(Set<DiscreteResource> values) {
44 - this.values = ImmutableSet.copyOf(values); 43 + this.values = values;
45 } 44 }
46 45
47 // for serializer 46 // for serializer
...@@ -62,7 +61,8 @@ final class GenericDiscreteResources implements DiscreteResources { ...@@ -62,7 +61,8 @@ final class GenericDiscreteResources implements DiscreteResources {
62 @Override 61 @Override
63 public DiscreteResources difference(DiscreteResources other) { 62 public DiscreteResources difference(DiscreteResources other) {
64 if (other instanceof GenericDiscreteResources) { 63 if (other instanceof GenericDiscreteResources) {
65 - return of(Sets.difference(this.values(), other.values())); 64 + // make sure that the set is serializable
65 + return of(new LinkedHashSet<>(Sets.difference(this.values(), other.values())));
66 } else if (other instanceof EmptyDiscreteResources) { 66 } else if (other instanceof EmptyDiscreteResources) {
67 return this; 67 return this;
68 } 68 }
...@@ -84,7 +84,8 @@ final class GenericDiscreteResources implements DiscreteResources { ...@@ -84,7 +84,8 @@ final class GenericDiscreteResources implements DiscreteResources {
84 @Override 84 @Override
85 public DiscreteResources add(DiscreteResources other) { 85 public DiscreteResources add(DiscreteResources other) {
86 if (other instanceof GenericDiscreteResources) { 86 if (other instanceof GenericDiscreteResources) {
87 - return new GenericDiscreteResources(Sets.union(this.values(), other.values())); 87 + // make sure that the set is serializable
88 + return of(new LinkedHashSet<>(Sets.union(this.values(), other.values())));
88 } else if (other instanceof EmptyDiscreteResources) { 89 } else if (other instanceof EmptyDiscreteResources) {
89 return this; 90 return this;
90 } 91 }
......
...@@ -21,6 +21,7 @@ import org.junit.Test; ...@@ -21,6 +21,7 @@ import org.junit.Test;
21 import org.onosproject.net.DeviceId; 21 import org.onosproject.net.DeviceId;
22 import org.onosproject.net.resource.DiscreteResource; 22 import org.onosproject.net.resource.DiscreteResource;
23 import org.onosproject.net.resource.Resources; 23 import org.onosproject.net.resource.Resources;
24 +import org.onosproject.store.service.Serializer;
24 25
25 import java.util.Optional; 26 import java.util.Optional;
26 27
...@@ -28,6 +29,8 @@ import static org.hamcrest.Matchers.is; ...@@ -28,6 +29,8 @@ import static org.hamcrest.Matchers.is;
28 import static org.junit.Assert.assertThat; 29 import static org.junit.Assert.assertThat;
29 30
30 public class GenericDiscreteResourcesTest { 31 public class GenericDiscreteResourcesTest {
32 + private final Serializer serializer = ConsistentResourceStore.SERIALIZER;
33 +
31 @Test 34 @Test
32 public void testIfResourceIsFound() { 35 public void testIfResourceIsFound() {
33 DiscreteResource res1 = Resources.discrete(DeviceId.deviceId("a")).resource(); 36 DiscreteResource res1 = Resources.discrete(DeviceId.deviceId("a")).resource();
...@@ -164,4 +167,28 @@ public class GenericDiscreteResourcesTest { ...@@ -164,4 +167,28 @@ public class GenericDiscreteResourcesTest {
164 167
165 assertThat(sut.values(), is(ImmutableSet.of(res1, res2))); 168 assertThat(sut.values(), is(ImmutableSet.of(res1, res2)));
166 } 169 }
170 +
171 + @Test
172 + public void testDifferenceSerializable() {
173 + DiscreteResource res1 = Resources.discrete(DeviceId.deviceId("a")).resource();
174 + DiscreteResource res2 = Resources.discrete(DeviceId.deviceId("b")).resource();
175 +
176 + DiscreteResources set1 = GenericDiscreteResources.of(ImmutableSet.of(res1, res2));
177 + DiscreteResources set2 = GenericDiscreteResources.of(ImmutableSet.of(res1));
178 +
179 + DiscreteResources difference = set1.difference(set2);
180 + assertThat(serializer.decode(serializer.encode(difference)), is(difference));
181 + }
182 +
183 + @Test
184 + public void testAddSerializable() {
185 + DiscreteResource res1 = Resources.discrete(DeviceId.deviceId("a")).resource();
186 + DiscreteResource res2 = Resources.discrete(DeviceId.deviceId("b")).resource();
187 +
188 + DiscreteResources set1 = GenericDiscreteResources.of(ImmutableSet.of(res1));
189 + DiscreteResources set2 = GenericDiscreteResources.of(ImmutableSet.of(res2));
190 +
191 + DiscreteResources add = set1.add(set2);
192 + assertThat(serializer.decode(serializer.encode(add)), is(add));
193 + }
167 } 194 }
......