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.common.types.rev130731.MeterModCommand;
34 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MeterModInput;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MeterModInputBuilder;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.MeterBand;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDropCase;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDscpRemarkCase;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandExperimenterCase;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.mod.Bands;
42 public class MeterConvertorTest {
45 public void testMeterModCommandConvertorwithAllParameters() {
48 MeterBandHeaderBuilder meterBandHeaderBuilder = new MeterBandHeaderBuilder();
49 MeterBandTypesBuilder meterBandTypesB = new MeterBandTypesBuilder();
51 MeterBandType bandFlag = new MeterBandType(true, false, false);
52 meterBandTypesB.setFlags(bandFlag);// _ofpmbtDrop
53 DropBuilder drop = new DropBuilder();
54 drop.setDropBurstSize(10L);
55 drop.setDropRate(20L);
56 Drop drp = drop.build();
57 meterBandHeaderBuilder.setBandType(drp);
58 meterBandHeaderBuilder.setMeterBandTypes(meterBandTypesB.build());
60 MeterBandHeader meterBH = meterBandHeaderBuilder.build();
63 MeterBandHeaderBuilder meterBandHeaderBuilder1 = new MeterBandHeaderBuilder();
64 MeterBandTypesBuilder meterBandTypesB1 = new MeterBandTypesBuilder();
65 MeterBandType bandFlag1 = new MeterBandType(false, true, false);
67 meterBandTypesB1.setFlags(bandFlag1);
68 DscpRemarkBuilder dscp = new DscpRemarkBuilder();
69 dscp.setDscpRemarkBurstSize(11L);
70 dscp.setDscpRemarkRate(21L);
71 dscp.setPercLevel((short) 1);
72 DscpRemark dscpRemark = dscp.build();
73 meterBandHeaderBuilder1.setBandType(dscpRemark);
74 meterBandHeaderBuilder1.setMeterBandTypes(meterBandTypesB1.build());
76 MeterBandHeader meterBH1 = meterBandHeaderBuilder1.build();
80 MeterBandHeaderBuilder meterBandHeaderBuilder2 = new MeterBandHeaderBuilder();
81 MeterBandTypesBuilder meterBandTypesB2 = new MeterBandTypesBuilder();
82 MeterBandType bandFlag2 = new MeterBandType(false, false, true);
83 meterBandTypesB2.setFlags(bandFlag2);
85 ExperimenterBuilder exp = new ExperimenterBuilder();
86 exp.setExperimenterBurstSize(12L);
87 exp.setExperimenterRate(22L);
88 exp.setExperimenter(23L);
89 Experimenter experimenter = exp.build();
90 meterBandHeaderBuilder2.setBandType(experimenter);
91 meterBandHeaderBuilder2.setMeterBandTypes(meterBandTypesB2.build());
92 MeterBandHeader meterBH2 = meterBandHeaderBuilder2.build();
94 List<MeterBandHeader> meterBandList = new ArrayList<MeterBandHeader>();
95 meterBandList.add(0, meterBH);
96 meterBandList.add(1, meterBH1);
97 meterBandList.add(2, meterBH2);
99 // Constructing List of Bands
100 MeterBandHeadersBuilder meterBandHeadersBuilder = new MeterBandHeadersBuilder();
101 meterBandHeadersBuilder.setMeterBandHeader(meterBandList);
103 MeterBandHeaders meterBandHeaders = meterBandHeadersBuilder.build();
105 AddMeterInputBuilder addMeterFromSAL = new AddMeterInputBuilder();
107 addMeterFromSAL.setMeterBandHeaders(meterBandHeaders); // MeterBands
112 // NodeKey key = new NodeKey(new NodeId("24"));
113 // InstanceIdentifier<Node> path =
114 // InstanceIdentifier.builder().node(Nodes.class).node(Node.class,
115 // key).toInstance();
118 .setMeterId(new org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId(10L));
119 MeterFlags flagV = new MeterFlags(true, true, true, true);
120 addMeterFromSAL.setFlags(flagV);
122 AddMeterInput meterInputCommand = addMeterFromSAL.build();
123 MeterModInputBuilder outMeterModInput = MeterConvertor.toMeterModInput(meterInputCommand, (short) 0X4);
125 Assert.assertEquals(MeterModCommand.OFPMCADD, outMeterModInput.getCommand());
126 Assert.assertTrue(outMeterModInput.getFlags().isOFPMFBURST());
127 Assert.assertEquals(temp, outMeterModInput.getMeterId().getValue());
128 // BandInformation starts here:
130 List<Bands> bands = outMeterModInput.getBands();
131 for (Bands currentBand : bands) {
132 MeterBand meterBand = currentBand.getMeterBand();
133 if (meterBand instanceof MeterBandDropCase) {
136 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType.OFPMBTDROP,
137 ((MeterBandDropCase) meterBand).getMeterBandDrop().getType());
138 Assert.assertEquals((long) 20, (long) ((MeterBandDropCase) meterBand).getMeterBandDrop().getBurstSize());
139 Assert.assertEquals((long) 10, (long) ((MeterBandDropCase) meterBand).getMeterBandDrop().getRate());
142 if (meterBand instanceof MeterBandDscpRemarkCase) {
144 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType.OFPMBTDSCPREMARK,
145 ((MeterBandDscpRemarkCase) meterBand).getMeterBandDscpRemark().getType());
146 Assert.assertEquals((long) 11, (long) ((MeterBandDscpRemarkCase) meterBand).getMeterBandDscpRemark().getBurstSize());
147 Assert.assertEquals((long) 21, (long) ((MeterBandDscpRemarkCase) meterBand).getMeterBandDscpRemark().getRate());
148 Assert.assertEquals((short) 1, (short) ((MeterBandDscpRemarkCase) meterBand).getMeterBandDscpRemark().getPrecLevel());
151 if (meterBand instanceof MeterBandExperimenterCase) {
153 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType.OFPMBTEXPERIMENTER,
154 ((MeterBandExperimenterCase) meterBand).getMeterBandExperimenter().getType());
155 Assert.assertEquals((long) 12, (long) ((MeterBandExperimenterCase) meterBand).getMeterBandExperimenter().getBurstSize());
156 Assert.assertEquals((long) 22, (long) ((MeterBandExperimenterCase) meterBand).getMeterBandExperimenter().getRate());
157 Assert.assertEquals((long) 23, (long) ((MeterBandExperimenterCase) meterBand).getMeterBandExperimenter().getExperimenter());
165 public void testMeterModCommandConvertorwithNoFlags() {
168 MeterBandHeaderBuilder meterBandHeaderBuilder = new MeterBandHeaderBuilder();
169 MeterBandTypesBuilder meterBandTypesB = new MeterBandTypesBuilder();
171 MeterBandType bandFlag = new MeterBandType(true, false, false);
172 meterBandTypesB.setFlags(bandFlag);// _ofpmbtDrop
173 DropBuilder drop = new DropBuilder();
174 drop.setDropBurstSize(10L);
175 drop.setDropRate(20L);
176 Drop drp = drop.build();
177 meterBandHeaderBuilder.setBandType(drp);
178 meterBandHeaderBuilder.setMeterBandTypes(meterBandTypesB.build());
180 MeterBandHeader meterBH = meterBandHeaderBuilder.build();
183 MeterBandHeaderBuilder meterBandHeaderBuilder1 = new MeterBandHeaderBuilder();
184 MeterBandTypesBuilder meterBandTypesB1 = new MeterBandTypesBuilder();
185 MeterBandType bandFlag1 = new MeterBandType(false, true, false);
187 meterBandTypesB1.setFlags(bandFlag1);
188 DscpRemarkBuilder dscp = new DscpRemarkBuilder();
189 dscp.setDscpRemarkBurstSize(11L);
190 dscp.setDscpRemarkRate(21L);
191 dscp.setPercLevel((short) 1);
192 DscpRemark dscpRemark = dscp.build();
193 meterBandHeaderBuilder1.setBandType(dscpRemark);
194 meterBandHeaderBuilder1.setMeterBandTypes(meterBandTypesB1.build());
196 MeterBandHeader meterBH1 = meterBandHeaderBuilder1.build();
200 MeterBandHeaderBuilder meterBandHeaderBuilder2 = new MeterBandHeaderBuilder();
201 MeterBandTypesBuilder meterBandTypesB2 = new MeterBandTypesBuilder();
202 MeterBandType bandFlag2 = new MeterBandType(false, false, true);
203 meterBandTypesB2.setFlags(bandFlag2);
205 ExperimenterBuilder exp = new ExperimenterBuilder();
206 exp.setExperimenterBurstSize(12L);
207 exp.setExperimenterRate(22L);
208 exp.setExperimenter(23L);
209 Experimenter experimenter = exp.build();
210 meterBandHeaderBuilder2.setBandType(experimenter);
211 meterBandHeaderBuilder2.setMeterBandTypes(meterBandTypesB2.build());
212 MeterBandHeader meterBH2 = meterBandHeaderBuilder2.build();
214 List<MeterBandHeader> meterBandList = new ArrayList<MeterBandHeader>();
215 meterBandList.add(0, meterBH);
216 meterBandList.add(1, meterBH1);
217 meterBandList.add(2, meterBH2);
219 // Constructing List of Bands
220 MeterBandHeadersBuilder meterBandHeadersBuilder = new MeterBandHeadersBuilder();
221 meterBandHeadersBuilder.setMeterBandHeader(meterBandList);
223 MeterBandHeaders meterBandHeaders = meterBandHeadersBuilder.build();
225 AddMeterInputBuilder addMeterFromSAL = new AddMeterInputBuilder();
227 addMeterFromSAL.setMeterBandHeaders(meterBandHeaders); // MeterBands
232 // NodeKey key = new NodeKey(new NodeId("24"));
233 // InstanceIdentifier<Node> path =
234 // InstanceIdentifier.builder().node(Nodes.class).node(Node.class,
235 // key).toInstance();
238 .setMeterId(new org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId(10L));
241 AddMeterInput meterInputCommand = addMeterFromSAL.build();
242 MeterModInputBuilder outMeterModInput = MeterConvertor.toMeterModInput(meterInputCommand, (short) 0X4);
244 Assert.assertEquals(MeterModCommand.OFPMCADD, outMeterModInput.getCommand());
245 Assert.assertFalse(outMeterModInput.getFlags().isOFPMFBURST());
246 Assert.assertTrue(outMeterModInput.getFlags().isOFPMFPKTPS());
247 Assert.assertEquals(temp, outMeterModInput.getMeterId().getValue());
248 // BandInformation starts here:
250 List<Bands> bands = outMeterModInput.getBands();
251 for (Bands currentBand : bands) {
252 MeterBand meterBand = currentBand.getMeterBand();
253 if (meterBand instanceof MeterBandDropCase) {
256 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType.OFPMBTDROP,
257 ((MeterBandDropCase) meterBand).getMeterBandDrop().getType());
258 Assert.assertEquals((long) 20, (long) ((MeterBandDropCase) meterBand).getMeterBandDrop().getBurstSize());
259 Assert.assertEquals((long) 10, (long) ((MeterBandDropCase) meterBand).getMeterBandDrop().getRate());
262 if (meterBand instanceof MeterBandDscpRemarkCase) {
264 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType.OFPMBTDSCPREMARK,
265 ((MeterBandDscpRemarkCase) meterBand).getMeterBandDscpRemark().getType());
266 Assert.assertEquals((long) 11, (long) ((MeterBandDscpRemarkCase) meterBand).getMeterBandDscpRemark().getBurstSize());
267 Assert.assertEquals((long) 21, (long) ((MeterBandDscpRemarkCase) meterBand).getMeterBandDscpRemark().getRate());
268 Assert.assertEquals((short) 1, (short) ((MeterBandDscpRemarkCase) meterBand).getMeterBandDscpRemark().getPrecLevel());
271 if (meterBand instanceof MeterBandExperimenterCase) {
273 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType.OFPMBTEXPERIMENTER,
274 ((MeterBandExperimenterCase) meterBand).getMeterBandExperimenter().getType());
275 Assert.assertEquals((long) 12, (long) ((MeterBandExperimenterCase) meterBand).getMeterBandExperimenter().getBurstSize());
276 Assert.assertEquals((long) 22, (long) ((MeterBandExperimenterCase) meterBand).getMeterBandExperimenter().getRate());
277 Assert.assertEquals((long) 23, (long) ((MeterBandExperimenterCase) meterBand).getMeterBandExperimenter().getExperimenter());
285 public void testMeterModCommandConvertorBandDataisNULL() {
288 AddMeterInputBuilder addMeterFromSAL = new AddMeterInputBuilder();
292 // NodeKey key = new NodeKey(new NodeId("24"));
293 // InstanceIdentifier<Node> path =
294 // InstanceIdentifier.builder().node(Nodes.class).node(Node.class,
295 // key).toInstance();
298 .setMeterId(new org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId(10L));
299 MeterFlags flagV = new MeterFlags(true, true, true, true);
300 addMeterFromSAL.setFlags(flagV);
302 AddMeterInput meterInputCommand = addMeterFromSAL.build();
303 MeterModInputBuilder outMeterModInput = MeterConvertor.toMeterModInput(meterInputCommand, (short) 0X4);
305 Assert.assertEquals(MeterModCommand.OFPMCADD, outMeterModInput.getCommand());
306 Assert.assertTrue(outMeterModInput.getFlags().isOFPMFBURST());
307 Assert.assertEquals(temp, outMeterModInput.getMeterId().getValue());
311 public void testMeterModCommandConvertorNoValidBandData() {
314 MeterBandHeaderBuilder meterBandHeaderBuilder = new MeterBandHeaderBuilder();
315 MeterBandTypesBuilder meterBandTypesB = new MeterBandTypesBuilder();
317 MeterBandType bandFlag = new MeterBandType(true, false, false);
318 meterBandTypesB.setFlags(bandFlag);// _ofpmbtDrop
320 meterBandHeaderBuilder.setMeterBandTypes(meterBandTypesB.build());
322 MeterBandHeader meterBH = meterBandHeaderBuilder.build();
325 MeterBandHeaderBuilder meterBandHeaderBuilder1 = new MeterBandHeaderBuilder();
326 MeterBandTypesBuilder meterBandTypesB1 = new MeterBandTypesBuilder();
327 MeterBandType bandFlag1 = new MeterBandType(false, true, false);
329 meterBandTypesB1.setFlags(bandFlag1);
330 DscpRemarkBuilder dscp = new DscpRemarkBuilder();
331 dscp.setDscpRemarkBurstSize(11L);
332 dscp.setDscpRemarkRate(21L);
333 dscp.setPercLevel((short) 1);
334 DscpRemark dscpRemark = dscp.build();
335 meterBandHeaderBuilder1.setBandType(dscpRemark);
336 meterBandHeaderBuilder1.setMeterBandTypes(meterBandTypesB1.build());
338 MeterBandHeader meterBH1 = meterBandHeaderBuilder1.build();
342 MeterBandHeaderBuilder meterBandHeaderBuilder2 = new MeterBandHeaderBuilder();
343 MeterBandTypesBuilder meterBandTypesB2 = new MeterBandTypesBuilder();
346 ExperimenterBuilder exp = new ExperimenterBuilder();
347 exp.setExperimenterBurstSize(12L);
348 exp.setExperimenterRate(22L);
349 exp.setExperimenter(23L);
350 Experimenter experimenter = exp.build();
351 meterBandHeaderBuilder2.setBandType(experimenter);
352 meterBandHeaderBuilder2.setMeterBandTypes(meterBandTypesB2.build());
353 MeterBandHeader meterBH2 = meterBandHeaderBuilder2.build();
355 List<MeterBandHeader> meterBandList = new ArrayList<MeterBandHeader>();
356 meterBandList.add(0, meterBH);
357 meterBandList.add(1, meterBH1);
358 meterBandList.add(2, meterBH2);
360 // Constructing List of Bands
361 MeterBandHeadersBuilder meterBandHeadersBuilder = new MeterBandHeadersBuilder();
362 meterBandHeadersBuilder.setMeterBandHeader(meterBandList);
364 MeterBandHeaders meterBandHeaders = meterBandHeadersBuilder.build();
366 AddMeterInputBuilder addMeterFromSAL = new AddMeterInputBuilder();
368 addMeterFromSAL.setMeterBandHeaders(meterBandHeaders); // MeterBands
373 // NodeKey key = new NodeKey(new NodeId("24"));
374 // InstanceIdentifier<Node> path =
375 // InstanceIdentifier.builder().node(Nodes.class).node(Node.class,
376 // key).toInstance();
379 .setMeterId(new org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId(10L));
380 MeterFlags flagV = new MeterFlags(true, true, true, true);
381 addMeterFromSAL.setFlags(flagV);
383 AddMeterInput meterInputCommand = addMeterFromSAL.build();
384 MeterModInputBuilder outMeterModInput = MeterConvertor.toMeterModInput(meterInputCommand, (short) 0X4);
386 Assert.assertEquals(MeterModCommand.OFPMCADD, outMeterModInput.getCommand());
387 Assert.assertTrue(outMeterModInput.getFlags().isOFPMFBURST());
388 Assert.assertEquals(temp, outMeterModInput.getMeterId().getValue());
389 // BandInformation starts here:
391 List<Bands> bands = outMeterModInput.getBands();
392 for (Bands currentBand : bands) {
393 MeterBand meterBand = currentBand.getMeterBand();
394 if (meterBand instanceof MeterBandDropCase) {
397 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType.OFPMBTDROP,
398 ((MeterBandDropCase) meterBand).getMeterBandDrop().getType());
399 Assert.assertEquals((long) 20, (long) ((MeterBandDropCase) meterBand).getMeterBandDrop().getBurstSize());
400 Assert.assertEquals((long) 10, (long) ((MeterBandDropCase) meterBand).getMeterBandDrop().getRate());
403 if (meterBand instanceof MeterBandDscpRemarkCase) {
405 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType.OFPMBTDSCPREMARK,
406 ((MeterBandDscpRemarkCase) meterBand).getMeterBandDscpRemark().getType());
407 Assert.assertEquals((long) 11, (long) ((MeterBandDscpRemarkCase) meterBand).getMeterBandDscpRemark().getBurstSize());
408 Assert.assertEquals((long) 21, (long) ((MeterBandDscpRemarkCase) meterBand).getMeterBandDscpRemark().getRate());
409 Assert.assertEquals((short) 1, (short) ((MeterBandDscpRemarkCase) meterBand).getMeterBandDscpRemark().getPrecLevel());
412 if (meterBand instanceof MeterBandExperimenterCase) {
414 org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType.OFPMBTEXPERIMENTER,
415 ((MeterBandExperimenterCase) meterBand).getMeterBandExperimenter().getType());
416 Assert.assertEquals((long) 12, (long) ((MeterBandExperimenterCase) meterBand).getMeterBandExperimenter().getBurstSize());
417 Assert.assertEquals((long) 22, (long) ((MeterBandExperimenterCase) meterBand).getMeterBandExperimenter().getRate());
418 Assert.assertEquals((long) 23, (long) ((MeterBandExperimenterCase) meterBand).getMeterBandExperimenter().getExperimenter());