import java.util.ArrayList;
import java.util.List;
-import junit.framework.Assert;
-
+import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.opendaylight.openflowjava.protocol.api.extensibility.MessageTypeKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MeterModInputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDropCaseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDscpRemarkCaseBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandExperimenterCaseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.drop._case.MeterBandDropBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.dscp.remark._case.MeterBandDscpRemarkBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.experimenter._case.MeterBandExperimenterBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.mod.Bands;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.mod.BandsBuilder;
}
/**
- * @throws Exception
+ * @throws Exception
* Testing of {@link MeterModInputMessageFactory} for correct translation from POJO
*/
@Test
builder.setMeterId(new MeterId(2248L));
builder.setBands(createBandsList());
MeterModInput message = builder.build();
-
+
ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
meterModFactory.serialize(message, out);
-
- BufferHelper.checkHeaderV13(out, (byte) 29, 64);
+
+ BufferHelper.checkHeaderV13(out, (byte) 29, 48);
Assert.assertEquals("Wrong meterModCommand", message.getCommand().getIntValue(), out.readUnsignedShort());
Assert.assertEquals("Wrong meterFlags", message.getFlags(), decodeMeterModFlags(out.readShort()));
Assert.assertEquals("Wrong meterId", message.getMeterId().getValue().intValue(), out.readUnsignedInt());
Assert.assertEquals("Wrong bands", message.getBands(), decodeBandsList(out));
}
-
+
private static MeterFlags decodeMeterModFlags(short input){
final Boolean _oFPMFKBPS = (input & (1 << 0)) > 0;
final Boolean _oFPMFPKTPS = (input & (1 << 1)) > 0;
- final Boolean _oFPMFBURST = (input & (1 << 2)) > 0;
+ final Boolean _oFPMFBURST = (input & (1 << 2)) > 0;
final Boolean _oFPMFSTATS = (input & (1 << 3)) > 0;
return new MeterFlags(_oFPMFBURST, _oFPMFKBPS, _oFPMFPKTPS, _oFPMFSTATS);
}
-
+
private static List<Bands> createBandsList(){
List<Bands> bandsList = new ArrayList<>();
BandsBuilder bandsBuilder = new BandsBuilder();
dscpRemarkBand.setPrecLevel((short) 3);
dscpCaseBuilder.setMeterBandDscpRemark(dscpRemarkBand.build());
bandsList.add(bandsBuilder.setMeterBand(dscpCaseBuilder.build()).build());
- MeterBandExperimenterCaseBuilder expCaseBuilder = new MeterBandExperimenterCaseBuilder();
- MeterBandExperimenterBuilder experimenterBand = new MeterBandExperimenterBuilder();
- experimenterBand.setType(MeterBandType.OFPMBTEXPERIMENTER);
- experimenterBand.setRate(1L);
- experimenterBand.setBurstSize(2L);
- experimenterBand.setExperimenter(4L);
- expCaseBuilder.setMeterBandExperimenter(experimenterBand.build());
- bandsList.add(bandsBuilder.setMeterBand(expCaseBuilder.build()).build());
return bandsList;
}
-
+
private static List<Bands> decodeBandsList(ByteBuf input){
List<Bands> bandsList = new ArrayList<>();
BandsBuilder bandsBuilder = new BandsBuilder();
input.skipBytes(3);
dscpCaseBuilder.setMeterBandDscpRemark(dscpRemarkBand.build());
bandsList.add(bandsBuilder.setMeterBand(dscpCaseBuilder.build()).build());
- MeterBandExperimenterCaseBuilder expCaseBuilder = new MeterBandExperimenterCaseBuilder();
- MeterBandExperimenterBuilder experimenterBand = new MeterBandExperimenterBuilder();
- experimenterBand.setType(MeterBandType.forValue(input.readUnsignedShort()));
- input.skipBytes(Short.SIZE/Byte.SIZE);
- experimenterBand.setRate(input.readUnsignedInt());
- experimenterBand.setBurstSize(input.readUnsignedInt());
- experimenterBand.setExperimenter(input.readUnsignedInt());
- expCaseBuilder.setMeterBandExperimenter(experimenterBand.build());
- bandsList.add(bandsBuilder.setMeterBand(expCaseBuilder.build()).build());
return bandsList;
}
-
-}
+
+ /**
+ * @throws Exception
+ * Testing of {@link MeterModInputMessageFactory} for correct translation from POJO
+ */
+ @Test
+ public void testMeterModInputMessageWithNoBands() throws Exception {
+ MeterModInputBuilder builder = new MeterModInputBuilder();
+ BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
+ builder.setCommand(MeterModCommand.forValue(1));
+ builder.setFlags(new MeterFlags(false, true, true, false));
+ builder.setMeterId(new MeterId(2248L));
+ builder.setBands(null);
+ MeterModInput message = builder.build();
+
+ ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
+ meterModFactory.serialize(message, out);
+
+ BufferHelper.checkHeaderV13(out, (byte) 29, 16);
+ Assert.assertEquals("Wrong meterModCommand", message.getCommand().getIntValue(), out.readUnsignedShort());
+ Assert.assertEquals("Wrong meterFlags", message.getFlags(), decodeMeterModFlags(out.readShort()));
+ Assert.assertEquals("Wrong meterId", message.getMeterId().getValue().intValue(), out.readUnsignedInt());
+ Assert.assertTrue("Unexpected data", out.readableBytes() == 0);
+ }
+}
\ No newline at end of file