+ /**\r
+ * @throws Exception\r
+ * Testing of {@link MultipartRequestInputFactory} for correct translation from POJO\r
+ */\r
+ @Test\r
+ public void testMultipartRequestTableFeaturesExperimenter() throws Exception {\r
+ MultipartRequestInputFactory factory = new MultipartRequestInputFactory();\r
+ factory.injectSerializerRegistry(mockRegistry);\r
+ MultipartRequestInputBuilder builder = new MultipartRequestInputBuilder();\r
+ BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);\r
+ builder.setType(MultipartType.forValue(12));\r
+ builder.setFlags(new MultipartRequestFlags(true));\r
+ MultipartRequestTableFeaturesCaseBuilder caseBuilder = new MultipartRequestTableFeaturesCaseBuilder();\r
+ MultipartRequestTableFeaturesBuilder featuresBuilder = new MultipartRequestTableFeaturesBuilder();\r
+ List<TableFeatures> tableFeaturesList = new ArrayList<>();\r
+ TableFeaturesBuilder tableFeaturesBuilder = new TableFeaturesBuilder();\r
+ tableFeaturesBuilder.setTableId((short) 8);\r
+ tableFeaturesBuilder.setName("AAAABBBBCCCCDDDDEEEEFFFFGGGG");\r
+ tableFeaturesBuilder.setMetadataMatch(new BigInteger(new byte[] {0x00, 0x01, 0x02, 0x03, 0x01, 0x04, 0x08, 0x01}));\r
+ tableFeaturesBuilder.setMetadataWrite(new BigInteger(new byte[] {0x00, 0x07, 0x01, 0x05, 0x01, 0x00, 0x03, 0x01}));\r
+ tableFeaturesBuilder.setConfig(new TableConfig(true));\r
+ tableFeaturesBuilder.setMaxEntries(65L);\r
+ List<TableFeatureProperties> properties = new ArrayList<>();\r
+ TableFeaturePropertiesBuilder propBuilder = new TableFeaturePropertiesBuilder();\r
+ propBuilder.setType(TableFeaturesPropType.OFPTFPTEXPERIMENTER);\r
+ ExperimenterIdTableFeaturePropertyBuilder expBuilder = new ExperimenterIdTableFeaturePropertyBuilder();\r
+ expBuilder.setExperimenter(new ExperimenterId(42L));\r
+ propBuilder.addAugmentation(ExperimenterIdTableFeatureProperty.class, expBuilder.build());\r
+ properties.add(propBuilder.build());\r
+ propBuilder = new TableFeaturePropertiesBuilder();\r
+ propBuilder.setType(TableFeaturesPropType.OFPTFPTEXPERIMENTERMISS);\r
+ expBuilder = new ExperimenterIdTableFeaturePropertyBuilder();\r
+ expBuilder.setExperimenter(new ExperimenterId(43L));\r
+ propBuilder.addAugmentation(ExperimenterIdTableFeatureProperty.class, expBuilder.build());\r
+ properties.add(propBuilder.build());\r
+ tableFeaturesBuilder.setTableFeatureProperties(properties);\r
+ tableFeaturesList.add(tableFeaturesBuilder.build());\r
+ featuresBuilder.setTableFeatures(tableFeaturesList);\r
+ caseBuilder.setMultipartRequestTableFeatures(featuresBuilder.build());\r
+ builder.setMultipartRequestBody(caseBuilder.build());\r
+ MultipartRequestInput message = builder.build();\r
+\r
+ ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
+ factory.serialize(message, out);\r
+\r
+ BufferHelper.checkHeaderV13(out, (byte) 18, 80);\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", 64, 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
+ byte[] metadataMatch = new byte[EncodeConstants.SIZE_OF_LONG_IN_BYTES];\r
+ out.readBytes(metadataMatch);\r
+ Assert.assertArrayEquals("Wrong metadata-match",\r
+ new byte[] {0x00, 0x01, 0x02, 0x03, 0x01, 0x04, 0x08, 0x01}, metadataMatch);\r
+ byte[] metadataWrite = new byte[EncodeConstants.SIZE_OF_LONG_IN_BYTES];\r
+ out.readBytes(metadataWrite);\r
+ Assert.assertArrayEquals("Wrong metadata-write",\r
+ new byte[] {0x00, 0x07, 0x01, 0x05, 0x01, 0x00, 0x03, 0x01}, metadataWrite);\r
+ Assert.assertEquals("Wrong config", 8, out.readUnsignedInt());\r
+ Assert.assertEquals("Wrong max-entries", 65, out.readUnsignedInt());\r
+ Mockito.verify(serializer, Mockito.times(2)).serialize(Matchers.any(TableFeatureProperties.class),\r
+ Matchers.any(ByteBuf.class));\r
+ }\r
+}
\ No newline at end of file