2 * Copyright (c) 2014 Ericsson India Global Services Pvt Ltd. 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
8 * Contributor: usha.m.s@ericsson.com
10 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
12 import java.util.ArrayList;
13 import java.util.List;
15 import junit.framework.Assert;
17 import org.junit.Test;
18 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.AddMeterInput;
19 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.AddMeterInputBuilder;
20 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterBandType;
21 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterFlags;
22 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.Drop;
23 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.DropBuilder;
24 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.DscpRemark;
25 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.DscpRemarkBuilder;
26 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.Experimenter;
27 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.ExperimenterBuilder;
28 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.MeterBandHeaders;
29 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.MeterBandHeadersBuilder;
30 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.MeterBandHeader;
31 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.MeterBandHeaderBuilder;
32 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.meter.band.header.MeterBandTypesBuilder;
33 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ExperimenterIdMeterBand;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterModCommand;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MeterModInput;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MeterModInputBuilder;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.MeterBand;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDropCase;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDscpRemarkCase;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandExperimenterCase;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.mod.Bands;
43 public class MeterConvertorTest {
46 public void testMeterModCommandConvertorwithAllParameters() {
49 MeterBandHeaderBuilder meterBandHeaderBuilder = new MeterBandHeaderBuilder();
50 MeterBandTypesBuilder meterBandTypesB = new MeterBandTypesBuilder();
52 MeterBandType bandFlag = new MeterBandType(true, false, false);
53 meterBandTypesB.setFlags(bandFlag);// _ofpmbtDrop
54 DropBuilder drop = new DropBuilder();
55 drop.setDropBurstSize(10L);
56 drop.setDropRate(20L);
57 Drop drp = drop.build();
58 meterBandHeaderBuilder.setBandType(drp);
59 meterBandHeaderBuilder.setMeterBandTypes(meterBandTypesB.build());
61 MeterBandHeader meterBH = meterBandHeaderBuilder.build();
64 MeterBandHeaderBuilder meterBandHeaderBuilder1 = new MeterBandHeaderBuilder();
65 MeterBandTypesBuilder meterBandTypesB1 = new MeterBandTypesBuilder();
66 MeterBandType bandFlag1 = new MeterBandType(false, true, false);
68 meterBandTypesB1.setFlags(bandFlag1);
69 DscpRemarkBuilder dscp = new DscpRemarkBuilder();
70 dscp.setDscpRemarkBurstSize(11L);
71 dscp.setDscpRemarkRate(21L);
72 dscp.setPercLevel((short) 1);
73 DscpRemark dscpRemark = dscp.build();
74 meterBandHeaderBuilder1.setBandType(dscpRemark);
75 meterBandHeaderBuilder1.setMeterBandTypes(meterBandTypesB1.build());
77 MeterBandHeader meterBH1 = meterBandHeaderBuilder1.build();
81 MeterBandHeaderBuilder meterBandHeaderBuilder2 = new MeterBandHeaderBuilder();
82 MeterBandTypesBuilder meterBandTypesB2 = new MeterBandTypesBuilder();
83 MeterBandType bandFlag2 = new MeterBandType(false, false, true);
84 meterBandTypesB2.setFlags(bandFlag2);
86 ExperimenterBuilder exp = new ExperimenterBuilder();
87 exp.setExperimenterBurstSize(12L);
88 exp.setExperimenterRate(22L);
89 exp.setExperimenter(23L);
90 Experimenter experimenter = exp.build();
91 meterBandHeaderBuilder2.setBandType(experimenter);
92 meterBandHeaderBuilder2.setMeterBandTypes(meterBandTypesB2.build());
93 MeterBandHeader meterBH2 = meterBandHeaderBuilder2.build();
95 List<MeterBandHeader> meterBandList = new ArrayList<MeterBandHeader>();
96 meterBandList.add(0, meterBH);
97 meterBandList.add(1, meterBH1);
98 meterBandList.add(2, meterBH2);
100 // Constructing List of Bands
101 MeterBandHeadersBuilder meterBandHeadersBuilder = new MeterBandHeadersBuilder();
102 meterBandHeadersBuilder.setMeterBandHeader(meterBandList);
104 MeterBandHeaders meterBandHeaders = meterBandHeadersBuilder.build();
106 AddMeterInputBuilder addMeterFromSAL = new AddMeterInputBuilder();
108 addMeterFromSAL.setMeterBandHeaders(meterBandHeaders); // MeterBands
113 // NodeKey key = new NodeKey(new NodeId("24"));
114 // InstanceIdentifier<Node> path =
115 // InstanceIdentifier.builder().node(Nodes.class).node(Node.class,
116 // key).toInstance();
119 .setMeterId(new org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId(10L));
120 MeterFlags flagV = new MeterFlags(true, true, true, true);
121 addMeterFromSAL.setFlags(flagV);
123 AddMeterInput meterInputCommand = addMeterFromSAL.build();
124 MeterModInputBuilder outMeterModInput = MeterConvertor.toMeterModInput(meterInputCommand, (short) 0X4);
126 Assert.assertEquals(MeterModCommand.OFPMCADD, outMeterModInput.getCommand());
127 Assert.assertTrue(outMeterModInput.getFlags().isOFPMFBURST());
128 Assert.assertEquals(temp, outMeterModInput.getMeterId().getValue());
129 // BandInformation starts here:
131 List<Bands> bands = outMeterModInput.getBands();
132 for (Bands currentBand : bands) {
133 MeterBand meterBand = currentBand.getMeterBand();
134 if (meterBand instanceof MeterBandDropCase) {
137 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType.OFPMBTDROP,
138 ((MeterBandDropCase) meterBand).getMeterBandDrop().getType());
139 Assert.assertEquals((long) 20, (long) ((MeterBandDropCase) meterBand).getMeterBandDrop().getBurstSize());
140 Assert.assertEquals((long) 10, (long) ((MeterBandDropCase) meterBand).getMeterBandDrop().getRate());
143 if (meterBand instanceof MeterBandDscpRemarkCase) {
145 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType.OFPMBTDSCPREMARK,
146 ((MeterBandDscpRemarkCase) meterBand).getMeterBandDscpRemark().getType());
147 Assert.assertEquals((long) 11, (long) ((MeterBandDscpRemarkCase) meterBand).getMeterBandDscpRemark().getBurstSize());
148 Assert.assertEquals((long) 21, (long) ((MeterBandDscpRemarkCase) meterBand).getMeterBandDscpRemark().getRate());
149 Assert.assertEquals((short) 1, (short) ((MeterBandDscpRemarkCase) meterBand).getMeterBandDscpRemark().getPrecLevel());
152 if (meterBand instanceof MeterBandExperimenterCase) {
154 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType.OFPMBTEXPERIMENTER,
155 ((MeterBandExperimenterCase) meterBand).getMeterBandExperimenter().getType());
156 Assert.assertEquals((long) 12, (long) ((MeterBandExperimenterCase) meterBand).getMeterBandExperimenter().getBurstSize());
157 Assert.assertEquals((long) 22, (long) ((MeterBandExperimenterCase) meterBand).getMeterBandExperimenter().getRate());
158 ExperimenterIdMeterBand expBand = ((MeterBandExperimenterCase) meterBand).getMeterBandExperimenter()
159 .getAugmentation(ExperimenterIdMeterBand.class);
160 Assert.assertEquals((long) 23, (long) expBand.getExperimenter().getValue());
168 public void testMeterModCommandConvertorwithNoFlags() {
171 MeterBandHeaderBuilder meterBandHeaderBuilder = new MeterBandHeaderBuilder();
172 MeterBandTypesBuilder meterBandTypesB = new MeterBandTypesBuilder();
174 MeterBandType bandFlag = new MeterBandType(true, false, false);
175 meterBandTypesB.setFlags(bandFlag);// _ofpmbtDrop
176 DropBuilder drop = new DropBuilder();
177 drop.setDropBurstSize(10L);
178 drop.setDropRate(20L);
179 Drop drp = drop.build();
180 meterBandHeaderBuilder.setBandType(drp);
181 meterBandHeaderBuilder.setMeterBandTypes(meterBandTypesB.build());
183 MeterBandHeader meterBH = meterBandHeaderBuilder.build();
186 MeterBandHeaderBuilder meterBandHeaderBuilder1 = new MeterBandHeaderBuilder();
187 MeterBandTypesBuilder meterBandTypesB1 = new MeterBandTypesBuilder();
188 MeterBandType bandFlag1 = new MeterBandType(false, true, false);
190 meterBandTypesB1.setFlags(bandFlag1);
191 DscpRemarkBuilder dscp = new DscpRemarkBuilder();
192 dscp.setDscpRemarkBurstSize(11L);
193 dscp.setDscpRemarkRate(21L);
194 dscp.setPercLevel((short) 1);
195 DscpRemark dscpRemark = dscp.build();
196 meterBandHeaderBuilder1.setBandType(dscpRemark);
197 meterBandHeaderBuilder1.setMeterBandTypes(meterBandTypesB1.build());
199 MeterBandHeader meterBH1 = meterBandHeaderBuilder1.build();
203 MeterBandHeaderBuilder meterBandHeaderBuilder2 = new MeterBandHeaderBuilder();
204 MeterBandTypesBuilder meterBandTypesB2 = new MeterBandTypesBuilder();
205 MeterBandType bandFlag2 = new MeterBandType(false, false, true);
206 meterBandTypesB2.setFlags(bandFlag2);
208 ExperimenterBuilder exp = new ExperimenterBuilder();
209 exp.setExperimenterBurstSize(12L);
210 exp.setExperimenterRate(22L);
211 exp.setExperimenter(23L);
212 Experimenter experimenter = exp.build();
213 meterBandHeaderBuilder2.setBandType(experimenter);
214 meterBandHeaderBuilder2.setMeterBandTypes(meterBandTypesB2.build());
215 MeterBandHeader meterBH2 = meterBandHeaderBuilder2.build();
217 List<MeterBandHeader> meterBandList = new ArrayList<MeterBandHeader>();
218 meterBandList.add(0, meterBH);
219 meterBandList.add(1, meterBH1);
220 meterBandList.add(2, meterBH2);
222 // Constructing List of Bands
223 MeterBandHeadersBuilder meterBandHeadersBuilder = new MeterBandHeadersBuilder();
224 meterBandHeadersBuilder.setMeterBandHeader(meterBandList);
226 MeterBandHeaders meterBandHeaders = meterBandHeadersBuilder.build();
228 AddMeterInputBuilder addMeterFromSAL = new AddMeterInputBuilder();
230 addMeterFromSAL.setMeterBandHeaders(meterBandHeaders); // MeterBands
235 // NodeKey key = new NodeKey(new NodeId("24"));
236 // InstanceIdentifier<Node> path =
237 // InstanceIdentifier.builder().node(Nodes.class).node(Node.class,
238 // key).toInstance();
241 .setMeterId(new org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId(10L));
244 AddMeterInput meterInputCommand = addMeterFromSAL.build();
245 MeterModInputBuilder outMeterModInput = MeterConvertor.toMeterModInput(meterInputCommand, (short) 0X4);
247 Assert.assertEquals(MeterModCommand.OFPMCADD, outMeterModInput.getCommand());
248 Assert.assertFalse(outMeterModInput.getFlags().isOFPMFBURST());
249 Assert.assertTrue(outMeterModInput.getFlags().isOFPMFPKTPS());
250 Assert.assertEquals(temp, outMeterModInput.getMeterId().getValue());
251 // BandInformation starts here:
253 List<Bands> bands = outMeterModInput.getBands();
254 for (Bands currentBand : bands) {
255 MeterBand meterBand = currentBand.getMeterBand();
256 if (meterBand instanceof MeterBandDropCase) {
259 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType.OFPMBTDROP,
260 ((MeterBandDropCase) meterBand).getMeterBandDrop().getType());
261 Assert.assertEquals((long) 20, (long) ((MeterBandDropCase) meterBand).getMeterBandDrop().getBurstSize());
262 Assert.assertEquals((long) 10, (long) ((MeterBandDropCase) meterBand).getMeterBandDrop().getRate());
265 if (meterBand instanceof MeterBandDscpRemarkCase) {
267 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType.OFPMBTDSCPREMARK,
268 ((MeterBandDscpRemarkCase) meterBand).getMeterBandDscpRemark().getType());
269 Assert.assertEquals((long) 11, (long) ((MeterBandDscpRemarkCase) meterBand).getMeterBandDscpRemark().getBurstSize());
270 Assert.assertEquals((long) 21, (long) ((MeterBandDscpRemarkCase) meterBand).getMeterBandDscpRemark().getRate());
271 Assert.assertEquals((short) 1, (short) ((MeterBandDscpRemarkCase) meterBand).getMeterBandDscpRemark().getPrecLevel());
274 if (meterBand instanceof MeterBandExperimenterCase) {
276 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType.OFPMBTEXPERIMENTER,
277 ((MeterBandExperimenterCase) meterBand).getMeterBandExperimenter().getType());
278 Assert.assertEquals((long) 12, (long) ((MeterBandExperimenterCase) meterBand).getMeterBandExperimenter().getBurstSize());
279 Assert.assertEquals((long) 22, (long) ((MeterBandExperimenterCase) meterBand).getMeterBandExperimenter().getRate());
280 ExperimenterIdMeterBand expBand = ((MeterBandExperimenterCase) meterBand).getMeterBandExperimenter()
281 .getAugmentation(ExperimenterIdMeterBand.class);
282 Assert.assertEquals((long) 23, (long) expBand.getExperimenter().getValue());
290 public void testMeterModCommandConvertorBandDataisNULL() {
293 AddMeterInputBuilder addMeterFromSAL = new AddMeterInputBuilder();
297 // NodeKey key = new NodeKey(new NodeId("24"));
298 // InstanceIdentifier<Node> path =
299 // InstanceIdentifier.builder().node(Nodes.class).node(Node.class,
300 // key).toInstance();
303 .setMeterId(new org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId(10L));
304 MeterFlags flagV = new MeterFlags(true, true, true, true);
305 addMeterFromSAL.setFlags(flagV);
307 AddMeterInput meterInputCommand = addMeterFromSAL.build();
308 MeterModInputBuilder outMeterModInput = MeterConvertor.toMeterModInput(meterInputCommand, (short) 0X4);
310 Assert.assertEquals(MeterModCommand.OFPMCADD, outMeterModInput.getCommand());
311 Assert.assertTrue(outMeterModInput.getFlags().isOFPMFBURST());
312 Assert.assertEquals(temp, outMeterModInput.getMeterId().getValue());
316 public void testMeterModCommandConvertorNoValidBandData() {
319 MeterBandHeaderBuilder meterBandHeaderBuilder = new MeterBandHeaderBuilder();
320 MeterBandTypesBuilder meterBandTypesB = new MeterBandTypesBuilder();
322 MeterBandType bandFlag = new MeterBandType(true, false, false);
323 meterBandTypesB.setFlags(bandFlag);// _ofpmbtDrop
325 meterBandHeaderBuilder.setMeterBandTypes(meterBandTypesB.build());
327 MeterBandHeader meterBH = meterBandHeaderBuilder.build();
330 MeterBandHeaderBuilder meterBandHeaderBuilder1 = new MeterBandHeaderBuilder();
331 MeterBandTypesBuilder meterBandTypesB1 = new MeterBandTypesBuilder();
332 MeterBandType bandFlag1 = new MeterBandType(false, true, false);
334 meterBandTypesB1.setFlags(bandFlag1);
335 DscpRemarkBuilder dscp = new DscpRemarkBuilder();
336 dscp.setDscpRemarkBurstSize(11L);
337 dscp.setDscpRemarkRate(21L);
338 dscp.setPercLevel((short) 1);
339 DscpRemark dscpRemark = dscp.build();
340 meterBandHeaderBuilder1.setBandType(dscpRemark);
341 meterBandHeaderBuilder1.setMeterBandTypes(meterBandTypesB1.build());
343 MeterBandHeader meterBH1 = meterBandHeaderBuilder1.build();
347 MeterBandHeaderBuilder meterBandHeaderBuilder2 = new MeterBandHeaderBuilder();
348 MeterBandTypesBuilder meterBandTypesB2 = new MeterBandTypesBuilder();
351 ExperimenterBuilder exp = new ExperimenterBuilder();
352 exp.setExperimenterBurstSize(12L);
353 exp.setExperimenterRate(22L);
354 exp.setExperimenter(23L);
355 Experimenter experimenter = exp.build();
356 meterBandHeaderBuilder2.setBandType(experimenter);
357 meterBandHeaderBuilder2.setMeterBandTypes(meterBandTypesB2.build());
358 MeterBandHeader meterBH2 = meterBandHeaderBuilder2.build();
360 List<MeterBandHeader> meterBandList = new ArrayList<MeterBandHeader>();
361 meterBandList.add(0, meterBH);
362 meterBandList.add(1, meterBH1);
363 meterBandList.add(2, meterBH2);
365 // Constructing List of Bands
366 MeterBandHeadersBuilder meterBandHeadersBuilder = new MeterBandHeadersBuilder();
367 meterBandHeadersBuilder.setMeterBandHeader(meterBandList);
369 MeterBandHeaders meterBandHeaders = meterBandHeadersBuilder.build();
371 AddMeterInputBuilder addMeterFromSAL = new AddMeterInputBuilder();
373 addMeterFromSAL.setMeterBandHeaders(meterBandHeaders); // MeterBands
378 // NodeKey key = new NodeKey(new NodeId("24"));
379 // InstanceIdentifier<Node> path =
380 // InstanceIdentifier.builder().node(Nodes.class).node(Node.class,
381 // key).toInstance();
384 .setMeterId(new org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId(10L));
385 MeterFlags flagV = new MeterFlags(true, true, true, true);
386 addMeterFromSAL.setFlags(flagV);
388 AddMeterInput meterInputCommand = addMeterFromSAL.build();
389 MeterModInputBuilder outMeterModInput = MeterConvertor.toMeterModInput(meterInputCommand, (short) 0X4);
391 Assert.assertEquals(MeterModCommand.OFPMCADD, outMeterModInput.getCommand());
392 Assert.assertTrue(outMeterModInput.getFlags().isOFPMFBURST());
393 Assert.assertEquals(temp, outMeterModInput.getMeterId().getValue());
394 // BandInformation starts here:
396 List<Bands> bands = outMeterModInput.getBands();
397 for (Bands currentBand : bands) {
398 MeterBand meterBand = currentBand.getMeterBand();
399 if (meterBand instanceof MeterBandDropCase) {
402 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType.OFPMBTDROP,
403 ((MeterBandDropCase) meterBand).getMeterBandDrop().getType());
404 Assert.assertEquals((long) 20, (long) ((MeterBandDropCase) meterBand).getMeterBandDrop().getBurstSize());
405 Assert.assertEquals((long) 10, (long) ((MeterBandDropCase) meterBand).getMeterBandDrop().getRate());
408 if (meterBand instanceof MeterBandDscpRemarkCase) {
410 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType.OFPMBTDSCPREMARK,
411 ((MeterBandDscpRemarkCase) meterBand).getMeterBandDscpRemark().getType());
412 Assert.assertEquals((long) 11, (long) ((MeterBandDscpRemarkCase) meterBand).getMeterBandDscpRemark().getBurstSize());
413 Assert.assertEquals((long) 21, (long) ((MeterBandDscpRemarkCase) meterBand).getMeterBandDscpRemark().getRate());
414 Assert.assertEquals((short) 1, (short) ((MeterBandDscpRemarkCase) meterBand).getMeterBandDscpRemark().getPrecLevel());
417 if (meterBand instanceof MeterBandExperimenterCase) {
419 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType.OFPMBTEXPERIMENTER,
420 ((MeterBandExperimenterCase) meterBand).getMeterBandExperimenter().getType());
421 Assert.assertEquals((long) 12, (long) ((MeterBandExperimenterCase) meterBand).getMeterBandExperimenter().getBurstSize());
422 Assert.assertEquals((long) 22, (long) ((MeterBandExperimenterCase) meterBand).getMeterBandExperimenter().getRate());
423 ExperimenterIdMeterBand expBand = ((MeterBandExperimenterCase) meterBand).getMeterBandExperimenter()
424 .getAugmentation(ExperimenterIdMeterBand.class);
425 Assert.assertEquals((long) 23, (long) expBand.getExperimenter().getValue());