Bug 1277 - Move ByteBuffUtils to separate bundle
[openflowjava.git] / openflow-protocol-impl / src / test / java / org / opendaylight / openflowjava / protocol / impl / serialization / factories / multipart / TableFeaturesTest.java
index eb64df70ca5f05cfb1a5b7fdcedacf018e16cb84..77ecc21498ff478d68c2c629e8d4850eb854d516 100644 (file)
@@ -15,13 +15,19 @@ import java.util.ArrayList;
 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.impl.deserialization.factories.HelloMessageFactoryTest;\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.MessageTypeKey;\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;\r
+import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;\r
+import org.opendaylight.openflowjava.protocol.impl.serialization.SerializerRegistryImpl;\r
 import org.opendaylight.openflowjava.protocol.impl.serialization.factories.MultipartRequestInputFactory;\r
 import org.opendaylight.openflowjava.protocol.impl.serialization.factories.MultipartRequestInputFactoryTest;\r
 import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper;\r
 import org.opendaylight.openflowjava.protocol.impl.util.ByteBufUtils;\r
-import org.opendaylight.openflowjava.protocol.impl.util.EncodeConstants;\r
+import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterRelatedTableFeatureProperty;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterRelatedTableFeaturePropertyBuilder;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.InstructionRelatedTableFeatureProperty;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.InstructionRelatedTableFeaturePropertyBuilder;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.NextTableRelatedTableFeatureProperty;\r
@@ -46,8 +52,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.InPh
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.InPort;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.IpEcn;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.IpProto;\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.oxm.fields.grouping.MatchEntries;\r
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntriesBuilder;\r
@@ -67,6 +71,19 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 public class TableFeaturesTest {\r
     private static final byte PADDING_IN_MULTIPART_REQUEST_MESSAGE =\r
             MultipartRequestInputFactoryTest.PADDING_IN_MULTIPART_REQUEST_MESSAGE;\r
+    private SerializerRegistry registry;\r
+    private OFSerializer<MultipartRequestInput> multipartFactory;\r
+\r
+    /**\r
+     * Initializes serializer registry and stores correct factory in field\r
+     */\r
+    @Before\r
+    public void startUp() {\r
+        registry = new SerializerRegistryImpl();\r
+        registry.init();\r
+        multipartFactory = registry.getSerializer(\r
+                new MessageTypeKey<>(EncodeConstants.OF13_VERSION_ID, MultipartRequestInput.class));\r
+    }\r
 \r
     /**\r
      * @throws Exception\r
@@ -163,7 +180,7 @@ public class TableFeaturesTest {
         entriesBuilder.setHasMask(false);\r
         entries.add(entriesBuilder.build());\r
         entriesBuilder = new MatchEntriesBuilder();\r
-        entriesBuilder.setOxmClass(Nxm0Class.class);\r
+        entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
         entriesBuilder.setOxmMatchField(InPort.class);\r
         entriesBuilder.setHasMask(false);\r
         entries.add(entriesBuilder.build());\r
@@ -180,13 +197,34 @@ public class TableFeaturesTest {
         entriesBuilder.setHasMask(false);\r
         entries.add(entriesBuilder.build());\r
         entriesBuilder = new MatchEntriesBuilder();\r
-        entriesBuilder.setOxmClass(Nxm1Class.class);\r
+        entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
         entriesBuilder.setOxmMatchField(IpEcn.class);\r
         entriesBuilder.setHasMask(false);\r
         entries.add(entriesBuilder.build());\r
         oxmBuilder.setMatchEntries(entries);\r
         propBuilder.addAugmentation(OxmRelatedTableFeatureProperty.class, oxmBuilder.build());\r
         properties.add(propBuilder.build());\r
+        propBuilder = new TableFeaturePropertiesBuilder();\r
+        propBuilder.setType(TableFeaturesPropType.OFPTFPTEXPERIMENTER);\r
+        ExperimenterRelatedTableFeaturePropertyBuilder expBuilder =\r
+                       new ExperimenterRelatedTableFeaturePropertyBuilder();\r
+        expBuilder.setExperimenter(1024L);\r
+        expBuilder.setExpType(2048L);\r
+        byte[] expData = new byte[]{0, 1, 2};\r
+        expBuilder.setData(expData);\r
+        propBuilder.addAugmentation(\r
+                       ExperimenterRelatedTableFeatureProperty.class, expBuilder.build());\r
+        properties.add(propBuilder.build());\r
+        propBuilder = new TableFeaturePropertiesBuilder();\r
+        propBuilder.setType(TableFeaturesPropType.OFPTFPTEXPERIMENTERMISS);\r
+        expBuilder = new ExperimenterRelatedTableFeaturePropertyBuilder();\r
+        expBuilder.setExperimenter(4098L);\r
+        expBuilder.setExpType(8152L);\r
+        byte[] expData2 = new byte[]{3, 4, 6, 7, 8, 9};\r
+        expBuilder.setData(expData2);\r
+        propBuilder.addAugmentation(\r
+                       ExperimenterRelatedTableFeatureProperty.class, expBuilder.build());\r
+        properties.add(propBuilder.build());\r
         tableFeaturesBuilder.setTableFeatureProperties(properties);\r
         tableFeaturesList.add(tableFeaturesBuilder.build());\r
         featuresBuilder.setTableFeatures(tableFeaturesList);\r
@@ -195,15 +233,14 @@ public class TableFeaturesTest {
         MultipartRequestInput message = builder.build();\r
 \r
         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
-        MultipartRequestInputFactory factory = MultipartRequestInputFactory.getInstance();\r
-        factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
+        multipartFactory.serialize(message, out);\r
 \r
-        BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength(message));\r
+        BufferHelper.checkHeaderV13(out, (byte) 18, 272);\r
         Assert.assertEquals("Wrong type", 12, out.readUnsignedShort());\r
         Assert.assertEquals("Wrong flags", 1, out.readUnsignedShort());\r
         out.skipBytes(PADDING_IN_MULTIPART_REQUEST_MESSAGE);\r
         Assert.assertEquals("Wrong length", 120, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong table-id", 8, out.readUnsignedByte());\r
+        Assert.assertEquals("Wrong registry-id", 8, out.readUnsignedByte());\r
         out.skipBytes(5);\r
         Assert.assertEquals("Wrong name", "AAAABBBBCCCCDDDDEEEEFFFFGGGG",\r
                 ByteBufUtils.decodeNullTerminatedString(out, 32));\r
@@ -219,12 +256,12 @@ public class TableFeaturesTest {
         Assert.assertEquals("Wrong max-entries", 65, out.readUnsignedInt());\r
         Assert.assertEquals("Wrong property type", 2, out.readUnsignedShort());\r
         Assert.assertEquals("Wrong property length", 6, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong next-table-id", 1, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong next-table-id", 2, out.readUnsignedByte());\r
+        Assert.assertEquals("Wrong next-registry-id", 1, out.readUnsignedByte());\r
+        Assert.assertEquals("Wrong next-registry-id", 2, out.readUnsignedByte());\r
         out.skipBytes(2);\r
         Assert.assertEquals("Wrong property type", 3, out.readUnsignedShort());\r
         Assert.assertEquals("Wrong property length", 5, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong next-table-id", 3, out.readUnsignedByte());\r
+        Assert.assertEquals("Wrong next-registry-id", 3, out.readUnsignedByte());\r
         out.skipBytes(3);\r
         Assert.assertEquals("Wrong property type", 0, out.readUnsignedShort());\r
         Assert.assertEquals("Wrong property length", 12, out.readUnsignedShort());\r
@@ -245,8 +282,8 @@ public class TableFeaturesTest {
         Assert.assertEquals("Wrong instruction length", 4, out.readUnsignedShort());\r
         Assert.assertEquals("Wrong instruction type", 1, out.readUnsignedShort());\r
         Assert.assertEquals("Wrong instruction length", 4, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong length", 96, out.readUnsignedShort());\r
-        Assert.assertEquals("Wrong table-id", 8, out.readUnsignedByte());\r
+        Assert.assertEquals("Wrong length", 136, out.readUnsignedShort());\r
+        Assert.assertEquals("Wrong registry-id", 8, out.readUnsignedByte());\r
         out.skipBytes(5);\r
         Assert.assertEquals("Wrong name", "AAAABBBBCCCCDDDDEEEEFFFFGGGG",\r
                 ByteBufUtils.decodeNullTerminatedString(out, 32));\r
@@ -265,7 +302,7 @@ public class TableFeaturesTest {
         Assert.assertEquals("Wrong match class", 0x8000, out.readUnsignedShort());\r
         Assert.assertEquals("Wrong match field&mask", 2, out.readUnsignedByte());\r
         Assert.assertEquals("Wrong match length", 4, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match class", 0, out.readUnsignedShort());\r
+        Assert.assertEquals("Wrong match class", 0x8000, out.readUnsignedShort());\r
         Assert.assertEquals("Wrong match field&mask", 0, out.readUnsignedByte());\r
         Assert.assertEquals("Wrong match length", 4, out.readUnsignedByte());\r
         out.skipBytes(4);\r
@@ -274,10 +311,26 @@ public class TableFeaturesTest {
         Assert.assertEquals("Wrong match class", 0x8000, out.readUnsignedShort());\r
         Assert.assertEquals("Wrong match field&mask", 20, out.readUnsignedByte());\r
         Assert.assertEquals("Wrong match length", 1, out.readUnsignedByte());\r
-        Assert.assertEquals("Wrong match class", 1, out.readUnsignedShort());\r
+        Assert.assertEquals("Wrong match class", 0x8000, out.readUnsignedShort());\r
         Assert.assertEquals("Wrong match field&mask", 18, out.readUnsignedByte());\r
         Assert.assertEquals("Wrong match length", 1, out.readUnsignedByte());\r
         out.skipBytes(4);\r
+        Assert.assertEquals("Wrong property type", 0xFFFE, out.readUnsignedShort());\r
+        Assert.assertEquals("Wrong property length", 16, out.readUnsignedShort());\r
+        Assert.assertEquals("Wrong experimenter", 1024, out.readUnsignedInt());\r
+        Assert.assertEquals("Wrong exp-type", 2048, out.readUnsignedInt());\r
+        byte[] tmp = new byte[3];\r
+        out.readBytes(tmp);\r
+        Assert.assertArrayEquals("Wrong experimenter data", expData, tmp);\r
+        out.skipBytes(1);\r
+        Assert.assertEquals("Wrong property type", 0xFFFF, out.readUnsignedShort());\r
+        Assert.assertEquals("Wrong property length", 24, out.readUnsignedShort());\r
+        Assert.assertEquals("Wrong experimenter", 4098, out.readUnsignedInt());\r
+        Assert.assertEquals("Wrong exp-type", 8152, out.readUnsignedInt());\r
+        byte[] tmp2 = new byte[6];\r
+        out.readBytes(tmp2);\r
+        Assert.assertArrayEquals("Wrong experimenter data", expData2, tmp2);\r
+        out.skipBytes(6);\r
         Assert.assertTrue("Unread data", out.readableBytes() == 0);\r
     }\r
 \r