Yang model fixed
[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 junit.framework.Assert;
18
19 import org.junit.Test;
20 import org.opendaylight.openflowjava.protocol.impl.deserialization.factories.HelloMessageFactoryTest;
21 import org.opendaylight.openflowjava.protocol.impl.util.BufferHelper;
22 import org.opendaylight.openflowjava.protocol.impl.util.EncodeConstants;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterFlags;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterId;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterModCommand;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MeterModInput;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MeterModInputBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDropCaseBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDscpRemarkCaseBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandExperimenterCaseBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.drop._case.MeterBandDropBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.dscp.remark._case.MeterBandDscpRemarkBuilder;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.experimenter._case.MeterBandExperimenterBuilder;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.mod.Bands;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.mod.BandsBuilder;
37
38 /**
39  * @author timotej.kubas
40  * @author michal.polkorab
41  */
42 public class MeterModInputMessageFactoryTest {
43
44     /**
45      * @throws Exception 
46      * Testing of {@link MeterModInputMessageFactory} for correct translation from POJO
47      */
48     @Test
49     public void testMeterModInputMessage() throws Exception {
50         MeterModInputBuilder builder = new MeterModInputBuilder();
51         BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
52         builder.setCommand(MeterModCommand.forValue(1));
53         builder.setFlags(new MeterFlags(false, true, true, false));
54         builder.setMeterId(new MeterId(2248L));
55         builder.setBands(createBandsList());
56         MeterModInput message = builder.build();
57         
58         ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
59         MeterModInputMessageFactory factory = MeterModInputMessageFactory.getInstance();
60         factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
61         
62         BufferHelper.checkHeaderV13(out, factory.getMessageType(), 64);
63         Assert.assertEquals("Wrong meterModCommand", message.getCommand().getIntValue(), out.readUnsignedShort());
64         Assert.assertEquals("Wrong meterFlags", message.getFlags(), decodeMeterModFlags(out.readShort()));
65         Assert.assertEquals("Wrong meterId", message.getMeterId().getValue().intValue(), out.readUnsignedInt());
66         Assert.assertEquals("Wrong bands", message.getBands(), decodeBandsList(out));
67     }
68     
69     private static MeterFlags decodeMeterModFlags(short input){
70         final Boolean _oFPMFKBPS = (input & (1 << 0)) > 0;
71         final Boolean _oFPMFPKTPS = (input & (1 << 1)) > 0;
72         final Boolean _oFPMFBURST = (input & (1 << 2)) > 0; 
73         final Boolean _oFPMFSTATS = (input & (1 << 3)) > 0;
74         return new MeterFlags(_oFPMFBURST, _oFPMFKBPS, _oFPMFPKTPS, _oFPMFSTATS);
75     }
76     
77     private static List<Bands> createBandsList(){
78         List<Bands> bandsList = new ArrayList<>();
79         BandsBuilder bandsBuilder = new BandsBuilder();
80         MeterBandDropCaseBuilder dropCaseBuilder = new MeterBandDropCaseBuilder();
81         MeterBandDropBuilder dropBand = new MeterBandDropBuilder();
82         dropBand.setType(MeterBandType.OFPMBTDROP);
83         dropBand.setRate(1L);
84         dropBand.setBurstSize(2L);
85         dropCaseBuilder.setMeterBandDrop(dropBand.build());
86         bandsList.add(bandsBuilder.setMeterBand(dropCaseBuilder.build()).build());
87         MeterBandDscpRemarkCaseBuilder dscpCaseBuilder = new MeterBandDscpRemarkCaseBuilder();
88         MeterBandDscpRemarkBuilder dscpRemarkBand = new MeterBandDscpRemarkBuilder();
89         dscpRemarkBand.setType(MeterBandType.OFPMBTDSCPREMARK);
90         dscpRemarkBand.setRate(1L);
91         dscpRemarkBand.setBurstSize(2L);
92         dscpRemarkBand.setPrecLevel((short) 3);
93         dscpCaseBuilder.setMeterBandDscpRemark(dscpRemarkBand.build());
94         bandsList.add(bandsBuilder.setMeterBand(dscpCaseBuilder.build()).build());
95         MeterBandExperimenterCaseBuilder expCaseBuilder = new MeterBandExperimenterCaseBuilder();
96         MeterBandExperimenterBuilder experimenterBand = new MeterBandExperimenterBuilder();
97         experimenterBand.setType(MeterBandType.OFPMBTEXPERIMENTER);
98         experimenterBand.setRate(1L);
99         experimenterBand.setBurstSize(2L);
100         experimenterBand.setExperimenter(4L);
101         expCaseBuilder.setMeterBandExperimenter(experimenterBand.build());
102         bandsList.add(bandsBuilder.setMeterBand(expCaseBuilder.build()).build());
103         return bandsList;
104     }
105     
106     private static List<Bands> decodeBandsList(ByteBuf input){
107         List<Bands> bandsList = new ArrayList<>();
108         BandsBuilder bandsBuilder = new BandsBuilder();
109         MeterBandDropCaseBuilder dropCaseBuilder = new MeterBandDropCaseBuilder();
110         MeterBandDropBuilder dropBand = new MeterBandDropBuilder();
111         dropBand.setType(MeterBandType.forValue(input.readUnsignedShort()));
112         input.skipBytes(Short.SIZE/Byte.SIZE);
113         dropBand.setRate(input.readUnsignedInt());
114         dropBand.setBurstSize(input.readUnsignedInt());
115         input.skipBytes(4);
116         dropCaseBuilder.setMeterBandDrop(dropBand.build());
117         bandsList.add(bandsBuilder.setMeterBand(dropCaseBuilder.build()).build());
118         MeterBandDscpRemarkCaseBuilder dscpCaseBuilder = new MeterBandDscpRemarkCaseBuilder();
119         MeterBandDscpRemarkBuilder dscpRemarkBand = new MeterBandDscpRemarkBuilder();
120         dscpRemarkBand.setType(MeterBandType.forValue(input.readUnsignedShort()));
121         input.skipBytes(Short.SIZE/Byte.SIZE);
122         dscpRemarkBand.setRate(input.readUnsignedInt());
123         dscpRemarkBand.setBurstSize(input.readUnsignedInt());
124         dscpRemarkBand.setPrecLevel(input.readUnsignedByte());
125         input.skipBytes(3);
126         dscpCaseBuilder.setMeterBandDscpRemark(dscpRemarkBand.build());
127         bandsList.add(bandsBuilder.setMeterBand(dscpCaseBuilder.build()).build());
128         MeterBandExperimenterCaseBuilder expCaseBuilder = new MeterBandExperimenterCaseBuilder();
129         MeterBandExperimenterBuilder experimenterBand = new MeterBandExperimenterBuilder();
130         experimenterBand.setType(MeterBandType.forValue(input.readUnsignedShort()));
131         input.skipBytes(Short.SIZE/Byte.SIZE);
132         experimenterBand.setRate(input.readUnsignedInt());
133         experimenterBand.setBurstSize(input.readUnsignedInt());
134         experimenterBand.setExperimenter(input.readUnsignedInt());
135         expCaseBuilder.setMeterBandExperimenter(experimenterBand.build());
136         bandsList.add(bandsBuilder.setMeterBand(expCaseBuilder.build()).build());
137         return bandsList;
138     }
139     
140 }