- Reworked GroupConvertor and GroupStatsConvertor to new ConvertorManager design
- Added GroupDescStatsConvertor (moved some logic from GroupStatsConvertor)
- Updated (and fixed) tests, and updated usages accordingly
Change-Id: Iabae7191ceeefeb208487ab5cf0280e8f8186c3e
Signed-off-by: Tomas Slusny <tomas.slusny@pantheon.sk>
*/
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.GroupConvertor;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GroupModInputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
@Override
protected OfHeader buildRequest(final Xid xid, final I input) {
- final GroupModInputBuilder ofGroupModInput = GroupConvertor.toGroupModInput(input, getVersion(), getDatapathId());
- ofGroupModInput.setXid(xid.getValue());
+ final VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData(getVersion());
+ data.setDatapathId(getDatapathId());
+ final Optional<GroupModInputBuilder> ofGroupModInput = ConvertorManager
+ .getInstance()
+ .convert(input, data);
- return ofGroupModInput.build();
+ final GroupModInputBuilder groupModInputBuilder = ofGroupModInput
+ .orElse(GroupConvertor.defaultResult(getVersion()))
+ .setXid(xid.getValue());
+
+ return groupModInputBuilder.build();
}
}
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.data.VersionConvertorData;
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;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupType;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.SelectLiveness;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.SelectWeight;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.desc.stats.reply.GroupDescStats;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply.GroupStats;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.MeterConfigStatsUpdatedBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.MeterFeaturesUpdatedBuilder;
.getLogger(SinglePurposeMultipartReplyTranslator.class);
private static FlowStatsResponseConvertor flowStatsConvertor = new FlowStatsResponseConvertor();
- private static GroupStatsResponseConvertor groupStatsConvertor = new GroupStatsResponseConvertor();
-
public List<DataObject> translate(final BigInteger datapathId, final short version, final OfHeader msg) {
MultipartReplyMessage mpReply = (MultipartReplyMessage) msg;
OpenflowVersion ofVersion = OpenflowVersion.get(version);
NodeId node = nodeIdFromDatapathId(datapathId);
+ VersionConvertorData simpleConvertorData = new VersionConvertorData(version);
translateFlow(listDataObject, mpReply, node, ofVersion, datapathId);
translateAggregate(listDataObject, mpReply, node);
translatePortStats(listDataObject, mpReply, node, ofVersion, datapathId);
translateGroup(listDataObject, mpReply, node);
- translateGroupDesc(listDataObject, mpReply, node, ofVersion);
+ translateGroupDesc(listDataObject, mpReply, node, simpleConvertorData);
translateGroupFeatures(listDataObject, mpReply, node);
translateMeter(listDataObject, mpReply, node);
translateMeterConfig(listDataObject, mpReply, node);
message.setTransactionId(generateTransactionId(mpReply.getXid()));
MultipartReplyGroupCase caseBody = (MultipartReplyGroupCase) mpReply.getMultipartReplyBody();
MultipartReplyGroup replyBody = caseBody.getMultipartReplyGroup();
- message.setGroupStats(groupStatsConvertor.toSALGroupStatsList(replyBody.getGroupStats()));
+ final Optional<List<GroupStats>> groupStatsList = ConvertorManager.getInstance().convert(
+ replyBody.getGroupStats());
+
+ message.setGroupStats(groupStatsList.orElse(Collections.emptyList()));
listDataObject.add(message.build());
}
private static void translateGroupDesc(final List<DataObject> listDataObject,
final MultipartReplyMessage mpReply,
final NodeId node,
- final OpenflowVersion ofVersion) {
+ VersionConvertorData simpleConvertorData) {
if (!MultipartType.OFPMPGROUPDESC.equals(mpReply.getType())) {
return;
}
MultipartReplyGroupDescCase caseBody = (MultipartReplyGroupDescCase) mpReply.getMultipartReplyBody();
MultipartReplyGroupDesc replyBody = caseBody.getMultipartReplyGroupDesc();
- message.setGroupDescStats(groupStatsConvertor.toSALGroupDescStatsList(replyBody.getGroupDesc(), ofVersion));
+ final Optional<List<GroupDescStats>> groupDescStatsList = ConvertorManager.getInstance().convert(
+ replyBody.getGroupDesc(), simpleConvertorData);
+
+ message.setGroupDescStats(groupDescStatsList.orElse(Collections.emptyList()));
listDataObject.add(message.build());
}
import java.util.ArrayList;
import java.util.List;
+import java.util.Optional;
import java.util.concurrent.atomic.AtomicLong;
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.impl.services.RequestInputUtils;
import org.opendaylight.openflowplugin.impl.statistics.services.compatibility.AbstractCompatibleStatService;
-import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.GroupStatsResponseConvertor;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManager;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionConvertorData;
import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev150304.TransactionId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetGroupDescriptionInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GetGroupDescriptionOutput;
final class GroupDescriptionService
extends AbstractCompatibleStatService<GetGroupDescriptionInput, GetGroupDescriptionOutput, GroupDescStatsUpdated> {
private static final MultipartRequestGroupDescCase GROUP_DESC_CASE = new MultipartRequestGroupDescCaseBuilder().build();
- private final GroupStatsResponseConvertor groupStatsResponseConvertor;
public GroupDescriptionService(RequestContextStack requestContextStack, DeviceContext deviceContext, AtomicLong compatibilityXidSeed) {
super(requestContextStack, deviceContext, compatibilityXidSeed);
- groupStatsResponseConvertor = new GroupStatsResponseConvertor();
}
@Override
notification.setTransactionId(emulatedTxId);
notification.setGroupDescStats(new ArrayList<GroupDescStats>());
+ final VersionConvertorData data = new VersionConvertorData(getVersion());
+
for (MultipartReply mpReply : result) {
MultipartReplyGroupDescCase caseBody = (MultipartReplyGroupDescCase) mpReply.getMultipartReplyBody();
MultipartReplyGroupDesc replyBody = caseBody.getMultipartReplyGroupDesc();
- notification.getGroupDescStats().addAll(
- groupStatsResponseConvertor.toSALGroupDescStatsList(replyBody.getGroupDesc(), getOfVersion()));
+ final Optional<List<GroupDescStats>> groupDescStatsList = ConvertorManager.getInstance().convert(
+ replyBody.getGroupDesc(), data);
+
+ if (groupDescStatsList.isPresent()) {
+ notification.getGroupDescStats().addAll(groupDescStatsList.get());
+ }
}
return notification.build();
import java.util.ArrayList;
import java.util.List;
+import java.util.Optional;
import org.opendaylight.openflowplugin.api.openflow.device.DeviceInfo;
-import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.GroupStatsResponseConvertor;
+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.group.statistics.rev131111.GroupStatisticsUpdated;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GroupStatisticsUpdatedBuilder;
* pulled out group stats to notification transformation
*/
public class GroupStatisticsToNotificationTransformer {
-
- private static GroupStatsResponseConvertor groupStatsConvertor = new GroupStatsResponseConvertor();
-
/**
* @param mpReplyList raw multipart response from device
* @param deviceInfo device state
for (MultipartReply mpReply : mpReplyList) {
MultipartReplyGroupCase caseBody = (MultipartReplyGroupCase) mpReply.getMultipartReplyBody();
MultipartReplyGroup replyBody = caseBody.getMultipartReplyGroup();
- notification.getGroupStats().addAll(groupStatsConvertor.toSALGroupStatsList(replyBody.getGroupStats()));
+ final Optional<List<GroupStats>> groupStatsList = ConvertorManager.getInstance().convert(
+ replyBody.getGroupStats());
+
+ if (groupStatsList.isPresent()) {
+ notification.getGroupStats().addAll(groupStatsList.get());
+ }
}
return notification.build();
}
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.GroupStatsResponseConvertor;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorManager;
import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetGroupStatisticsInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetGroupStatisticsOutput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetGroupStatisticsOutputBuilder;
* The Group direct statistics service.
*/
public class GroupDirectStatisticsService extends AbstractDirectStatisticsService<GetGroupStatisticsInput, GetGroupStatisticsOutput> {
- private final GroupStatsResponseConvertor groupStatsConvertor = new GroupStatsResponseConvertor();
-
/**
* Instantiates a new Group direct statistics service.
*
for (final MultipartReply mpReply : input) {
final MultipartReplyGroupCase caseBody = (MultipartReplyGroupCase) mpReply.getMultipartReplyBody();
final MultipartReplyGroup replyBody = caseBody.getMultipartReplyGroup();
- groupStats.addAll(groupStatsConvertor.toSALGroupStatsList(replyBody.getGroupStats()));
+ final Optional<List<GroupStats>> groupStatsList = ConvertorManager.getInstance().convert(
+ replyBody.getGroupStats());
+
+ if (groupStatsList.isPresent()) {
+ groupStats.addAll(groupStatsList.get());
+ }
}
}
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.data.VersionDatapathIdConvertorData;
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;
@Override
public ListenableFuture<RpcResult<UpdateGroupOutput>> call() {
ListenableFuture<RpcResult<UpdateGroupOutput>> result = SettableFuture.create();
+ final VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData(getVersion());
+ data.setDatapathId(getSession().getFeatures().getDatapathId());
// Convert the AddGroupInput to GroupModInput
- GroupModInputBuilder ofGroupModInput = GroupConvertor.toGroupModInput(getInput(),
- getVersion(), getSession().getFeatures().getDatapathId());
- final Long xId = getSession().getNextXid();
- ofGroupModInput.setXid(xId);
+ final java.util.Optional<GroupModInputBuilder> ofGroupModInput = ConvertorManager.getInstance().convert(getInput(), data);
+ final GroupModInputBuilder groupModInputBuilder = ofGroupModInput
+ .orElse(GroupConvertor.defaultResult(getVersion()))
+ .setXid(getSession().getNextXid());
Future<RpcResult<UpdateGroupOutput>> resultFromOFLib = getMessageService()
- .groupMod(ofGroupModInput.build(), getCookie());
+ .groupMod(groupModInputBuilder.build(), getCookie());
result = JdkFutureAdapters.listenInPoolThread(resultFromOFLib);
-
result = OFRpcTaskUtil.chainFutureBarrier(this, result);
OFRpcTaskUtil.hookFutureNotification(this, result,
getRpcNotificationProviderService(), createGroupAddedNotification(getInput()));
@Override
public ListenableFuture<RpcResult<UpdateGroupOutput>> call() {
ListenableFuture<RpcResult<UpdateGroupOutput>> result = null;
+ final VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData(getVersion());
+ data.setDatapathId(getSession().getFeatures().getDatapathId());
// Convert the UpdateGroupInput to GroupModInput
- GroupModInputBuilder ofGroupModInput = GroupConvertor.toGroupModInput(
- getInput().getUpdatedGroup(), getVersion(),
- getSession().getFeatures().getDatapathId());
- final Long xId = getSession().getNextXid();
- ofGroupModInput.setXid(xId);
+ final java.util.Optional<GroupModInputBuilder> ofGroupModInput =
+ ConvertorManager.getInstance().convert(getInput().getUpdatedGroup(), data);
+
+ final GroupModInputBuilder groupModInputBuilder = ofGroupModInput
+ .orElse(GroupConvertor.defaultResult(getVersion()))
+ .setXid(getSession().getNextXid());
Future<RpcResult<UpdateGroupOutput>> resultFromOFLib =
- getMessageService().groupMod(ofGroupModInput.build(), getCookie());
+ getMessageService().groupMod(groupModInputBuilder.build(), getCookie());
result = JdkFutureAdapters.listenInPoolThread(resultFromOFLib);
result = OFRpcTaskUtil.chainFutureBarrier(this, result);
@Override
public ListenableFuture<RpcResult<UpdateGroupOutput>> call() {
ListenableFuture<RpcResult<UpdateGroupOutput>> result = SettableFuture.create();
+ final VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData(getVersion());
+ data.setDatapathId(getSession().getFeatures().getDatapathId());
// Convert the AddGroupInput to GroupModInput
- GroupModInputBuilder ofGroupModInput = GroupConvertor.toGroupModInput(getInput(),
- getVersion(), getSession().getFeatures().getDatapathId());
- final Long xId = getSession().getNextXid();
- ofGroupModInput.setXid(xId);
+ final java.util.Optional<GroupModInputBuilder> ofGroupModInput =
+ ConvertorManager.getInstance().convert(getInput(), data);
+
+ final GroupModInputBuilder groupModInputBuilder = ofGroupModInput
+ .orElse(GroupConvertor.defaultResult(getVersion()))
+ .setXid(getSession().getNextXid());
Future<RpcResult<UpdateGroupOutput>> resultFromOFLib = getMessageService()
- .groupMod(ofGroupModInput.build(), getCookie());
+ .groupMod(groupModInputBuilder.build(), getCookie());
result = JdkFutureAdapters.listenInPoolThread(resultFromOFLib);
-
result = OFRpcTaskUtil.chainFutureBarrier(this, result);
OFRpcTaskUtil.hookFutureNotification(this, result,
getRpcNotificationProviderService(), createGroupRemovedNotification(getInput()));
INSTANCE.registerConvertor(new MatchV10ResponseConvertor());
INSTANCE.registerConvertor(new ActionConvertor());
INSTANCE.registerConvertor(new ActionResponseConvertor());
+ INSTANCE.registerConvertor(new GroupConvertor());
+ INSTANCE.registerConvertor(new GroupDescStatsResponseConvertor());
+ INSTANCE.registerConvertor(new GroupStatsResponseConvertor());
}
// Actual convertor keys
-/**
+/*
* Copyright (c) 2014 Ericsson India Global Services Pvt Ltd. and others. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v1.0 which accompanies this distribution,
* and is available at http://www.eclipse.org/legal/epl-v10.html
*/
+
package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;
import java.math.BigInteger;
import java.util.Optional;
import org.opendaylight.openflowjava.protocol.api.util.BinContent;
import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action.data.ActionConvertorData;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.ParametrizedConvertor;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.AddGroupInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.RemoveGroupInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.group.update.UpdatedGroup;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.Buckets;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.Bucket;
import org.slf4j.LoggerFactory;
/**
- * This Utility class decodes the SAL - Group Mod Message and encodes into a OF
+ * Decodes the SAL - Group Mod Message and encodes into a OF
* Library for the OFPT_GROUP_MOD Message. Input:SAL Layer Group command data.
- * Output:GroupModInput Message.
- *
*
+ * Example usage:
+ * <pre>
+ * {@code
+ * VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData(version);
+ * data.setDatapathId(datapathId);
+ * Optional<GroupModInputBuilder> ofGroup = ConvertorManager.getInstance().convert(salGroup, data);
+ * }
+ * </pre>
*/
-public final class GroupConvertor {
+public class GroupConvertor implements ParametrizedConvertor<Group, GroupModInputBuilder, VersionDatapathIdConvertorData> {
+ /**
+ * Create default empty group mod input builder
+ * Use this method, if result from convertor is empty.
+ *
+ * @param version Openflow version
+ * @return default empty group mod input builder
+ */
+ public static GroupModInputBuilder defaultResult(short version) {
+ return new GroupModInputBuilder()
+ .setVersion(version);
+ }
private static final Logger LOG = LoggerFactory.getLogger(GroupConvertor.class);
-
private static final Integer DEFAULT_WEIGHT = 0;
private static final Long OFPP_ANY = Long.parseLong("ffffffff", 16);
private static final Long DEFAULT_WATCH_PORT = OFPP_ANY;
private static final Long OFPG_ANY = Long.parseLong("ffffffff", 16);
private static final Long DEFAULT_WATCH_GROUP = OFPG_ANY;
- private static final Comparator<Bucket> comparator = new Comparator<Bucket>(){
- @Override
- public int compare(Bucket bucket1,
- Bucket bucket2) {
- if(bucket1.getBucketId() == null || bucket2.getBucketId() == null) return 0;
- return bucket1.getBucketId().getValue().compareTo(bucket2.getBucketId().getValue());
- }
+ private static final Comparator<Bucket> COMPARATOR = (bucket1, bucket2) -> {
+ if (bucket1.getBucketId() == null || bucket2.getBucketId() == null) return 0;
+ return bucket1.getBucketId().getValue().compareTo(bucket2.getBucketId().getValue());
};
- private GroupConvertor() {
-
- }
-
- public static GroupModInputBuilder toGroupModInput(
-
- org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group source, short version,BigInteger datapathid) {
- List<BucketsList> bucketLists = null;
- GroupModInputBuilder groupModInputBuilder = new GroupModInputBuilder();
- if (source instanceof AddGroupInput) {
- groupModInputBuilder.setCommand(GroupModCommand.OFPGCADD);
- } else if (source instanceof RemoveGroupInput) {
- groupModInputBuilder.setCommand(GroupModCommand.OFPGCDELETE);
- } else if (source instanceof UpdatedGroup) {
- groupModInputBuilder.setCommand(GroupModCommand.OFPGCMODIFY);
- }
-
- if (GroupTypes.GroupAll.equals(source.getGroupType())) {
- groupModInputBuilder.setType(GroupType.OFPGTALL);
- }
-
- if (GroupTypes.GroupSelect.equals(source.getGroupType())) {
- groupModInputBuilder.setType(GroupType.OFPGTSELECT);
- }
-
- if (GroupTypes.GroupIndirect.equals(source.getGroupType())) {
- groupModInputBuilder.setType(GroupType.OFPGTINDIRECT);
- }
-
- if (GroupTypes.GroupFf.equals(source.getGroupType())) {
- groupModInputBuilder.setType(GroupType.OFPGTFF);
- }
-
- groupModInputBuilder.setGroupId(new GroupId(source.getGroupId().getValue()));
- // Only if the bucket is configured for the group then add it
- // During group deletion donot push the buckets
- if(groupModInputBuilder.getCommand() != GroupModCommand.OFPGCDELETE) {
- if ((source.getBuckets() != null) && (source.getBuckets().getBucket().size() != 0)) {
-
- Collections.sort(source.getBuckets().getBucket(), comparator);
-
- bucketLists = salToOFBucketList(source.getBuckets(), version, source.getGroupType().getIntValue(), datapathid);
- groupModInputBuilder.setBucketsList(bucketLists);
- }
- }
- groupModInputBuilder.setVersion(version);
- return groupModInputBuilder;
-
- }
-
- private static List<BucketsList> salToOFBucketList(Buckets buckets, short version, int groupType,BigInteger datapathid) {
+ private static List<BucketsList> salToOFBucketList(Buckets buckets, short version, int groupType, BigInteger datapathid) {
final List<BucketsList> bucketLists = new ArrayList<>();
final ActionConvertorData data = new ActionConvertorData(version);
data.setDatapathId(datapathid);
+
for (org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.Bucket groupBucket : buckets
.getBucket()) {
BucketsListBuilder bucketBuilder = new BucketsListBuilder();
BucketsList bucket = bucketBuilder.build();
bucketLists.add(bucket);
}
+
return bucketLists;
}
private static void salToOFBucketListWeight(Bucket groupBucket, BucketsListBuilder bucketBuilder, int groupType) {
if (null != groupBucket.getWeight()) {
- bucketBuilder.setWeight(groupBucket.getWeight().intValue());
+ bucketBuilder.setWeight(groupBucket.getWeight());
} else {
bucketBuilder.setWeight(DEFAULT_WEIGHT);
if (groupType == GroupType.OFPGTSELECT.getIntValue()) {
}
}
-}
+ @Override
+ public Class<?> getType() {
+ return Group.class;
+ }
+
+ @Override
+ public GroupModInputBuilder convert(Group source, VersionDatapathIdConvertorData data) {
+ GroupModInputBuilder groupModInputBuilder = new GroupModInputBuilder();
+ if (source instanceof AddGroupInput) {
+ groupModInputBuilder.setCommand(GroupModCommand.OFPGCADD);
+ } else if (source instanceof RemoveGroupInput) {
+ groupModInputBuilder.setCommand(GroupModCommand.OFPGCDELETE);
+ } else if (source instanceof UpdatedGroup) {
+ groupModInputBuilder.setCommand(GroupModCommand.OFPGCMODIFY);
+ }
+
+ if (GroupTypes.GroupAll.equals(source.getGroupType())) {
+ groupModInputBuilder.setType(GroupType.OFPGTALL);
+ }
+
+ if (GroupTypes.GroupSelect.equals(source.getGroupType())) {
+ groupModInputBuilder.setType(GroupType.OFPGTSELECT);
+ }
+
+ if (GroupTypes.GroupIndirect.equals(source.getGroupType())) {
+ groupModInputBuilder.setType(GroupType.OFPGTINDIRECT);
+ }
+
+ if (GroupTypes.GroupFf.equals(source.getGroupType())) {
+ groupModInputBuilder.setType(GroupType.OFPGTFF);
+ }
+
+ groupModInputBuilder.setGroupId(new GroupId(source.getGroupId().getValue()));
+
+ // Only if the bucket is configured for the group then add it
+ // During group deletion do not push the buckets
+ if (groupModInputBuilder.getCommand() != GroupModCommand.OFPGCDELETE) {
+ if ((source.getBuckets() != null) && (source.getBuckets().getBucket().size() != 0)) {
+
+ Collections.sort(source.getBuckets().getBucket(), COMPARATOR);
+
+ List<BucketsList> bucketLists = salToOFBucketList(source.getBuckets(), data.getVersion(), source.getGroupType().getIntValue(), data.getDatapathId());
+ groupModInputBuilder.setBucketsList(bucketLists);
+ }
+ }
+
+ groupModInputBuilder.setVersion(data.getVersion());
+ return groupModInputBuilder;
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * 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.Collections;
+import java.util.List;
+import java.util.Optional;
+import org.opendaylight.openflowplugin.extension.api.path.ActionPath;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action.data.ActionResponseConvertorData;
+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.action.types.rev131112.action.list.Action;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.BucketId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.Bucket;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.desc.stats.reply.GroupDescStats;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.desc.stats.reply.GroupDescStatsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.desc.stats.reply.GroupDescStatsKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.buckets.grouping.BucketsList;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group.desc._case.multipart.reply.group.desc.GroupDesc;
+
+/**
+ * Converts GroupDesc message from library to MD SAL defined GroupDescStats
+ *
+ * Example usage:
+ * <pre>
+ * {@code
+ * VersionConvertorData data = new VersionConvertorData(version);
+ * Optional<List<GroupDescStats>> salGroupStats = ConvertorManager.getInstance().convert(ofGroupStats, data);
+ * }
+ * </pre>
+ */
+public class GroupDescStatsResponseConvertor implements ParametrizedConvertor<List<GroupDesc>, List<GroupDescStats>, VersionConvertorData> {
+
+ private org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.Buckets toSALBucketsDesc(List<BucketsList> bucketDescStats, short version) {
+ final ActionResponseConvertorData data = new ActionResponseConvertorData(version);
+ data.setActionPath(ActionPath.GROUPDESCSTATSUPDATED_GROUPDESCSTATS_BUCKETS_BUCKET_ACTION);
+
+ org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.BucketsBuilder salBucketsDesc =
+ new org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.BucketsBuilder();
+ List<Bucket> allBuckets = new ArrayList<>();
+ int bucketKey = 0;
+
+ for (BucketsList bucketDetails : bucketDescStats) {
+ BucketBuilder bucketDesc = new BucketBuilder();
+ final Optional<List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action>> convertedSalActions =
+ ConvertorManager.getInstance().convert(
+ bucketDetails.getAction(), data);
+
+
+ if (convertedSalActions.isPresent()) {
+ List<Action> actions = new ArrayList<>();
+
+ int actionKey = 0;
+
+ for (org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action : convertedSalActions.get()) {
+ ActionBuilder wrappedAction = new ActionBuilder();
+ wrappedAction.setAction(action);
+ wrappedAction.setKey(new ActionKey(actionKey));
+ wrappedAction.setOrder(actionKey);
+ actions.add(wrappedAction.build());
+ actionKey++;
+ }
+
+ bucketDesc.setAction(actions);
+ } else {
+ bucketDesc.setAction(Collections.emptyList());
+ }
+
+ bucketDesc.setWeight(bucketDetails.getWeight());
+ bucketDesc.setWatchPort(bucketDetails.getWatchPort().getValue());
+ bucketDesc.setWatchGroup(bucketDetails.getWatchGroup());
+ BucketId bucketId = new BucketId((long) bucketKey);
+ bucketDesc.setBucketId(bucketId);
+ bucketDesc.setKey(new BucketKey(bucketId));
+ bucketKey++;
+ allBuckets.add(bucketDesc.build());
+ }
+
+ salBucketsDesc.setBucket(allBuckets);
+ return salBucketsDesc.build();
+ }
+
+ @Override
+ public Class<?> getType() {
+ return GroupDesc.class;
+ }
+
+ @Override
+ public List<GroupDescStats> convert(List<GroupDesc> source, VersionConvertorData data) {
+ List<GroupDescStats> convertedSALGroupsDesc = new ArrayList<>();
+
+ for (GroupDesc groupDesc : source) {
+ GroupDescStatsBuilder salGroupDescStats = new GroupDescStatsBuilder();
+
+ salGroupDescStats.setBuckets(toSALBucketsDesc(groupDesc.getBucketsList(), data.getVersion()));
+ salGroupDescStats.setGroupId(new GroupId(groupDesc.getGroupId().getValue()));
+ salGroupDescStats.setGroupType(GroupTypes.forValue(groupDesc.getType().getIntValue()));
+ salGroupDescStats.setKey(new GroupDescStatsKey(salGroupDescStats.getGroupId()));
+
+ convertedSALGroupsDesc.add(salGroupDescStats.build());
+ }
+
+ return convertedSALGroupsDesc;
+ }
+}
\ No newline at end of file
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.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.extension.api.path.ActionPath;
-import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.action.data.ActionResponseConvertorData;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionKey;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.common.Convertor;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.BucketId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.Bucket;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.BucketKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.desc.stats.reply.GroupDescStats;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.desc.stats.reply.GroupDescStatsBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.desc.stats.reply.GroupDescStatsKey;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.Buckets;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.BucketsBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.DurationBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply.GroupStats;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply.GroupStatsBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply.GroupStatsKey;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.buckets.grouping.BucketsList;
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.multipart.reply.group.group.stats.BucketStats;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group.desc._case.multipart.reply.group.desc.GroupDesc;
/**
- * Class is an utility class for converting group related statistics messages coming from switch to MD-SAL
- * messages.
- * @author avishnoi@in.ibm.com
+ * Converts group related statistics messages coming from switch to MD-SAL messages.
*
+ * Example usage:
+ * <pre>
+ * {@code
+ * Optional<List<GroupStats>> salGroupStats = ConvertorManager.getInstance().convert(ofGroupStats);
+ * }
+ * </pre>
*/
-public class GroupStatsResponseConvertor {
+public class GroupStatsResponseConvertor implements Convertor<
+ List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.multipart.reply.group.GroupStats>,
+ List<GroupStats>> {
- public List<GroupStats> toSALGroupStatsList(
- List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply
- .multipart.reply.body.multipart.reply.group._case.multipart.reply.group.GroupStats> allGroupStats){
- List<GroupStats> convertedSALGroups = new ArrayList<>();
- for(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply
- .multipart.reply.body.multipart.reply.group._case.multipart.reply.group.GroupStats group: allGroupStats){
- convertedSALGroups.add(toSALGroupStats(group));
- }
- return convertedSALGroups;
-
- }
- /**
- * Method convert GroupStats message from library to MD SAL defined GroupStats
- * @param groupStats GroupStats from library
- * @return GroupStats -- GroupStats defined in MD-SAL
- */
- public GroupStats toSALGroupStats(
- org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.
- multipart.reply.body.multipart.reply.group._case.multipart.reply.group.GroupStats groupStats){
-
- GroupStatsBuilder salGroupStats = new GroupStatsBuilder();
-
- salGroupStats.setBuckets(toSALBuckets(groupStats.getBucketStats()));
- salGroupStats.setByteCount(new Counter64(groupStats.getByteCount()));
-
- DurationBuilder time = new DurationBuilder();
- time.setSecond(new Counter32(groupStats.getDurationSec()));
- time.setNanosecond(new Counter32(groupStats.getDurationNsec()));
-
- salGroupStats.setDuration(time.build());
- salGroupStats.setGroupId(new GroupId(groupStats.getGroupId().getValue()));
- salGroupStats.setPacketCount(new Counter64(groupStats.getPacketCount()));
- salGroupStats.setRefCount(new Counter32(groupStats.getRefCount()));
- salGroupStats.setKey(new GroupStatsKey(salGroupStats.getGroupId()));
-
- return salGroupStats.build();
- }
-
- public Buckets toSALBuckets(
- List<BucketStats> bucketStats ){
-
- BucketsBuilder salBuckets = new BucketsBuilder();
+ private Buckets toSALBuckets(List<BucketStats> bucketStats) {
+ BucketsBuilder salBuckets = new BucketsBuilder();
List<BucketCounter> allBucketStats = new ArrayList<>();
int bucketKey = 0;
- for(BucketStats bucketStat : bucketStats){
+
+ for (BucketStats bucketStat : bucketStats) {
BucketCounterBuilder bucketCounter = new BucketCounterBuilder();
bucketCounter.setByteCount(new Counter64(bucketStat.getByteCount()));
bucketCounter.setPacketCount(new Counter64(bucketStat.getPacketCount()));
- BucketId bucketId = new BucketId((long)bucketKey);
+ BucketId bucketId = new BucketId((long) bucketKey);
bucketCounter.setKey(new BucketCounterKey(bucketId));
bucketCounter.setBucketId(bucketId);
bucketKey++;
allBucketStats.add(bucketCounter.build());
}
+
salBuckets.setBucketCounter(allBucketStats);
return salBuckets.build();
}
-
- public List<GroupDescStats> toSALGroupDescStatsList(
- List<GroupDesc> allGroupDescStats, OpenflowVersion ofVersion){
-
- List<GroupDescStats> convertedSALGroupsDesc = new ArrayList<>();
- for(GroupDesc groupDesc: allGroupDescStats){
- convertedSALGroupsDesc.add(toSALGroupDescStats(groupDesc, ofVersion));
- }
- return convertedSALGroupsDesc;
-
- }
- /**
- * Method convert GroupStats message from library to MD SAL defined GroupStats
- * @param groupDesc GroupStats from library
- * @param ofVersion current ofp version
- * @return GroupStats -- GroupStats defined in MD-SAL
- */
- public GroupDescStats toSALGroupDescStats(GroupDesc groupDesc, OpenflowVersion ofVersion){
-
- GroupDescStatsBuilder salGroupDescStats = new GroupDescStatsBuilder();
-
- salGroupDescStats.setBuckets(toSALBucketsDesc(groupDesc.getBucketsList(), ofVersion));
- salGroupDescStats.setGroupId(new GroupId(groupDesc.getGroupId().getValue()));
- salGroupDescStats.setGroupType(GroupTypes.forValue(groupDesc.getType().getIntValue()));
- salGroupDescStats.setKey(new GroupDescStatsKey(salGroupDescStats.getGroupId()));
-
- return salGroupDescStats.build();
+ @Override
+ public Class<?> getType() {
+ return org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.multipart.reply.group.GroupStats.class;
}
- public org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.Buckets toSALBucketsDesc(
- List<BucketsList> bucketDescStats, OpenflowVersion ofVersion ){
- final ActionResponseConvertorData data = new ActionResponseConvertorData(ofVersion.getVersion());
- data.setActionPath(ActionPath.GROUPDESCSTATSUPDATED_GROUPDESCSTATS_BUCKETS_BUCKET_ACTION);
+ @Override
+ public List<GroupStats> convert(List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.multipart.reply.group.GroupStats> source) {
+ List<GroupStats> convertedSALGroups = new ArrayList<>();
- org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.BucketsBuilder salBucketsDesc =
- new org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.BucketsBuilder();
- List<Bucket> allBuckets = new ArrayList<>();
- int bucketKey = 0;
- for(BucketsList bucketDetails : bucketDescStats){
- BucketBuilder bucketDesc = new BucketBuilder();
- final Optional<List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action>> convertedSalActions =
- ConvertorManager.getInstance().convert(bucketDetails.getAction(), data);
+ for (org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply
+ .multipart.reply.body.multipart.reply.group._case.multipart.reply.group.GroupStats groupStats : source) {
+ GroupStatsBuilder salGroupStats = new GroupStatsBuilder();
- if (convertedSalActions.isPresent()) {
- List<Action> actions = new ArrayList<>();
- int actionKey = 0;
- for (org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.Action action : convertedSalActions.get()) {
- ActionBuilder wrappedAction = new ActionBuilder();
- wrappedAction.setAction(action);
- wrappedAction.setKey(new ActionKey(actionKey));
- wrappedAction.setOrder(actionKey);
- actions.add(wrappedAction.build());
- actionKey++;
- }
+ salGroupStats.setBuckets(toSALBuckets(groupStats.getBucketStats()));
+ salGroupStats.setByteCount(new Counter64(groupStats.getByteCount()));
- bucketDesc.setAction(actions);
- } else {
- bucketDesc.setAction(Collections.emptyList());
- }
+ DurationBuilder time = new DurationBuilder();
+ time.setSecond(new Counter32(groupStats.getDurationSec()));
+ time.setNanosecond(new Counter32(groupStats.getDurationNsec()));
- bucketDesc.setWeight(bucketDetails.getWeight());
- bucketDesc.setWatchPort(bucketDetails.getWatchPort().getValue());
- bucketDesc.setWatchGroup(bucketDetails.getWatchGroup());
- BucketId bucketId = new BucketId((long)bucketKey);
- bucketDesc.setBucketId(bucketId);
- bucketDesc.setKey(new BucketKey(bucketId));
- bucketKey++;
- allBuckets.add(bucketDesc.build());
+ salGroupStats.setDuration(time.build());
+ salGroupStats.setGroupId(new GroupId(groupStats.getGroupId().getValue()));
+ salGroupStats.setPacketCount(new Counter64(groupStats.getPacketCount()));
+ salGroupStats.setRefCount(new Counter32(groupStats.getRefCount()));
+ salGroupStats.setKey(new GroupStatsKey(salGroupStats.getGroupId()));
+ convertedSALGroups.add(salGroupStats.build());
}
- salBucketsDesc.setBucket(allBuckets);
- return salBucketsDesc.build();
- }
+ return convertedSALGroups;
+ }
}
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.data.VersionConvertorData;
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;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupType;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.SelectLiveness;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.SelectWeight;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.desc.stats.reply.GroupDescStats;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply.GroupStats;
import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.MeterConfigStatsUpdatedBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.MeterFeaturesUpdatedBuilder;
.getLogger(MultipartReplyTranslator.class);
private static FlowStatsResponseConvertor flowStatsConvertor = new FlowStatsResponseConvertor();
- private static GroupStatsResponseConvertor groupStatsConvertor = new GroupStatsResponseConvertor();
@Override
message.setTransactionId(generateTransactionId(mpReply.getXid()));
MultipartReplyGroupCase caseBody = (MultipartReplyGroupCase)mpReply.getMultipartReplyBody();
MultipartReplyGroup replyBody = caseBody.getMultipartReplyGroup();
- message.setGroupStats(groupStatsConvertor.toSALGroupStatsList(replyBody.getGroupStats()));
-
+ final Optional<List<GroupStats>> groupStatsList = ConvertorManager.getInstance().convert(replyBody.getGroupStats());
+ message.setGroupStats(groupStatsList.orElse(Collections.emptyList()));
logger.debug("Converted group statistics : {}",message.toString());
listDataObject.add(message.build());
return listDataObject;
MultipartReplyGroupDescCase caseBody = (MultipartReplyGroupDescCase)mpReply.getMultipartReplyBody();
MultipartReplyGroupDesc replyBody = caseBody.getMultipartReplyGroupDesc();
- message.setGroupDescStats(groupStatsConvertor.toSALGroupDescStatsList(replyBody.getGroupDesc(), ofVersion));
-
+ final VersionConvertorData data = new VersionConvertorData(sc.getPrimaryConductor().getVersion());
+ final Optional<List<GroupDescStats>> groupDescStatsList = ConvertorManager.getInstance().convert(replyBody.getGroupDesc(), data);
+ message.setGroupDescStats(groupDescStatsList.orElse(Collections.emptyList()));
logger.debug("Converted group statistics : {}",message.toString());
listDataObject.add(message.build());
return listDataObject;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.List;
+import java.util.Optional;
import org.junit.Assert;
import org.junit.Test;
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData;
import org.opendaylight.openflowplugin.openflow.md.util.OpenflowPortsUtil;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Uri;
import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlInCaseBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.AddGroupInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.service.rev130918.AddGroupInputBuilder;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.BucketId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.Buckets;
public class GroupConvertorTest {
/**
- * test of {@link GroupConvertor#toGroupModInput(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, short, java.math.BigInteger)}
+ * test of {@link org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.GroupConvertor#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData)} }
*/
@Test
public void testGroupModConvertorwithallParameters() {
addGroupBuilder.setBuckets(buckets);
- final GroupModInputBuilder outAddGroupInput = GroupConvertor.toGroupModInput(addGroupBuilder.build(), (short) 0X4, BigInteger.valueOf(1));
+ VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData((short) 0X4);
+ data.setDatapathId(BigInteger.valueOf(1));
+
+ final GroupModInputBuilder outAddGroupInput = convert(addGroupBuilder.build(), data);
Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
Assert.assertEquals(GroupType.OFPGTALL, outAddGroupInput.getType());
}
/**
- * test of {@link GroupConvertor#toGroupModInput(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, short, java.math.BigInteger)}
+ * test of {@link org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.GroupConvertor#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData)} }
*/
@Test
public void testGroupModConvertorNoBucket() {
addGroupBuilder.setGroupType(GroupTypes.GroupAll);
- final GroupModInputBuilder outAddGroupInput = GroupConvertor.toGroupModInput(addGroupBuilder.build(), (short) 0X4, BigInteger.valueOf(1));
+ VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData((short) 0X4);
+ data.setDatapathId(BigInteger.valueOf(1));
+ final GroupModInputBuilder outAddGroupInput = convert(addGroupBuilder.build(), data);
Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
Assert.assertEquals(GroupType.OFPGTALL, outAddGroupInput.getType());
}
/**
- * test of {@link GroupConvertor#toGroupModInput(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, short, java.math.BigInteger)}
+ * test of {@link org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.GroupConvertor#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData)} }
*/
@Test
public void testGroupModConvertorBucketwithNOWieghtValuesForGroupTypeFastFailure() {
addGroupBuilder.setBuckets(buckets);
- final GroupModInputBuilder outAddGroupInput = GroupConvertor.toGroupModInput(addGroupBuilder.build(), (short) 0X4, BigInteger.valueOf(1));
+ VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData((short) 0X4);
+ data.setDatapathId(BigInteger.valueOf(1));
+
+ final GroupModInputBuilder outAddGroupInput = convert(addGroupBuilder.build(), data);
Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
Assert.assertEquals(GroupType.OFPGTFF, outAddGroupInput.getType());
}
/**
- * test of {@link GroupConvertor#toGroupModInput(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, short, java.math.BigInteger)}
+ * test of {@link org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.GroupConvertor#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData)} }
*/
@Test
public void testGroupModConvertSortedBuckets() {
final ArrayList<Bucket> bucket = new ArrayList<Bucket>();
bucket.add(new BucketBuilder()
- .setBucketId(new BucketId((long) 4))
- .setWatchPort((long)2)
- .setWatchGroup((long) 1)
- .setAction(ImmutableList.of(new ActionBuilder()
+ .setBucketId(new BucketId((long) 4))
+ .setWatchPort((long)2)
+ .setWatchGroup((long) 1)
+ .setAction(ImmutableList.of(new ActionBuilder()
.setOrder(0)
.setAction(new OutputActionCaseBuilder()
- .setOutputAction(new OutputActionBuilder()
- .setOutputNodeConnector(new Uri("openflow:1:2"))
- .build())
+ .setOutputAction(new OutputActionBuilder()
+ .setOutputNodeConnector(new Uri("openflow:1:2"))
.build())
+ .build())
.build()))
- .build());
+ .build());
bucket.add(new BucketBuilder()
- .setBucketId(new BucketId((long) 3))
- .setWatchPort((long)6)
- .setWatchGroup((long) 1)
- .setAction(ImmutableList.of(new ActionBuilder()
+ .setBucketId(new BucketId((long) 3))
+ .setWatchPort((long)6)
+ .setWatchGroup((long) 1)
+ .setAction(ImmutableList.of(new ActionBuilder()
.setOrder(0)
.setAction(new OutputActionCaseBuilder()
- .setOutputAction(new OutputActionBuilder()
- .setOutputNodeConnector(new Uri("openflow:1:6"))
- .build())
+ .setOutputAction(new OutputActionBuilder()
+ .setOutputNodeConnector(new Uri("openflow:1:6"))
.build())
+ .build())
.build()))
.build());
bucket.add(new BucketBuilder()
- .setBucketId(new BucketId((long) 2))
- .setWatchPort((long)5)
- .setWatchGroup((long) 1)
- .setAction(ImmutableList.of(new ActionBuilder()
+ .setBucketId(new BucketId((long) 2))
+ .setWatchPort((long)5)
+ .setWatchGroup((long) 1)
+ .setAction(ImmutableList.of(new ActionBuilder()
.setOrder(0)
.setAction(new OutputActionCaseBuilder()
- .setOutputAction(new OutputActionBuilder()
- .setOutputNodeConnector(new Uri("openflow:1:5"))
- .build())
+ .setOutputAction(new OutputActionBuilder()
+ .setOutputNodeConnector(new Uri("openflow:1:5"))
.build())
+ .build())
.build()))
.build());
bucket.add(new BucketBuilder()
- .setBucketId(new BucketId((long) 1))
- .setWatchPort((long)4)
- .setWatchGroup((long) 1)
- .setAction(ImmutableList.of(new ActionBuilder()
- .setOrder(0)
- .setAction(new OutputActionCaseBuilder()
- .setOutputAction(new OutputActionBuilder()
- .setOutputNodeConnector(new Uri("openflow:1:4"))
- .build())
- .build())
- .build()))
- .build());
+ .setBucketId(new BucketId((long) 1))
+ .setWatchPort((long)4)
+ .setWatchGroup((long) 1)
+ .setAction(ImmutableList.of(new ActionBuilder()
+ .setOrder(0)
+ .setAction(new OutputActionCaseBuilder()
+ .setOutputAction(new OutputActionBuilder()
+ .setOutputNodeConnector(new Uri("openflow:1:4"))
+ .build())
+ .build())
+ .build()))
+ .build());
bucket.add(new BucketBuilder()
- .setBucketId(new BucketId((long) 0))
- .setWatchPort((long)3)
- .setWatchGroup((long) 1)
- .setAction(ImmutableList.of(new ActionBuilder()
- .setOrder(0)
- .setAction(new OutputActionCaseBuilder()
- .setOutputAction(new OutputActionBuilder()
- .setOutputNodeConnector(new Uri("openflow:1:3"))
- .build())
- .build())
- .build()))
- .build());
+ .setBucketId(new BucketId((long) 0))
+ .setWatchPort((long)3)
+ .setWatchGroup((long) 1)
+ .setAction(ImmutableList.of(new ActionBuilder()
+ .setOrder(0)
+ .setAction(new OutputActionCaseBuilder()
+ .setOutputAction(new OutputActionBuilder()
+ .setOutputNodeConnector(new Uri("openflow:1:3"))
+ .build())
+ .build())
+ .build()))
+ .build());
final AddGroupInput input = new AddGroupInputBuilder()
- .setGroupId(new GroupId((long) 1))
- .setGroupName("Foo")
- .setGroupType(GroupTypes.GroupFf)
- .setBuckets(new BucketsBuilder()
- .setBucket(bucket)
- .build())
- .build();
+ .setGroupId(new GroupId((long) 1))
+ .setGroupName("Foo")
+ .setGroupType(GroupTypes.GroupFf)
+ .setBuckets(new BucketsBuilder()
+ .setBucket(bucket)
+ .build())
+ .build();
OpenflowPortsUtil.init();
- final GroupModInputBuilder outAddGroupInput = GroupConvertor.toGroupModInput(input, (short) 0X4, BigInteger.valueOf(1));
+ VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData((short) 0X4);
+ data.setDatapathId(BigInteger.valueOf(1));
+
+ final GroupModInputBuilder outAddGroupInput = convert(input, data);
final List<BucketsList> bucketList = outAddGroupInput.getBucketsList();
Assert.assertEquals( Long.valueOf(1), bucketList.get(0).getWatchGroup());
}
/**
- * test of {@link GroupConvertor#toGroupModInput(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, short, java.math.BigInteger)} )}
+ * test of {@link org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.GroupConvertor#convert(org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.Group, org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionDatapathIdConvertorData)} }
*/
@Test
public void testGroupModConvertorBucketwithNOWieghtValuesForGroupTypeAll() {
addGroupBuilder.setBuckets(buckets);
- final GroupModInputBuilder outAddGroupInput = GroupConvertor.toGroupModInput(addGroupBuilder.build(), (short) 0X4, BigInteger.valueOf(1));
+ VersionDatapathIdConvertorData data = new VersionDatapathIdConvertorData((short) 0X4);
+ data.setDatapathId(BigInteger.valueOf(1));
+
+ final GroupModInputBuilder outAddGroupInput = convert(addGroupBuilder.build(), data);
Assert.assertEquals(GroupModCommand.OFPGCADD, outAddGroupInput.getCommand());
Assert.assertEquals(GroupType.OFPGTALL, outAddGroupInput.getType());
}
}
+
+ private GroupModInputBuilder convert(Group group, VersionDatapathIdConvertorData data) {
+ final Optional<GroupModInputBuilder> outAddGroupInputOptional = ConvertorManager.getInstance().convert(group, data);
+ Assert.assertTrue("Group convertor not found", outAddGroupInputOptional.isPresent());
+ return outAddGroupInputOptional.get();
+ }
}
package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;\r
\r
import java.util.ArrayList;\r
+import java.util.Collections;\r
import java.util.List;\r
-\r
+import java.util.Optional;\r
import org.junit.Assert;\r
import org.junit.Test;\r
-import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;\r
+import org.opendaylight.openflowplugin.api.OFConstants;\r
+import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.data.VersionConvertorData;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupTypes;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.buckets.Bucket;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.desc.stats.reply.GroupDescStats;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.CopyTtlInCaseBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.CopyTtlOutCaseBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.DecNwTtlCaseBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.action.grouping.action.choice.PopPbbCaseBuilder;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.Action;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev150203.actions.grouping.ActionBuilder;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupId;\r
* @author michal.polkorab\r
*\r
*/\r
-public class GroupStatsResponseConvertorTest2 {\r
-\r
- GroupStatsResponseConvertor convertor = new GroupStatsResponseConvertor();\r
+public class GroupDescStatsResponseConvertorTest {\r
\r
/**\r
* Test empty GroupDescStats conversion\r
public void test() {\r
List<GroupDesc> groupDescStats = new ArrayList<>();\r
\r
- List<GroupDescStats> statsList = convertor.toSALGroupDescStatsList(groupDescStats, OpenflowVersion.OF13);\r
-\r
+ VersionConvertorData data = new VersionConvertorData(OFConstants.OFP_VERSION_1_3);\r
+ List<GroupDescStats> statsList = convert(groupDescStats, data);\r
Assert.assertEquals("Wrong groupDesc stats size", 0, statsList.size());\r
}\r
\r
GroupDescBuilder builder = new GroupDescBuilder();\r
builder.setType(GroupType.OFPGTALL);\r
builder.setGroupId(new GroupId(42L));\r
- builder.setBucketsList(new ArrayList<BucketsList>());\r
+ builder.setBucketsList(new ArrayList<>());\r
groupDescStats.add(builder.build());\r
\r
- List<GroupDescStats> statsList = convertor.toSALGroupDescStatsList(groupDescStats, OpenflowVersion.OF13);\r
+ VersionConvertorData data = new VersionConvertorData(OFConstants.OFP_VERSION_1_3);\r
+ List<GroupDescStats> statsList = convert(groupDescStats, data);\r
\r
Assert.assertEquals("Wrong groupDesc stats size", 1, statsList.size());\r
GroupDescStats stat = statsList.get(0);\r
@Test\r
public void testGroupDescStats() {\r
List<GroupDesc> groupDescStats = new ArrayList<>();\r
+\r
+ // **********************************************\r
+ // First group desc\r
+ // **********************************************\r
GroupDescBuilder builder = new GroupDescBuilder();\r
builder.setType(GroupType.OFPGTFF);\r
builder.setGroupId(new GroupId(42L));\r
+\r
+ // Buckets for first group desc\r
List<BucketsList> bucketsList = new ArrayList<>();\r
BucketsListBuilder bucketsBuilder = new BucketsListBuilder();\r
bucketsBuilder.setWeight(16);\r
bucketsBuilder.setWatchPort(new PortNumber(84L));\r
bucketsBuilder.setWatchGroup(168L);\r
+\r
+ // Actions for buckets for first group desc\r
List<Action> actions = new ArrayList<>();\r
ActionBuilder actionBuilder = new ActionBuilder();\r
+ actionBuilder.setActionChoice(new CopyTtlInCaseBuilder().build());\r
actions.add(actionBuilder.build());\r
+\r
+ // Build bucket with actions\r
bucketsBuilder.setAction(actions);\r
bucketsList.add(bucketsBuilder.build());\r
+\r
+ // Build first group desc\r
builder.setBucketsList(bucketsList);\r
groupDescStats.add(builder.build());\r
+\r
+ // **********************************************\r
+ // Second group desc\r
+ // **********************************************\r
builder = new GroupDescBuilder();\r
builder.setType(GroupType.OFPGTINDIRECT);\r
builder.setGroupId(new GroupId(50L));\r
+\r
+ // First buckets for second group desc\r
bucketsList = new ArrayList<>();\r
bucketsBuilder = new BucketsListBuilder();\r
bucketsBuilder.setWeight(100);\r
bucketsBuilder.setWatchPort(new PortNumber(200L));\r
bucketsBuilder.setWatchGroup(400L);\r
+\r
+ // Actions for first buckets for second group desc\r
actions = new ArrayList<>();\r
+\r
actionBuilder = new ActionBuilder();\r
+ actionBuilder.setActionChoice(new CopyTtlOutCaseBuilder().build());\r
actions.add(actionBuilder.build());\r
+\r
actionBuilder = new ActionBuilder();\r
+ actionBuilder.setActionChoice(new DecNwTtlCaseBuilder().build());\r
actions.add(actionBuilder.build());\r
+\r
actionBuilder = new ActionBuilder();\r
+ actionBuilder.setActionChoice(new PopPbbCaseBuilder().build());\r
actions.add(actionBuilder.build());\r
+\r
+ // Build first bucket with actions\r
bucketsBuilder.setAction(actions);\r
bucketsList.add(bucketsBuilder.build());\r
+\r
+ // Second buckets for second group desc\r
bucketsBuilder = new BucketsListBuilder();\r
bucketsBuilder.setWeight(5);\r
bucketsBuilder.setWatchPort(new PortNumber(10L));\r
bucketsBuilder.setWatchGroup(15L);\r
+\r
+ // Actions for second buckets for second group desc\r
actions = new ArrayList<>();\r
+\r
+ // Build second bucket with actions\r
bucketsBuilder.setAction(actions);\r
bucketsList.add(bucketsBuilder.build());\r
+\r
+ // Build second group desc\r
builder.setBucketsList(bucketsList);\r
groupDescStats.add(builder.build());\r
\r
- List<GroupDescStats> statsList = convertor.toSALGroupDescStatsList(groupDescStats, OpenflowVersion.OF13);\r
\r
+ VersionConvertorData data = new VersionConvertorData(OFConstants.OFP_VERSION_1_3);\r
+ List<GroupDescStats> statsList = convert(groupDescStats, data);\r
Assert.assertEquals("Wrong groupDesc stats size", 2, statsList.size());\r
+\r
+ // **********************************************\r
+ // Test first group desc\r
+ // **********************************************\r
GroupDescStats stat = statsList.get(0);\r
Assert.assertEquals("Wrong type", GroupTypes.GroupFf, stat.getGroupType());\r
Assert.assertEquals("Wrong group-id", 42, stat.getGroupId().getValue().intValue());\r
Assert.assertEquals("Wrong key", 42, stat.getKey().getGroupId().getValue().intValue());\r
Assert.assertEquals("Wrong buckets size", 1, stat.getBuckets().getBucket().size());\r
+\r
+ // Test first bucket for first group desc\r
Bucket bucket = stat.getBuckets().getBucket().get(0);\r
Assert.assertEquals("Wrong type", 0, bucket.getKey().getBucketId().getValue().intValue());\r
Assert.assertEquals("Wrong type", 0, bucket.getBucketId().getValue().intValue());\r
Assert.assertEquals("Wrong type", 168, bucket.getWatchGroup().intValue());\r
Assert.assertEquals("Wrong type", 84, bucket.getWatchPort().intValue());\r
Assert.assertEquals("Wrong type", 1, bucket.getAction().size());\r
+\r
+ // Test first action for first bucket for first group desc\r
org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list\r
- .Action action = bucket.getAction().get(0);\r
+ .Action action = bucket.getAction().get(0);\r
Assert.assertEquals("Wrong type", 0, action.getOrder().intValue());\r
Assert.assertEquals("Wrong type", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112"\r
+ ".action.action.CopyTtlInCase", action.getAction().getImplementedInterface().getName());\r
\r
+ // **********************************************\r
+ // Test second group desc\r
+ // **********************************************\r
stat = statsList.get(1);\r
Assert.assertEquals("Wrong type", GroupTypes.GroupIndirect, stat.getGroupType());\r
Assert.assertEquals("Wrong group-id", 50, stat.getGroupId().getValue().intValue());\r
Assert.assertEquals("Wrong key", 50, stat.getKey().getGroupId().getValue().intValue());\r
Assert.assertEquals("Wrong buckets size", 2, stat.getBuckets().getBucket().size());\r
+\r
+ // Test first bucket for second group desc\r
bucket = stat.getBuckets().getBucket().get(0);\r
Assert.assertEquals("Wrong type", 0, bucket.getKey().getBucketId().getValue().intValue());\r
Assert.assertEquals("Wrong type", 0, bucket.getBucketId().getValue().intValue());\r
Assert.assertEquals("Wrong type", 400, bucket.getWatchGroup().intValue());\r
Assert.assertEquals("Wrong type", 200, bucket.getWatchPort().intValue());\r
Assert.assertEquals("Wrong type", 3, bucket.getAction().size());\r
+\r
+ // Test first action for first bucket of second group desc\r
action = bucket.getAction().get(0);\r
Assert.assertEquals("Wrong type", 0, action.getOrder().intValue());\r
Assert.assertEquals("Wrong type", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112"\r
+ ".action.action.CopyTtlOutCase", action.getAction().getImplementedInterface().getName());\r
+\r
+ // Test second action for first bucket of second group desc\r
action = bucket.getAction().get(1);\r
Assert.assertEquals("Wrong type", 1, action.getOrder().intValue());\r
Assert.assertEquals("Wrong type", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112"\r
+ ".action.action.DecNwTtlCase", action.getAction().getImplementedInterface().getName());\r
+\r
+ // Test third action for first bucket of second group desc\r
action = bucket.getAction().get(2);\r
Assert.assertEquals("Wrong type", 2, action.getOrder().intValue());\r
Assert.assertEquals("Wrong type", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112"\r
+ ".action.action.PopPbbActionCase", action.getAction().getImplementedInterface().getName());\r
+\r
+ // Test second bucket for second group desc\r
bucket = stat.getBuckets().getBucket().get(1);\r
Assert.assertEquals("Wrong type", 1, bucket.getKey().getBucketId().getValue().intValue());\r
Assert.assertEquals("Wrong type", 1, bucket.getBucketId().getValue().intValue());\r
Assert.assertEquals("Wrong type", 10, bucket.getWatchPort().intValue());\r
Assert.assertEquals("Wrong type", 0, bucket.getAction().size());\r
}\r
-}
\ No newline at end of file
+\r
+ private List<GroupDescStats> convert(List<GroupDesc> groupDescStats,VersionConvertorData data) {\r
+ Optional<List<GroupDescStats>> statsListOptional = ConvertorManager.getInstance().convert(groupDescStats, data);\r
+ return statsListOptional.orElse(Collections.emptyList());\r
+ }\r
+}\r
import java.util.ArrayList;\r
import java.util.List;\r
\r
+import java.util.Optional;\r
import org.junit.Assert;\r
import org.junit.Test;\r
import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.buckets.BucketCounter;\r
*/\r
public class GroupStatsResponseConvertorTest {\r
\r
- GroupStatsResponseConvertor convertor = new GroupStatsResponseConvertor();\r
-\r
/**\r
* Test empty GroupStats conversion\r
*/\r
public void testEmptyGroupStats() {\r
List<GroupStats> groupStats = new ArrayList<>();\r
\r
- List<org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply\r
- .GroupStats> salGroupStats = convertor.toSALGroupStatsList(groupStats);\r
+ Optional<List<org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply\r
+ .GroupStats>> salGroupStats = ConvertorManager.getInstance().convert(groupStats);\r
\r
- Assert.assertEquals("Wrong group stats size", 0, salGroupStats.size());\r
+ Assert.assertFalse("Group stats response should be not present", salGroupStats.isPresent());\r
}\r
\r
/**\r
statsBuilder.setBucketStats(new ArrayList<BucketStats>());\r
groupStats.add(statsBuilder.build());\r
\r
+ Optional<List<org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply\r
+ .GroupStats>> salGroupStatsOptional = ConvertorManager.getInstance().convert(groupStats);\r
+ Assert.assertTrue("Group stats response convertor not found", salGroupStatsOptional.isPresent());\r
List<org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply\r
- .GroupStats> salGroupStats = convertor.toSALGroupStatsList(groupStats);\r
+ .GroupStats> salGroupStats = salGroupStatsOptional.get();\r
\r
Assert.assertEquals("Wrong group stats size", 1, salGroupStats.size());\r
org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply\r
- .GroupStats stat = salGroupStats.get(0);\r
+ .GroupStats stat = salGroupStats.get(0);\r
Assert.assertEquals("Wrong group-id", 42, stat.getGroupId().getValue().intValue());\r
Assert.assertEquals("Wrong ref-count", 24, stat.getRefCount().getValue().intValue());\r
Assert.assertEquals("Wrong packet count", 54321, stat.getPacketCount().getValue().intValue());\r
statsBuilder.setBucketStats(new ArrayList<BucketStats>());\r
groupStats.add(statsBuilder.build());\r
\r
+ Optional<List<org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply\r
+ .GroupStats>> salGroupStatsOptional = ConvertorManager.getInstance().convert(groupStats);\r
+ Assert.assertTrue("Group stats response convertor not found", salGroupStatsOptional.isPresent());\r
List<org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply\r
- .GroupStats> salGroupStats = convertor.toSALGroupStatsList(groupStats);\r
+ .GroupStats> salGroupStats = salGroupStatsOptional.get();\r
\r
Assert.assertEquals("Wrong group stats size", 2, salGroupStats.size());\r
org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply\r
- .GroupStats stat = salGroupStats.get(0);\r
+ .GroupStats stat = salGroupStats.get(0);\r
Assert.assertEquals("Wrong group-id", 42, stat.getGroupId().getValue().intValue());\r
Assert.assertEquals("Wrong key", 42, stat.getKey().getGroupId().getValue().intValue());\r
Assert.assertEquals("Wrong ref-count", 24, stat.getRefCount().getValue().intValue());\r
statsBuilder.setBucketStats(bucketStats);\r
groupStats.add(statsBuilder.build());\r
\r
+ Optional<List<org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply\r
+ .GroupStats>> salGroupStatsOptional = ConvertorManager.getInstance().convert(groupStats);\r
+ Assert.assertTrue("Group stats response convertor not found", salGroupStatsOptional.isPresent());\r
List<org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply\r
- .GroupStats> salGroupStats = convertor.toSALGroupStatsList(groupStats);\r
+ .GroupStats> salGroupStats = salGroupStatsOptional.get();\r
\r
Assert.assertEquals("Wrong group stats size", 1, salGroupStats.size());\r
org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply\r
- .GroupStats stat = salGroupStats.get(0);\r
+ .GroupStats stat = salGroupStats.get(0);\r
Assert.assertEquals("Wrong group-id", 42, stat.getGroupId().getValue().intValue());\r
Assert.assertEquals("Wrong ref-count", 24, stat.getRefCount().getValue().intValue());\r
Assert.assertEquals("Wrong packet count", 54321, stat.getPacketCount().getValue().intValue());\r
Assert.assertEquals("Wrong bucket packet count", 456, list.get(1).getPacketCount().getValue().intValue());\r
Assert.assertEquals("Wrong bucket byte count", 123, list.get(1).getByteCount().getValue().intValue());\r
}\r
-}
\ No newline at end of file
+}\r