Completed MeterMod message
[openflowjava.git] / openflow-protocol-impl / src / test / java / org / opendaylight / openflowjava / protocol / impl / serialization / factories / MeterModInputMessageFactoryTest.java
1 /* Copyright (C)2013 Pantheon Technologies, s.r.o. All rights reserved. */\r
2 package org.opendaylight.openflowjava.protocol.impl.serialization.factories;\r
3 \r
4 import io.netty.buffer.ByteBuf;\r
5 import io.netty.buffer.UnpooledByteBufAllocator;\r
6 \r
7 import java.util.ArrayList;\r
8 import java.util.List;\r
9 \r
10 import junit.framework.Assert;\r
11 \r
12 import org.junit.Test;\r
13 import org.opendaylight.openflowjava.protocol.impl.deserialization.factories.HelloMessageFactoryTest;\r
14 import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper;\r
15 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType;\r
16 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterFlags;\r
17 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterId;\r
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterModCommand;\r
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MeterModInput;\r
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MeterModInputBuilder;\r
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDropBuilder;\r
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDscpRemarkBuilder;\r
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandExperimenterBuilder;\r
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.mod.Bands;\r
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.mod.BandsBuilder;\r
26 \r
27 /**\r
28  * @author timotej.kubas\r
29  * @author michal.polkorab\r
30  */\r
31 public class MeterModInputMessageFactoryTest {\r
32 \r
33     /**\r
34      * @throws Exception \r
35      * Testing of {@link MeterModInputMessageFactory} for correct translation from POJO\r
36      */\r
37     @Test\r
38     public void testMeterModInputMessage() throws Exception {\r
39         MeterModInputBuilder builder = new MeterModInputBuilder();\r
40         BufferHelper.setupHeader(builder);\r
41         builder.setCommand(MeterModCommand.forValue(1));\r
42         builder.setFlags(new MeterFlags(false, true, true, false));\r
43         builder.setMeterId(new MeterId(2248L));\r
44         builder.setBands(createBandsList());\r
45         MeterModInput message = builder.build();\r
46         \r
47         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
48         MeterModInputMessageFactory factory = MeterModInputMessageFactory.getInstance();\r
49         factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
50         \r
51         BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength());\r
52         Assert.assertEquals("Wrong meterModCommand", message.getCommand().getIntValue(), out.readUnsignedShort());\r
53         Assert.assertEquals("Wrong meterFlags", message.getFlags(), decodeMeterModFlags(out.readShort()));\r
54         Assert.assertEquals("Wrong meterId", message.getMeterId().getValue().intValue(), out.readUnsignedInt());\r
55         Assert.assertEquals("Wrong bands", message.getBands(), decodeBandsList(out));\r
56     }\r
57     \r
58     private static MeterFlags decodeMeterModFlags(short input){\r
59         final Boolean _oFPMFKBPS = (input & (1 << 0)) > 0;\r
60         final Boolean _oFPMFPKTPS = (input & (1 << 1)) > 0;\r
61         final Boolean _oFPMFBURST = (input & (1 << 2)) > 0; \r
62         final Boolean _oFPMFSTATS = (input & (1 << 3)) > 0;\r
63         return new MeterFlags(_oFPMFBURST, _oFPMFKBPS, _oFPMFPKTPS, _oFPMFSTATS);\r
64     }\r
65     \r
66     private static List<Bands> createBandsList(){\r
67         List<Bands> bandsList = new ArrayList<>();\r
68         BandsBuilder bandsBuilder = new BandsBuilder();\r
69         MeterBandDropBuilder dropBand = new MeterBandDropBuilder();\r
70         dropBand.setType(MeterBandType.OFPMBTDROP);\r
71         dropBand.setRate(1L);\r
72         dropBand.setBurstSize(2L);\r
73         bandsList.add(bandsBuilder.setMeterBand(dropBand.build()).build());\r
74         MeterBandDscpRemarkBuilder dscpRemarkBand = new MeterBandDscpRemarkBuilder();\r
75         dscpRemarkBand.setType(MeterBandType.OFPMBTDSCPREMARK);\r
76         dscpRemarkBand.setRate(1L);\r
77         dscpRemarkBand.setBurstSize(2L);\r
78         dscpRemarkBand.setPrecLevel((short) 3);\r
79         bandsList.add(bandsBuilder.setMeterBand(dscpRemarkBand.build()).build());\r
80         MeterBandExperimenterBuilder experimenterBand = new MeterBandExperimenterBuilder();\r
81         experimenterBand.setType(MeterBandType.OFPMBTEXPERIMENTER);\r
82         experimenterBand.setRate(1L);\r
83         experimenterBand.setBurstSize(2L);\r
84         experimenterBand.setExperimenter(4L);\r
85         bandsList.add(bandsBuilder.setMeterBand(experimenterBand.build()).build());\r
86         return bandsList;\r
87     }\r
88     \r
89     private static List<Bands> decodeBandsList(ByteBuf input){\r
90         List<Bands> bandsList = new ArrayList<>();\r
91         BandsBuilder bandsBuilder = new BandsBuilder();\r
92         MeterBandDropBuilder dropBand = new MeterBandDropBuilder();\r
93         dropBand.setType(MeterBandType.forValue(input.readUnsignedShort()));\r
94         input.skipBytes(Short.SIZE/Byte.SIZE);\r
95         dropBand.setRate(input.readUnsignedInt());\r
96         dropBand.setBurstSize(input.readUnsignedInt());\r
97         input.skipBytes(4);\r
98         bandsList.add(bandsBuilder.setMeterBand(dropBand.build()).build());\r
99         MeterBandDscpRemarkBuilder dscpRemarkBand = new MeterBandDscpRemarkBuilder();\r
100         dscpRemarkBand.setType(MeterBandType.forValue(input.readUnsignedShort()));\r
101         input.skipBytes(Short.SIZE/Byte.SIZE);\r
102         dscpRemarkBand.setRate(input.readUnsignedInt());\r
103         dscpRemarkBand.setBurstSize(input.readUnsignedInt());\r
104         dscpRemarkBand.setPrecLevel(input.readUnsignedByte());\r
105         input.skipBytes(3);\r
106         bandsList.add(bandsBuilder.setMeterBand(dscpRemarkBand.build()).build());\r
107         MeterBandExperimenterBuilder experimenterBand = new MeterBandExperimenterBuilder();\r
108         experimenterBand.setType(MeterBandType.forValue(input.readUnsignedShort()));\r
109         input.skipBytes(Short.SIZE/Byte.SIZE);\r
110         experimenterBand.setRate(input.readUnsignedInt());\r
111         experimenterBand.setBurstSize(input.readUnsignedInt());\r
112         experimenterBand.setExperimenter(input.readUnsignedInt());\r
113         bandsList.add(bandsBuilder.setMeterBand(experimenterBand.build()).build());\r
114         return bandsList;\r
115     }\r
116     \r
117 }\r