-/* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */\r
-package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;\r
-\r
-import io.netty.buffer.ByteBuf;\r
-\r
-import org.junit.Assert;\r
-import org.junit.Test;\r
-import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessage;\r
-\r
-/**\r
- * @author timotej.kubas\r
- * @author michal.polkorab\r
- */\r
-public class MultipartReplyMessageFactoryTest {\r
-\r
- /**\r
- * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO\r
- */\r
- @Test\r
- public void test(){\r
- ByteBuf bb = BufferHelper.buildBuffer("00 07 00 01 00 00 00 00 01 02 03 04");\r
- MultipartReplyMessage builtByFactory = BufferHelper.decodeV13(MultipartReplyMessageFactory.getInstance(), bb);\r
- \r
- BufferHelper.checkHeaderV13(builtByFactory);\r
- \r
- Assert.assertEquals("Wrong type", 0x07, builtByFactory.getType().getIntValue());\r
- Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());\r
- //Assert.assertArrayEquals("Wrong body", new byte[]{0x01, 0x02, 0x03, 0x04}, builtByFactory.getBody());\r
- }\r
- \r
-}\r
+/*
+ * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.openflowjava.protocol.impl.deserialization.factories;
+
+import io.netty.buffer.ByteBuf;
+
+import java.math.BigInteger;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.openflowjava.protocol.api.extensibility.DeserializerRegistry;
+import org.opendaylight.openflowjava.protocol.api.extensibility.OFDeserializer;
+import org.opendaylight.openflowjava.protocol.api.keys.MessageCodeKey;
+import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
+import org.opendaylight.openflowjava.protocol.impl.deserialization.DeserializerRegistryImpl;
+import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.CopyTtlInCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.CopyTtlOutCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.DecMplsTtlCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.DecNwTtlCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.GroupCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.OutputActionCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PopMplsCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PopPbbCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PopVlanCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PushMplsCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PushPbbCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PushVlanCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetFieldCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetMplsTtlCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetNwTtlCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.SetQueueCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterFlags;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.InPort;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.OpenflowBasicClass;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entries.grouping.MatchEntry;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev150225.match.entry.value.grouping.match.entry.value.InPortCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessage;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDropCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDscpRemarkCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.drop._case.MeterBandDrop;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.dscp.remark._case.MeterBandDscpRemark;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyAggregateCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyDescCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyGroupCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyGroupDescCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyMeterCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyMeterConfigCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyPortStatsCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyQueueCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyTableCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.aggregate._case.MultipartReplyAggregate;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.desc._case.MultipartReplyDesc;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.MultipartReplyGroup;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group.desc._case.MultipartReplyGroupDesc;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter._case.MultipartReplyMeter;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.MultipartReplyMeterConfig;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.port.stats._case.MultipartReplyPortStats;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.queue._case.MultipartReplyQueue;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.table._case.MultipartReplyTable;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @author timotej.kubas
+ * @author michal.polkorab
+ */
+public class MultipartReplyMessageFactoryTest {
+
+ private OFDeserializer<MultipartReplyMessage> multipartFactory;
+
+ /**
+ * Initializes deserializer registry and lookups correct deserializer
+ */
+ @Before
+ public void startUp() {
+ DeserializerRegistry registry = new DeserializerRegistryImpl();
+ registry.init();
+ multipartFactory = registry.getDeserializer(
+ new MessageCodeKey(EncodeConstants.OF13_VERSION_ID, 19, MultipartReplyMessage.class));
+ }
+
+ private static final Logger LOG = LoggerFactory
+ .getLogger(MultipartReplyMessageFactoryTest.class);
+
+ /**
+ * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO
+ */
+ @Test
+ public void testMultipartReplyDescBody(){
+ final int DESC_STR_LEN = 256;
+ final int SERIAL_NUM_LEN = 32;
+ ByteBuf bb = BufferHelper.buildBuffer("00 00 00 01 00 00 00 00");
+
+ String mfrDesc = "Manufacturer description";
+ byte[] mfrDescBytes = new byte[256];
+ mfrDescBytes = mfrDesc.getBytes();
+ bb.writeBytes(mfrDescBytes);
+ bb.writeZero(DESC_STR_LEN - mfrDescBytes.length);
+
+ String hwDesc = "Hardware description";
+ byte[] hwDescBytes = new byte[256];
+ hwDescBytes = hwDesc.getBytes();
+ bb.writeBytes(hwDescBytes);
+ bb.writeZero(DESC_STR_LEN - hwDescBytes.length);
+
+ String swDesc = "Software description";
+ byte[] swDescBytes = new byte[256];
+ swDescBytes = swDesc.getBytes();
+ bb.writeBytes(swDescBytes);
+ bb.writeZero(DESC_STR_LEN - swDescBytes.length);
+
+ String serialNum = "SN0123456789";
+ byte[] serialNumBytes = new byte[32];
+ serialNumBytes = serialNum.getBytes();
+ bb.writeBytes(serialNumBytes);
+ bb.writeZero(SERIAL_NUM_LEN - serialNumBytes.length);
+
+ String dpDesc = "switch3 in room 3120";
+ byte[] dpDescBytes = new byte[256];
+ dpDescBytes = dpDesc.getBytes();
+ bb.writeBytes(dpDescBytes);
+ bb.writeZero(DESC_STR_LEN - dpDescBytes.length);
+
+ MultipartReplyMessage builtByFactory = BufferHelper.deserialize(multipartFactory, bb);
+
+ BufferHelper.checkHeaderV13(builtByFactory);
+ Assert.assertEquals("Wrong type", 0x00, builtByFactory.getType().getIntValue());
+ Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());
+ MultipartReplyDescCase messageCase = (MultipartReplyDescCase) builtByFactory.getMultipartReplyBody();
+ MultipartReplyDesc message = messageCase.getMultipartReplyDesc();
+ Assert.assertEquals("Wrong mfrDesc", "Manufacturer description", message.getMfrDesc());
+ Assert.assertEquals("Wrong hwDesc", "Hardware description", message.getHwDesc());
+ Assert.assertEquals("Wrong swDesc", "Software description", message.getSwDesc());
+ Assert.assertEquals("Wrong serialNum", "SN0123456789", message.getSerialNum());
+ Assert.assertEquals("Wrong dpDesc", "switch3 in room 3120", message.getDpDesc());
+ }
+
+ /**
+ * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO
+ */
+ @Test
+ public void testMultipartReplyAggregateBody(){
+ ByteBuf bb = BufferHelper.buildBuffer("00 02 00 01 00 00 00 00 "+
+ "FF 01 01 01 01 01 01 01 "+//packetCount
+ "0F 01 01 01 01 01 01 01 "+//byteCount
+ "00 00 00 08 "+//flowCount
+ "00 00 00 00"//pad
+ );
+
+ MultipartReplyMessage builtByFactory = BufferHelper.deserialize(multipartFactory, bb);
+
+ BufferHelper.checkHeaderV13(builtByFactory);
+ Assert.assertEquals("Wrong type", 0x02, builtByFactory.getType().getIntValue());
+ Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());
+ MultipartReplyAggregateCase messageCase = (MultipartReplyAggregateCase) builtByFactory.getMultipartReplyBody();
+ MultipartReplyAggregate message = messageCase.getMultipartReplyAggregate();
+ Assert.assertEquals("Wrong packetCount",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}),
+ message.getPacketCount());
+ Assert.assertEquals("Wrong byteCount",
+ new BigInteger(1, new byte[]{(byte) 0x0F, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}),
+ message.getByteCount());
+ Assert.assertEquals("Wrong flowCount",
+ 8,
+ message.getFlowCount().intValue());
+ }
+
+ /**
+ * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO
+ */
+ @Test
+ public void testMultipartReplyTableBody(){
+ ByteBuf bb = BufferHelper.buildBuffer("00 03 00 01 00 00 00 00 "+
+ "08 "+//tableId
+ "00 00 00 "+//pad
+ "00 00 00 10 "+//activeCount
+ "FF 01 01 01 01 01 01 01 "+//lookupCount
+ "AF 01 01 01 01 01 01 01"//matchedCount
+ );
+
+ MultipartReplyMessage builtByFactory = BufferHelper.deserialize(multipartFactory, bb);
+
+ BufferHelper.checkHeaderV13(builtByFactory);
+ Assert.assertEquals("Wrong type", 0x03, builtByFactory.getType().getIntValue());
+ Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());
+
+ MultipartReplyTableCase messageCase = (MultipartReplyTableCase) builtByFactory.getMultipartReplyBody();
+ MultipartReplyTable message = messageCase.getMultipartReplyTable();
+ Assert.assertEquals("Wrong tableId", 8, message.getTableStats().get(0).getTableId().intValue());
+ Assert.assertEquals("Wrong activeCount", 16, message.getTableStats().get(0).getActiveCount().longValue());
+ Assert.assertEquals("Wrong lookupCount",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}),
+ message.getTableStats().get(0).getLookupCount());
+ Assert.assertEquals("Wrong matchedCount",
+ new BigInteger(1, new byte[]{(byte) 0xAF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}),
+ message.getTableStats().get(0).getMatchedCount());
+ }
+
+ /**
+ * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO
+ */
+ @Test
+ public void testMultipartReplyPortStatsBody(){
+ ByteBuf bb = BufferHelper.buildBuffer("00 04 00 01 00 00 00 00 "+
+ "00 00 00 FF "+//portNo
+ "00 00 00 00 "+//pad
+ "FF 01 01 01 01 01 01 01 "+//rxPackets
+ "FF 02 02 02 02 02 02 02 "+//txPackets
+ "FF 02 03 02 03 02 03 02 "+//rxBytes
+ "FF 02 03 02 03 02 03 02 "+//txBytes
+ "FF 02 03 02 03 02 03 02 "+//rxDropped
+ "FF 02 03 02 03 02 03 02 "+//txDropped
+ "FF 02 03 02 03 02 03 02 "+//rxErrors
+ "FF 02 03 02 03 02 03 02 "+//txErrors
+ "FF 02 03 02 03 02 03 02 "+//rxFrameErr
+ "FF 02 03 02 03 02 03 02 "+//rxOverErr
+ "FF 02 03 02 03 02 03 02 "+//rxCrcErr
+ "FF 02 03 02 03 02 03 02 "+//collisions
+ "00 00 00 02 "+//durationSec
+ "00 00 00 04"//durationNsec
+ );
+
+ MultipartReplyMessage builtByFactory = BufferHelper.deserialize(multipartFactory, bb);
+
+ BufferHelper.checkHeaderV13(builtByFactory);
+ Assert.assertEquals("Wrong type", 0x04, builtByFactory.getType().getIntValue());
+ Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());
+ MultipartReplyPortStatsCase messageCase = (MultipartReplyPortStatsCase) builtByFactory.getMultipartReplyBody();
+ MultipartReplyPortStats message = messageCase.getMultipartReplyPortStats();
+ Assert.assertEquals("Wrong portNo", 255, message.getPortStats().get(0).getPortNo().intValue());
+ Assert.assertEquals("Wrong rxPackets",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}),
+ message.getPortStats().get(0).getRxPackets());
+ Assert.assertEquals("Wrong txPackets",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02}),
+ message.getPortStats().get(0).getTxPackets());
+ Assert.assertEquals("Wrong rxBytes",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02}),
+ message.getPortStats().get(0).getRxBytes());
+ Assert.assertEquals("Wrong txBytes",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02}),
+ message.getPortStats().get(0).getTxBytes());
+ Assert.assertEquals("Wrong rxDropped",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02}),
+ message.getPortStats().get(0).getRxDropped());
+ Assert.assertEquals("Wrong txDropped",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02}),
+ message.getPortStats().get(0).getTxDropped());
+ Assert.assertEquals("Wrong rxErrors",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02}),
+ message.getPortStats().get(0).getRxErrors());
+ Assert.assertEquals("Wrong txErrors",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02}),
+ message.getPortStats().get(0).getTxErrors());
+ Assert.assertEquals("Wrong rxFrameErr",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02}),
+ message.getPortStats().get(0).getRxFrameErr());
+ Assert.assertEquals("Wrong rxOverErr",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02}),
+ message.getPortStats().get(0).getRxOverErr());
+ Assert.assertEquals("Wrong rxCrcErr",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02}),
+ message.getPortStats().get(0).getRxCrcErr());
+ Assert.assertEquals("Wrong collisions",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02}),
+ message.getPortStats().get(0).getCollisions());
+ Assert.assertEquals("Wrong durationSec", 2, message.getPortStats().get(0).getDurationSec().intValue());
+ Assert.assertEquals("Wrong durationNsec", 4, message.getPortStats().get(0).getDurationNsec().intValue());
+ }
+
+ /**
+ * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO
+ */
+ @Test
+ public void testMultipartReplyQueueBody(){
+ ByteBuf bb = BufferHelper.buildBuffer("00 05 00 01 00 00 00 00 "+
+ "00 00 00 FF "+//portNo
+ "00 00 00 10 "+//queueId
+ "FF 02 03 02 03 02 03 02 "+//txBytes
+ "FF 02 02 02 02 02 02 02 "+//txPackets
+ "FF 02 03 02 03 02 03 02 "+//txErrors
+ "00 00 00 02 "+//durationSec
+ "00 00 00 04"//durationNsec
+ );
+
+ MultipartReplyMessage builtByFactory = BufferHelper.deserialize(multipartFactory, bb);
+
+ BufferHelper.checkHeaderV13(builtByFactory);
+ Assert.assertEquals("Wrong type", 0x05, builtByFactory.getType().getIntValue());
+ Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());
+ MultipartReplyQueueCase messageCase = (MultipartReplyQueueCase) builtByFactory.getMultipartReplyBody();
+ MultipartReplyQueue message = messageCase.getMultipartReplyQueue();
+ Assert.assertEquals("Wrong portNo", 255, message.getQueueStats().get(0).getPortNo().intValue());
+ Assert.assertEquals("Wrong queueId", 16, message.getQueueStats().get(0).getQueueId().intValue());
+ Assert.assertEquals("Wrong txBytes",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02}),
+ message.getQueueStats().get(0).getTxBytes());
+ Assert.assertEquals("Wrong txPackets",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02}),
+ message.getQueueStats().get(0).getTxPackets());
+ Assert.assertEquals("Wrong txErrors",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x02, 0x03, 0x02, 0x03, 0x02, 0x03, 0x02}),
+ message.getQueueStats().get(0).getTxErrors());
+ Assert.assertEquals("Wrong durationSec", 2, message.getQueueStats().get(0).getDurationSec().intValue());
+ Assert.assertEquals("Wrong durationNsec", 4, message.getQueueStats().get(0).getDurationNsec().intValue());
+ }
+
+ /**
+ * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO
+ */
+ @Test
+ public void testMultipartReplyGroupBody(){
+ ByteBuf bb = BufferHelper.buildBuffer("00 06 00 01 00 00 00 00 "+
+ "00 48 "+//length
+ "00 00 "+//pad1
+ "00 00 00 10 "+//groupId
+ "00 00 00 12 "+//refCount
+ "00 00 00 00 "+//pad2
+ "FF 01 01 01 01 01 01 01 "+//packetCount
+ "FF 01 01 01 01 01 01 01 "+//byteCount
+ "00 00 00 08 "+//durationSec
+ "00 00 00 09 "+//durationNsec
+ "FF 01 01 01 01 01 01 01 "+//packetCountBucket
+ "FF 01 01 01 01 01 01 01 "+//byteCountBucket
+ "FF 02 02 02 02 02 02 02 "+//packetCountBucket_2
+ "FF 02 02 02 02 02 02 02 "+//byteCountBucket_2
+ "00 48 "+//length_2
+ "00 00 "+//pad1.2
+ "00 00 00 10 "+//groupId_2
+ "00 00 00 12 "+//refCount_2
+ "00 00 00 00 "+//pad2.2
+ "FF 01 01 01 01 01 01 01 "+//packetCount_2
+ "FF 01 01 01 01 01 01 01 "+//byteCount_2
+ "00 00 00 08 "+//durationSec_2
+ "00 00 00 09 "+//durationNsec_2
+ "FF 01 01 01 01 01 01 01 "+//packetCountBucket_1.2
+ "FF 01 01 01 01 01 01 01 "+//byteCountBucket_1.2
+ "FF 02 02 02 02 02 02 02 "+//packetCountBucket_2.2
+ "FF 02 02 02 02 02 02 02"//byteCountBucket_2.2
+ );
+
+ MultipartReplyMessage builtByFactory = BufferHelper.deserialize(multipartFactory, bb);
+
+ BufferHelper.checkHeaderV13(builtByFactory);
+ Assert.assertEquals("Wrong type", 0x06, builtByFactory.getType().getIntValue());
+ Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());
+ MultipartReplyGroupCase messageCase = (MultipartReplyGroupCase) builtByFactory.getMultipartReplyBody();
+ MultipartReplyGroup message = messageCase.getMultipartReplyGroup();
+ Assert.assertEquals("Wrong groupId", 16, message.getGroupStats().get(0).getGroupId().getValue().intValue());
+ Assert.assertEquals("Wrong refCount", 18, message.getGroupStats().get(0).getRefCount().intValue());
+ Assert.assertEquals("Wrong packetCount",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}),
+ message.getGroupStats().get(0).getPacketCount());
+ Assert.assertEquals("Wrong byteCount",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}),
+ message.getGroupStats().get(0).getByteCount());
+ Assert.assertEquals("Wrong durationSec", 8, message.getGroupStats().get(0).getDurationSec().intValue());
+ Assert.assertEquals("Wrong durationNsec", 9, message.getGroupStats().get(0).getDurationNsec().intValue());
+ Assert.assertEquals("Wrong packetCountBucket",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}),
+ message.getGroupStats().get(0).getBucketStats().get(0).getPacketCount());
+ Assert.assertEquals("Wrong byteCountBucket",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}),
+ message.getGroupStats().get(0).getBucketStats().get(0).getByteCount());
+ Assert.assertEquals("Wrong packetCountBucket_2",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02}),
+ message.getGroupStats().get(0).getBucketStats().get(1).getPacketCount());
+ Assert.assertEquals("Wrong byteCountBucket_2",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02}),
+ message.getGroupStats().get(0).getBucketStats().get(1).getByteCount());
+
+ Assert.assertEquals("Wrong groupId_2", 16, message.getGroupStats().get(1).getGroupId().getValue().intValue());
+ Assert.assertEquals("Wrong refCount_2", 18, message.getGroupStats().get(1).getRefCount().intValue());
+ Assert.assertEquals("Wrong packetCount_2",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}),
+ message.getGroupStats().get(1).getPacketCount());
+ Assert.assertEquals("Wrong byteCount_2",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}),
+ message.getGroupStats().get(1).getByteCount());
+ Assert.assertEquals("Wrong durationSec_2", 8, message.getGroupStats().get(1).getDurationSec().intValue());
+ Assert.assertEquals("Wrong durationNsec_2", 9, message.getGroupStats().get(1).getDurationNsec().intValue());
+ Assert.assertEquals("Wrong packetCountBucket_1.2",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}),
+ message.getGroupStats().get(1).getBucketStats().get(0).getPacketCount());
+ Assert.assertEquals("Wrong byteCountBucket_1.2",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}),
+ message.getGroupStats().get(1).getBucketStats().get(0).getByteCount());
+ Assert.assertEquals("Wrong packetCountBucket_2.2",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02}),
+ message.getGroupStats().get(1).getBucketStats().get(1).getPacketCount());
+ Assert.assertEquals("Wrong byteCountBucket_2.2",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02}),
+ message.getGroupStats().get(1).getBucketStats().get(1).getByteCount());
+ }
+
+ /**
+ * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO
+ */
+ @Test
+ public void testMultipartReplyMeterBody(){
+ ByteBuf bb = BufferHelper.buildBuffer("00 09 00 01 00 00 00 00 "+
+ "00 00 00 09 "+//meterId
+ "00 58 "+//len
+ "00 00 00 00 00 00 "+//pad
+ "00 00 00 07 "+//flowCount
+ "FF 01 01 01 01 01 01 01 "+//packetInCount
+ "FF 01 01 01 01 01 01 01 "+//byteInCount
+ "00 00 00 05 "+//durationSec
+ "00 00 00 05 "+//durationNsec
+ "FF 01 01 01 01 01 01 01 "+//packetBandCount_01
+ "FF 01 01 01 01 01 01 01 "+//byteBandCount_01
+ "FF 02 02 02 02 02 02 02 "+//packetBandCount_02
+ "FF 02 02 02 02 02 02 02 "+//byteBandCount_02
+ "FF 03 03 03 03 03 03 03 "+//packetBandCount_03
+ "FF 03 03 03 03 03 03 03"//byteBandCount_03
+ );
+
+ MultipartReplyMessage builtByFactory = BufferHelper.deserialize(multipartFactory, bb);
+
+ BufferHelper.checkHeaderV13(builtByFactory);
+ Assert.assertEquals("Wrong type", 9, builtByFactory.getType().getIntValue());
+ Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());
+ MultipartReplyMeterCase messageCase = (MultipartReplyMeterCase) builtByFactory.getMultipartReplyBody();
+ MultipartReplyMeter message = messageCase.getMultipartReplyMeter();
+ Assert.assertEquals("Wrong meterId", 9,
+ message.getMeterStats().get(0).getMeterId().getValue().intValue());
+ Assert.assertEquals("Wrong flowCount", 7,
+ message.getMeterStats().get(0).getFlowCount().intValue());
+ Assert.assertEquals("Wrong packetInCount",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}),
+ message.getMeterStats().get(0).getPacketInCount());
+ Assert.assertEquals("Wrong byteInCount",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}),
+ message.getMeterStats().get(0).getByteInCount());
+ Assert.assertEquals("Wrong durationSec", 5,
+ message.getMeterStats().get(0).getDurationSec().intValue());
+ Assert.assertEquals("Wrong durationNsec", 5,
+ message.getMeterStats().get(0).getDurationNsec().intValue());
+ Assert.assertEquals("Wrong packetBandCount_01",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}),
+ message.getMeterStats().get(0).getMeterBandStats().get(0).getPacketBandCount());
+ Assert.assertEquals("Wrong byteBandCount_01",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}),
+ message.getMeterStats().get(0).getMeterBandStats().get(0).getByteBandCount());
+ Assert.assertEquals("Wrong packetBandCount_02",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02}),
+ message.getMeterStats().get(0).getMeterBandStats().get(1).getPacketBandCount());
+ Assert.assertEquals("Wrong byteBandCount_02",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02}),
+ message.getMeterStats().get(0).getMeterBandStats().get(1).getByteBandCount());
+ Assert.assertEquals("Wrong packetBandCount_03",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03}),
+ message.getMeterStats().get(0).getMeterBandStats().get(2).getPacketBandCount());
+ Assert.assertEquals("Wrong byteBandCount_03",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03}),
+ message.getMeterStats().get(0).getMeterBandStats().get(2).getByteBandCount());
+ }
+
+ /**
+ * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO
+ */
+ @Test
+ public void testMultipartReplyMeterBodyMulti(){
+ ByteBuf bb = BufferHelper.buildBuffer("00 09 00 01 00 00 00 00 "+
+ "00 00 00 09 "+//meterId_0
+ "00 58 "+//len_0
+ "00 00 00 00 00 00 "+//pad_0
+ "00 00 00 07 "+//flowCount_0
+ "FF 01 01 01 01 01 01 01 "+//packetInCount_0
+ "FF 01 01 01 01 01 01 01 "+//byteInCount_0
+ "00 00 00 05 "+//durationSec_0
+ "00 00 00 05 "+//durationNsec_0
+ "FF 01 01 01 01 01 01 01 "+//packetBandCount_01
+ "FF 01 01 01 01 01 01 01 "+//byteBandCount_01
+ "FF 02 02 02 02 02 02 02 "+//packetBandCount_02
+ "FF 02 02 02 02 02 02 02 "+//byteBandCount_02
+ "FF 03 03 03 03 03 03 03 "+//packetBandCount_03
+ "FF 03 03 03 03 03 03 03 "+//byteBandCount_03
+ "00 00 00 08 "+//meterId_1
+ "00 58 "+//len_1
+ "00 00 00 00 00 00 "+//pad_1
+ "00 00 00 07 "+//flowCount_1
+ "FF 01 01 01 01 01 01 01 "+//packetInCount_1
+ "FF 01 01 01 01 01 01 01 "+//byteInCount_1
+ "00 00 00 05 "+//durationSec_1
+ "00 00 00 05 "+//durationNsec_1
+ "FF 01 01 01 01 01 01 01 "+//packetBandCount_11
+ "FF 01 01 01 01 01 01 01 "+//byteBandCount_11
+ "FF 02 02 02 02 02 02 02 "+//packetBandCount_12
+ "FF 02 02 02 02 02 02 02 "+//byteBandCount_12
+ "FF 03 03 03 03 03 03 03 "+//packetBandCount_13
+ "FF 03 03 03 03 03 03 03"//byteBandCount_13
+ );
+
+ MultipartReplyMessage builtByFactory = BufferHelper.deserialize(multipartFactory, bb);
+
+ BufferHelper.checkHeaderV13(builtByFactory);
+ Assert.assertEquals("Wrong type", 9, builtByFactory.getType().getIntValue());
+ Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());
+ MultipartReplyMeterCase messageCase = (MultipartReplyMeterCase) builtByFactory.getMultipartReplyBody();
+ MultipartReplyMeter message = messageCase.getMultipartReplyMeter();
+ Assert.assertEquals("Wrong meterId", 9,
+ message.getMeterStats().get(0).getMeterId().getValue().intValue());
+ Assert.assertEquals("Wrong flowCount", 7,
+ message.getMeterStats().get(0).getFlowCount().intValue());
+ Assert.assertEquals("Wrong packetInCount",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}),
+ message.getMeterStats().get(0).getPacketInCount());
+ Assert.assertEquals("Wrong byteInCount",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}),
+ message.getMeterStats().get(0).getByteInCount());
+ Assert.assertEquals("Wrong durationSec", 5,
+ message.getMeterStats().get(0).getDurationSec().intValue());
+ Assert.assertEquals("Wrong durationNsec", 5,
+ message.getMeterStats().get(0).getDurationNsec().intValue());
+ Assert.assertEquals("Wrong packetBandCount_01",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}),
+ message.getMeterStats().get(0).getMeterBandStats().get(0).getPacketBandCount());
+ Assert.assertEquals("Wrong byteBandCount_01",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}),
+ message.getMeterStats().get(0).getMeterBandStats().get(0).getByteBandCount());
+ Assert.assertEquals("Wrong packetBandCount_02",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02}),
+ message.getMeterStats().get(0).getMeterBandStats().get(1).getPacketBandCount());
+ Assert.assertEquals("Wrong byteBandCount_02",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02}),
+ message.getMeterStats().get(0).getMeterBandStats().get(1).getByteBandCount());
+ Assert.assertEquals("Wrong packetBandCount_03",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03}),
+ message.getMeterStats().get(0).getMeterBandStats().get(2).getPacketBandCount());
+ Assert.assertEquals("Wrong byteBandCount_03",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03}),
+ message.getMeterStats().get(0).getMeterBandStats().get(2).getByteBandCount());
+
+ Assert.assertEquals("Wrong meterId", 8,
+ message.getMeterStats().get(1).getMeterId().getValue().intValue());
+ Assert.assertEquals("Wrong flowCount", 7,
+ message.getMeterStats().get(1).getFlowCount().intValue());
+ Assert.assertEquals("Wrong packetInCount",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}),
+ message.getMeterStats().get(1).getPacketInCount());
+ Assert.assertEquals("Wrong byteInCount",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}),
+ message.getMeterStats().get(1).getByteInCount());
+ Assert.assertEquals("Wrong durationSec", 5,
+ message.getMeterStats().get(1).getDurationSec().intValue());
+ Assert.assertEquals("Wrong durationNsec", 5,
+ message.getMeterStats().get(1).getDurationNsec().intValue());
+ Assert.assertEquals("Wrong packetBandCount_01",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}),
+ message.getMeterStats().get(1).getMeterBandStats().get(0).getPacketBandCount());
+ Assert.assertEquals("Wrong byteBandCount_01",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01}),
+ message.getMeterStats().get(1).getMeterBandStats().get(0).getByteBandCount());
+ Assert.assertEquals("Wrong packetBandCount_02",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02}),
+ message.getMeterStats().get(1).getMeterBandStats().get(1).getPacketBandCount());
+ Assert.assertEquals("Wrong byteBandCount_02",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02}),
+ message.getMeterStats().get(1).getMeterBandStats().get(1).getByteBandCount());
+ Assert.assertEquals("Wrong packetBandCount_03",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03}),
+ message.getMeterStats().get(1).getMeterBandStats().get(2).getPacketBandCount());
+ Assert.assertEquals("Wrong byteBandCount_03",
+ new BigInteger(1, new byte[]{(byte) 0xFF, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03}),
+ message.getMeterStats().get(1).getMeterBandStats().get(2).getByteBandCount());
+ }
+
+ /**
+ * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO
+ */
+ @Test
+ public void testMultipartReplyMeterConfigBody(){
+ ByteBuf bb = BufferHelper.buildBuffer("00 0A 00 01 00 00 00 00 "+
+ "00 28 "+//len
+ "00 0A "+//flags
+ "00 00 00 09 "+//meterId
+ "00 01 "+//meterBandDrop.type
+ "00 10 "+//meterBandDrop.len
+ "00 00 00 11 "+//meterBandDrop.rate
+ "00 00 00 20 "+//meterBandDrop.burstSize
+ "00 00 00 00 "+//meterBandDrop.pad
+ "00 02 "+//meterBandDscp.type
+ "00 10 "+//meterBandDscp.len
+ "00 00 00 11 "+//meterBandDscp.rate
+ "00 00 00 20 "+//meterBandDscp.burstSize
+ "04 "+//meterBandDscp.precLevel
+ "00 00 00");//meterBandDscp.pad
+
+ MultipartReplyMessage builtByFactory = BufferHelper.deserialize(multipartFactory, bb);
+
+ BufferHelper.checkHeaderV13(builtByFactory);
+ Assert.assertEquals("Wrong type", 10, builtByFactory.getType().getIntValue());
+ Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());
+ MultipartReplyMeterConfigCase messageCase = (MultipartReplyMeterConfigCase) builtByFactory.getMultipartReplyBody();
+ MultipartReplyMeterConfig message = messageCase.getMultipartReplyMeterConfig();
+ Assert.assertEquals("Wrong flags", new MeterFlags(false, false, true, true),
+ message.getMeterConfig().get(0).getFlags());
+ Assert.assertEquals("Wrong meterId", 9,
+ message.getMeterConfig().get(0).getMeterId().getValue().intValue());
+
+ MeterBandDropCase dropCase = (MeterBandDropCase) message.getMeterConfig().get(0).getBands().get(0).getMeterBand();
+ MeterBandDrop meterBandDrop = dropCase.getMeterBandDrop();
+ Assert.assertEquals("Wrong meterBandDrop.type", 1, meterBandDrop.getType().getIntValue());
+ Assert.assertEquals("Wrong meterBandDrop.rate", 17, meterBandDrop.getRate().intValue());
+ Assert.assertEquals("Wrong meterBandDrop.burstSize", 32, meterBandDrop.getBurstSize().intValue());
+
+ MeterBandDscpRemarkCase dscpCase = (MeterBandDscpRemarkCase) message.getMeterConfig().get(0).getBands().get(1).getMeterBand();
+ MeterBandDscpRemark meterBandDscp = dscpCase.getMeterBandDscpRemark();
+ Assert.assertEquals("Wrong meterBandDscp.type", 2, meterBandDscp.getType().getIntValue());
+ Assert.assertEquals("Wrong meterBandDscp.rate", 17, meterBandDscp.getRate().intValue());
+ Assert.assertEquals("Wrong meterBandDscp.burstSize", 32, meterBandDscp.getBurstSize().intValue());
+ Assert.assertEquals("Wrong meterBandDscp.precLevel", 4, meterBandDscp.getPrecLevel().intValue());
+ }
+
+ /**
+ * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO
+ */
+ @Test
+ public void testMultipartReplyMeterConfigBodyMulti(){
+ ByteBuf bb = BufferHelper.buildBuffer("00 0A 00 01 00 00 00 00 "+
+ "00 28 "+//len
+ "00 06 "+//flags
+ "00 00 00 09 "+//meterId
+ "00 01 "+//meterBandDrop.type
+ "00 10 "+//meterBandDrop.len
+ "00 00 00 11 "+//meterBandDrop.rate
+ "00 00 00 20 "+//meterBandDrop.burstSize
+ "00 00 00 00 "+//meterBandDrop.pad
+ "00 02 "+//meterBandDscp.type
+ "00 10 "+//meterBandDscp.len
+ "00 00 00 11 "+//meterBandDscp.rate
+ "00 00 00 20 "+//meterBandDscp.burstSize
+ "04 "+//meterBandDscp.precLevel
+ "00 00 00 "+//meterBandDscp.pad
+
+ "00 18 "+//len01
+ "00 03 "+//flags01
+ "00 00 00 07 "+//meterId01
+ "00 02 "+//meterBandDscp01.type
+ "00 10 "+//meterBandDscp01.len
+ "00 00 00 11 "+//meterBandDscp01.rate
+ "00 00 00 20 "+//meterBandDscp01.burstSize
+ "04 "+//meterBandDscp01.precLevel
+ "00 00 00"//meterBandDscp01.pad
+ );
+
+ MultipartReplyMessage builtByFactory = BufferHelper.deserialize(multipartFactory, bb);
+
+ BufferHelper.checkHeaderV13(builtByFactory);
+ Assert.assertEquals("Wrong type", 10, builtByFactory.getType().getIntValue());
+ Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());
+ MultipartReplyMeterConfigCase messageCase = (MultipartReplyMeterConfigCase) builtByFactory.getMultipartReplyBody();
+ MultipartReplyMeterConfig message = messageCase.getMultipartReplyMeterConfig();
+ Assert.assertEquals("Wrong flags", new MeterFlags(true, false, true, false),
+ message.getMeterConfig().get(0).getFlags());
+ Assert.assertEquals("Wrong meterId", 9,
+ message.getMeterConfig().get(0).getMeterId().getValue().intValue());
+
+ MeterBandDropCase dropCase = (MeterBandDropCase) message.getMeterConfig().get(0).getBands().get(0).getMeterBand();
+ MeterBandDrop meterBandDrop = dropCase.getMeterBandDrop();
+ Assert.assertEquals("Wrong meterBandDrop.type", 1, meterBandDrop.getType().getIntValue());
+ Assert.assertEquals("Wrong meterBandDrop.rate", 17, meterBandDrop.getRate().intValue());
+ Assert.assertEquals("Wrong meterBandDrop.burstSize", 32, meterBandDrop.getBurstSize().intValue());
+
+ MeterBandDscpRemarkCase dscpCase = (MeterBandDscpRemarkCase) message.getMeterConfig().get(0).getBands().get(1).getMeterBand();
+ MeterBandDscpRemark meterBandDscp = dscpCase.getMeterBandDscpRemark();
+ Assert.assertEquals("Wrong meterBandDscp.type", 2, meterBandDscp.getType().getIntValue());
+ Assert.assertEquals("Wrong meterBandDscp.rate", 17, meterBandDscp.getRate().intValue());
+ Assert.assertEquals("Wrong meterBandDscp.burstSize", 32, meterBandDscp.getBurstSize().intValue());
+ Assert.assertEquals("Wrong meterBandDscp.precLevel", 4, meterBandDscp.getPrecLevel().intValue());
+
+ LOG.info(message.getMeterConfig().get(0).getFlags().toString());
+ Assert.assertEquals("Wrong flags01", new MeterFlags(false, true, true, false),
+ message.getMeterConfig().get(1).getFlags());
+ Assert.assertEquals("Wrong meterId01", 7,
+ message.getMeterConfig().get(1).getMeterId().getValue().intValue());
+
+ MeterBandDscpRemarkCase dscpCase01 = (MeterBandDscpRemarkCase) message.getMeterConfig().get(1).getBands().get(0).getMeterBand();
+ MeterBandDscpRemark meterBandDscp01 = dscpCase01.getMeterBandDscpRemark();
+ Assert.assertEquals("Wrong meterBandDscp01.type", 2, meterBandDscp01.getType().getIntValue());
+ Assert.assertEquals("Wrong meterBandDscp01.rate", 17, meterBandDscp01.getRate().intValue());
+ Assert.assertEquals("Wrong meterBandDscp01.burstSize", 32, meterBandDscp01.getBurstSize().intValue());
+ Assert.assertEquals("Wrong meterBandDscp01.precLevel", 4, meterBandDscp01.getPrecLevel().intValue());
+
+ }
+
+ /**
+ * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO
+ * Test covers bodies of actions Output, Copy TTL Out, Copy TTL In
+ */
+ @Test
+ public void testMultipartReplyGroupDescBody01(){
+ ByteBuf bb = BufferHelper.buildBuffer("00 07 00 01 00 00 00 00 "+
+ "00 38 "+//len
+ "01 "+//type
+ "00 "+//pad
+ "00 00 00 08 "+//groupId
+ "00 30 "+//bucketLen
+ "00 06 "+//bucketWeight
+ "00 00 00 05 "+//bucketWatchPort
+ "00 00 00 04 "+//bucketWatchGroup
+ "00 00 00 00 "+//bucketPad
+ "00 00 "+//outputType
+ "00 10 "+//outputLen
+ "00 00 10 FF "+//outputPort
+ "FF FF "+//outputMaxLen
+ "00 00 00 00 00 00 "+//outputPad
+ "00 0B "+//copyTTLOutType
+ "00 08 "+//copyTTLOutLen
+ "00 00 00 00 "+//copyTTLOutPad
+ "00 0C "+//copyTTLIntType
+ "00 08 "+//copyTTLIntLen
+ "00 00 00 00"//copyTTLInPad
+ );
+ MultipartReplyMessage builtByFactory = BufferHelper.deserialize(multipartFactory, bb);
+
+ BufferHelper.checkHeaderV13(builtByFactory);
+ Assert.assertEquals("Wrong type", 7, builtByFactory.getType().getIntValue());
+ Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());
+ MultipartReplyGroupDescCase messageCase = (MultipartReplyGroupDescCase) builtByFactory.getMultipartReplyBody();
+ MultipartReplyGroupDesc message = messageCase.getMultipartReplyGroupDesc();
+ Assert.assertEquals("Wrong type", 1,
+ message.getGroupDesc().get(0).getType().getIntValue());
+ Assert.assertEquals("Wrong groupId", 8,
+ message.getGroupDesc().get(0).getGroupId().getValue().intValue());
+ Assert.assertEquals("Wrong bucketWeight", 6,
+ message.getGroupDesc().get(0).getBucketsList().get(0).getWeight().intValue());
+ Assert.assertEquals("Wrong bucketWatchPort", 5,
+ message.getGroupDesc().get(0).getBucketsList().get(0).getWatchPort().
+ getValue().intValue());
+ Assert.assertEquals("Wrong bucketWatchGroup", 4,
+ message.getGroupDesc().get(0).getBucketsList().get(0).getWatchGroup().intValue());
+
+ Assert.assertTrue("Wrong outputType",message.getGroupDesc().get(0).getBucketsList().get(0)
+ .getAction().get(0).getActionChoice() instanceof OutputActionCase);
+
+ Assert.assertEquals("Wrong outputPort", 4351, ((OutputActionCase) message.getGroupDesc().get(0)
+ .getBucketsList().get(0).getAction().get(0).getActionChoice())
+ .getOutputAction().getPort().getValue().intValue());
+
+ Assert.assertEquals("Wrong outputMaxLen", 65535, ((OutputActionCase) message.getGroupDesc().get(0)
+ .getBucketsList().get(0).getAction().get(0).getActionChoice())
+ .getOutputAction().getMaxLength().intValue());
+
+ Assert.assertTrue("Wrong copyTtlOutType", message.getGroupDesc().get(0).getBucketsList()
+ .get(0).getAction().get(1).getActionChoice() instanceof CopyTtlOutCase);
+
+ Assert.assertTrue("Wrong copyTtlInType", message.getGroupDesc().get(0).getBucketsList()
+ .get(0).getAction().get(2).getActionChoice() instanceof CopyTtlInCase);
+ }
+
+ /**
+ * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO
+ * Test covers bodies of actions Set MPLS TTL , Dec MPLS TTL, Push VLAN. Push MPLS, Push PBB
+ */
+ @Test
+ public void testMultipartReplyGroupDescBody02(){
+ ByteBuf bb = BufferHelper.buildBuffer("00 07 00 01 00 00 00 00 "+
+ "00 40 "+//len
+ "01 "+//type
+ "00 "+//pad
+ "00 00 00 08 "+//groupId
+ "00 38 "+//bucketLen
+ "00 06 "+//bucketWeight
+ "00 00 00 05 "+//bucketWatchPort
+ "00 00 00 04 "+//bucketWatchGroup
+ "00 00 00 00 "+//bucketPad
+ "00 0F "+//setMplsTtlType
+ "00 08 "+//setMplsTtlLen
+ "09 "+//setMplsTtlMPLS_TTL
+ "00 00 00 "+//setMplsTtlPad
+ "00 10 "+//decMplsTtlType
+ "00 08 "+//decMplsTtlLen
+ "00 00 00 00 "+//decMplsTtlPad
+ "00 11 "+//pushVlanType
+ "00 08 "+//pushVlanLen
+ "00 20 "+//pushVlanEthertype
+ "00 00 "+//pushVlanPad
+ "00 13 "+//pushMplsType
+ "00 08 "+//pushMplsLen
+ "00 FF "+//pushMplsEthertype
+ "00 00 "+//pushMplsPad
+ "00 1A "+//pushPbbType
+ "00 08 "+//pushPbbLen
+ "0F FF "+//pushPbbEthertype
+ "00 00"//pushPbbPad
+ );
+
+ MultipartReplyMessage builtByFactory = BufferHelper.deserialize(multipartFactory, bb);
+
+ BufferHelper.checkHeaderV13(builtByFactory);
+ Assert.assertEquals("Wrong type", 7, builtByFactory.getType().getIntValue());
+ Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());
+ MultipartReplyGroupDescCase messageCase = (MultipartReplyGroupDescCase) builtByFactory.getMultipartReplyBody();
+ MultipartReplyGroupDesc message = messageCase.getMultipartReplyGroupDesc();
+ Assert.assertEquals("Wrong type", 1,
+ message.getGroupDesc().get(0).getType().getIntValue());
+ Assert.assertEquals("Wrong groupId", 8,
+ message.getGroupDesc().get(0).getGroupId().getValue().intValue());
+ Assert.assertEquals("Wrong bucketWeight", 6,
+ message.getGroupDesc().get(0).getBucketsList().get(0).getWeight().intValue());
+ Assert.assertEquals("Wrong bucketWatchPort", 5,
+ message.getGroupDesc().get(0).getBucketsList().get(0).getWatchPort().getValue().intValue());
+ Assert.assertEquals("Wrong bucketWatchGroup", 4,
+ message.getGroupDesc().get(0).getBucketsList().get(0).getWatchGroup().intValue());
+ Assert.assertTrue("Wrong setMplsTtlType", message.getGroupDesc().get(0).getBucketsList().get(0)
+ .getAction().get(0).getActionChoice() instanceof SetMplsTtlCase);
+ Assert.assertEquals("Wrong setMplsTtlMPLS_TTL", 9, ((SetMplsTtlCase) message.getGroupDesc().get(0)
+ .getBucketsList().get(0).getAction().get(0).getActionChoice()).getSetMplsTtlAction()
+ .getMplsTtl().intValue());
+ Assert.assertTrue("Wrong decMplsTtlType", message.getGroupDesc().get(0).getBucketsList().get(0)
+ .getAction().get(1).getActionChoice() instanceof DecMplsTtlCase);
+ Assert.assertTrue("Wrong pushVlanType", message.getGroupDesc().get(0).getBucketsList().get(0)
+ .getAction().get(2).getActionChoice() instanceof PushVlanCase);
+ Assert.assertEquals("Wrong pushVlanEthertype", 32,((PushVlanCase) message.getGroupDesc().get(0)
+ .getBucketsList().get(0).getAction().get(2).getActionChoice())
+ .getPushVlanAction().getEthertype().getValue().intValue());
+ Assert.assertTrue("Wrong pushMplsType", message.getGroupDesc().get(0).getBucketsList().get(0)
+ .getAction().get(3).getActionChoice() instanceof PushMplsCase);
+ Assert.assertEquals("Wrong pushMplsEthertype", 255, ((PushMplsCase) message.getGroupDesc().get(0)
+ .getBucketsList().get(0).getAction().get(3).getActionChoice())
+ .getPushMplsAction().getEthertype().getValue().intValue());
+ Assert.assertTrue("Wrong pushPbbType", message.getGroupDesc().get(0).getBucketsList().get(0)
+ .getAction().get(4).getActionChoice() instanceof PushPbbCase);
+ Assert.assertEquals("Wrong pushPbbEthertype", 4095, ((PushPbbCase) message.getGroupDesc().get(0)
+ .getBucketsList().get(0).getAction().get(4).getActionChoice())
+ .getPushPbbAction().getEthertype().getValue().intValue());
+ }
+
+ /**
+ * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO
+ * Test covers bodies of actions Pop VLAN, Pop PBB, Pop MPLS, Group, Dec NW TTL
+ */
+ @Test
+ public void testMultipartReplyGroupDescBody03(){
+ ByteBuf bb = BufferHelper.buildBuffer("00 07 00 01 00 00 00 00 "+
+ "00 48 "+//len
+ "01 "+//type
+ "00 "+//pad
+ "00 00 00 08 "+//groupId
+ "00 40 "+//bucketLen
+ "00 06 "+//bucketWeight
+ "00 00 00 05 "+//bucketWatchPort
+ "00 00 00 04 "+//bucketWatchGroup
+ "00 00 00 00 "+//bucketPad
+ "00 12 "+//popVlanType
+ "00 08 "+//popVlanLen
+ "00 00 00 00 "+//popVlanPad
+ "00 1B "+//popPbbType
+ "00 08 "+//popPbbLen
+ "00 00 00 00 "+//popPbbPad
+ "00 14 "+//popMplsType
+ "00 08 "+//popMplsLen
+ "00 CF "+//popMplsEthertype
+ "00 00 "+//popMplsPad
+ "00 15 "+//setQueueType
+ "00 08 "+//setQueueLen
+ "00 CF 00 00 "+//setQueueQueueId
+ "00 16 "+//groupType
+ "00 08 "+//groupLen
+ "00 CF 00 00 "+//groupGroupId
+ "00 18 "+//decNwTtlType
+ "00 08 "+//decNwTtlLen
+ "00 00 00 00"//decNwTtlPad
+ );
+
+ MultipartReplyMessage builtByFactory = BufferHelper.deserialize(multipartFactory, bb);
+
+ BufferHelper.checkHeaderV13(builtByFactory);
+ Assert.assertEquals("Wrong type", 7, builtByFactory.getType().getIntValue());
+ Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());
+ MultipartReplyGroupDescCase messageCase = (MultipartReplyGroupDescCase) builtByFactory.getMultipartReplyBody();
+ MultipartReplyGroupDesc message = messageCase.getMultipartReplyGroupDesc();
+ Assert.assertEquals("Wrong type", 1, message.getGroupDesc().get(0).getType().getIntValue());
+ Assert.assertEquals("Wrong groupId", 8, message.getGroupDesc().get(0).getGroupId().getValue().intValue());
+ Assert.assertEquals("Wrong bucketWeight", 6,
+ message.getGroupDesc().get(0).getBucketsList().get(0).getWeight().intValue());
+ Assert.assertEquals("Wrong bucketWatchPort", 5,
+ message.getGroupDesc().get(0).getBucketsList().get(0).getWatchPort().getValue().intValue());
+ Assert.assertEquals("Wrong bucketWatchGroup", 4,
+ message.getGroupDesc().get(0).getBucketsList().get(0).getWatchGroup().intValue());
+ Assert.assertTrue("Wrong popVlanType", message.getGroupDesc().get(0).getBucketsList().get(0)
+ .getAction().get(0).getActionChoice() instanceof PopVlanCase);
+ Assert.assertTrue("Wrong popPbbType", message.getGroupDesc().get(0).getBucketsList().get(0)
+ .getAction().get(1).getActionChoice() instanceof PopPbbCase);
+ Assert.assertTrue("Wrong popMplsType", message.getGroupDesc().get(0).getBucketsList().get(0)
+ .getAction().get(2).getActionChoice() instanceof PopMplsCase);
+ Assert.assertEquals("Wrong popMplsEthertype", 207, ((PopMplsCase) message.getGroupDesc().get(0)
+ .getBucketsList().get(0).getAction().get(2).getActionChoice())
+ .getPopMplsAction().getEthertype().getValue().intValue());
+ Assert.assertTrue("Wrong setQueueType", message.getGroupDesc().get(0).getBucketsList().get(0)
+ .getAction().get(3).getActionChoice() instanceof SetQueueCase);
+ Assert.assertEquals("Wrong setQueueQueueId", 13565952, ((SetQueueCase) message.getGroupDesc().get(0)
+ .getBucketsList().get(0).getAction().get(3).getActionChoice())
+ .getSetQueueAction().getQueueId().intValue());
+ Assert.assertTrue("Wrong groupType", message.getGroupDesc().get(0).getBucketsList().get(0)
+ .getAction().get(4).getActionChoice() instanceof GroupCase);
+ Assert.assertEquals("Wrong groupGroupId", 13565952, ((GroupCase) message.getGroupDesc().get(0)
+ .getBucketsList().get(0).getAction().get(4).getActionChoice())
+ .getGroupAction().getGroupId().intValue());
+ Assert.assertTrue("Wrong decNwTtlType", message.getGroupDesc().get(0).getBucketsList().get(0)
+ .getAction().get(5).getActionChoice() instanceof DecNwTtlCase);
+ }
+
+ /**
+ * Testing {@link MultipartReplyMessageFactory} for correct translation into POJO
+ * Test covers bodies of actions NW TTL, Experimenter
+ */
+ @Test
+ public void testMultipartReplyGroupDescBody04(){
+ ByteBuf bb = BufferHelper.buildBuffer("00 07 00 01 00 00 00 00 "+
+ "00 30 "+//len
+ "01 "+//type
+ "00 "+//pad
+ "00 00 00 08 "+//groupId
+ "00 28 "+//bucketLen
+ "00 06 "+//bucketWeight
+ "00 00 00 05 "+//bucketWatchPort
+ "00 00 00 04 "+//bucketWatchGroup
+ "00 00 00 00 "+//bucketPad
+ "00 17 "+//nwTTlType
+ "00 08 "+//nwTTlLen
+ "0E "+//nwTTlnwTTL
+ "00 00 00 "+//nwTTlPad
+ "00 19 "+//setFieldType
+ "00 10 "+//setFieldLen
+ "80 00 "+//setFieldOXMClass
+ "00 "+//setFieldOXMField
+ "04 "+//setFieldOXMLength
+ "00 00 00 FF "+ //setFieldPort
+ "00 00 00 00"
+ );
+
+ MultipartReplyMessage builtByFactory = BufferHelper.deserialize(multipartFactory, bb);
+
+ BufferHelper.checkHeaderV13(builtByFactory);
+ Assert.assertEquals("Wrong type", 7, builtByFactory.getType().getIntValue());
+ Assert.assertEquals("Wrong flag", true, builtByFactory.getFlags().isOFPMPFREQMORE());
+ MultipartReplyGroupDescCase messageCase = (MultipartReplyGroupDescCase) builtByFactory.getMultipartReplyBody();
+ MultipartReplyGroupDesc message = messageCase.getMultipartReplyGroupDesc();
+ Assert.assertEquals("Wrong type", 1,
+ message.getGroupDesc().get(0).getType().getIntValue());
+ Assert.assertEquals("Wrong groupId", 8,
+ message.getGroupDesc().get(0).getGroupId().getValue().intValue());
+ Assert.assertEquals("Wrong bucketWeight", 6,
+ message.getGroupDesc().get(0).getBucketsList().get(0).getWeight().intValue());
+ Assert.assertEquals("Wrong bucketWatchPort", 5,
+ message.getGroupDesc().get(0).getBucketsList().get(0).getWatchPort().
+ getValue().intValue());
+ Assert.assertEquals("Wrong bucketWatchGroup", 4,
+ message.getGroupDesc().get(0).getBucketsList().get(0).getWatchGroup().intValue());
+
+ Assert.assertTrue("Wrong nwTTlType", message.getGroupDesc().get(0).getBucketsList().get(0)
+ .getAction().get(0).getActionChoice() instanceof SetNwTtlCase);
+
+ Assert.assertEquals("Wrong nwTTlnwTTL", 14, ((SetNwTtlCase) message.getGroupDesc().get(0)
+ .getBucketsList().get(0).getAction().get(0).getActionChoice())
+ .getSetNwTtlAction().getNwTtl().intValue());
+
+ Assert.assertTrue("Wrong setFieldType", message.getGroupDesc().get(0).getBucketsList().get(0)
+ .getAction().get(1).getActionChoice() instanceof SetFieldCase);
+
+ Assert.assertEquals("Wrong setFieldOXMClass", OpenflowBasicClass.class,
+ ((SetFieldCase) message.getGroupDesc().get(0).getBucketsList().get(0).getAction().get(1)
+ .getActionChoice()).getSetFieldAction().getMatchEntry().get(0).getOxmClass());
+
+ Assert.assertEquals("Wrong setFieldOXMField", InPort.class,
+ ((SetFieldCase) message.getGroupDesc().get(0).getBucketsList().get(0).getAction().get(1)
+ .getActionChoice()).getSetFieldAction().getMatchEntry().get(0).getOxmMatchField());
+
+ MatchEntry entry = ((SetFieldCase) message.getGroupDesc().get(0).getBucketsList().get(0).getAction().get(1)
+ .getActionChoice()).getSetFieldAction().getMatchEntry().get(0);
+ Assert.assertEquals("Wrong setFieldOXMValue", 255, ((InPortCase) entry.getMatchEntryValue())
+ .getInPort().getPortNumber().getValue().intValue());
+ }
+}