new serialization factories and tests
[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.mod.Bands;\r
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.mod.BandsBuilder;\r
23 \r
24 /**\r
25  * @author timotej.kubas\r
26  * @author michal.polkorab\r
27  */\r
28 public class MeterModInputMessageFactoryTest {\r
29 \r
30     /**\r
31      * @throws Exception \r
32      * Testing of {@link MeterModInputMessageFactory} for correct translation from POJO\r
33      */\r
34     @Test\r
35     public void testMeterModInputMessage() throws Exception {\r
36         MeterModInputBuilder builder = new MeterModInputBuilder();\r
37         BufferHelper.setupHeader(builder);\r
38         builder.setCommand(MeterModCommand.forValue(1));\r
39         builder.setFlags(new MeterFlags(false, true, true, false));\r
40         builder.setMeterId(new MeterId(2248L));\r
41         builder.setBands(createBandsList());\r
42         MeterModInput message = builder.build();\r
43         \r
44         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();\r
45         MeterModInputMessageFactory factory = MeterModInputMessageFactory.getInstance();\r
46         factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);\r
47         \r
48         BufferHelper.checkHeaderV13(out, factory.getMessageType(), factory.computeLength());\r
49         Assert.assertEquals("Wrong meterModCommand", message.getCommand().getIntValue(), out.readShort());\r
50         Assert.assertEquals("Wrong meterFlags", message.getFlags(), decodeMeterModFlags(out.readShort()));\r
51         Assert.assertEquals("Wrong meterId", message.getMeterId().getValue().intValue(), out.readUnsignedInt());\r
52         Assert.assertEquals("Wrong bands", true, compareBandsLists(createBandsList(), decodeBandsList(out)));\r
53     }\r
54     \r
55     private static MeterFlags decodeMeterModFlags(short input){\r
56         final Boolean _oFPMFKBPS = (input & (1 << 0)) > 0;\r
57         final Boolean _oFPMFPKTPS = (input & (1 << 1)) > 0;\r
58         final Boolean _oFPMFBURST = (input & (1 << 2)) > 0; \r
59         final Boolean _oFPMFSTATS = (input & (1 << 3)) > 0;\r
60         return new MeterFlags(_oFPMFBURST, _oFPMFKBPS, _oFPMFPKTPS, _oFPMFSTATS);\r
61     }\r
62     \r
63     private static List<Bands> createBandsList(){\r
64         List<Bands> bandsList = new ArrayList<Bands>();\r
65         BandsBuilder bandsBuilder = new BandsBuilder();\r
66         Bands band;\r
67         bandsBuilder.setType(MeterBandType.forValue(1));\r
68         bandsBuilder.setRate(2254L);\r
69         bandsBuilder.setBurstSize(12L);\r
70         band = bandsBuilder.build();\r
71         bandsList.add(band);\r
72         return bandsList;\r
73     }\r
74     \r
75     private static List<Bands> decodeBandsList(ByteBuf input){\r
76         List<Bands> bandsList = new ArrayList<Bands>();\r
77         BandsBuilder bandsBuilder = new BandsBuilder();\r
78         Bands band;\r
79         bandsBuilder.setType(MeterBandType.forValue(input.readShort()));\r
80         bandsBuilder.setRate(input.readUnsignedInt());\r
81         bandsBuilder.setBurstSize(input.readUnsignedInt());\r
82         band = bandsBuilder.build();\r
83         bandsList.add(band);\r
84         return bandsList;\r
85     }\r
86     \r
87     private static boolean compareBandsLists(List<Bands> bandsFromMessage, List<Bands> bandsFromBuffer) {\r
88         boolean result = false;\r
89         int bandsFromMessageLength = bandsFromMessage.size();\r
90         for (int i = 0; i < bandsFromMessageLength; i++) {\r
91             if (bandsFromMessage.get(i).getType().equals(bandsFromBuffer.get(i).getType())) {\r
92                 result = true;\r
93             } else {\r
94                 result = false;\r
95                 break;\r
96             }\r
97             if (bandsFromMessage.get(i).getRate()\r
98                     .equals(bandsFromBuffer.get(i).getRate())) {\r
99                 result = true;\r
100             } else {\r
101                 result = false;\r
102                 break;\r
103             }\r
104             if (bandsFromMessage.get(i).getBurstSize()\r
105                     .equals(bandsFromBuffer.get(i).getBurstSize())) {\r
106                 result = true;\r
107             } else {\r
108                 result = false;\r
109                 break;\r
110             }\r
111         }\r
112      // TODO get method for field length missing\r
113      // TODO actions structure missing\r
114         return result;\r
115     }\r
116 }\r