From c09e947148d20d974168e0e3a46af82e9ed25f41 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Mon, 27 Jun 2016 15:49:27 +0200 Subject: [PATCH] Bug 5540 - MeterStatsResponseConvertor, MeterConfigStatsResponseConvertor - Reworked MeterStatsResponseConvertor to use new ConvertorManager desing - Moved part of logic of MeterStatsResponseConvertor to new MeterConfigStatsResponseConvertor - Updated tests and usage of MeterStatsResponseConvertor and MeterConfigStatsResponseConvertor accordingly Change-Id: I5555fae748fd8d3c2e0baa8d2b56ee450fe4697b Signed-off-by: Tomas Slusny --- ...SinglePurposeMultipartReplyTranslator.java | 20 +- .../services/AllMeterConfigStatsService.java | 12 +- ...erStatisticsToNotificationTransformer.java | 11 +- .../direct/MeterDirectStatisticsService.java | 11 +- .../core/sal/convertor/ConvertorManager.java | 2 + .../MeterConfigStatsResponseConvertor.java | 149 ++++++++++++ .../MeterStatsResponseConvertor.java | 218 ++++-------------- .../translator/MultipartReplyTranslator.java | 15 +- ...MeterConfigStatsResponseConvertorTest.java | 102 ++++++++ .../MeterStatsResponseConvertorTest.java | 70 +----- 10 files changed, 356 insertions(+), 254 deletions(-) create mode 100644 openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/MeterConfigStatsResponseConvertor.java create mode 100644 openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/MeterConfigStatsResponseConvertorTest.java diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/SinglePurposeMultipartReplyTranslator.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/SinglePurposeMultipartReplyTranslator.java index 732bc4f465..a4d5ed1cea 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/SinglePurposeMultipartReplyTranslator.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/SinglePurposeMultipartReplyTranslator.java @@ -9,11 +9,13 @@ package org.opendaylight.openflowplugin.impl.statistics; import java.math.BigInteger; import java.util.ArrayList; +import java.util.Collections; import java.util.List; +import java.util.Optional; import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion; +import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManager; import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.FlowStatsResponseConvertor; import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.GroupStatsResponseConvertor; -import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.MeterStatsResponseConvertor; import org.opendaylight.openflowplugin.openflow.md.util.InventoryDataServiceUtil; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Counter32; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Counter64; @@ -49,6 +51,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.Meter import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterKbps; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterPktps; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterStats; +import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.config.stats.reply.MeterConfigStats; import org.opendaylight.yang.gen.v1.urn.opendaylight.model.statistics.types.rev130925.duration.DurationBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.model.statistics.types.rev130925.node.connector.statistics.BytesBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.model.statistics.types.rev130925.node.connector.statistics.PacketsBuilder; @@ -107,18 +110,16 @@ public class SinglePurposeMultipartReplyTranslator { private static FlowStatsResponseConvertor flowStatsConvertor = new FlowStatsResponseConvertor(); private static GroupStatsResponseConvertor groupStatsConvertor = new GroupStatsResponseConvertor(); - private static MeterStatsResponseConvertor meterStatsConvertor = new MeterStatsResponseConvertor(); public List translate(final BigInteger datapathId, final short version, final OfHeader msg) { List listDataObject = new ArrayList<>(); - OpenflowVersion ofVersion = OpenflowVersion.get(version); - if (msg instanceof MultipartReplyMessage) { MultipartReplyMessage mpReply = (MultipartReplyMessage) msg; - NodeId node = SinglePurposeMultipartReplyTranslator.nodeIdFromDatapathId(datapathId); + OpenflowVersion ofVersion = OpenflowVersion.get(version); + NodeId node = nodeIdFromDatapathId(datapathId); translateFlow(listDataObject, mpReply, node, ofVersion, datapathId); translateAggregate(listDataObject, mpReply, node); @@ -345,7 +346,10 @@ public class SinglePurposeMultipartReplyTranslator { MultipartReplyMeterCase caseBody = (MultipartReplyMeterCase) mpReply.getMultipartReplyBody(); MultipartReplyMeter replyBody = caseBody.getMultipartReplyMeter(); - message.setMeterStats(meterStatsConvertor.toSALMeterStatsList(replyBody.getMeterStats())); + final Optional> meterStatsList = + ConvertorManager.getInstance().convert(replyBody.getMeterStats()); + + message.setMeterStats(meterStatsList.orElse(Collections.emptyList())); listDataObject.add(message.build()); } @@ -364,7 +368,9 @@ public class SinglePurposeMultipartReplyTranslator { MultipartReplyMeterConfigCase caseBody = (MultipartReplyMeterConfigCase) mpReply.getMultipartReplyBody(); MultipartReplyMeterConfig replyBody = caseBody.getMultipartReplyMeterConfig(); - message.setMeterConfigStats(meterStatsConvertor.toSALMeterConfigList(replyBody.getMeterConfig())); + final Optional> meterConfigStatsList = ConvertorManager.getInstance().convert(replyBody.getMeterConfig()); + + message.setMeterConfigStats(meterConfigStatsList.orElse(Collections.emptyList())); listDataObject.add(message.build()); } diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/AllMeterConfigStatsService.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/AllMeterConfigStatsService.java index 1fc57caca0..4055b69f04 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/AllMeterConfigStatsService.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/AllMeterConfigStatsService.java @@ -9,6 +9,7 @@ package org.opendaylight.openflowplugin.impl.statistics.services; import java.util.ArrayList; import java.util.List; +import java.util.Optional; import java.util.concurrent.atomic.AtomicLong; import org.opendaylight.openflowjava.protocol.api.util.BinContent; import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext; @@ -16,7 +17,7 @@ import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack; import org.opendaylight.openflowplugin.api.openflow.device.Xid; import org.opendaylight.openflowplugin.impl.services.RequestInputUtils; import org.opendaylight.openflowplugin.impl.statistics.services.compatibility.AbstractCompatibleStatService; -import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.MeterStatsResponseConvertor; +import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManager; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev150304.TransactionId; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.GetAllMeterConfigStatisticsInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.GetAllMeterConfigStatisticsOutput; @@ -40,7 +41,6 @@ final class AllMeterConfigStatsService extends AbstractCompatibleStatService { private static final MultipartRequestMeterConfigCase METER_CONFIG_CASE; - private static MeterStatsResponseConvertor meterStatsConvertor = new MeterStatsResponseConvertor(); static { @@ -81,10 +81,14 @@ final class AllMeterConfigStatsService for (MultipartReply mpReply : result) { MultipartReplyMeterConfigCase caseBody = (MultipartReplyMeterConfigCase) mpReply.getMultipartReplyBody(); MultipartReplyMeterConfig replyBody = caseBody.getMultipartReplyMeterConfig(); - message.getMeterConfigStats().addAll(meterStatsConvertor.toSALMeterConfigList(replyBody.getMeterConfig())); + final Optional> meterConfigStatsList = ConvertorManager.getInstance().convert(replyBody.getMeterConfig()); + + if (meterConfigStatsList.isPresent()) { + message.getMeterConfigStats().addAll(meterConfigStatsList.get()); + } } return message.build(); } -} +} \ No newline at end of file diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/compatibility/MeterStatisticsToNotificationTransformer.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/compatibility/MeterStatisticsToNotificationTransformer.java index f4f09234fb..8f15ba34cc 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/compatibility/MeterStatisticsToNotificationTransformer.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/compatibility/MeterStatisticsToNotificationTransformer.java @@ -10,9 +10,10 @@ package org.opendaylight.openflowplugin.impl.statistics.services.compatibility; import java.util.ArrayList; import java.util.List; +import java.util.Optional; import org.opendaylight.openflowplugin.api.openflow.device.DeviceInfo; import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion; -import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.MeterStatsResponseConvertor; +import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManager; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev150304.TransactionId; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.MeterStatisticsUpdated; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.MeterStatisticsUpdatedBuilder; @@ -26,8 +27,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731 */ public class MeterStatisticsToNotificationTransformer { - private static MeterStatsResponseConvertor meterStatsConvertor = new MeterStatsResponseConvertor(); - /** * @param mpReplyList raw multipart response from device * @param deviceInfo device state @@ -49,7 +48,11 @@ public class MeterStatisticsToNotificationTransformer { for (MultipartReply mpReply : mpReplyList) { MultipartReplyMeterCase caseBody = (MultipartReplyMeterCase) mpReply.getMultipartReplyBody(); MultipartReplyMeter replyBody = caseBody.getMultipartReplyMeter(); - notification.getMeterStats().addAll(meterStatsConvertor.toSALMeterStatsList(replyBody.getMeterStats())); + final Optional> meterStatsList = ConvertorManager.getInstance().convert(replyBody.getMeterStats()); + + if (meterStatsList.isPresent()) { + notification.getMeterStats().addAll(meterStatsList.get()); + } } return notification.build(); diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/MeterDirectStatisticsService.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/MeterDirectStatisticsService.java index 55e0fab0cc..c67d126f45 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/MeterDirectStatisticsService.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/MeterDirectStatisticsService.java @@ -10,11 +10,12 @@ package org.opendaylight.openflowplugin.impl.statistics.services.direct; import java.util.ArrayList; import java.util.List; +import java.util.Optional; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; import org.opendaylight.openflowplugin.api.OFConstants; import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext; import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack; -import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.MeterStatsResponseConvertor; +import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManager; import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetMeterStatisticsInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetMeterStatisticsOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetMeterStatisticsOutputBuilder; @@ -39,8 +40,6 @@ import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; * The Meter direct statistics service. */ public class MeterDirectStatisticsService extends AbstractDirectStatisticsService { - private final MeterStatsResponseConvertor meterStatsConvertor = new MeterStatsResponseConvertor(); - /** * Instantiates a new Meter direct statistics service. * @@ -74,7 +73,11 @@ public class MeterDirectStatisticsService extends AbstractDirectStatisticsServic for (final MultipartReply mpReply : input) { final MultipartReplyMeterCase caseBody = (MultipartReplyMeterCase) mpReply.getMultipartReplyBody(); final MultipartReplyMeter replyBody = caseBody.getMultipartReplyMeter(); - meterStats.addAll(meterStatsConvertor.toSALMeterStatsList(replyBody.getMeterStats())); + final Optional> meterStatsList = ConvertorManager.getInstance().convert(replyBody.getMeterStats()); + + if (meterStatsList.isPresent()) { + meterStats.addAll(meterStatsList.get()); + } } } diff --git a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/ConvertorManager.java b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/ConvertorManager.java index 882c4c550f..cb4465f181 100644 --- a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/ConvertorManager.java +++ b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/ConvertorManager.java @@ -35,6 +35,8 @@ public class ConvertorManager { INSTANCE.registerConvertor(new TableFeaturesConvertor()); INSTANCE.registerConvertor(new TableFeaturesResponseConvertor()); INSTANCE.registerConvertor(new MeterConvertor()); + INSTANCE.registerConvertor(new MeterStatsResponseConvertor()); + INSTANCE.registerConvertor(new MeterConfigStatsResponseConvertor()); } // Actual convertor keys diff --git a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/MeterConfigStatsResponseConvertor.java b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/MeterConfigStatsResponseConvertor.java new file mode 100644 index 0000000000..9fbb8cd9c4 --- /dev/null +++ b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/MeterConfigStatsResponseConvertor.java @@ -0,0 +1,149 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. 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 java.util.ArrayList; +import java.util.List; +import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.Convertor; +import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.BandId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterBandType; +import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterFlags; +import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId; +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.DscpRemarkBuilder; +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.MeterBandHeadersBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.config.stats.reply.MeterConfigStats; +import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.config.stats.reply.MeterConfigStatsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.config.stats.reply.MeterConfigStatsKey; +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.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.band.header.meter.band.meter.band.drop._case.MeterBandDrop; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.dscp.remark._case.MeterBandDscpRemark; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.experimenter._case.MeterBandExperimenter; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.multipart.reply.meter.config.MeterConfig; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.multipart.reply.meter.config.meter.config.Bands; + +/** + * Converts list of OF library config meter stats to MD-SAL config meter stats. + * + * Example usage: + *
+ * {@code
+ * Optional> salMeterConfigStats = ConvertorManager.getInstance().convert(
+ *  ofMeterConfigStats);
+ * }
+ * 
+ */ +public class MeterConfigStatsResponseConvertor implements Convertor, List> { + + @Override + public Class getType() { + return MeterConfig.class; + } + + @Override + public List convert(List source) { + List listMeterConfigStats = new ArrayList<>(); + + for (MeterConfig meterConfig : source) { + MeterConfigStatsBuilder meterConfigStatsBuilder = new MeterConfigStatsBuilder(); + meterConfigStatsBuilder.setMeterId(new MeterId(meterConfig.getMeterId().getValue())); + meterConfigStatsBuilder.setKey(new MeterConfigStatsKey(meterConfigStatsBuilder.getMeterId())); + MeterBandHeadersBuilder meterBandHeadersBuilder = new MeterBandHeadersBuilder(); + List bands = meterConfig.getBands(); + + MeterFlags meterFlags = new MeterFlags(meterConfig.getFlags().isOFPMFBURST(), + meterConfig.getFlags().isOFPMFKBPS(), + meterConfig.getFlags().isOFPMFPKTPS(), + meterConfig.getFlags().isOFPMFSTATS()); + + meterConfigStatsBuilder.setFlags(meterFlags); + List listBandHeaders = new ArrayList<>(); + int bandKey = 0; + + for (Bands band : bands) { + MeterBandHeaderBuilder meterBandHeaderBuilder = new MeterBandHeaderBuilder(); + if (band.getMeterBand() instanceof MeterBandDropCase) { + MeterBandDropCase dropCaseBand = (MeterBandDropCase) band.getMeterBand(); + MeterBandDrop dropBand = dropCaseBand.getMeterBandDrop(); + DropBuilder dropBuilder = new DropBuilder(); + dropBuilder.setDropBurstSize(dropBand.getBurstSize()); + dropBuilder.setDropRate(dropBand.getRate()); + meterBandHeaderBuilder.setBandType(dropBuilder.build()); + + meterBandHeaderBuilder.setBandBurstSize(dropBand.getBurstSize()); + meterBandHeaderBuilder.setBandRate(dropBand.getRate()); + BandId bandId = new BandId((long) bandKey); + meterBandHeaderBuilder.setKey(new MeterBandHeaderKey(bandId)); + meterBandHeaderBuilder.setBandId(bandId); + + MeterBandTypesBuilder meterBandTypesBuilder = new MeterBandTypesBuilder(); + meterBandTypesBuilder.setFlags(new MeterBandType(true, false, false)); + meterBandHeaderBuilder.setMeterBandTypes(meterBandTypesBuilder.build()); + + listBandHeaders.add(meterBandHeaderBuilder.build()); + } else if (band.getMeterBand() instanceof MeterBandDscpRemarkCase) { + MeterBandDscpRemarkCase dscpRemarkCaseBand = (MeterBandDscpRemarkCase) band.getMeterBand(); + MeterBandDscpRemark dscpRemarkBand = dscpRemarkCaseBand.getMeterBandDscpRemark(); + DscpRemarkBuilder dscpRemarkBuilder = new DscpRemarkBuilder(); + dscpRemarkBuilder.setDscpRemarkBurstSize(dscpRemarkBand.getBurstSize()); + dscpRemarkBuilder.setDscpRemarkRate(dscpRemarkBand.getRate()); + dscpRemarkBuilder.setPrecLevel(dscpRemarkBand.getPrecLevel()); + meterBandHeaderBuilder.setBandType(dscpRemarkBuilder.build()); + + meterBandHeaderBuilder.setBandBurstSize(dscpRemarkBand.getBurstSize()); + meterBandHeaderBuilder.setBandRate(dscpRemarkBand.getRate()); + BandId bandId = new BandId((long) bandKey); + meterBandHeaderBuilder.setKey(new MeterBandHeaderKey(bandId)); + meterBandHeaderBuilder.setBandId(bandId); + + MeterBandTypesBuilder meterBandTypesBuilder = new MeterBandTypesBuilder(); + meterBandTypesBuilder.setFlags(new MeterBandType(false, true, false)); + meterBandHeaderBuilder.setMeterBandTypes(meterBandTypesBuilder.build()); + listBandHeaders.add(meterBandHeaderBuilder.build()); + + } else if (band.getMeterBand() instanceof MeterBandExperimenterCase) { + MeterBandExperimenterCase experimenterCaseBand = (MeterBandExperimenterCase) band.getMeterBand(); + MeterBandExperimenter experimenterBand = experimenterCaseBand.getMeterBandExperimenter(); + ExperimenterBuilder experimenterBuilder = new ExperimenterBuilder(); + experimenterBuilder.setExperimenterBurstSize(experimenterBand.getBurstSize()); + experimenterBuilder.setExperimenterRate(experimenterBand.getRate()); + meterBandHeaderBuilder.setBandType(experimenterBuilder.build()); + + meterBandHeaderBuilder.setBandBurstSize(experimenterBand.getBurstSize()); + meterBandHeaderBuilder.setBandRate(experimenterBand.getRate()); + BandId bandId = new BandId((long) bandKey); + meterBandHeaderBuilder.setKey(new MeterBandHeaderKey(bandId)); + meterBandHeaderBuilder.setBandId(bandId); + + MeterBandTypesBuilder meterBandTypesBuilder = new MeterBandTypesBuilder(); + meterBandTypesBuilder.setFlags(new MeterBandType(false, false, true)); + meterBandHeaderBuilder.setMeterBandTypes(meterBandTypesBuilder.build()); + + listBandHeaders.add(meterBandHeaderBuilder.build()); + + } + + bandKey++; + } + + meterBandHeadersBuilder.setMeterBandHeader(listBandHeaders); + meterConfigStatsBuilder.setMeterBandHeaders(meterBandHeadersBuilder.build()); + listMeterConfigStats.add(meterConfigStatsBuilder.build()); + } + + return listMeterConfigStats; + } +} \ No newline at end of file diff --git a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/MeterStatsResponseConvertor.java b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/MeterStatsResponseConvertor.java index 9964cc31bf..b9fd336692 100644 --- a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/MeterStatsResponseConvertor.java +++ b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/MeterStatsResponseConvertor.java @@ -12,21 +12,9 @@ import java.util.ArrayList; import java.util.List; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Counter32; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Counter64; +import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.Convertor; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.BandId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterBandType; -import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterFlags; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterId; -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.DscpRemarkBuilder; -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.MeterBandHeadersBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.config.stats.reply.MeterConfigStats; -import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.config.stats.reply.MeterConfigStatsBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.config.stats.reply.MeterConfigStatsKey; -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.meter.types.rev130918.meter.statistics.DurationBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.MeterBandStatsBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.meter.band.stats.BandStat; @@ -35,177 +23,71 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.reply.MeterStats; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.reply.MeterStatsBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.reply.MeterStatsKey; -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.band.header.meter.band.meter.band.drop._case.MeterBandDrop; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.dscp.remark._case.MeterBandDscpRemark; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.experimenter._case.MeterBandExperimenter; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.meter.stats.MeterBandStats; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.multipart.reply.meter.config.MeterConfig; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.multipart.reply.meter.config.meter.config.Bands; /** - * Class is an utility class for converting group related statistics messages coming from switch to MD-SAL - * messages. + * Converts list of OF library meter stats to MD-SAL meter stats. * - * @author avishnoi@in.ibm.com + * Example usage: + *
+ * {@code
+ * Optional> salMeterStats = ConvertorManager.getInstance().convert(
+ *  ofMeterStats);
+ * }
+ * 
*/ -public class MeterStatsResponseConvertor { - - /** - * Method converts list of OF Meter Stats to SAL Meter Stats. - * - * @param allMeterStats all meter stats - * @return List of MeterStats - */ - public List toSALMeterStatsList( - List allMeterStats) { - List convertedSALMeters = new ArrayList(); - for (org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply. - multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.MeterStats meter : allMeterStats) { - convertedSALMeters.add(toSALMeterStats(meter)); - } - return convertedSALMeters; - +public class MeterStatsResponseConvertor implements Convertor< + List, + List> { + + @Override + public Class getType() { + return org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.MeterStats.class; } - /** - * Method convert MeterStats message from library to MD SAL defined MeterStats - * - * @param meterStats MeterStats from library - * @return MeterStats -- MeterStats defined in MD-SAL - */ - public MeterStats toSALMeterStats(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply - .multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.MeterStats meterStats) { - - MeterStatsBuilder salMeterStats = new MeterStatsBuilder(); - salMeterStats.setByteInCount(new Counter64(meterStats.getByteInCount())); + @Override + public List convert(List source) { + List convertedSALMeters = new ArrayList<>(); - DurationBuilder time = new DurationBuilder(); - time.setSecond(new Counter32(meterStats.getDurationSec())); - time.setNanosecond(new Counter32(meterStats.getDurationNsec())); - salMeterStats.setDuration(time.build()); - - salMeterStats.setFlowCount(new Counter32(meterStats.getFlowCount())); - salMeterStats.setMeterId(new MeterId(meterStats.getMeterId().getValue())); - salMeterStats.setPacketInCount(new Counter64(meterStats.getPacketInCount())); - salMeterStats.setKey(new MeterStatsKey(salMeterStats.getMeterId())); - - List allMeterBandStats = meterStats.getMeterBandStats(); - - MeterBandStatsBuilder meterBandStatsBuilder = new MeterBandStatsBuilder(); - List listAllBandStats = new ArrayList(); - int bandKey = 0; - for (MeterBandStats meterBandStats : allMeterBandStats) { - BandStatBuilder bandStatBuilder = new BandStatBuilder(); - bandStatBuilder.setByteBandCount(new Counter64(meterBandStats.getByteBandCount())); - bandStatBuilder.setPacketBandCount(new Counter64(meterBandStats.getPacketBandCount())); - BandId bandId = new BandId((long) bandKey); - bandStatBuilder.setKey(new BandStatKey(bandId)); - bandStatBuilder.setBandId(bandId); - bandKey++; - listAllBandStats.add(bandStatBuilder.build()); - } - meterBandStatsBuilder.setBandStat(listAllBandStats); - salMeterStats.setMeterBandStats(meterBandStatsBuilder.build()); - return salMeterStats.build(); - } + for (org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply. + multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.MeterStats meterStats : source) { + // Convert MeterStats message from library to MD SAL defined MeterStats + MeterStatsBuilder salMeterStats = new MeterStatsBuilder(); + salMeterStats.setByteInCount(new Counter64(meterStats.getByteInCount())); - /** - * Method convert list of OF Meter config Stats to SAL Meter Config stats - * - * @param allMeterConfigs all meter configs - * @return list of MeterConfigStats - */ - public List toSALMeterConfigList(List allMeterConfigs) { + DurationBuilder time = new DurationBuilder(); + time.setSecond(new Counter32(meterStats.getDurationSec())); + time.setNanosecond(new Counter32(meterStats.getDurationNsec())); + salMeterStats.setDuration(time.build()); - List listMeterConfigStats = new ArrayList(); - for (MeterConfig meterConfig : allMeterConfigs) { - MeterConfigStatsBuilder meterConfigStatsBuilder = new MeterConfigStatsBuilder(); - meterConfigStatsBuilder.setMeterId(new MeterId(meterConfig.getMeterId().getValue())); - meterConfigStatsBuilder.setKey(new MeterConfigStatsKey(meterConfigStatsBuilder.getMeterId())); + salMeterStats.setFlowCount(new Counter32(meterStats.getFlowCount())); + salMeterStats.setMeterId(new MeterId(meterStats.getMeterId().getValue())); + salMeterStats.setPacketInCount(new Counter64(meterStats.getPacketInCount())); + salMeterStats.setKey(new MeterStatsKey(salMeterStats.getMeterId())); - MeterBandHeadersBuilder meterBandHeadersBuilder = new MeterBandHeadersBuilder(); - List bands = meterConfig.getBands(); + List allMeterBandStats = meterStats.getMeterBandStats(); - MeterFlags meterFlags = new MeterFlags(meterConfig.getFlags().isOFPMFBURST(), - meterConfig.getFlags().isOFPMFKBPS(), - meterConfig.getFlags().isOFPMFPKTPS(), - meterConfig.getFlags().isOFPMFSTATS()); - meterConfigStatsBuilder.setFlags(meterFlags); - List listBandHeaders = new ArrayList(); + MeterBandStatsBuilder meterBandStatsBuilder = new MeterBandStatsBuilder(); + List listAllBandStats = new ArrayList<>(); int bandKey = 0; - for (Bands band : bands) { - MeterBandHeaderBuilder meterBandHeaderBuilder = new MeterBandHeaderBuilder(); - if (band.getMeterBand() instanceof MeterBandDropCase) { - MeterBandDropCase dropCaseBand = (MeterBandDropCase) band.getMeterBand(); - MeterBandDrop dropBand = dropCaseBand.getMeterBandDrop(); - DropBuilder dropBuilder = new DropBuilder(); - dropBuilder.setDropBurstSize(dropBand.getBurstSize()); - dropBuilder.setDropRate(dropBand.getRate()); - meterBandHeaderBuilder.setBandType(dropBuilder.build()); - meterBandHeaderBuilder.setBandBurstSize(dropBand.getBurstSize()); - meterBandHeaderBuilder.setBandRate(dropBand.getRate()); - BandId bandId = new BandId((long) bandKey); - meterBandHeaderBuilder.setKey(new MeterBandHeaderKey(bandId)); - meterBandHeaderBuilder.setBandId(bandId); - - MeterBandTypesBuilder meterBandTypesBuilder = new MeterBandTypesBuilder(); - meterBandTypesBuilder.setFlags(new MeterBandType(true, false, false)); - meterBandHeaderBuilder.setMeterBandTypes(meterBandTypesBuilder.build()); - - listBandHeaders.add(meterBandHeaderBuilder.build()); - } else if (band.getMeterBand() instanceof MeterBandDscpRemarkCase) { - MeterBandDscpRemarkCase dscpRemarkCaseBand = (MeterBandDscpRemarkCase) band.getMeterBand(); - MeterBandDscpRemark dscpRemarkBand = dscpRemarkCaseBand.getMeterBandDscpRemark(); - DscpRemarkBuilder dscpRemarkBuilder = new DscpRemarkBuilder(); - dscpRemarkBuilder.setDscpRemarkBurstSize(dscpRemarkBand.getBurstSize()); - dscpRemarkBuilder.setDscpRemarkRate(dscpRemarkBand.getRate()); - dscpRemarkBuilder.setPrecLevel(dscpRemarkBand.getPrecLevel()); - meterBandHeaderBuilder.setBandType(dscpRemarkBuilder.build()); - - meterBandHeaderBuilder.setBandBurstSize(dscpRemarkBand.getBurstSize()); - meterBandHeaderBuilder.setBandRate(dscpRemarkBand.getRate()); - BandId bandId = new BandId((long) bandKey); - meterBandHeaderBuilder.setKey(new MeterBandHeaderKey(bandId)); - meterBandHeaderBuilder.setBandId(bandId); - - MeterBandTypesBuilder meterBandTypesBuilder = new MeterBandTypesBuilder(); - meterBandTypesBuilder.setFlags(new MeterBandType(false, true, false)); - meterBandHeaderBuilder.setMeterBandTypes(meterBandTypesBuilder.build()); - listBandHeaders.add(meterBandHeaderBuilder.build()); - - } else if (band.getMeterBand() instanceof MeterBandExperimenterCase) { - MeterBandExperimenterCase experimenterCaseBand = (MeterBandExperimenterCase) band.getMeterBand(); - MeterBandExperimenter experimenterBand = experimenterCaseBand.getMeterBandExperimenter(); - ExperimenterBuilder experimenterBuilder = new ExperimenterBuilder(); - experimenterBuilder.setExperimenterBurstSize(experimenterBand.getBurstSize()); - experimenterBuilder.setExperimenterRate(experimenterBand.getRate()); - meterBandHeaderBuilder.setBandType(experimenterBuilder.build()); - - meterBandHeaderBuilder.setBandBurstSize(experimenterBand.getBurstSize()); - meterBandHeaderBuilder.setBandRate(experimenterBand.getRate()); - BandId bandId = new BandId((long) bandKey); - meterBandHeaderBuilder.setKey(new MeterBandHeaderKey(bandId)); - meterBandHeaderBuilder.setBandId(bandId); - - MeterBandTypesBuilder meterBandTypesBuilder = new MeterBandTypesBuilder(); - meterBandTypesBuilder.setFlags(new MeterBandType(false, false, true)); - meterBandHeaderBuilder.setMeterBandTypes(meterBandTypesBuilder.build()); - - listBandHeaders.add(meterBandHeaderBuilder.build()); - - } + for (MeterBandStats meterBandStats : allMeterBandStats) { + BandStatBuilder bandStatBuilder = new BandStatBuilder(); + bandStatBuilder.setByteBandCount(new Counter64(meterBandStats.getByteBandCount())); + bandStatBuilder.setPacketBandCount(new Counter64(meterBandStats.getPacketBandCount())); + BandId bandId = new BandId((long) bandKey); + bandStatBuilder.setKey(new BandStatKey(bandId)); + bandStatBuilder.setBandId(bandId); bandKey++; + listAllBandStats.add(bandStatBuilder.build()); } - meterBandHeadersBuilder.setMeterBandHeader(listBandHeaders); - meterConfigStatsBuilder.setMeterBandHeaders(meterBandHeadersBuilder.build()); - listMeterConfigStats.add(meterConfigStatsBuilder.build()); + + meterBandStatsBuilder.setBandStat(listAllBandStats); + salMeterStats.setMeterBandStats(meterBandStatsBuilder.build()); + convertedSALMeters.add(salMeterStats.build()); } - return listMeterConfigStats; + return convertedSALMeters; } -} +} \ No newline at end of file diff --git a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/MultipartReplyTranslator.java b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/MultipartReplyTranslator.java index 6cbe4d415c..98a0c5bec9 100644 --- a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/MultipartReplyTranslator.java +++ b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/translator/MultipartReplyTranslator.java @@ -10,15 +10,17 @@ package org.opendaylight.openflowplugin.openflow.md.core.translator; import java.math.BigInteger; import java.util.ArrayList; +import java.util.Collections; import java.util.List; +import java.util.Optional; import java.util.concurrent.CopyOnWriteArrayList; import org.opendaylight.openflowplugin.api.openflow.md.core.IMDMessageTranslator; import org.opendaylight.openflowplugin.api.openflow.md.core.SwitchConnectionDistinguisher; import org.opendaylight.openflowplugin.api.openflow.md.core.session.SessionContext; import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion; +import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManager; import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.FlowStatsResponseConvertor; import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.GroupStatsResponseConvertor; -import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.MeterStatsResponseConvertor; import org.opendaylight.openflowplugin.openflow.md.util.InventoryDataServiceUtil; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Counter32; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Counter64; @@ -54,6 +56,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.Meter import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterKbps; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterPktps; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterStats; +import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.config.stats.reply.MeterConfigStats; import org.opendaylight.yang.gen.v1.urn.opendaylight.model.statistics.types.rev130925.duration.DurationBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.model.statistics.types.rev130925.node.connector.statistics.BytesBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.model.statistics.types.rev130925.node.connector.statistics.PacketsBuilder; @@ -110,7 +113,6 @@ public class MultipartReplyTranslator implements IMDMessageTranslator> meterStatsList = + ConvertorManager.getInstance().convert(replyBody.getMeterStats()); + + message.setMeterStats(meterStatsList.orElse(Collections.emptyList())); listDataObject.add(message.build()); return listDataObject; } @@ -317,8 +322,10 @@ public class MultipartReplyTranslator implements IMDMessageTranslator> meterConfigStatsList = ConvertorManager.getInstance().convert(replyBody.getMeterConfig()); + + message.setMeterConfigStats(meterConfigStatsList.orElse(Collections.emptyList())); listDataObject.add(message.build()); return listDataObject; } diff --git a/openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/MeterConfigStatsResponseConvertorTest.java b/openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/MeterConfigStatsResponseConvertorTest.java new file mode 100644 index 0000000000..4bb1cd3a76 --- /dev/null +++ b/openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/MeterConfigStatsResponseConvertorTest.java @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2016 Cisco Systems, Inc. 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.Collections; +import java.util.List; +import java.util.Optional; +import org.junit.Test; +import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.config.stats.reply.MeterConfigStats; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterFlags; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDropCaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandDscpRemarkCaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.MeterBandExperimenterCaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.drop._case.MeterBandDropBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.dscp.remark._case.MeterBandDscpRemarkBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.meter.band.meter.band.experimenter._case.MeterBandExperimenterBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.multipart.reply.meter.config.MeterConfig; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.multipart.reply.meter.config.MeterConfigBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.multipart.reply.meter.config.meter.config.Bands; +import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.multipart.reply.meter.config.meter.config.BandsBuilder; +import org.opendaylight.yangtools.yang.binding.DataContainer; + +public class MeterConfigStatsResponseConvertorTest { + private static final int PRESET_COUNT = 7; + + private List createMeterConfigList(){ + List meterConfigs = new ArrayList<>(); + MeterConfigBuilder meterConfigBuilder = new MeterConfigBuilder(); + for (int i = 0; i < PRESET_COUNT; i++) { + meterConfigBuilder.setMeterId(new MeterId((long) i)); + List bandses = new ArrayList<>(); + + BandsBuilder bandsBuilder = new BandsBuilder(); + bandsBuilder.setMeterBand(new MeterBandDropCaseBuilder() + .setMeterBandDrop(new MeterBandDropBuilder().build()).build()); + bandses.add(bandsBuilder.build()); + + bandsBuilder = new BandsBuilder(); + bandsBuilder.setMeterBand(new MeterBandDscpRemarkCaseBuilder() + .setMeterBandDscpRemark(new MeterBandDscpRemarkBuilder().build()).build()); + bandses.add(bandsBuilder.build()); + + bandsBuilder = new BandsBuilder(); + bandsBuilder.setMeterBand(new MockMeterBandBuilder()); + bandses.add(bandsBuilder.build()); + + bandsBuilder = new BandsBuilder(); + bandsBuilder.setMeterBand(new MeterBandExperimenterCaseBuilder() + .setMeterBandExperimenter(new MeterBandExperimenterBuilder().build()).build()); + bandses.add(bandsBuilder.build()); + + meterConfigBuilder.setBands(bandses); + meterConfigBuilder.setFlags(new MeterFlags(true, false, true, false)); + meterConfigs.add(meterConfigBuilder.build()); + } + + return meterConfigs; + } + + @Test + /** + * Test of basic mapping functionality of {@link MeterConfigStatsResponseConvertor#convert(java.util.List)} } + */ + public void testToSALMeterConfigList() { + Optional> meterConfigsOptional = ConvertorManager.getInstance().convert(createMeterConfigList()); + List meterConfigs = meterConfigsOptional.orElse(Collections.emptyList()); + + assertEquals(PRESET_COUNT, meterConfigs.size()); + int cnt = 0; + for (MeterConfigStats meterConfigStats: meterConfigs){ + assertEquals(new Long(cnt), meterConfigStats.getMeterId().getValue()); + assertTrue(meterConfigStats.getFlags().isMeterBurst()); + assertFalse(meterConfigStats.getFlags().isMeterKbps()); + assertTrue(meterConfigStats.getFlags().isMeterPktps()); + assertFalse(meterConfigStats.getFlags().isMeterStats()); + + cnt++; + } + } + + + private final class MockMeterBandBuilder implements org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.MeterBand { + + @Override + public Class getImplementedInterface() { + return MockMeterBandBuilder.class; + } + } + +} \ No newline at end of file diff --git a/openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/MeterStatsResponseConvertorTest.java b/openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/MeterStatsResponseConvertorTest.java index 8bc4c25894..16b9871ad3 100644 --- a/openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/MeterStatsResponseConvertorTest.java +++ b/openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/MeterStatsResponseConvertorTest.java @@ -9,33 +9,22 @@ 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.math.BigInteger; import java.util.ArrayList; +import java.util.Collections; import java.util.List; +import java.util.Optional; import org.junit.Test; -import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.config.stats.reply.MeterConfigStats; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.meter.band.stats.BandStat; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.reply.MeterStats; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.meter.statistics.reply.MeterStatsKey; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterFlags; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterId; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.MeterStatsBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.meter.stats.MeterBandStats; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter._case.multipart.reply.meter.meter.stats.MeterBandStatsBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.multipart.reply.meter.config.MeterConfig; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.multipart.reply.meter.config.MeterConfigBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.multipart.reply.meter.config.meter.config.Bands; -import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.config._case.multipart.reply.meter.config.meter.config.BandsBuilder; -import org.opendaylight.yangtools.yang.binding.DataContainer; -/** - * Created by Martin Bobak mbobak@cisco.com on 9/18/14. - */ public class MeterStatsResponseConvertorTest { - - private static final MeterStatsResponseConvertor METER_STATS_RESPONSE_CONVERTOR = new MeterStatsResponseConvertor(); private static final int PRESET_COUNT = 7; @@ -67,30 +56,14 @@ public class MeterStatsResponseConvertorTest { return allMeterStats; } - private final List createMeterConfigList(){ - List meterConfigs = new ArrayList<>(); - MeterConfigBuilder meterConfigBuilder = new MeterConfigBuilder(); - for (int i = 0; i < PRESET_COUNT; i++) { - meterConfigBuilder.setMeterId(new MeterId((long) i)); - List bandses = new ArrayList<>(); - for (int j = 0; j < PRESET_COUNT; j++){ - BandsBuilder bandsBuilder = new BandsBuilder(); - bandsBuilder.setMeterBand(new MockMeterBandBuilder()); - bandses.add(bandsBuilder.build()); - } - meterConfigBuilder.setBands(bandses); - meterConfigBuilder.setFlags(new MeterFlags(true, false, true, false)); - meterConfigs.add(meterConfigBuilder.build()); - } - return meterConfigs; - } @Test /** - * Test of basic mapping functionality of {@link MeterStatsResponseConvertor#toSALMeterStatsList(java.util.List)} + * Test of basic mapping functionality of {@link MeterStatsResponseConvertor#convert(java.util.List)} */ public void testToSALMeterStatsList() { - List meterStatsList = METER_STATS_RESPONSE_CONVERTOR.toSALMeterStatsList(createMeterStatsLit()); + Optional> meterStatsListOptional = ConvertorManager.getInstance().convert(createMeterStatsLit()); + List meterStatsList = meterStatsListOptional.orElse(Collections.emptyList()); assertEquals(PRESET_COUNT, meterStatsList.size()); int cnt = 0; @@ -115,33 +88,4 @@ public class MeterStatsResponseConvertorTest { cnt++; } } - - @Test - /** - * Test of basic mapping functionality of {@link MeterStatsResponseConvertor#toSALMeterStatsList(java.util.List)} - */ - public void testToSALMeterConfigList() { - List meterConfigs = METER_STATS_RESPONSE_CONVERTOR.toSALMeterConfigList(createMeterConfigList()); - assertEquals(PRESET_COUNT, meterConfigs.size()); - int cnt = 0; - for (MeterConfigStats meterConfigStats: meterConfigs){ - assertEquals(new Long(cnt), meterConfigStats.getMeterId().getValue()); - assertTrue(meterConfigStats.getFlags().isMeterBurst()); - assertFalse(meterConfigStats.getFlags().isMeterKbps()); - assertTrue(meterConfigStats.getFlags().isMeterPktps()); - assertFalse(meterConfigStats.getFlags().isMeterStats()); - - cnt++; - } - } - - - private final class MockMeterBandBuilder implements org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.band.header.MeterBand { - - @Override - public Class getImplementedInterface() { - return MockMeterBandBuilder.class; - } - } - -} +} \ No newline at end of file -- 2.36.6