[ONOS-6527] Support serializing multiple types using the same type ID when a serializer is explicitly provided

Change-Id: I4de04eaaea09eb81e2fe8bd28af934170c88a2d8
diff --git a/core/api/src/main/java/org/onosproject/net/resource/DiscreteResourceId.java b/core/api/src/main/java/org/onosproject/net/resource/DiscreteResourceId.java
index 8e51250..441fe88 100644
--- a/core/api/src/main/java/org/onosproject/net/resource/DiscreteResourceId.java
+++ b/core/api/src/main/java/org/onosproject/net/resource/DiscreteResourceId.java
@@ -32,7 +32,7 @@
     private final ImmutableList<Object> components;
 
     DiscreteResourceId(ImmutableList<Object> components) {
-        this.components = ImmutableList.copyOf(components);
+        this.components = components;
     }
 
     DiscreteResourceId() {
diff --git a/core/store/serializers/src/test/java/org/onosproject/store/serializers/KryoSerializerTest.java b/core/store/serializers/src/test/java/org/onosproject/store/serializers/KryoSerializerTest.java
index bfe7815..ed1a473 100644
--- a/core/store/serializers/src/test/java/org/onosproject/store/serializers/KryoSerializerTest.java
+++ b/core/store/serializers/src/test/java/org/onosproject/store/serializers/KryoSerializerTest.java
@@ -127,6 +127,21 @@
     public void tearDown() throws Exception {
     }
 
+    private byte[] serialize(Object object) {
+        ByteBuffer buffer = ByteBuffer.allocate(1024);
+        serializer.encode(object, buffer);
+        buffer.flip();
+        byte[] bytes = new byte[buffer.remaining()];
+        buffer.get(bytes);
+        return bytes;
+    }
+
+    private <T> void testBytesEqual(T expected, T actual) {
+        byte[] expectedBytes = serialize(expected);
+        byte[] actualBytes = serialize(actual);
+        assertArrayEquals(expectedBytes, actualBytes);
+    }
+
     private <T> void testSerializedEquals(T original) {
         ByteBuffer buffer = ByteBuffer.allocate(1 * 1024 * 1024);
         serializer.encode(original, buffer);
@@ -196,6 +211,7 @@
 
     @Test
     public void testImmutableList() {
+        testBytesEqual(ImmutableList.of(DID1, DID2), ImmutableList.of(DID1, DID2, DID1, DID2).subList(0, 2));
         testSerializedEquals(ImmutableList.of(DID1, DID2));
         testSerializedEquals(ImmutableList.of(DID1));
         testSerializedEquals(ImmutableList.of());