Migrate openflowplugim-impl tests to uint types
[openflowplugin.git] / openflowplugin-impl / src / test / java / org / opendaylight / openflowplugin / impl / protocol / serialization / messages / MeterMessageSerializerTest.java
1 /*
2  * Copyright (c) 2016 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.openflowplugin.impl.protocol.serialization.messages;
10
11 import static org.junit.Assert.assertEquals;
12
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;
34 import org.opendaylight.yangtools.yang.common.Uint32;
35 import org.opendaylight.yangtools.yang.common.Uint8;
36
37 public class MeterMessageSerializerTest extends AbstractSerializerTest {
38     // Meter message constants
39     private static final short LENGTH = 48;
40     private static final short LENGTH_OF_METER_BANDS = 16;
41     private static final short PADDING_IN_METER_BAND_DROP = 4;
42     private static final short PADDING_IN_METER_BAND_DSCP_REMARK = 3;
43     private static final Uint32 XID = Uint32.valueOf(42);
44     private static final String CONTAINER_NAME = "container";
45     private static final String METER_NAME = "meter";
46     private static final Uint32 METER_ID = Uint32.ONE;
47     private static final Boolean BARRIER = false;
48     private static final short VERSION = EncodeConstants.OF13_VERSION_ID;
49     private static final MeterModCommand COMMAND = MeterModCommand.OFPMCADD;
50     // Flags
51     private static final Boolean IS_METER_BURST = false;
52     private static final Boolean IS_METER_KBPS = true;
53     private static final Boolean IS_METER_PKTPS = false;
54     private static final Boolean IS_METER_STATS = true;
55     // Bands
56     private static final Uint32 BAND_BURST_SIZE = Uint32.valueOf(50);
57     private static final Uint32 BAND_ID = Uint32.valueOf(8);
58     private static final Uint32 BAND_RATE = Uint32.valueOf(25);
59     private static final Uint32 DROP_RATE = Uint32.valueOf(12);
60     private static final Uint32 DROP_BURST_SIZE = Uint32.valueOf(24);
61     private static final Uint32 DSCP_RATE = Uint32.valueOf(13);
62     private static final Uint32 DSCP_BURST_SIZE = Uint32.valueOf(26);
63     private static final Uint8 DSCP_PREC_LEVEL = Uint8.valueOf(4);
64
65     // Message
66     private static final MeterMessage MESSAGE = new MeterMessageBuilder()
67             .setBarrier(BARRIER)
68             .setCommand(COMMAND)
69             .setContainerName(CONTAINER_NAME)
70             .setFlags(new MeterFlags(IS_METER_BURST, IS_METER_KBPS, IS_METER_PKTPS, IS_METER_STATS))
71             .setMeterId(new MeterId(METER_ID))
72             .setXid(XID)
73             .setVersion(EncodeConstants.OF_VERSION_1_3)
74             .setMeterName(METER_NAME)
75             .setMeterBandHeaders(new MeterBandHeadersBuilder()
76                     .setMeterBandHeader(Arrays.asList(
77                             new MeterBandHeaderBuilder()
78                                     .setMeterBandTypes(new MeterBandTypesBuilder()
79                                             .setFlags(new org.opendaylight.yang.gen.v1.urn.opendaylight
80                                                     .meter.types.rev130918.MeterBandType(true, false, false))
81                                             .build())
82                                     .setBandBurstSize(BAND_BURST_SIZE)
83                                     .withKey(new MeterBandHeaderKey(new BandId(BAND_ID)))
84                                     .setBandRate(BAND_RATE)
85                                     .setBandType(new DropBuilder()
86                                             .setDropRate(DROP_RATE)
87                                             .setDropBurstSize(DROP_BURST_SIZE)
88                                             .build())
89                                     .build(),
90                             new MeterBandHeaderBuilder()
91                                     .setMeterBandTypes(new MeterBandTypesBuilder()
92                                             .setFlags(new org.opendaylight.yang.gen.v1.urn.opendaylight
93                                                     .meter.types.rev130918.MeterBandType(false, true, false))
94                                             .build())
95                                     .setBandBurstSize(BAND_BURST_SIZE)
96                                     .withKey(new MeterBandHeaderKey(new BandId(Uint32.valueOf(9))))
97                                     .setBandRate(BAND_RATE)
98                                     .setBandType(new DscpRemarkBuilder()
99                                             .setDscpRemarkBurstSize(DSCP_BURST_SIZE)
100                                             .setDscpRemarkRate(DSCP_RATE)
101                                             .setPrecLevel(DSCP_PREC_LEVEL)
102                                             .build())
103                                     .build()))
104                     .build())
105             .build();
106
107     private MeterMessageSerializer serializer;
108
109
110     @Override
111     protected void init() {
112         serializer = getRegistry()
113                 .getSerializer(new MessageTypeKey<>(EncodeConstants.OF13_VERSION_ID, MeterMessage.class)) ;
114     }
115
116     @Test
117     public void testSerialize() {
118         final ByteBuf out = UnpooledByteBufAllocator.DEFAULT.buffer();
119         serializer.serialize(MESSAGE, out);
120
121         // Header
122         assertEquals(out.readByte(), VERSION);
123         assertEquals(out.readByte(), serializer.getMessageType());
124         assertEquals(out.readShort(), LENGTH);
125         assertEquals(out.readInt(), XID.intValue());
126
127         // Body
128         assertEquals(out.readShort(), COMMAND.getIntValue());
129         assertEquals(out.readShort(), ByteBufUtils.fillBitMask(0,
130                 IS_METER_KBPS,
131                 IS_METER_PKTPS,
132                 IS_METER_BURST,
133                 IS_METER_STATS));
134         assertEquals(out.readInt(), METER_ID.intValue());
135
136         // Drop band
137         assertEquals(out.readShort(), MeterBandType.OFPMBTDROP.getIntValue());
138         assertEquals(out.readShort(), LENGTH_OF_METER_BANDS);
139         assertEquals(out.readInt(), DROP_RATE.intValue());
140         assertEquals(out.readInt(), DROP_BURST_SIZE.intValue());
141         out.skipBytes(PADDING_IN_METER_BAND_DROP);
142
143         // Dscp band
144         assertEquals(out.readShort(), MeterBandType.OFPMBTDSCPREMARK.getIntValue());
145         assertEquals(out.readShort(), LENGTH_OF_METER_BANDS);
146         assertEquals(out.readInt(), DSCP_RATE.intValue());
147         assertEquals(out.readInt(), DSCP_BURST_SIZE.intValue());
148         assertEquals(out.readByte(), DSCP_PREC_LEVEL.byteValue());
149         out.skipBytes(PADDING_IN_METER_BAND_DSCP_REMARK);
150
151         assertEquals(out.readableBytes(), 0);
152     }
153
154 }