-/* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */\r
-package org.opendaylight.openflowjava.protocol.impl.serialization.factories;\r
-\r
-import io.netty.buffer.ByteBuf;\r
-import io.netty.buffer.UnpooledByteBufAllocator;\r
-\r
-import java.util.ArrayList;\r
-import java.util.List;\r
-\r
-import junit.framework.Assert;\r
-\r
-import org.junit.Test;\r
-import org.opendaylight.openflowjava.protocol.impl.deserialization.factories.HelloMessageFactoryTest;\r
-import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterFlags;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterId;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterModCommand;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MeterModInput;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MeterModInputBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDropBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDscpRemarkBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandExperimenterBuilder;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.mod.Bands;\r
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.mod.BandsBuilder;\r
-\r
-/**\r
- * @author timotej.kubas\r
- * @author michal.polkorab\r
- */\r
-public class MeterModInputMessageFactoryTest {\r
-\r
- /**\r
- * @throws Exception \r
- * Testing of {@link MeterModInputMessageFactory} for correct translation from POJO\r
- */\r
- @Test\r
- public void testMeterModInputMessage() throws Exception {\r
- MeterModInputBuilder builder = new MeterModInputBuilder();\r
- BufferHelper.setupHeader(builder);\r
- builder.setCommand(MeterModCommand.forValue(1));\r
- builder.setFlags(new MeterFlags(false, true, true, false));\r
- builder.setMeterId(new MeterId(2248L));\r
- builder.setBands(createBandsList());\r
- MeterModInput message = builder.build();\r
- \r
- ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
- MeterModInputMessageFactory factory = MeterModInputMessageFactory.getInstance();\r
- factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
- \r
- BufferHelper.checkHeaderV13(out, factory.getMessageType(), 64);\r
- Assert.assertEquals("Wrong meterModCommand", message.getCommand().getIntValue(), out.readUnsignedShort());\r
- Assert.assertEquals("Wrong meterFlags", message.getFlags(), decodeMeterModFlags(out.readShort()));\r
- Assert.assertEquals("Wrong meterId", message.getMeterId().getValue().intValue(), out.readUnsignedInt());\r
- Assert.assertEquals("Wrong bands", message.getBands(), decodeBandsList(out));\r
- }\r
- \r
- private static MeterFlags decodeMeterModFlags(short input){\r
- final Boolean _oFPMFKBPS = (input & (1 << 0)) > 0;\r
- final Boolean _oFPMFPKTPS = (input & (1 << 1)) > 0;\r
- final Boolean _oFPMFBURST = (input & (1 << 2)) > 0; \r
- final Boolean _oFPMFSTATS = (input & (1 << 3)) > 0;\r
- return new MeterFlags(_oFPMFBURST, _oFPMFKBPS, _oFPMFPKTPS, _oFPMFSTATS);\r
- }\r
- \r
- private static List<Bands> createBandsList(){\r
- List<Bands> bandsList = new ArrayList<>();\r
- BandsBuilder bandsBuilder = new BandsBuilder();\r
- MeterBandDropBuilder dropBand = new MeterBandDropBuilder();\r
- dropBand.setType(MeterBandType.OFPMBTDROP);\r
- dropBand.setRate(1L);\r
- dropBand.setBurstSize(2L);\r
- bandsList.add(bandsBuilder.setMeterBand(dropBand.build()).build());\r
- MeterBandDscpRemarkBuilder dscpRemarkBand = new MeterBandDscpRemarkBuilder();\r
- dscpRemarkBand.setType(MeterBandType.OFPMBTDSCPREMARK);\r
- dscpRemarkBand.setRate(1L);\r
- dscpRemarkBand.setBurstSize(2L);\r
- dscpRemarkBand.setPrecLevel((short) 3);\r
- bandsList.add(bandsBuilder.setMeterBand(dscpRemarkBand.build()).build());\r
- MeterBandExperimenterBuilder experimenterBand = new MeterBandExperimenterBuilder();\r
- experimenterBand.setType(MeterBandType.OFPMBTEXPERIMENTER);\r
- experimenterBand.setRate(1L);\r
- experimenterBand.setBurstSize(2L);\r
- experimenterBand.setExperimenter(4L);\r
- bandsList.add(bandsBuilder.setMeterBand(experimenterBand.build()).build());\r
- return bandsList;\r
- }\r
- \r
- private static List<Bands> decodeBandsList(ByteBuf input){\r
- List<Bands> bandsList = new ArrayList<>();\r
- BandsBuilder bandsBuilder = new BandsBuilder();\r
- MeterBandDropBuilder dropBand = new MeterBandDropBuilder();\r
- dropBand.setType(MeterBandType.forValue(input.readUnsignedShort()));\r
- input.skipBytes(Short.SIZE/Byte.SIZE);\r
- dropBand.setRate(input.readUnsignedInt());\r
- dropBand.setBurstSize(input.readUnsignedInt());\r
- input.skipBytes(4);\r
- bandsList.add(bandsBuilder.setMeterBand(dropBand.build()).build());\r
- MeterBandDscpRemarkBuilder dscpRemarkBand = new MeterBandDscpRemarkBuilder();\r
- dscpRemarkBand.setType(MeterBandType.forValue(input.readUnsignedShort()));\r
- input.skipBytes(Short.SIZE/Byte.SIZE);\r
- dscpRemarkBand.setRate(input.readUnsignedInt());\r
- dscpRemarkBand.setBurstSize(input.readUnsignedInt());\r
- dscpRemarkBand.setPrecLevel(input.readUnsignedByte());\r
- input.skipBytes(3);\r
- bandsList.add(bandsBuilder.setMeterBand(dscpRemarkBand.build()).build());\r
- MeterBandExperimenterBuilder experimenterBand = new MeterBandExperimenterBuilder();\r
- experimenterBand.setType(MeterBandType.forValue(input.readUnsignedShort()));\r
- input.skipBytes(Short.SIZE/Byte.SIZE);\r
- experimenterBand.setRate(input.readUnsignedInt());\r
- experimenterBand.setBurstSize(input.readUnsignedInt());\r
- experimenterBand.setExperimenter(input.readUnsignedInt());\r
- bandsList.add(bandsBuilder.setMeterBand(experimenterBand.build()).build());\r
- return bandsList;\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.serialization.factories;
+
+import io.netty.buffer.ByteBuf;
+import io.netty.buffer.UnpooledByteBufAllocator;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
+import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
+import org.opendaylight.openflowjava.protocol.api.keys.MessageTypeKey;
+import org.opendaylight.openflowjava.protocol.impl.serialization.SerializerRegistryImpl;
+import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper;
+import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterFlags;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterModCommand;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MeterModInput;
+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.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.mod.Bands;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.mod.BandsBuilder;
+
+/**
+ * @author timotej.kubas
+ * @author michal.polkorab
+ */
+public class MeterModInputMessageFactoryTest {
+
+ private SerializerRegistry registry;
+ private OFSerializer<MeterModInput> meterModFactory;
+
+ /**
+ * Initializes serializer registry and stores correct factory in field
+ */
+ @Before
+ public void startUp() {
+ registry = new SerializerRegistryImpl();
+ registry.init();
+ meterModFactory = registry.getSerializer(
+ new MessageTypeKey<>(EncodeConstants.OF13_VERSION_ID, MeterModInput.class));
+ }
+
+ /**
+ * @throws Exception
+ * Testing of {@link MeterModInputMessageFactory} for correct translation from POJO
+ */
+ @Test
+ public void testMeterModInputMessage() 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(createBandsList());
+ MeterModInput message = builder.build();
+
+ ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
+ meterModFactory.serialize(message, out);
+
+ 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 _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();
+ MeterBandDropCaseBuilder dropCaseBuilder = new MeterBandDropCaseBuilder();
+ MeterBandDropBuilder dropBand = new MeterBandDropBuilder();
+ dropBand.setType(MeterBandType.OFPMBTDROP);
+ dropBand.setRate(1L);
+ dropBand.setBurstSize(2L);
+ dropCaseBuilder.setMeterBandDrop(dropBand.build());
+ bandsList.add(bandsBuilder.setMeterBand(dropCaseBuilder.build()).build());
+ MeterBandDscpRemarkCaseBuilder dscpCaseBuilder = new MeterBandDscpRemarkCaseBuilder();
+ MeterBandDscpRemarkBuilder dscpRemarkBand = new MeterBandDscpRemarkBuilder();
+ dscpRemarkBand.setType(MeterBandType.OFPMBTDSCPREMARK);
+ dscpRemarkBand.setRate(1L);
+ dscpRemarkBand.setBurstSize(2L);
+ dscpRemarkBand.setPrecLevel((short) 3);
+ dscpCaseBuilder.setMeterBandDscpRemark(dscpRemarkBand.build());
+ bandsList.add(bandsBuilder.setMeterBand(dscpCaseBuilder.build()).build());
+ return bandsList;
+ }
+
+ private static List<Bands> decodeBandsList(ByteBuf input){
+ List<Bands> bandsList = new ArrayList<>();
+ BandsBuilder bandsBuilder = new BandsBuilder();
+ MeterBandDropCaseBuilder dropCaseBuilder = new MeterBandDropCaseBuilder();
+ MeterBandDropBuilder dropBand = new MeterBandDropBuilder();
+ dropBand.setType(MeterBandType.forValue(input.readUnsignedShort()));
+ input.skipBytes(Short.SIZE/Byte.SIZE);
+ dropBand.setRate(input.readUnsignedInt());
+ dropBand.setBurstSize(input.readUnsignedInt());
+ input.skipBytes(4);
+ dropCaseBuilder.setMeterBandDrop(dropBand.build());
+ bandsList.add(bandsBuilder.setMeterBand(dropCaseBuilder.build()).build());
+ MeterBandDscpRemarkCaseBuilder dscpCaseBuilder = new MeterBandDscpRemarkCaseBuilder();
+ MeterBandDscpRemarkBuilder dscpRemarkBand = new MeterBandDscpRemarkBuilder();
+ dscpRemarkBand.setType(MeterBandType.forValue(input.readUnsignedShort()));
+ input.skipBytes(Short.SIZE/Byte.SIZE);
+ dscpRemarkBand.setRate(input.readUnsignedInt());
+ dscpRemarkBand.setBurstSize(input.readUnsignedInt());
+ dscpRemarkBand.setPrecLevel(input.readUnsignedByte());
+ input.skipBytes(3);
+ dscpCaseBuilder.setMeterBandDscpRemark(dscpRemarkBand.build());
+ bandsList.add(bandsBuilder.setMeterBand(dscpCaseBuilder.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