Update MRI projects for Aluminium
[openflowplugin.git] / openflowplugin / src / test / java / org / opendaylight / openflowplugin / openflow / md / core / sal / convertor / MeterConvertorTest.java
index 2f80002bc596b73a4f7bd807e3445328e022a562..f35904150be9abe85f98332e7ac3291aa250cf59 100644 (file)
@@ -1,23 +1,28 @@
+/*
+ * Copyright (c) 2014 Ericsson India Global Services Pvt Ltd. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
 package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
 
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
 import java.util.ArrayList;
 import java.util.List;
-
-import junit.framework.Assert;
-
-import org.junit.After;
+import java.util.Optional;
 import org.junit.Before;
 import org.junit.Test;
-
-
-
-import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.MeterConvertor;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionConvertorData;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.AddMeterInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.AddMeterInputBuilder;
-
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.BandId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.Meter;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterBandType;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterFlags.Flags;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.BandType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterFlags;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.Drop;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.DropBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.DscpRemark;
@@ -26,156 +31,443 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.ExperimenterBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.MeterBandHeaders;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.MeterBandHeadersBuilder;
-
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MeterModInput;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.MeterBand;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.MeterBandHeader;
-
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.MeterBandHeaderBuilder;
-
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.MeterBandHeaderKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.meter.band.header.MeterBandTypesBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev150225.ExperimenterIdMeterBand;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterModCommand;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MeterModInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.MeterBand;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDropCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDscpRemarkCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandExperimenterCase;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.mod.Bands;
+import org.opendaylight.yangtools.yang.common.Uint32;
+import org.opendaylight.yangtools.yang.common.Uint8;
 
+public class MeterConvertorTest {
+    private ConvertorManager convertorManager;
 
+    @Before
+    public void setUp() {
+        convertorManager = ConvertorManagerFactory.createDefaultManager();
+    }
 
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterModCommand;
+    @Test
+    public void testMeterModCommandConvertorwithAllParameters() {
+        final Uint32 burstSize = Uint32.valueOf(10L);
+        final Uint32  dropRate = Uint32.valueOf(20L);
 
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDrop;
+        // / DROP Band
+        MeterBandTypesBuilder meterBandTypesB = new MeterBandTypesBuilder();
 
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDscpRemark;
+        MeterBandType bandFlag = new MeterBandType(true, false, false);
+        meterBandTypesB.setFlags(bandFlag);// _ofpmbtDrop
+        DropBuilder drop = new DropBuilder();
+        drop.setDropBurstSize(burstSize);
+        drop.setDropRate(dropRate);
+        Drop drp = drop.build();
+        MeterBandHeaderBuilder meterBandHeaderBuilder = new MeterBandHeaderBuilder();
+        meterBandHeaderBuilder.setBandType(drp);
+        meterBandHeaderBuilder.setMeterBandTypes(meterBandTypesB.build());
+        meterBandHeaderBuilder.withKey(new MeterBandHeaderKey(new BandId(Uint32.ZERO)));
 
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandExperimenter;
+        final MeterBandHeader meterBH = meterBandHeaderBuilder.build();
 
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.mod.Bands;
+        // DSCP Mark
+        final Uint32 dscpRemarkBurstSize = Uint32.valueOf(11L);
+        final Uint32 dscpRemarkRate = Uint32.valueOf(21L);
+        final Uint8 dscpPercLevel = Uint8.valueOf(1);
 
+        MeterBandTypesBuilder meterBandTypesB1 = new MeterBandTypesBuilder();
+        MeterBandType bandFlag1 = new MeterBandType(false, true, false);
 
-public class MeterConvertorTest {
-       
-
-        
-@Test
-public void testMeterModCommandConvertorwithAllParameters()
-{
-
-       /// DROP Band 
-       MeterBandHeaderBuilder meterBandHeaderBuilder = new MeterBandHeaderBuilder();
-       MeterBandTypesBuilder meterBandTypesB = new MeterBandTypesBuilder();
-       
-       org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterBandType.Flags bandFlag = new org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterBandType.Flags(true, false, false);
-       meterBandTypesB.setFlags(bandFlag);//_ofpmbtDrop
-       DropBuilder drop = new DropBuilder();
-       drop.setBurstSize(10L);
-       drop.setRate(20L);
-       Drop drp = drop.build();
-       meterBandHeaderBuilder.setBandType(drp);
-       meterBandHeaderBuilder.setMeterBandTypes(meterBandTypesB.build());
-       
-       
-       
-       MeterBandHeader meterBH = meterBandHeaderBuilder.build();
-               
-       //DSCP Mark
-       MeterBandHeaderBuilder meterBandHeaderBuilder1 = new MeterBandHeaderBuilder();
-       MeterBandTypesBuilder meterBandTypesB1 = new MeterBandTypesBuilder();
-       org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterBandType.Flags bandFlag1 = new org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterBandType.Flags(false, true, false);
-       
-       meterBandTypesB1.setFlags(bandFlag1);
-       DscpRemarkBuilder dscp = new DscpRemarkBuilder();
-       dscp.setBurstSize(11L);
-       dscp.setRate(21L);
-       dscp.setPercLevel((short)1);
-       DscpRemark dscpRemark = dscp.build();   
-       meterBandHeaderBuilder1.setBandType(dscpRemark);
-       meterBandHeaderBuilder1.setMeterBandTypes(meterBandTypesB1.build());
-       
-       MeterBandHeader meterBH1 = meterBandHeaderBuilder1.build();
-       
-       //Experimental
-       
-               MeterBandHeaderBuilder meterBandHeaderBuilder2 = new MeterBandHeaderBuilder();
-               MeterBandTypesBuilder meterBandTypesB2 = new MeterBandTypesBuilder();
-               org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterBandType.Flags bandFlag2 = new org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterBandType.Flags(false,false, true);
-               meterBandTypesB2.setFlags(bandFlag2);
-               
-               ExperimenterBuilder exp = new ExperimenterBuilder();
-               exp.setBurstSize(12L);
-               exp.setRate(22L);
-               exp.setExperimenter(23L);
-               Experimenter experimenter = exp.build();
-               meterBandHeaderBuilder2.setBandType(experimenter);
-               meterBandHeaderBuilder2.setMeterBandTypes(meterBandTypesB2.build());
-               MeterBandHeader meterBH2 = meterBandHeaderBuilder2.build();
-               
-       
-       List<MeterBandHeader> meterBandList = new ArrayList<MeterBandHeader>();
-       meterBandList.add(0,meterBH);
-       meterBandList.add(1,meterBH1);
-       meterBandList.add(2,meterBH2);
-       
-       //Constructing List of Bands
-       MeterBandHeadersBuilder meterBandHeadersBuilder = new MeterBandHeadersBuilder();
-       meterBandHeadersBuilder.setMeterBandHeader(meterBandList);
-       
-       MeterBandHeaders meterBandHeaders =meterBandHeadersBuilder.build(); 
-       
-
-       AddMeterInputBuilder addMeterFromSAL = new AddMeterInputBuilder();
-
-       
-       addMeterFromSAL.setMeterBandHeaders(meterBandHeaders); //MeterBands added to the meter command.
-Long temp = 10L;
-       
-        //NodeKey key = new NodeKey(new NodeId("24"));
-     //InstanceIdentifier<Node> path = InstanceIdentifier.builder().node(Nodes.class).node(Node.class, key).toInstance();
-        
-       addMeterFromSAL.setMeterId(new org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId(10L));
-
-               
-               Flags flagV = new Flags(true, true, true,true);
-               addMeterFromSAL.setFlags(flagV);
-               
-       AddMeterInput meterInputCommand = addMeterFromSAL.build();
-       MeterModInput outMeterModInput = MeterConvertor.toMeterModInput(meterInputCommand);
-       
-       
-       
-       
-        Assert.assertEquals(MeterModCommand.OFPMCADD, outMeterModInput.getCommand());
-       Assert.assertTrue(outMeterModInput.getFlags().isOFPMFBURST()); 
-       Assert.assertEquals(temp,outMeterModInput.getMeterId().getValue());
-       //BandInformation starts here:
-       
-             List<Bands> bands =  outMeterModInput.getBands();
-                       for (Bands currentBand : bands) {
-                   MeterBand meterBand = currentBand.getMeterBand();
-                       if(meterBand instanceof MeterBandDrop){
-                               
-                                       Assert.assertEquals(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType.OFPMBTDROP, ((MeterBandDrop) meterBand).getType());
-                                       Assert.assertEquals((long)20,(long)((MeterBandDrop) meterBand).getBurstSize());
-                                       Assert.assertEquals((long)10, (long)((MeterBandDrop) meterBand).getRate());
-                       
-                       }                                       
-                       if(meterBand instanceof MeterBandDscpRemark)
-                       {
-                               Assert.assertEquals(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType.OFPMBTDSCPREMARK, ((MeterBandDscpRemark) meterBand).getType());
-                               Assert.assertEquals((long)11,(long)((MeterBandDscpRemark) meterBand).getBurstSize());
-                               Assert.assertEquals((long)21, (long)((MeterBandDscpRemark) meterBand).getRate());
-                               Assert.assertEquals((short)1, (short)((MeterBandDscpRemark) meterBand).getPrecLevel());
-                               
-                       }
-                       if(meterBand instanceof MeterBandExperimenter)
-                       {
-                               Assert.assertEquals(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandType.OFPMBTEXPERIMENTER, ((MeterBandExperimenter) meterBand).getType());
-                               Assert.assertEquals((long)12,(long)((MeterBandExperimenter) meterBand).getBurstSize());
-                               Assert.assertEquals((long)22, (long)((MeterBandExperimenter) meterBand).getRate());
-                               Assert.assertEquals((long)23, (long)((MeterBandExperimenter) meterBand).getExperimenter());
-
-                       }
-                   
-                   }    
-                       
-                       
-}
+        meterBandTypesB1.setFlags(bandFlag1);
+        DscpRemarkBuilder dscp = new DscpRemarkBuilder();
+        dscp.setDscpRemarkBurstSize(dscpRemarkBurstSize);
+        dscp.setDscpRemarkRate(dscpRemarkRate);
+        dscp.setPrecLevel(dscpPercLevel);
+        DscpRemark dscpRemark = dscp.build();
+
+        MeterBandHeaderBuilder meterBandHeaderBuilder1 = new MeterBandHeaderBuilder();
+        meterBandHeaderBuilder1.setBandType(dscpRemark);
+        meterBandHeaderBuilder1.setMeterBandTypes(meterBandTypesB1.build());
+        meterBandHeaderBuilder1.withKey(new MeterBandHeaderKey(new BandId(Uint32.ONE)));
+
+        final MeterBandHeader meterBH1 = meterBandHeaderBuilder1.build();
+
+        // Experimental
+        final Uint32 expBurstSize = Uint32.valueOf(12L);
+        final Uint32 expRate = Uint32.valueOf(22L);
+        final Uint32 expExperimenter = Uint32.valueOf(23L);
+
+        MeterBandTypesBuilder meterBandTypesB2 = new MeterBandTypesBuilder();
+        MeterBandType bandFlag2 = new MeterBandType(false, false, true);
+        meterBandTypesB2.setFlags(bandFlag2);
+
+        ExperimenterBuilder exp = new ExperimenterBuilder();
+        exp.setExperimenterBurstSize(expBurstSize);
+        exp.setExperimenterRate(expRate);
+        exp.setExperimenter(expExperimenter);
+        Experimenter experimenter = exp.build();
+
+        MeterBandHeaderBuilder meterBandHeaderBuilder2 = new MeterBandHeaderBuilder();
+        meterBandHeaderBuilder2.setBandType(experimenter);
+        meterBandHeaderBuilder2.setMeterBandTypes(meterBandTypesB2.build());
+        meterBandHeaderBuilder.withKey(new MeterBandHeaderKey(new BandId(Uint32.TWO)));
+        MeterBandHeader meterBH2 = meterBandHeaderBuilder2.build();
+
+        List<MeterBandHeader> meterBandList = new ArrayList<>();
+        meterBandList.add(0, meterBH);
+        meterBandList.add(1, meterBH1);
+        meterBandList.add(2, meterBH2);
+
+        // Constructing List of Bands
+        MeterBandHeadersBuilder meterBandHeadersBuilder = new MeterBandHeadersBuilder();
+        meterBandHeadersBuilder.setMeterBandHeader(meterBandList);
+
+        MeterBandHeaders meterBandHeaders = meterBandHeadersBuilder.build();
+
+        AddMeterInputBuilder addMeterFromSAL = new AddMeterInputBuilder();
+
+        addMeterFromSAL.setMeterBandHeaders(meterBandHeaders); // MeterBands
+
+        // NodeKey key = new NodeKey(new NodeId("24"));
+        // InstanceIdentifier<Node> path =
+        // InstanceIdentifier.builder().node(Nodes.class).node(Node.class,
+        // key).build();
+
+        addMeterFromSAL
+                .setMeterId(new org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId(10L));
+        MeterFlags flagV = new MeterFlags(true, true, true, true);
+        addMeterFromSAL.setFlags(flagV);
+
+        AddMeterInput meterInputCommand = addMeterFromSAL.build();
+        MeterModInputBuilder outMeterModInput = convert(meterInputCommand, new VersionConvertorData((short) 0X4));
+
+        assertEquals(MeterModCommand.OFPMCADD, outMeterModInput.getCommand());
+        assertTrue(outMeterModInput.getFlags().isOFPMFBURST());
+        assertEquals(Uint32.valueOf(10L), outMeterModInput.getMeterId().getValue());
+        // BandInformation starts here:
+
+        List<Bands> bands = outMeterModInput.getBands();
+        for (Bands currentBand : bands) {
+            MeterBand meterBand = currentBand.getMeterBand();
+            if (meterBand instanceof MeterBandDropCase) {
+                assertEquals(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731
+                    .MeterBandType.OFPMBTDROP, ((MeterBandDropCase) meterBand).getMeterBandDrop().getType());
+                assertEquals(burstSize, ((MeterBandDropCase) meterBand).getMeterBandDrop().getBurstSize());
+                assertEquals(dropRate, ((MeterBandDropCase) meterBand).getMeterBandDrop().getRate());
+
+            }
+            if (meterBand instanceof MeterBandDscpRemarkCase) {
+                assertEquals(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731
+                    .MeterBandType.OFPMBTDSCPREMARK,
+                    ((MeterBandDscpRemarkCase) meterBand).getMeterBandDscpRemark().getType());
+                assertEquals(dscpRemarkBurstSize,
+                        ((MeterBandDscpRemarkCase) meterBand).getMeterBandDscpRemark().getBurstSize());
+                assertEquals(dscpRemarkRate,
+                        ((MeterBandDscpRemarkCase) meterBand).getMeterBandDscpRemark().getRate());
+                assertEquals(dscpPercLevel,
+                        ((MeterBandDscpRemarkCase) meterBand).getMeterBandDscpRemark().getPrecLevel());
+
+            }
+            if (meterBand instanceof MeterBandExperimenterCase) {
+                assertEquals(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731
+                    .MeterBandType.OFPMBTEXPERIMENTER,
+                    ((MeterBandExperimenterCase) meterBand).getMeterBandExperimenter().getType());
+                assertEquals(expBurstSize,
+                        ((MeterBandExperimenterCase) meterBand).getMeterBandExperimenter().getBurstSize());
+                assertEquals(expRate,
+                        ((MeterBandExperimenterCase) meterBand).getMeterBandExperimenter().getRate());
+                ExperimenterIdMeterBand expBand = ((MeterBandExperimenterCase) meterBand).getMeterBandExperimenter()
+                        .augmentation(ExperimenterIdMeterBand.class);
+                assertEquals(expExperimenter, expBand.getExperimenter().getValue());
+            }
+        }
+    }
+
+    @Test
+    public void testMeterModCommandConvertorwithNoFlags() {
+        long burstSize = 10L;
+        long dropRate = 20L;
+        // / DROP Band
+        MeterBandTypesBuilder meterBandTypesB = new MeterBandTypesBuilder();
+
+        MeterBandType bandFlag = new MeterBandType(true, false, false);
+        meterBandTypesB.setFlags(bandFlag);// _ofpmbtDrop
+        DropBuilder drop = new DropBuilder();
+        drop.setDropBurstSize(burstSize);
+        drop.setDropRate(dropRate);
+        Drop drp = drop.build();
+
+        MeterBandHeaderBuilder meterBandHeaderBuilder = new MeterBandHeaderBuilder();
+        meterBandHeaderBuilder.setBandType(drp);
+        meterBandHeaderBuilder.setMeterBandTypes(meterBandTypesB.build());
+        meterBandHeaderBuilder.withKey(new MeterBandHeaderKey(new BandId(Uint32.ZERO)));
+
+        final MeterBandHeader meterBH = meterBandHeaderBuilder.build();
+
+        // DSCP Mark
+        final long dscpRemarkBurstSize = 11L;
+        final long dscpRemarkRate = 21L;
+        final short dscpPercLevel = 1;
+
+        MeterBandTypesBuilder meterBandTypesB1 = new MeterBandTypesBuilder();
+        MeterBandType bandFlag1 = new MeterBandType(false, true, false);
+
+        meterBandTypesB1.setFlags(bandFlag1);
+        DscpRemarkBuilder dscp = new DscpRemarkBuilder();
+
+        dscp.setDscpRemarkBurstSize(dscpRemarkBurstSize);
+        dscp.setDscpRemarkRate(dscpRemarkRate);
+        dscp.setPrecLevel(dscpPercLevel);
+        DscpRemark dscpRemark = dscp.build();
+
+        MeterBandHeaderBuilder meterBandHeaderBuilder1 = new MeterBandHeaderBuilder();
+        meterBandHeaderBuilder1.setBandType(dscpRemark);
+        meterBandHeaderBuilder1.setMeterBandTypes(meterBandTypesB1.build());
+        meterBandHeaderBuilder1.withKey(new MeterBandHeaderKey(new BandId(Uint32.ONE)));
+
+        final MeterBandHeader meterBH1 = meterBandHeaderBuilder1.build();
+
+        // Experimental
+        final long expBurstSize = 12L;
+        final long expRate = 22L;
+        final long expExperimenter = 23L;
+
+        MeterBandTypesBuilder meterBandTypesB2 = new MeterBandTypesBuilder();
+        MeterBandType bandFlag2 = new MeterBandType(false, false, true);
+        meterBandTypesB2.setFlags(bandFlag2);
+
+        ExperimenterBuilder exp = new ExperimenterBuilder();
+
+        exp.setExperimenterBurstSize(expBurstSize);
+        exp.setExperimenterRate(expRate);
+        exp.setExperimenter(expExperimenter);
+        Experimenter experimenter = exp.build();
+
+        MeterBandHeaderBuilder meterBandHeaderBuilder2 = new MeterBandHeaderBuilder();
+        meterBandHeaderBuilder2.setBandType(experimenter);
+        meterBandHeaderBuilder2.setMeterBandTypes(meterBandTypesB2.build());
+        meterBandHeaderBuilder2.withKey(new MeterBandHeaderKey(new BandId(Uint32.TWO)));
+        MeterBandHeader meterBH2 = meterBandHeaderBuilder2.build();
+
+        List<MeterBandHeader> meterBandList = new ArrayList<>();
+        meterBandList.add(0, meterBH);
+        meterBandList.add(1, meterBH1);
+        meterBandList.add(2, meterBH2);
+
+        // Constructing List of Bands
+        MeterBandHeadersBuilder meterBandHeadersBuilder = new MeterBandHeadersBuilder();
+        meterBandHeadersBuilder.setMeterBandHeader(meterBandList);
+
+        MeterBandHeaders meterBandHeaders = meterBandHeadersBuilder.build();
+
+        AddMeterInputBuilder addMeterFromSAL = new AddMeterInputBuilder();
+
+        addMeterFromSAL.setMeterBandHeaders(meterBandHeaders); // MeterBands
+
+        // NodeKey key = new NodeKey(new NodeId("24"));
+        // InstanceIdentifier<Node> path =
+        // InstanceIdentifier.builder().node(Nodes.class).node(Node.class,
+        // key).build();
+
+        addMeterFromSAL
+                .setMeterId(new org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId(10L));
+
+
+        AddMeterInput meterInputCommand = addMeterFromSAL.build();
+        MeterModInputBuilder outMeterModInput = convert(meterInputCommand, new VersionConvertorData((short) 0X4));
+
+        assertEquals(MeterModCommand.OFPMCADD, outMeterModInput.getCommand());
+        assertFalse(outMeterModInput.getFlags().isOFPMFBURST());
+        assertTrue(outMeterModInput.getFlags().isOFPMFPKTPS());
+        assertEquals(Uint32.valueOf(10L), outMeterModInput.getMeterId().getValue());
+        // BandInformation starts here:
+
+        List<Bands> bands = outMeterModInput.getBands();
+        for (Bands currentBand : bands) {
+            MeterBand meterBand = currentBand.getMeterBand();
+            if (meterBand instanceof MeterBandDropCase) {
+                assertEquals(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731
+                    .MeterBandType.OFPMBTDROP, ((MeterBandDropCase) meterBand).getMeterBandDrop().getType());
+                assertEquals(burstSize, ((MeterBandDropCase) meterBand).getMeterBandDrop().getBurstSize().toJava());
+                assertEquals(dropRate, ((MeterBandDropCase) meterBand).getMeterBandDrop().getRate().toJava());
+
+            }
+            if (meterBand instanceof MeterBandDscpRemarkCase) {
+                assertEquals(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731
+                    .MeterBandType.OFPMBTDSCPREMARK,
+                    ((MeterBandDscpRemarkCase) meterBand).getMeterBandDscpRemark().getType());
+                assertEquals(dscpRemarkBurstSize,
+                        ((MeterBandDscpRemarkCase) meterBand).getMeterBandDscpRemark().getBurstSize().toJava());
+                assertEquals(dscpRemarkRate,
+                        ((MeterBandDscpRemarkCase) meterBand).getMeterBandDscpRemark().getRate().toJava());
+                assertEquals(dscpPercLevel,
+                        ((MeterBandDscpRemarkCase) meterBand).getMeterBandDscpRemark().getPrecLevel().toJava());
+
+            }
+            if (meterBand instanceof MeterBandExperimenterCase) {
+                assertEquals(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731
+                    .MeterBandType.OFPMBTEXPERIMENTER,
+                     ((MeterBandExperimenterCase) meterBand).getMeterBandExperimenter().getType());
+                assertEquals(expBurstSize,
+                        ((MeterBandExperimenterCase) meterBand).getMeterBandExperimenter().getBurstSize().toJava());
+                assertEquals(expRate,
+                        ((MeterBandExperimenterCase) meterBand).getMeterBandExperimenter().getRate().toJava());
+                ExperimenterIdMeterBand expBand = ((MeterBandExperimenterCase) meterBand).getMeterBandExperimenter()
+                        .augmentation(ExperimenterIdMeterBand.class);
+                assertEquals(expExperimenter, expBand.getExperimenter().getValue().toJava());
+            }
+        }
+    }
+
+    @Test
+    public void testMeterModCommandConvertorBandDataisNULL() {
+        AddMeterInputBuilder addMeterFromSAL = new AddMeterInputBuilder();
+
+        // NodeKey key = new NodeKey(new NodeId("24"));
+        // InstanceIdentifier<Node> path =
+        // InstanceIdentifier.builder().node(Nodes.class).node(Node.class,
+        // key).build();
+
+        addMeterFromSAL
+                .setMeterId(new org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId(10L));
+        MeterFlags flagV = new MeterFlags(true, true, true, true);
+        addMeterFromSAL.setFlags(flagV);
+
+        AddMeterInput meterInputCommand = addMeterFromSAL.build();
+        MeterModInputBuilder outMeterModInput = convert(meterInputCommand, new VersionConvertorData((short) 0X4));
+
+        assertEquals(MeterModCommand.OFPMCADD, outMeterModInput.getCommand());
+        assertTrue(outMeterModInput.getFlags().isOFPMFBURST());
+        assertEquals(Uint32.valueOf(10L), outMeterModInput.getMeterId().getValue());
+    }
+
+    @Test
+    public void testMeterModCommandConvertorNoValidBandData() {
+
+        // / DROP Band
+        MeterBandHeaderBuilder meterBandHeaderBuilder = new MeterBandHeaderBuilder();
+        MeterBandTypesBuilder meterBandTypesB = new MeterBandTypesBuilder();
+
+        MeterBandType bandFlag = new MeterBandType(true, false, false);
+        meterBandTypesB.setFlags(bandFlag);// _ofpmbtDrop
+
+        meterBandHeaderBuilder.setMeterBandTypes(meterBandTypesB.build());
+        meterBandHeaderBuilder.withKey(new MeterBandHeaderKey(new BandId(Uint32.ZERO)));
+
+        final MeterBandHeader meterBH = meterBandHeaderBuilder.build();
+
+        // DSCP Mark
+        MeterBandTypesBuilder meterBandTypesB1 = new MeterBandTypesBuilder();
+        MeterBandType bandFlag1 = new MeterBandType(false, true, false);
+
+        meterBandTypesB1.setFlags(bandFlag1);
+        DscpRemarkBuilder dscp = new DscpRemarkBuilder();
+        dscp.setDscpRemarkBurstSize(11L);
+        dscp.setDscpRemarkRate(21L);
+        dscp.setPrecLevel((short) 1);
+        DscpRemark dscpRemark = dscp.build();
+
+        MeterBandHeaderBuilder meterBandHeaderBuilder1 = new MeterBandHeaderBuilder();
+        meterBandHeaderBuilder1.setBandType(dscpRemark);
+        meterBandHeaderBuilder1.setMeterBandTypes(meterBandTypesB1.build());
+        meterBandHeaderBuilder1.withKey(new MeterBandHeaderKey(new BandId(Uint32.ONE)));
+
+        final MeterBandHeader meterBH1 = meterBandHeaderBuilder1.build();
+
+        // Experimental
+
+        ExperimenterBuilder exp = new ExperimenterBuilder();
+        exp.setExperimenterBurstSize(12L);
+        exp.setExperimenterRate(22L);
+        exp.setExperimenter(23L);
+        Experimenter experimenter = exp.build();
+
+        MeterBandHeaderBuilder meterBandHeaderBuilder2 = new MeterBandHeaderBuilder();
+        meterBandHeaderBuilder2.setBandType(experimenter);
+
+        MeterBandTypesBuilder meterBandTypesB2 = new MeterBandTypesBuilder();
+        meterBandHeaderBuilder2.setMeterBandTypes(meterBandTypesB2.build());
+        meterBandHeaderBuilder2.withKey(new MeterBandHeaderKey(new BandId(Uint32.TWO)));
+        MeterBandHeader meterBH2 = meterBandHeaderBuilder2.build();
+
+        List<MeterBandHeader> meterBandList = new ArrayList<>();
+        meterBandList.add(0, meterBH);
+        meterBandList.add(1, meterBH1);
+        meterBandList.add(2, meterBH2);
+
+        // Constructing List of Bands
+        MeterBandHeadersBuilder meterBandHeadersBuilder = new MeterBandHeadersBuilder();
+        meterBandHeadersBuilder.setMeterBandHeader(meterBandList);
+
+        MeterBandHeaders meterBandHeaders = meterBandHeadersBuilder.build();
+
+        AddMeterInputBuilder addMeterFromSAL = new AddMeterInputBuilder();
+
+        addMeterFromSAL.setMeterBandHeaders(meterBandHeaders); // MeterBands
+
+        // NodeKey key = new NodeKey(new NodeId("24"));
+        // InstanceIdentifier<Node> path =
+        // InstanceIdentifier.builder().node(Nodes.class).node(Node.class,
+        // key).build();
+
+        addMeterFromSAL
+                .setMeterId(new org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId(10L));
+        MeterFlags flagV = new MeterFlags(true, true, true, true);
+        addMeterFromSAL.setFlags(flagV);
+
+        AddMeterInput meterInputCommand = addMeterFromSAL.build();
+        MeterModInputBuilder outMeterModInput = convert(meterInputCommand, new VersionConvertorData((short) 0X4));
+
+        assertEquals(MeterModCommand.OFPMCADD, outMeterModInput.getCommand());
+        assertTrue(outMeterModInput.getFlags().isOFPMFBURST());
+        assertEquals(Uint32.valueOf(10L), outMeterModInput.getMeterId().getValue());
+        // BandInformation starts here:
+
+        List<Bands> bands = outMeterModInput.getBands();
+        for (Bands currentBand : bands) {
+            MeterBand meterBand = currentBand.getMeterBand();
+            if (meterBand instanceof MeterBandDropCase) {
+
+                assertEquals(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731
+                    .MeterBandType.OFPMBTDROP, ((MeterBandDropCase) meterBand).getMeterBandDrop().getType());
+                assertEquals(20, ((MeterBandDropCase) meterBand).getMeterBandDrop().getBurstSize());
+                assertEquals(10, ((MeterBandDropCase) meterBand).getMeterBandDrop().getRate());
+
+            }
+            if (meterBand instanceof MeterBandDscpRemarkCase) {
+                assertEquals(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731
+                        .MeterBandType.OFPMBTDSCPREMARK,
+                        ((MeterBandDscpRemarkCase) meterBand).getMeterBandDscpRemark().getType());
+                assertEquals(11,
+                        ((MeterBandDscpRemarkCase) meterBand).getMeterBandDscpRemark().getBurstSize().toJava());
+                assertEquals(21,
+                        ((MeterBandDscpRemarkCase) meterBand).getMeterBandDscpRemark().getRate().toJava());
+                assertEquals((short) 1,
+                        ((MeterBandDscpRemarkCase) meterBand).getMeterBandDscpRemark().getPrecLevel().toJava());
 
+            }
+            if (meterBand instanceof MeterBandExperimenterCase) {
+                assertEquals(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731
+                        .MeterBandType.OFPMBTEXPERIMENTER,
+                        ((MeterBandExperimenterCase) meterBand).getMeterBandExperimenter().getType());
+                assertEquals(12,
+                        ((MeterBandExperimenterCase) meterBand).getMeterBandExperimenter().getBurstSize());
+                assertEquals(22,
+                        ((MeterBandExperimenterCase) meterBand).getMeterBandExperimenter().getRate());
+                ExperimenterIdMeterBand expBand = ((MeterBandExperimenterCase) meterBand).getMeterBandExperimenter()
+                        .augmentation(ExperimenterIdMeterBand.class);
+                assertEquals(23, expBand.getExperimenter().getValue());
+            }
+        }
+    }
 
-       
+    private MeterModInputBuilder convert(final Meter source, final VersionConvertorData data) {
+        Optional<MeterModInputBuilder> outMeterModInputOptional = convertorManager.convert(source, data);
+        return outMeterModInputOptional.orElse(MeterConvertor.defaultResult(data.getVersion()));
+    }
 }