From e9855fc96cb894b79463b1e3d20e5f44e06e9a96 Mon Sep 17 00:00:00 2001 From: Tomas Slusny Date: Mon, 27 Jun 2016 15:17:39 +0200 Subject: [PATCH] Bug 5540 - MeterConvertor - Reworked MeterConvertor to use new ConvertorManager design - Updated tests and usage of TableFeaturesConvertor accordingly Change-Id: Icaf9a28d569ae76e396427d79241401f6517a46c Signed-off-by: Tomas Slusny --- .../impl/services/MeterService.java | 15 +- .../md/core/sal/OFRpcTaskFactory.java | 45 +++--- .../core/sal/convertor/ConvertorManager.java | 1 + .../md/core/sal/convertor/MeterConvertor.java | 152 +++++++++--------- .../convertor/data/VersionConvertorData.java | 25 +++ .../sal/convertor/MeterConvertorTest.java | 41 ++--- 6 files changed, 163 insertions(+), 116 deletions(-) create mode 100644 openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/data/VersionConvertorData.java diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/MeterService.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/MeterService.java index 73cf63f4ec..94009f0671 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/MeterService.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/MeterService.java @@ -7,10 +7,13 @@ */ package org.opendaylight.openflowplugin.impl.services; +import java.util.Optional; import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext; import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack; import org.opendaylight.openflowplugin.api.openflow.device.Xid; +import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManager; 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.types.rev130918.Meter; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MeterModInputBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader; @@ -24,8 +27,12 @@ final class MeterService extends Abstract @Override protected OfHeader buildRequest(final Xid xid, final I input) { - final MeterModInputBuilder ofMeterModInput = MeterConvertor.toMeterModInput(input, getVersion()); - ofMeterModInput.setXid(xid.getValue()); - return ofMeterModInput.build(); + final VersionConvertorData data = new VersionConvertorData(getVersion()); + final Optional ofMeterModInput = ConvertorManager.getInstance().convert(input, data); + final MeterModInputBuilder meterModInputBuilder = ofMeterModInput + .orElse(MeterConvertor.defaultResult(getVersion())); + + meterModInputBuilder.setXid(xid.getValue()); + return meterModInputBuilder.build(); } -} +} \ No newline at end of file diff --git a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/OFRpcTaskFactory.java b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/OFRpcTaskFactory.java index b82abb2c42..442b51c3f4 100644 --- a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/OFRpcTaskFactory.java +++ b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/OFRpcTaskFactory.java @@ -33,6 +33,7 @@ import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.FlowConver import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.GroupConvertor; import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.MeterConvertor; import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.PortConvertor; +import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionConvertorData; import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.match.MatchReactor; import org.opendaylight.openflowplugin.openflow.md.util.FlowCreatorUtil; import org.opendaylight.openflowplugin.openflow.md.util.InventoryDataServiceUtil; @@ -527,15 +528,18 @@ public abstract class OFRpcTaskFactory { public ListenableFuture> call() { ListenableFuture> result = SettableFuture.create(); - // Convert the AddGroupInput to GroupModInput - MeterModInputBuilder ofMeterModInput = MeterConvertor.toMeterModInput(getInput(), getVersion()); - final Long xId = getSession().getNextXid(); - ofMeterModInput.setXid(xId); + // Convert the AddMeterInput to UpdateMeterOutput + final java.util.Optional ofMeterModInput = ConvertorManager + .getInstance() + .convert(getInput(), new VersionConvertorData(getVersion())); + + final MeterModInputBuilder meterModInputBuilder = ofMeterModInput + .orElse(MeterConvertor.defaultResult(getVersion())) + .setXid(getSession().getNextXid()); Future> resultFromOFLib = getMessageService() - .meterMod(ofMeterModInput.build(), getCookie()); + .meterMod(meterModInputBuilder.build(), getCookie()); result = JdkFutureAdapters.listenInPoolThread(resultFromOFLib); - result = OFRpcTaskUtil.chainFutureBarrier(this, result); OFRpcTaskUtil.hookFutureNotification(this, result, getRpcNotificationProviderService(), createMeterAddedNotification(getInput())); @@ -654,15 +658,17 @@ public abstract class OFRpcTaskFactory { ListenableFuture> result = null; // Convert the UpdateMeterInput to MeterModInput - MeterModInputBuilder ofMeterModInput = MeterConvertor.toMeterModInput( - getInput().getUpdatedMeter(), getVersion()); - final Long xId = getSession().getNextXid(); - ofMeterModInput.setXid(xId); + final java.util.Optional ofMeterModInput = ConvertorManager + .getInstance() + .convert(getInput().getUpdatedMeter(), new VersionConvertorData(getVersion())); + + final MeterModInputBuilder meterModInputBuilder = ofMeterModInput + .orElse(MeterConvertor.defaultResult(getVersion())) + .setXid(getSession().getNextXid()); Future> resultFromOFLib = - getMessageService().meterMod(ofMeterModInput.build(), getCookie()); + getMessageService().meterMod(meterModInputBuilder.build(), getCookie()); result = JdkFutureAdapters.listenInPoolThread(resultFromOFLib); - result = OFRpcTaskUtil.chainFutureBarrier(this, result); OFRpcTaskUtil.hookFutureNotification(this, result, getRpcNotificationProviderService(), createMeterUpdatedNotification(getInput())); @@ -840,15 +846,18 @@ public abstract class OFRpcTaskFactory { public ListenableFuture> call() { ListenableFuture> result = SettableFuture.create(); - // Convert the AddGroupInput to GroupModInput - MeterModInputBuilder ofMeterModInput = MeterConvertor.toMeterModInput(getInput(), getVersion()); - final Long xId = getSession().getNextXid(); - ofMeterModInput.setXid(xId); + // Convert the RemoveMeterInput to UpdateMeterOutput + final java.util.Optional ofMeterModInput = ConvertorManager + .getInstance() + .convert(getInput(), new VersionConvertorData(getVersion())); + + final MeterModInputBuilder meterModInputBuilder = ofMeterModInput + .orElse(MeterConvertor.defaultResult(getVersion())) + .setXid(getSession().getNextXid()); Future> resultFromOFLib = getMessageService() - .meterMod(ofMeterModInput.build(), getCookie()); + .meterMod(meterModInputBuilder.build(), getCookie()); result = JdkFutureAdapters.listenInPoolThread(resultFromOFLib); - result = OFRpcTaskUtil.chainFutureBarrier(this, result); OFRpcTaskUtil.hookFutureNotification(this, result, getRpcNotificationProviderService(), createMeterRemovedNotification(getInput())); 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 e7ff5c4aaa..882c4c550f 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 @@ -34,6 +34,7 @@ public class ConvertorManager { // All convertors are registered here INSTANCE.registerConvertor(new TableFeaturesConvertor()); INSTANCE.registerConvertor(new TableFeaturesResponseConvertor()); + INSTANCE.registerConvertor(new MeterConvertor()); } // Actual convertor keys diff --git a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/MeterConvertor.java b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/MeterConvertor.java index 41a10aaf29..07e8dd46ba 100644 --- a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/MeterConvertor.java +++ b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/MeterConvertor.java @@ -1,4 +1,4 @@ -/** +/* * 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 @@ -8,17 +8,12 @@ package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor; -/**** - * - * This class is used for converting the data from SAL layer to OF Library Layer for Meter Mod Command. - * - */ - import java.util.ArrayList; -import java.util.Iterator; import java.util.List; - +import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.ParametrizedConvertor; +import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionConvertorData; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.meter.update.UpdatedMeter; +import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.Meter; 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.DscpRemark; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.Experimenter; @@ -44,71 +39,35 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731 import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public final class MeterConvertor { +/** + * Converts a MD-SAL meter mod command into the OF library meter mod command. + *

+ * Example usage: + *

+ * {@code
+ * VersionConvertorData data = new VersionConvertorData(version);
+ * Optional ofMeter = ConvertorManager.getInstance().convert(salMeter, data);
+ * }
+ * 
+ */ +public class MeterConvertor implements ParametrizedConvertor { private static final Logger LOG = LoggerFactory.getLogger(MeterConvertor.class); - private MeterConvertor() { - - } - - // Get all the data for the meter from the Yang/SAL-Layer /** - * @param version of version - * @param source Data source - * @return MeterModInput required by OF Library + * Create default empty meter mot input builder. + * Use this method, if result from convertor is empty. + * + * @param version Openflow version + * @return default empty meter mod input builder */ - public static MeterModInputBuilder toMeterModInput( - org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.Meter source, short version) { - - MeterModInputBuilder meterModInputBuilder = new MeterModInputBuilder(); - List bands = new ArrayList(); - - if (source instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.AddMeterInput) { - meterModInputBuilder.setCommand(MeterModCommand.OFPMCADD); - } else if (source instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.RemoveMeterInput) { - meterModInputBuilder.setCommand(MeterModCommand.OFPMCDELETE); - } else if (source instanceof UpdatedMeter) { - meterModInputBuilder.setCommand(MeterModCommand.OFPMCMODIFY); - } - - meterModInputBuilder.setMeterId(new MeterId(source.getMeterId().getValue())); - - if (null != source.getFlags()) { - meterModInputBuilder.setFlags(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(new MeterFlags(false, false, true, false)); - } - if (source.getMeterBandHeaders() != null) { - getBandsFromSAL(source.getMeterBandHeaders(), bands); - meterModInputBuilder.setBands(bands); - } else { - LOG.error("For this meter Id" + source.getMeterId().getValue() + ",no associated band data found!"); - } - - meterModInputBuilder.setVersion(version); - return meterModInputBuilder; + public static MeterModInputBuilder defaultResult(short version) { + return new MeterModInputBuilder() + .setVersion(version) + .setFlags(new MeterFlags(false, false, true, false)); } private static void getBandsFromSAL(MeterBandHeaders meterBandHeaders, List bands) { - - Iterator bandHeadersIterator = meterBandHeaders.getMeterBandHeader().iterator(); - MeterBandHeader meterBandHeader; - - BandsBuilder bandsB = null; - - while (bandHeadersIterator.hasNext()) { - meterBandHeader = bandHeadersIterator.next(); - MeterBand meterBandItem = null; + for (MeterBandHeader meterBandHeader : meterBandHeaders.getMeterBandHeader()) { // The band types :drop,DSCP_Remark or experimenter. if (null != meterBandHeader.getMeterBandTypes() && null != meterBandHeader.getMeterBandTypes().getFlags()) { @@ -122,8 +81,8 @@ public final class MeterConvertor { meterBandDropBuilder.setBurstSize(drop.getDropBurstSize()); meterBandDropBuilder.setRate(drop.getDropRate()); dropCaseBuilder.setMeterBandDrop(meterBandDropBuilder.build()); - meterBandItem = dropCaseBuilder.build(); - bandsB = new BandsBuilder(); + MeterBand meterBandItem = dropCaseBuilder.build(); + BandsBuilder bandsB = new BandsBuilder(); bandsB.setMeterBand(meterBandItem); // Bands list bands.add(bandsB.build()); @@ -140,8 +99,8 @@ public final class MeterConvertor { meterBandDscpRemarkBuilder.setRate(dscpRemark.getDscpRemarkRate()); meterBandDscpRemarkBuilder.setPrecLevel(dscpRemark.getPrecLevel()); dscpCaseBuilder.setMeterBandDscpRemark(meterBandDscpRemarkBuilder.build()); - meterBandItem = dscpCaseBuilder.build(); - bandsB = new BandsBuilder(); + MeterBand meterBandItem = dscpCaseBuilder.build(); + BandsBuilder bandsB = new BandsBuilder(); bandsB.setMeterBand(meterBandItem); // Bands list bands.add(bandsB.build()); @@ -161,8 +120,8 @@ public final class MeterConvertor { meterBandExperimenterBuilder.addAugmentation(ExperimenterIdMeterBand.class, expBuilder.build()); // TODO - implement / finish experimenter meter band translation experimenterCaseBuilder.setMeterBandExperimenter(meterBandExperimenterBuilder.build()); - meterBandItem = experimenterCaseBuilder.build(); - bandsB = new BandsBuilder(); + MeterBand meterBandItem = experimenterCaseBuilder.build(); + BandsBuilder bandsB = new BandsBuilder(); bandsB.setMeterBand(meterBandItem); // Bands list bands.add(bandsB.build()); @@ -170,7 +129,6 @@ public final class MeterConvertor { logBandTypeMissing(MeterBandType.OFPMBTEXPERIMENTER); } } - } else { LOG.error("Invalid meter band data found."); } @@ -182,4 +140,50 @@ public final class MeterConvertor { LOG.error("BandType: {} No Band Data found", meterBandType); } + @Override + public Class getType() { + return Meter.class; + } + + @Override + public MeterModInputBuilder convert(Meter source, VersionConvertorData data) { + MeterModInputBuilder meterModInputBuilder = new MeterModInputBuilder(); + List bands = new ArrayList<>(); + + if (source instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.AddMeterInput) { + meterModInputBuilder.setCommand(MeterModCommand.OFPMCADD); + } else if (source instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.meter.service.rev130918.RemoveMeterInput) { + meterModInputBuilder.setCommand(MeterModCommand.OFPMCDELETE); + } else if (source instanceof UpdatedMeter) { + meterModInputBuilder.setCommand(MeterModCommand.OFPMCMODIFY); + } + + meterModInputBuilder.setMeterId(new MeterId(source.getMeterId().getValue())); + + if (null != source.getFlags()) { + meterModInputBuilder.setFlags(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(new MeterFlags(false, false, true, false)); + } + + if (source.getMeterBandHeaders() != null) { + getBandsFromSAL(source.getMeterBandHeaders(), bands); + meterModInputBuilder.setBands(bands); + } else { + LOG.error("For this meter Id" + source.getMeterId().getValue() + ",no associated band data found!"); + } + + meterModInputBuilder.setVersion(data.getVersion()); + return meterModInputBuilder; + } } diff --git a/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/data/VersionConvertorData.java b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/data/VersionConvertorData.java new file mode 100644 index 0000000000..af5f39b1af --- /dev/null +++ b/openflowplugin/src/main/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/data/VersionConvertorData.java @@ -0,0 +1,25 @@ +/* + * 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.data; + +import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.ConvertorData; + +/** + * Convertor data implementation containing only Openflow version + */ +public class VersionConvertorData extends ConvertorData { + /** + * Instantiates a new Version convertor data. + * + * @param version the version + */ + public VersionConvertorData(short version) { + super(version); + } +} \ No newline at end of file diff --git a/openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/MeterConvertorTest.java b/openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/MeterConvertorTest.java index 6edaf42c04..1ba7d91726 100644 --- a/openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/MeterConvertorTest.java +++ b/openflowplugin/src/test/java/org/opendaylight/openflowplugin/openflow/md/core/sal/convertor/MeterConvertorTest.java @@ -13,10 +13,12 @@ import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.List; - +import java.util.Optional; import org.junit.Test; +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.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; import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.band.type.band.type.Drop; @@ -40,12 +42,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.meter.mod.Bands; public class MeterConvertorTest { - - - @Test public void testMeterModCommandConvertorwithAllParameters() { - long BURST_SIZE = 10L; long DROP_RATE = 20L; // / DROP Band @@ -116,8 +114,8 @@ public class MeterConvertorTest { AddMeterInputBuilder addMeterFromSAL = new AddMeterInputBuilder(); addMeterFromSAL.setMeterBandHeaders(meterBandHeaders); // MeterBands - // added to the - // meter command. + // added to the + // meter command. Long temp = 10L; // NodeKey key = new NodeKey(new NodeId("24")); @@ -131,7 +129,7 @@ public class MeterConvertorTest { addMeterFromSAL.setFlags(flagV); AddMeterInput meterInputCommand = addMeterFromSAL.build(); - MeterModInputBuilder outMeterModInput = MeterConvertor.toMeterModInput(meterInputCommand, (short) 0X4); + MeterModInputBuilder outMeterModInput = convert(meterInputCommand, new VersionConvertorData((short) 0X4)); assertEquals(MeterModCommand.OFPMCADD, outMeterModInput.getCommand()); assertTrue(outMeterModInput.getFlags().isOFPMFBURST()); @@ -174,9 +172,9 @@ public class MeterConvertorTest { } } + @Test public void testMeterModCommandConvertorwithNoFlags() { - long BURST_SIZE = 10L; long DROP_RATE = 20L; // / DROP Band @@ -249,8 +247,8 @@ public class MeterConvertorTest { AddMeterInputBuilder addMeterFromSAL = new AddMeterInputBuilder(); addMeterFromSAL.setMeterBandHeaders(meterBandHeaders); // MeterBands - // added to the - // meter command. + // added to the + // meter command. Long temp = 10L; // NodeKey key = new NodeKey(new NodeId("24")); @@ -263,7 +261,7 @@ public class MeterConvertorTest { AddMeterInput meterInputCommand = addMeterFromSAL.build(); - MeterModInputBuilder outMeterModInput = MeterConvertor.toMeterModInput(meterInputCommand, (short) 0X4); + MeterModInputBuilder outMeterModInput = convert(meterInputCommand, new VersionConvertorData((short) 0X4)); assertEquals(MeterModCommand.OFPMCADD, outMeterModInput.getCommand()); assertFalse(outMeterModInput.getFlags().isOFPMFBURST()); @@ -307,10 +305,9 @@ public class MeterConvertorTest { } } + @Test public void testMeterModCommandConvertorBandDataisNULL() { - - AddMeterInputBuilder addMeterFromSAL = new AddMeterInputBuilder(); Long temp = 10L; @@ -326,12 +323,12 @@ public class MeterConvertorTest { addMeterFromSAL.setFlags(flagV); AddMeterInput meterInputCommand = addMeterFromSAL.build(); - MeterModInputBuilder outMeterModInput = MeterConvertor.toMeterModInput(meterInputCommand, (short) 0X4); + MeterModInputBuilder outMeterModInput = convert(meterInputCommand, new VersionConvertorData((short) 0X4)); assertEquals(MeterModCommand.OFPMCADD, outMeterModInput.getCommand()); assertTrue(outMeterModInput.getFlags().isOFPMFBURST()); assertEquals(temp, outMeterModInput.getMeterId().getValue()); - } + } @Test public void testMeterModCommandConvertorNoValidBandData() { @@ -392,8 +389,8 @@ public class MeterConvertorTest { AddMeterInputBuilder addMeterFromSAL = new AddMeterInputBuilder(); addMeterFromSAL.setMeterBandHeaders(meterBandHeaders); // MeterBands - // added to the - // meter command. + // added to the + // meter command. Long temp = 10L; // NodeKey key = new NodeKey(new NodeId("24")); @@ -407,7 +404,7 @@ public class MeterConvertorTest { addMeterFromSAL.setFlags(flagV); AddMeterInput meterInputCommand = addMeterFromSAL.build(); - MeterModInputBuilder outMeterModInput = MeterConvertor.toMeterModInput(meterInputCommand, (short) 0X4); + MeterModInputBuilder outMeterModInput = convert(meterInputCommand, new VersionConvertorData((short) 0X4)); assertEquals(MeterModCommand.OFPMCADD, outMeterModInput.getCommand()); assertTrue(outMeterModInput.getFlags().isOFPMFBURST()); @@ -451,4 +448,8 @@ public class MeterConvertorTest { } -} + private MeterModInputBuilder convert(Meter source, VersionConvertorData data) { + Optional outMeterModInputOptional = ConvertorManager.getInstance().convert(source, data); + return outMeterModInputOptional.orElse(MeterConvertor.defaultResult(data.getVersion())); + } +} \ No newline at end of file -- 2.36.6