Extensibility support (deserialization part)
[openflowjava.git] / openflow-protocol-impl / src / test / java / org / opendaylight / openflowjava / protocol / impl / util / MatchDeserializerTest.java
index 4de1c3a88ca3407ccec1d60355a0b1de0ee4152f..d4cdc802ae75c6fe272819d6c8995cdb36c71c72 100644 (file)
@@ -12,7 +12,13 @@ import io.netty.buffer.ByteBuf;
 import java.util.List;\r
 \r
 import org.junit.Assert;\r
+import org.junit.Before;\r
 import org.junit.Test;\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.EnhancedMessageCodeKey;\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.MessageCodeKey;\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;\r
+import org.opendaylight.openflowjava.protocol.impl.deserialization.DeserializerRegistryImpl;\r
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;\r
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv6Address;\r
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev100924.MacAddress;\r
@@ -49,7 +55,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ArpT
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.EthDst;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.EthSrc;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.EthType;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.ExperimenterClass;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv4Code;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv4Type;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Icmpv6Code;\r
@@ -72,8 +77,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Meta
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MplsBos;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MplsLabel;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.MplsTc;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Nxm0Class;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Nxm1Class;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OpenflowBasicClass;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OxmMatchType;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.PbbIsid;\r
@@ -94,16 +97,32 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.
  *\r
  */\r
 public class MatchDeserializerTest {\r
-    \r
+\r
+    private OFDeserializer<Match> matchDeserializer;\r
+    private DeserializerRegistry registry;\r
+\r
+    /**\r
+     * Initializes deserializer registry and lookups correct deserializer\r
+     */\r
+    @Before\r
+    public void startUp() {\r
+        registry = new DeserializerRegistryImpl();\r
+        registry.init();\r
+        matchDeserializer = registry.getDeserializer(\r
+                new MessageCodeKey(EncodeConstants.OF13_VERSION_ID,\r
+                        EncodeConstants.EMPTY_VALUE, Match.class));\r
+    }\r
+\r
     /**\r
      * Testing Ipv4 address deserialization\r
      */\r
     @Test\r
     public void testIpv4Address() {\r
         ByteBuf buffer = ByteBufUtils.hexStringToByteBuf("80 00 18 04 00 01 02 03");\r
-        \r
-        List<MatchEntries> list = MatchDeserializer.createMatchEntry(buffer, 8);\r
-        MatchEntries entry = list.get(0);\r
+\r
+        OFDeserializer<MatchEntries> entryDeserializer = registry.getDeserializer(\r
+                new EnhancedMessageCodeKey(EncodeConstants.OF13_VERSION_ID, 0x8000, 12, MatchEntries.class));\r
+        MatchEntries entry = entryDeserializer.deserialize(buffer);\r
         Assert.assertEquals("Wrong Ipv4 address format", new Ipv4Address("0.1.2.3"),\r
                 entry.getAugmentation(Ipv4AddressMatchEntry.class).getIpv4Address());\r
     }\r
@@ -115,8 +134,9 @@ public class MatchDeserializerTest {
     public void testIpv6Address() {\r
         ByteBuf buffer = ByteBufUtils.hexStringToByteBuf("80 00 34 10 00 00 00 01 00 02 00 03 00 04 00 05 00 06 0F 07");\r
         \r
-        List<MatchEntries> list = MatchDeserializer.createMatchEntry(buffer, 20);\r
-        MatchEntries entry = list.get(0);\r
+        OFDeserializer<MatchEntries> entryDeserializer = registry.getDeserializer(\r
+                new EnhancedMessageCodeKey(EncodeConstants.OF13_VERSION_ID, 0x8000, 26, MatchEntries.class));\r
+        MatchEntries entry = entryDeserializer.deserialize(buffer);\r
         Assert.assertEquals("Wrong Ipv6 address format", new Ipv6Address("0000:0001:0002:0003:0004:0005:0006:0F07"),\r
                 entry.getAugmentation(Ipv6AddressMatchEntry.class).getIpv6Address());\r
     }\r
@@ -128,9 +148,9 @@ public class MatchDeserializerTest {
     public void testMatch() {\r
         ByteBuf buffer = ByteBufUtils.hexStringToByteBuf("00 01 01 AC "\r
                 + "80 00 00 04 00 00 00 01 "\r
-                + "00 00 02 04 00 00 00 02 "\r
-                + "00 01 05 10 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 04 "\r
-                + "FF FF 07 0C 00 00 00 00 00 05 00 00 00 00 00 06 "\r
+                + "80 00 02 04 00 00 00 02 "\r
+                + "80 00 05 10 00 00 00 00 00 00 00 03 00 00 00 00 00 00 00 04 "\r
+                + "80 00 07 0C 00 00 00 00 00 05 00 00 00 00 00 06 "\r
                 + "80 00 09 0C 00 00 00 00 00 07 00 00 00 00 00 08 "\r
                 + "80 00 0A 02 00 09 "\r
                 + "80 00 0D 04 00 0A 00 0B "\r
@@ -171,7 +191,7 @@ public class MatchDeserializerTest {
                 + "80 00 4F 04 01 66 03 04 "\r
                 + "00 00 00 00");\r
 \r
-        Match match = MatchDeserializer.createMatch(buffer);\r
+        Match match = matchDeserializer.deserialize(buffer);\r
         Assert.assertEquals("Wrong match type", OxmMatchType.class, match.getType());\r
         Assert.assertEquals("Wrong match entries size", 40, match.getMatchEntries().size());\r
         List<MatchEntries> entries = match.getMatchEntries();\r
@@ -182,13 +202,13 @@ public class MatchDeserializerTest {
         Assert.assertEquals("Wrong entry value", 1,\r
                 entry0.getAugmentation(PortNumberMatchEntry.class).getPortNumber().getValue().intValue());\r
         MatchEntries entry1 = entries.get(1);\r
-        Assert.assertEquals("Wrong entry class", Nxm0Class.class, entry1.getOxmClass());\r
+        Assert.assertEquals("Wrong entry class", OpenflowBasicClass.class, entry1.getOxmClass());\r
         Assert.assertEquals("Wrong entry field", InPhyPort.class, entry1.getOxmMatchField());\r
         Assert.assertEquals("Wrong entry hasMask", false, entry1.isHasMask());\r
         Assert.assertEquals("Wrong entry value", 2,\r
                 entry1.getAugmentation(PortNumberMatchEntry.class).getPortNumber().getValue().intValue());\r
         MatchEntries entry2 = entries.get(2);\r
-        Assert.assertEquals("Wrong entry class", Nxm1Class.class, entry2.getOxmClass());\r
+        Assert.assertEquals("Wrong entry class", OpenflowBasicClass.class, entry2.getOxmClass());\r
         Assert.assertEquals("Wrong entry field", Metadata.class, entry2.getOxmMatchField());\r
         Assert.assertEquals("Wrong entry hasMask", true, entry2.isHasMask());\r
         Assert.assertArrayEquals("Wrong entry value", ByteBufUtils.hexStringToBytes("00 00 00 00 00 00 00 03"), \r
@@ -196,7 +216,7 @@ public class MatchDeserializerTest {
         Assert.assertArrayEquals("Wrong entry mask", ByteBufUtils.hexStringToBytes("00 00 00 00 00 00 00 04"), \r
                 entry2.getAugmentation(MaskMatchEntry.class).getMask());\r
         MatchEntries entry3 = entries.get(3);\r
-        Assert.assertEquals("Wrong entry class", ExperimenterClass.class, entry3.getOxmClass());\r
+        Assert.assertEquals("Wrong entry class", OpenflowBasicClass.class, entry3.getOxmClass());\r
         Assert.assertEquals("Wrong entry field", EthDst.class, entry3.getOxmMatchField());\r
         Assert.assertEquals("Wrong entry hasMask", true, entry3.isHasMask());\r
         Assert.assertEquals("Wrong entry value", new MacAddress("00:00:00:00:00:05"), \r