/*
* 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());
}
}