Remove trailing whitespace
[openflowjava.git] / openflow-protocol-impl / src / test / java / org / opendaylight / openflowjava / protocol / impl / serialization / factories / MeterModInputMessageFactoryTest.java
1 /*
2  * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8
9 package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
10
11 import io.netty.buffer.ByteBuf;
12 import io.netty.buffer.UnpooledByteBufAllocator;
13
14 import java.util.ArrayList;
15 import java.util.List;
16
17 import org.junit.Assert;
18 import org.junit.Before;
19 import org.junit.Test;
20 import org.opendaylight.openflowjava.protocol.api.extensibility.MessageTypeKey;
21 import org.opendaylight.openflowjava.protocol.api.extensibility.OFSerializer;
22 import org.opendaylight.openflowjava.protocol.api.extensibility.SerializerRegistry;
23 import org.opendaylight.openflowjava.protocol.impl.serialization.SerializerRegistryImpl;
24 import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper;
25 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterFlags;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterId;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterModCommand;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MeterModInput;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MeterModInputBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDropCaseBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDscpRemarkCaseBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.drop._case.MeterBandDropBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.dscp.remark._case.MeterBandDscpRemarkBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.mod.Bands;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.mod.BandsBuilder;
38
39 /**
40  * @author timotej.kubas
41  * @author michal.polkorab
42  */
43 public class MeterModInputMessageFactoryTest {
44
45     private SerializerRegistry registry;
46     private OFSerializer<MeterModInput> meterModFactory;
47
48     /**
49      * Initializes serializer registry and stores correct factory in field
50      */
51     @Before
52     public void startUp() {
53         registry = new SerializerRegistryImpl();
54         registry.init();
55         meterModFactory = registry.getSerializer(
56                 new MessageTypeKey<>(EncodeConstants.OF13_VERSION_ID, MeterModInput.class));
57     }
58
59     /**
60      * @throws Exception
61      * Testing of {@link MeterModInputMessageFactory} for correct translation from POJO
62      */
63     @Test
64     public void testMeterModInputMessage() throws Exception {
65         MeterModInputBuilder builder = new MeterModInputBuilder();
66         BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
67         builder.setCommand(MeterModCommand.forValue(1));
68         builder.setFlags(new MeterFlags(false, true, true, false));
69         builder.setMeterId(new MeterId(2248L));
70         builder.setBands(createBandsList());
71         MeterModInput message = builder.build();
72
73         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
74         meterModFactory.serialize(message, out);
75
76         BufferHelper.checkHeaderV13(out, (byte) 29, 48);
77         Assert.assertEquals("Wrong meterModCommand", message.getCommand().getIntValue(), out.readUnsignedShort());
78         Assert.assertEquals("Wrong meterFlags", message.getFlags(), decodeMeterModFlags(out.readShort()));
79         Assert.assertEquals("Wrong meterId", message.getMeterId().getValue().intValue(), out.readUnsignedInt());
80         Assert.assertEquals("Wrong bands", message.getBands(), decodeBandsList(out));
81     }
82
83     private static MeterFlags decodeMeterModFlags(short input){
84         final Boolean _oFPMFKBPS = (input & (1 << 0)) > 0;
85         final Boolean _oFPMFPKTPS = (input & (1 << 1)) > 0;
86         final Boolean _oFPMFBURST = (input & (1 << 2)) > 0;
87         final Boolean _oFPMFSTATS = (input & (1 << 3)) > 0;
88         return new MeterFlags(_oFPMFBURST, _oFPMFKBPS, _oFPMFPKTPS, _oFPMFSTATS);
89     }
90
91     private static List<Bands> createBandsList(){
92         List<Bands> bandsList = new ArrayList<>();
93         BandsBuilder bandsBuilder = new BandsBuilder();
94         MeterBandDropCaseBuilder dropCaseBuilder = new MeterBandDropCaseBuilder();
95         MeterBandDropBuilder dropBand = new MeterBandDropBuilder();
96         dropBand.setType(MeterBandType.OFPMBTDROP);
97         dropBand.setRate(1L);
98         dropBand.setBurstSize(2L);
99         dropCaseBuilder.setMeterBandDrop(dropBand.build());
100         bandsList.add(bandsBuilder.setMeterBand(dropCaseBuilder.build()).build());
101         MeterBandDscpRemarkCaseBuilder dscpCaseBuilder = new MeterBandDscpRemarkCaseBuilder();
102         MeterBandDscpRemarkBuilder dscpRemarkBand = new MeterBandDscpRemarkBuilder();
103         dscpRemarkBand.setType(MeterBandType.OFPMBTDSCPREMARK);
104         dscpRemarkBand.setRate(1L);
105         dscpRemarkBand.setBurstSize(2L);
106         dscpRemarkBand.setPrecLevel((short) 3);
107         dscpCaseBuilder.setMeterBandDscpRemark(dscpRemarkBand.build());
108         bandsList.add(bandsBuilder.setMeterBand(dscpCaseBuilder.build()).build());
109         return bandsList;
110     }
111
112     private static List<Bands> decodeBandsList(ByteBuf input){
113         List<Bands> bandsList = new ArrayList<>();
114         BandsBuilder bandsBuilder = new BandsBuilder();
115         MeterBandDropCaseBuilder dropCaseBuilder = new MeterBandDropCaseBuilder();
116         MeterBandDropBuilder dropBand = new MeterBandDropBuilder();
117         dropBand.setType(MeterBandType.forValue(input.readUnsignedShort()));
118         input.skipBytes(Short.SIZE/Byte.SIZE);
119         dropBand.setRate(input.readUnsignedInt());
120         dropBand.setBurstSize(input.readUnsignedInt());
121         input.skipBytes(4);
122         dropCaseBuilder.setMeterBandDrop(dropBand.build());
123         bandsList.add(bandsBuilder.setMeterBand(dropCaseBuilder.build()).build());
124         MeterBandDscpRemarkCaseBuilder dscpCaseBuilder = new MeterBandDscpRemarkCaseBuilder();
125         MeterBandDscpRemarkBuilder dscpRemarkBand = new MeterBandDscpRemarkBuilder();
126         dscpRemarkBand.setType(MeterBandType.forValue(input.readUnsignedShort()));
127         input.skipBytes(Short.SIZE/Byte.SIZE);
128         dscpRemarkBand.setRate(input.readUnsignedInt());
129         dscpRemarkBand.setBurstSize(input.readUnsignedInt());
130         dscpRemarkBand.setPrecLevel(input.readUnsignedByte());
131         input.skipBytes(3);
132         dscpCaseBuilder.setMeterBandDscpRemark(dscpRemarkBand.build());
133         bandsList.add(bandsBuilder.setMeterBand(dscpCaseBuilder.build()).build());
134         return bandsList;
135     }
136
137     /**
138      * @throws Exception
139      * Testing of {@link MeterModInputMessageFactory} for correct translation from POJO
140      */
141     @Test
142     public void testMeterModInputMessageWithNoBands() throws Exception {
143         MeterModInputBuilder builder = new MeterModInputBuilder();
144         BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
145         builder.setCommand(MeterModCommand.forValue(1));
146         builder.setFlags(new MeterFlags(false, true, true, false));
147         builder.setMeterId(new MeterId(2248L));
148         builder.setBands(null);
149         MeterModInput message = builder.build();
150
151         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
152         meterModFactory.serialize(message, out);
153
154         BufferHelper.checkHeaderV13(out, (byte) 29, 16);
155         Assert.assertEquals("Wrong meterModCommand", message.getCommand().getIntValue(), out.readUnsignedShort());
156         Assert.assertEquals("Wrong meterFlags", message.getFlags(), decodeMeterModFlags(out.readShort()));
157         Assert.assertEquals("Wrong meterId", message.getMeterId().getValue().intValue(), out.readUnsignedInt());
158         Assert.assertTrue("Unexpected data", out.readableBytes() == 0);
159     }
160 }