2 * Copyright (c) 2016 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.openflowplugin.impl.protocol.serialization.messages;
11 import static org.junit.Assert.assertEquals;
13 import io.netty.buffer.ByteBuf;
14 import io.netty.buffer.UnpooledByteBufAllocator;
15 import java.util.Arrays;
16 import org.junit.Test;
17 import org.opendaylight.openflowjava.protocol.api.keys.MessageTypeKey;
18 import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;
19 import org.opendaylight.openflowjava.util.ByteBufUtils;
20 import org.opendaylight.openflowplugin.impl.protocol.serialization.AbstractSerializerTest;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.BandId;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterFlags;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterMessage;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterMessageBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.DropBuilder;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.DscpRemarkBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.MeterBandHeadersBuilder;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.MeterBandHeaderBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.MeterBandHeaderKey;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.meter.band.header.MeterBandTypesBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterModCommand;
35 public class MeterMessageSerializerTest extends AbstractSerializerTest {
36 // Meter message constants
37 private static final short LENGTH = 48;
38 private static final short LENGTH_OF_METER_BANDS = 16;
39 private static final short PADDING_IN_METER_BAND_DROP = 4;
40 private static final short PADDING_IN_METER_BAND_DSCP_REMARK = 3;
41 private static final Long XID = 42L;
42 private static final String CONTAINER_NAME = "container";
43 private static final String METER_NAME = "meter";
44 private static final Long METER_ID = 1L;
45 private static final Boolean BARRIER = false;
46 private static final short VERSION = EncodeConstants.OF13_VERSION_ID;
47 private static final MeterModCommand COMMAND = MeterModCommand.OFPMCADD;
49 private static final Boolean IS_METER_BURST = false;
50 private static final Boolean IS_METER_KBPS = true;
51 private static final Boolean IS_METER_PKTPS = false;
52 private static final Boolean IS_METER_STATS = true;
54 private static final Long BAND_BURST_SIZE = 50L;
55 private static final Long BAND_ID = 8L;
56 private static final Long BAND_RATE = 25L;
57 private static final Long DROP_RATE = 12L;
58 private static final Long DROP_BURST_SIZE = 24L;
59 private static final Long DSCP_RATE = 13L;
60 private static final Long DSCP_BURST_SIZE = 26L;
61 private static final short DSCP_PREC_LEVEL = (short) 4;
64 private static final MeterMessage MESSAGE = new MeterMessageBuilder()
67 .setContainerName(CONTAINER_NAME)
68 .setFlags(new MeterFlags(IS_METER_BURST, IS_METER_KBPS, IS_METER_PKTPS, IS_METER_STATS))
69 .setMeterId(new MeterId(METER_ID))
72 .setMeterName(METER_NAME)
73 .setMeterBandHeaders(new MeterBandHeadersBuilder()
74 .setMeterBandHeader(Arrays.asList(
75 new MeterBandHeaderBuilder()
76 .setMeterBandTypes(new MeterBandTypesBuilder()
77 .setFlags(new org.opendaylight.yang.gen.v1.urn.opendaylight
78 .meter.types.rev130918.MeterBandType(true, false, false))
80 .setBandBurstSize(BAND_BURST_SIZE)
81 .withKey(new MeterBandHeaderKey(new BandId(BAND_ID)))
82 .setBandRate(BAND_RATE)
83 .setBandType(new DropBuilder()
84 .setDropRate(DROP_RATE)
85 .setDropBurstSize(DROP_BURST_SIZE)
88 new MeterBandHeaderBuilder()
89 .setMeterBandTypes(new MeterBandTypesBuilder()
90 .setFlags(new org.opendaylight.yang.gen.v1.urn.opendaylight
91 .meter.types.rev130918.MeterBandType(false, true, false))
93 .setBandBurstSize(BAND_BURST_SIZE)
94 .withKey(new MeterBandHeaderKey(new BandId(BAND_ID + 1)))
95 .setBandRate(BAND_RATE)
96 .setBandType(new DscpRemarkBuilder()
97 .setDscpRemarkBurstSize(DSCP_BURST_SIZE)
98 .setDscpRemarkRate(DSCP_RATE)
99 .setPrecLevel(DSCP_PREC_LEVEL)
105 private MeterMessageSerializer serializer;
109 protected void init() {
110 serializer = getRegistry()
111 .getSerializer(new MessageTypeKey<>(EncodeConstants.OF13_VERSION_ID, MeterMessage.class)) ;
115 public void testSerialize() {
116 final ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
117 serializer.serialize(MESSAGE, out);
120 assertEquals(out.readByte(), VERSION);
121 assertEquals(out.readByte(), serializer.getMessageType());
122 assertEquals(out.readShort(), LENGTH);
123 assertEquals(out.readInt(), XID.intValue());
126 assertEquals(out.readShort(), COMMAND.getIntValue());
127 assertEquals(out.readShort(), ByteBufUtils.fillBitMask(0,
132 assertEquals(out.readInt(), METER_ID.intValue());
135 assertEquals(out.readShort(), MeterBandType.OFPMBTDROP.getIntValue());
136 assertEquals(out.readShort(), LENGTH_OF_METER_BANDS);
137 assertEquals(out.readInt(), DROP_RATE.intValue());
138 assertEquals(out.readInt(), DROP_BURST_SIZE.intValue());
139 out.skipBytes(PADDING_IN_METER_BAND_DROP);
142 assertEquals(out.readShort(), MeterBandType.OFPMBTDSCPREMARK.getIntValue());
143 assertEquals(out.readShort(), LENGTH_OF_METER_BANDS);
144 assertEquals(out.readInt(), DSCP_RATE.intValue());
145 assertEquals(out.readInt(), DSCP_BURST_SIZE.intValue());
146 assertEquals(out.readByte(), DSCP_PREC_LEVEL);
147 out.skipBytes(PADDING_IN_METER_BAND_DSCP_REMARK);
149 assertEquals(out.readableBytes(), 0);