2 * Copyright (c) 2013 Pantheon Technologies s.r.o. and others. All rights reserved.
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
9 package org.opendaylight.openflowjava.protocol.impl.serialization.factories;
11 import io.netty.buffer.ByteBuf;
12 import io.netty.buffer.UnpooledByteBufAllocator;
14 import java.util.ArrayList;
15 import java.util.List;
17 import junit.framework.Assert;
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.MeterBandDropBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDscpRemarkBuilder;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandExperimenterBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.mod.Bands;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.mod.BandsBuilder;
36 * @author timotej.kubas
37 * @author michal.polkorab
39 public class MeterModInputMessageFactoryTest {
43 * Testing of {@link MeterModInputMessageFactory} for correct translation from POJO
46 public void testMeterModInputMessage() throws Exception {
47 MeterModInputBuilder builder = new MeterModInputBuilder();
48 BufferHelper.setupHeader(builder, EncodeConstants.OF13_VERSION_ID);
49 builder.setCommand(MeterModCommand.forValue(1));
50 builder.setFlags(new MeterFlags(false, true, true, false));
51 builder.setMeterId(new MeterId(2248L));
52 builder.setBands(createBandsList());
53 MeterModInput message = builder.build();
55 ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
56 MeterModInputMessageFactory factory = MeterModInputMessageFactory.getInstance();
57 factory.messageToBuffer(HelloMessageFactoryTest.VERSION_YET_SUPPORTED, out, message);
59 BufferHelper.checkHeaderV13(out, factory.getMessageType(), 64);
60 Assert.assertEquals("Wrong meterModCommand", message.getCommand().getIntValue(), out.readUnsignedShort());
61 Assert.assertEquals("Wrong meterFlags", message.getFlags(), decodeMeterModFlags(out.readShort()));
62 Assert.assertEquals("Wrong meterId", message.getMeterId().getValue().intValue(), out.readUnsignedInt());
63 Assert.assertEquals("Wrong bands", message.getBands(), decodeBandsList(out));
66 private static MeterFlags decodeMeterModFlags(short input){
67 final Boolean _oFPMFKBPS = (input & (1 << 0)) > 0;
68 final Boolean _oFPMFPKTPS = (input & (1 << 1)) > 0;
69 final Boolean _oFPMFBURST = (input & (1 << 2)) > 0;
70 final Boolean _oFPMFSTATS = (input & (1 << 3)) > 0;
71 return new MeterFlags(_oFPMFBURST, _oFPMFKBPS, _oFPMFPKTPS, _oFPMFSTATS);
74 private static List<Bands> createBandsList(){
75 List<Bands> bandsList = new ArrayList<>();
76 BandsBuilder bandsBuilder = new BandsBuilder();
77 MeterBandDropBuilder dropBand = new MeterBandDropBuilder();
78 dropBand.setType(MeterBandType.OFPMBTDROP);
80 dropBand.setBurstSize(2L);
81 bandsList.add(bandsBuilder.setMeterBand(dropBand.build()).build());
82 MeterBandDscpRemarkBuilder dscpRemarkBand = new MeterBandDscpRemarkBuilder();
83 dscpRemarkBand.setType(MeterBandType.OFPMBTDSCPREMARK);
84 dscpRemarkBand.setRate(1L);
85 dscpRemarkBand.setBurstSize(2L);
86 dscpRemarkBand.setPrecLevel((short) 3);
87 bandsList.add(bandsBuilder.setMeterBand(dscpRemarkBand.build()).build());
88 MeterBandExperimenterBuilder experimenterBand = new MeterBandExperimenterBuilder();
89 experimenterBand.setType(MeterBandType.OFPMBTEXPERIMENTER);
90 experimenterBand.setRate(1L);
91 experimenterBand.setBurstSize(2L);
92 experimenterBand.setExperimenter(4L);
93 bandsList.add(bandsBuilder.setMeterBand(experimenterBand.build()).build());
97 private static List<Bands> decodeBandsList(ByteBuf input){
98 List<Bands> bandsList = new ArrayList<>();
99 BandsBuilder bandsBuilder = new BandsBuilder();
100 MeterBandDropBuilder dropBand = new MeterBandDropBuilder();
101 dropBand.setType(MeterBandType.forValue(input.readUnsignedShort()));
102 input.skipBytes(Short.SIZE/Byte.SIZE);
103 dropBand.setRate(input.readUnsignedInt());
104 dropBand.setBurstSize(input.readUnsignedInt());
106 bandsList.add(bandsBuilder.setMeterBand(dropBand.build()).build());
107 MeterBandDscpRemarkBuilder dscpRemarkBand = new MeterBandDscpRemarkBuilder();
108 dscpRemarkBand.setType(MeterBandType.forValue(input.readUnsignedShort()));
109 input.skipBytes(Short.SIZE/Byte.SIZE);
110 dscpRemarkBand.setRate(input.readUnsignedInt());
111 dscpRemarkBand.setBurstSize(input.readUnsignedInt());
112 dscpRemarkBand.setPrecLevel(input.readUnsignedByte());
114 bandsList.add(bandsBuilder.setMeterBand(dscpRemarkBand.build()).build());
115 MeterBandExperimenterBuilder experimenterBand = new MeterBandExperimenterBuilder();
116 experimenterBand.setType(MeterBandType.forValue(input.readUnsignedShort()));
117 input.skipBytes(Short.SIZE/Byte.SIZE);
118 experimenterBand.setRate(input.readUnsignedInt());
119 experimenterBand.setBurstSize(input.readUnsignedInt());
120 experimenterBand.setExperimenter(input.readUnsignedInt());
121 bandsList.add(bandsBuilder.setMeterBand(experimenterBand.build()).build());