MeterConvertor:Not NULL Check and logging added when Flag and band data are null 53/3553/1
authorusha <usha.m.s@ericsson.com>
Sun, 8 Dec 2013 11:44:22 +0000 (17:14 +0530)
committerusha <usha.m.s@ericsson.com>
Sun, 8 Dec 2013 11:44:22 +0000 (17:14 +0530)
Signed-off-by: usha <usha.m.s@ericsson.com>
openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/MeterConvertor.java
openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/MeterConvertorTest.java

index 98abf6c1db3f8f698908a272c5f7e57ed1b0fadf..d770d9a12b822bab9ff86a00cd927245d33d87e8 100644 (file)
@@ -27,10 +27,12 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandExperimenterBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.mod.Bands;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.mod.BandsBuilder;
-
-//import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.meter.band.headers.MeterBandHeaderBuilder;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public final class MeterConvertor {
+    private static final Logger logger = LoggerFactory.getLogger(MeterConvertor.class);
+    private static final String PREFIX_SEPARATOR = "/";
 
     private MeterConvertor() {
 
@@ -52,16 +54,34 @@ public final class MeterConvertor {
         MeterFlags flags = null;
         if (source instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.AddMeterInput)
             meterModInputBuilder.setCommand(MeterModCommand.OFPMCADD);
-        if (source instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.RemoveMeterInput)
+        else if (source instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.RemoveMeterInput)
             meterModInputBuilder.setCommand(MeterModCommand.OFPMCDELETE);
-        if (source instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.UpdateMeterInput)
+        else if (source instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.UpdateMeterInput)
             meterModInputBuilder.setCommand(MeterModCommand.OFPMCMODIFY);
 
         meterModInputBuilder.setMeterId(new MeterId(source.getMeterId().getValue()));
 
-        meterModInputBuilder.setFlags(flags = new MeterFlags(source.getFlags().isMeterBurst(), source.getFlags()
-                .isMeterKbps(), source.getFlags().isMeterPktps(), source.getFlags().isMeterStats()));
-        getBandsFromSAL(source.getMeterBandHeaders(), bands);
+        if (source.getFlags() != null) {
+            meterModInputBuilder.setFlags(flags = new MeterFlags(source.getFlags().isMeterBurst(), source.getFlags()
+                    .isMeterKbps(), source.getFlags().isMeterPktps(), source.getFlags().isMeterStats()));
+        } else {
+
+            /*
+             * As per 0F1.3.1,The rate field indicates the rate value above
+             * which the corresponding band may apply to packets (see 5.7.1).
+             * The rate value is in kilobit per seconds, unless the flags eld
+             * includes OFPMF_PKTPS, in which case the rate is in packets per
+             * seconds.
+             */
+
+            meterModInputBuilder.setFlags(flags = new MeterFlags(false, false, true, false));
+        }
+        if (source.getMeterBandHeaders() != null) {
+            getBandsFromSAL(source.getMeterBandHeaders(), bands);
+        } else {
+            logger.error("For this meter Id" + source.getMeterId().getValue() + ",no associated band data found!");
+        }
+
         meterModInputBuilder.setBands(bands);
         meterModInputBuilder.setVersion(version);
         return meterModInputBuilder.build();
@@ -78,45 +98,67 @@ public final class MeterConvertor {
             meterBandHeader = bandHeadersIterator.next();
             MeterBand meterBandItem = null;
             // The band types :drop,DSCP_Remark or experimenter.
-
-            if (meterBandHeader.getMeterBandTypes().getFlags().isOfpmbtDrop()) {
-
-                MeterBandDropBuilder meterBandDropBuilder = new MeterBandDropBuilder();
-                meterBandDropBuilder.setType(MeterBandType.OFPMBTDROP);
-
-                Drop drop = (Drop) meterBandHeader.getBandType();
-
-                meterBandDropBuilder.setBurstSize(drop.getRate());
-                meterBandDropBuilder.setRate(drop.getBurstSize());
-                meterBandItem = meterBandDropBuilder.build();
-
-            } else if (meterBandHeader.getMeterBandTypes().getFlags().isOfpmbtDscpRemark()) {
-                MeterBandDscpRemarkBuilder meterBandDscpRemarkBuilder = new MeterBandDscpRemarkBuilder();
-                meterBandDscpRemarkBuilder.setType(MeterBandType.OFPMBTDSCPREMARK);
-
-                DscpRemark dscpRemark = (DscpRemark) meterBandHeader.getBandType();
-
-                meterBandDscpRemarkBuilder.setBurstSize(dscpRemark.getBurstSize());
-                meterBandDscpRemarkBuilder.setRate(dscpRemark.getRate());
-                meterBandDscpRemarkBuilder.setPrecLevel(dscpRemark.getPercLevel());
-                meterBandItem = meterBandDscpRemarkBuilder.build();
-
-            } else if (meterBandHeader.getMeterBandTypes().getFlags().isOfpmbtExperimenter()) {
-                MeterBandExperimenterBuilder meterBandExperimenterBuilder = new MeterBandExperimenterBuilder();
-                meterBandExperimenterBuilder.setType(MeterBandType.OFPMBTEXPERIMENTER);
-                Experimenter experimenter = (Experimenter) meterBandHeader.getBandType();
-                meterBandExperimenterBuilder.setBurstSize(experimenter.getBurstSize());
-                meterBandExperimenterBuilder.setRate(experimenter.getRate());
-                meterBandExperimenterBuilder.setExperimenter(experimenter.getExperimenter());
-                meterBandItem = meterBandExperimenterBuilder.build();
-
+            if (null != meterBandHeader.getMeterBandTypes() && null != meterBandHeader.getMeterBandTypes().getFlags()) {
+
+                if (meterBandHeader.getMeterBandTypes().getFlags().isOfpmbtDrop()) {
+                    if (meterBandHeader.getBandType() != null) {
+                        MeterBandDropBuilder meterBandDropBuilder = new MeterBandDropBuilder();
+                        meterBandDropBuilder.setType(MeterBandType.OFPMBTDROP);
+
+                        Drop drop = (Drop) meterBandHeader.getBandType();
+
+                        meterBandDropBuilder.setBurstSize(drop.getRate());
+                        meterBandDropBuilder.setRate(drop.getBurstSize());
+                        meterBandItem = meterBandDropBuilder.build();
+                        bandsB = new BandsBuilder();
+                        bandsB.setMeterBand(meterBandItem).build();
+
+                        bands.add(bandsB.build()); // Bands list
+
+                    } else {
+                        logger.error("BandType: " + MeterBandType.OFPMBTDROP + "No Band Data found");
+                    }
+                } else if (meterBandHeader.getMeterBandTypes().getFlags().isOfpmbtDscpRemark()) {
+                    if (meterBandHeader.getBandType() != null) {
+                        MeterBandDscpRemarkBuilder meterBandDscpRemarkBuilder = new MeterBandDscpRemarkBuilder();
+                        meterBandDscpRemarkBuilder.setType(MeterBandType.OFPMBTDSCPREMARK);
+
+                        DscpRemark dscpRemark = (DscpRemark) meterBandHeader.getBandType();
+
+                        meterBandDscpRemarkBuilder.setBurstSize(dscpRemark.getBurstSize());
+                        meterBandDscpRemarkBuilder.setRate(dscpRemark.getRate());
+                        meterBandDscpRemarkBuilder.setPrecLevel(dscpRemark.getPercLevel());
+                        meterBandItem = meterBandDscpRemarkBuilder.build();
+                        bandsB = new BandsBuilder();
+                        bandsB.setMeterBand(meterBandItem).build();
+
+                        bands.add(bandsB.build()); // Bands list
+
+                    } else {
+                        logger.error("BandType: " + MeterBandType.OFPMBTDSCPREMARK + "No Band Data found");
+                    }
+                } else if (meterBandHeader.getMeterBandTypes().getFlags().isOfpmbtExperimenter()) {
+                    if (meterBandHeader.getBandType() != null) {
+                        MeterBandExperimenterBuilder meterBandExperimenterBuilder = new MeterBandExperimenterBuilder();
+                        meterBandExperimenterBuilder.setType(MeterBandType.OFPMBTEXPERIMENTER);
+                        Experimenter experimenter = (Experimenter) meterBandHeader.getBandType();
+                        meterBandExperimenterBuilder.setBurstSize(experimenter.getBurstSize());
+                        meterBandExperimenterBuilder.setRate(experimenter.getRate());
+                        meterBandExperimenterBuilder.setExperimenter(experimenter.getExperimenter());
+                        meterBandItem = meterBandExperimenterBuilder.build();
+                        bandsB = new BandsBuilder();
+                        bandsB.setMeterBand(meterBandItem).build();
+
+                        bands.add(bandsB.build()); // Bands list
+
+                    } else {
+                        logger.error("BandType: " + MeterBandType.OFPMBTEXPERIMENTER + "No Band Data found");
+                    }
+                }
+
+            } else {
+                logger.error("Invalid meter band data found.");
             }
-
-            bandsB = new BandsBuilder();
-            bandsB.setMeterBand(meterBandItem).build();
-
-            bands.add(bandsB.build()); // Bands list
-
         }
 
     }
index 11797a23d448331d6d90f4f1c04542283008e090..502d3dc175b5c90507016ec683269382b184a763 100644 (file)
@@ -72,6 +72,267 @@ public class MeterConvertorTest {
         MeterBandType bandFlag2 = new MeterBandType(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));
+        MeterFlags flagV = new MeterFlags(true, true, true, true);
+        addMeterFromSAL.setFlags(flagV);
+
+        AddMeterInput meterInputCommand = addMeterFromSAL.build();
+        MeterModInput outMeterModInput = MeterConvertor.toMeterModInput(meterInputCommand, (short) 0X4);
+
+        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());
+
+            }
+
+        }
+
+    }
+    @Test
+    public void testMeterModCommandConvertorwithNoFlags() {
+
+        // / DROP Band
+        MeterBandHeaderBuilder meterBandHeaderBuilder = new MeterBandHeaderBuilder();
+        MeterBandTypesBuilder meterBandTypesB = new MeterBandTypesBuilder();
+
+        MeterBandType bandFlag = new MeterBandType(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();
+        MeterBandType bandFlag1 = new MeterBandType(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();
+        MeterBandType bandFlag2 = new MeterBandType(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));
+
+
+        AddMeterInput meterInputCommand = addMeterFromSAL.build();
+        MeterModInput outMeterModInput = MeterConvertor.toMeterModInput(meterInputCommand, (short) 0X4);
+
+        Assert.assertEquals(MeterModCommand.OFPMCADD, outMeterModInput.getCommand());
+        Assert.assertFalse(outMeterModInput.getFlags().isOFPMFBURST());
+        Assert.assertTrue(outMeterModInput.getFlags().isOFPMFPKTPS());
+        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());
+
+            }
+
+        }
+
+    }
+    @Test
+    public void testMeterModCommandConvertorBandDataisNULL() {
+
+
+        AddMeterInputBuilder addMeterFromSAL = new AddMeterInputBuilder();
+
+        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));
+        MeterFlags flagV = new MeterFlags(true, true, true, true);
+        addMeterFromSAL.setFlags(flagV);
+
+        AddMeterInput meterInputCommand = addMeterFromSAL.build();
+        MeterModInput outMeterModInput = MeterConvertor.toMeterModInput(meterInputCommand, (short) 0X4);
+
+        Assert.assertEquals(MeterModCommand.OFPMCADD, outMeterModInput.getCommand());
+        Assert.assertTrue(outMeterModInput.getFlags().isOFPMFBURST());
+        Assert.assertEquals(temp, 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());
+
+        MeterBandHeader meterBH = meterBandHeaderBuilder.build();
+
+        // DSCP Mark
+        MeterBandHeaderBuilder meterBandHeaderBuilder1 = new MeterBandHeaderBuilder();
+        MeterBandTypesBuilder meterBandTypesB1 = new MeterBandTypesBuilder();
+        MeterBandType bandFlag1 = new MeterBandType(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();
+
+
         ExperimenterBuilder exp = new ExperimenterBuilder();
         exp.setBurstSize(12L);
         exp.setRate(22L);
@@ -152,4 +413,4 @@ public class MeterConvertorTest {
 
     }
 
-}
+}
\ No newline at end of file