List<Long> supportActionByGroups = new ArrayList<Long>();
for(org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.ActionType supportedActions : actionsSupported){
long supportActionBitmap = 0;
- supportActionBitmap |= supportedActions.isOFPATOUTPUT()?(1 << 0): ~(1 << 0);
- supportActionBitmap |= supportedActions.isOFPATCOPYTTLOUT()?(1 << 11): ~(1 << 11);
- supportActionBitmap |= supportedActions.isOFPATCOPYTTLIN()?(1 << 12): ~(1 << 12);
- supportActionBitmap |= supportedActions.isOFPATSETMPLSTTL()?(1 << 15): ~(1 << 15);
- supportActionBitmap |= supportedActions.isOFPATDECMPLSTTL()?(1 << 16): ~(1 << 16);
- supportActionBitmap |= supportedActions.isOFPATPUSHVLAN()?(1 << 16): ~(1 << 16);
- supportActionBitmap |= supportedActions.isOFPATPOPVLAN()?(1 << 17): ~(1 << 17);
- supportActionBitmap |= supportedActions.isOFPATPUSHMPLS()?(1 << 18): ~(1 << 18);
- supportActionBitmap |= supportedActions.isOFPATPOPMPLS()?(1 << 19): ~(1 << 19);
- supportActionBitmap |= supportedActions.isOFPATSETQUEUE()?(1 << 20): ~(1 << 20);
- supportActionBitmap |= supportedActions.isOFPATGROUP()?(1 << 21): ~(1 << 21);
- supportActionBitmap |= supportedActions.isOFPATSETNWTTL()?(1 << 22): ~(1 << 22);
- supportActionBitmap |= supportedActions.isOFPATDECNWTTL()?(1 << 23): ~(1 << 23);
- supportActionBitmap |= supportedActions.isOFPATSETFIELD()?(1 << 24): ~(1 << 24);
- supportActionBitmap |= supportedActions.isOFPATPUSHPBB()?(1 << 25): ~(1 << 25);
- supportActionBitmap |= supportedActions.isOFPATPOPPBB()?(1 << 26): ~(1 << 26);
- supportActionBitmap |= supportedActions.isOFPATEXPERIMENTER()?(1 << 27): ~(1 << 27);
+ supportActionBitmap |= supportedActions.isOFPATOUTPUT()?(1 << 0): 0;
+ supportActionBitmap |= supportedActions.isOFPATCOPYTTLOUT()?(1 << 11): 0;
+ supportActionBitmap |= supportedActions.isOFPATCOPYTTLIN()?(1 << 12): 0;
+ supportActionBitmap |= supportedActions.isOFPATSETMPLSTTL()?(1 << 15): 0;
+ supportActionBitmap |= supportedActions.isOFPATDECMPLSTTL()?(1 << 16): 0;
+ supportActionBitmap |= supportedActions.isOFPATPUSHVLAN()?(1 << 17): 0;
+ supportActionBitmap |= supportedActions.isOFPATPOPVLAN()?(1 << 18): 0;
+ supportActionBitmap |= supportedActions.isOFPATPUSHMPLS()?(1 << 19): 0;
+ supportActionBitmap |= supportedActions.isOFPATPOPMPLS()?(1 << 20): 0;
+ supportActionBitmap |= supportedActions.isOFPATSETQUEUE()?(1 << 21): 0;
+ supportActionBitmap |= supportedActions.isOFPATGROUP()?(1 << 22): 0;
+ supportActionBitmap |= supportedActions.isOFPATSETNWTTL()?(1 << 23): 0;
+ supportActionBitmap |= supportedActions.isOFPATDECNWTTL()?(1 << 24): 0;
+ supportActionBitmap |= supportedActions.isOFPATSETFIELD()?(1 << 25): 0;
+ supportActionBitmap |= supportedActions.isOFPATPUSHPBB()?(1 << 26): 0;
+ supportActionBitmap |= supportedActions.isOFPATPOPPBB()?(1 << 27): 0;
supportActionByGroups.add(Long.valueOf(supportActionBitmap));
}
return supportActionByGroups;
--- /dev/null
+/*\r
+ * Copyright (c) 2014 Pantheon Technologies s.r.o. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;\r
+\r
+import java.math.BigInteger;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\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
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.multipart.reply.group.GroupStats;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group._case.multipart.reply.group.GroupStatsBuilder;\r
+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;\r
+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.BucketStatsBuilder;\r
+\r
+/**\r
+ * @author michal.polkorab\r
+ *\r
+ */\r
+public class GroupStatsResponseConvertorTest {\r
+\r
+ GroupStatsResponseConvertor convertor = new GroupStatsResponseConvertor();\r
+\r
+ /**\r
+ * Test empty GroupStats conversion\r
+ */\r
+ @Test\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
+\r
+ Assert.assertEquals("Wrong group stats size", 0, salGroupStats.size());\r
+ }\r
+\r
+ /**\r
+ * Test single GroupStat conversion\r
+ */\r
+ @Test\r
+ public void testSingleGroupStat() {\r
+ List<GroupStats> groupStats = new ArrayList<>();\r
+ GroupStatsBuilder statsBuilder = new GroupStatsBuilder();\r
+ statsBuilder.setByteCount(new BigInteger("12345"));\r
+ statsBuilder.setDurationNsec(1000000L);\r
+ statsBuilder.setDurationSec(5000L);\r
+ statsBuilder.setGroupId(new GroupId(42L));\r
+ statsBuilder.setPacketCount(new BigInteger("54321"));\r
+ statsBuilder.setRefCount(24L);\r
+ statsBuilder.setBucketStats(new ArrayList<BucketStats>());\r
+ groupStats.add(statsBuilder.build());\r
+\r
+ List<org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply\r
+ .GroupStats> salGroupStats = convertor.toSALGroupStatsList(groupStats);\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
+ 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 byte count", 12345, stat.getByteCount().getValue().intValue());\r
+ Assert.assertEquals("Wrong duration sec", 5000, stat.getDuration().getSecond().getValue().intValue());\r
+ Assert.assertEquals("Wrong duration n sec", 1000000, stat.getDuration().getNanosecond().getValue().intValue());\r
+ Assert.assertEquals("Wrong bucket stats", 0, stat.getBuckets().getBucketCounter().size());\r
+ }\r
+\r
+ /**\r
+ * Test two GroupStats conversion\r
+ */\r
+ @Test\r
+ public void testTwoGroupStats() {\r
+ List<GroupStats> groupStats = new ArrayList<>();\r
+ GroupStatsBuilder statsBuilder = new GroupStatsBuilder();\r
+ statsBuilder.setByteCount(new BigInteger("12345"));\r
+ statsBuilder.setDurationNsec(1000000L);\r
+ statsBuilder.setDurationSec(5000L);\r
+ statsBuilder.setGroupId(new GroupId(42L));\r
+ statsBuilder.setPacketCount(new BigInteger("54321"));\r
+ statsBuilder.setRefCount(24L);\r
+ statsBuilder.setBucketStats(new ArrayList<BucketStats>());\r
+ groupStats.add(statsBuilder.build());\r
+ statsBuilder = new GroupStatsBuilder();\r
+ statsBuilder.setByteCount(new BigInteger("1"));\r
+ statsBuilder.setDurationNsec(2L);\r
+ statsBuilder.setDurationSec(3L);\r
+ statsBuilder.setGroupId(new GroupId(4L));\r
+ statsBuilder.setPacketCount(new BigInteger("5"));\r
+ statsBuilder.setRefCount(6L);\r
+ statsBuilder.setBucketStats(new ArrayList<BucketStats>());\r
+ groupStats.add(statsBuilder.build());\r
+\r
+ List<org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply\r
+ .GroupStats> salGroupStats = convertor.toSALGroupStatsList(groupStats);\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
+ 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
+ Assert.assertEquals("Wrong packet count", 54321, stat.getPacketCount().getValue().intValue());\r
+ Assert.assertEquals("Wrong byte count", 12345, stat.getByteCount().getValue().intValue());\r
+ Assert.assertEquals("Wrong duration sec", 5000, stat.getDuration().getSecond().getValue().intValue());\r
+ Assert.assertEquals("Wrong duration n sec", 1000000, stat.getDuration().getNanosecond().getValue().intValue());\r
+ Assert.assertEquals("Wrong bucket stats", 0, stat.getBuckets().getBucketCounter().size());\r
+ stat = salGroupStats.get(1);\r
+ Assert.assertEquals("Wrong group-id", 4, stat.getGroupId().getValue().intValue());\r
+ Assert.assertEquals("Wrong key", 4, stat.getKey().getGroupId().getValue().intValue());\r
+ Assert.assertEquals("Wrong ref-count", 6, stat.getRefCount().getValue().intValue());\r
+ Assert.assertEquals("Wrong packet count", 5, stat.getPacketCount().getValue().intValue());\r
+ Assert.assertEquals("Wrong byte count", 1, stat.getByteCount().getValue().intValue());\r
+ Assert.assertEquals("Wrong duration sec", 3, stat.getDuration().getSecond().getValue().intValue());\r
+ Assert.assertEquals("Wrong duration n sec", 2, stat.getDuration().getNanosecond().getValue().intValue());\r
+ Assert.assertEquals("Wrong bucket stats", 0, stat.getBuckets().getBucketCounter().size());\r
+ }\r
+\r
+ /**\r
+ * Test GroupStats with buckets conversion\r
+ */\r
+ @Test\r
+ public void testGroupStatsWithBuckets() {\r
+ List<GroupStats> groupStats = new ArrayList<>();\r
+ GroupStatsBuilder statsBuilder = new GroupStatsBuilder();\r
+ statsBuilder.setByteCount(new BigInteger("12345"));\r
+ statsBuilder.setDurationNsec(1000000L);\r
+ statsBuilder.setDurationSec(5000L);\r
+ statsBuilder.setGroupId(new GroupId(42L));\r
+ statsBuilder.setPacketCount(new BigInteger("54321"));\r
+ statsBuilder.setRefCount(24L);\r
+ List<BucketStats> bucketStats = new ArrayList<>();\r
+ BucketStatsBuilder bucketStatsBuilder = new BucketStatsBuilder();\r
+ bucketStatsBuilder.setByteCount(new BigInteger("987"));\r
+ bucketStatsBuilder.setPacketCount(new BigInteger("654"));\r
+ bucketStats.add(bucketStatsBuilder.build());\r
+ bucketStatsBuilder = new BucketStatsBuilder();\r
+ bucketStatsBuilder.setByteCount(new BigInteger("123"));\r
+ bucketStatsBuilder.setPacketCount(new BigInteger("456"));\r
+ bucketStats.add(bucketStatsBuilder.build());\r
+ statsBuilder.setBucketStats(bucketStats);\r
+ groupStats.add(statsBuilder.build());\r
+\r
+ List<org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.statistics.reply\r
+ .GroupStats> salGroupStats = convertor.toSALGroupStatsList(groupStats);\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
+ 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 byte count", 12345, stat.getByteCount().getValue().intValue());\r
+ Assert.assertEquals("Wrong duration sec", 5000, stat.getDuration().getSecond().getValue().intValue());\r
+ Assert.assertEquals("Wrong duration n sec", 1000000, stat.getDuration().getNanosecond().getValue().intValue());\r
+ Assert.assertEquals("Wrong bucket stats", 2, stat.getBuckets().getBucketCounter().size());\r
+ List<BucketCounter> list = stat.getBuckets().getBucketCounter();\r
+ Assert.assertEquals("Wrong bucket-id", 0, list.get(0).getBucketId().getValue().intValue());\r
+ Assert.assertEquals("Wrong bucket packet count", 654, list.get(0).getPacketCount().getValue().intValue());\r
+ Assert.assertEquals("Wrong bucket byte count", 987, list.get(0).getByteCount().getValue().intValue());\r
+ Assert.assertEquals("Wrong bucket-id", 1, list.get(1).getBucketId().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
--- /dev/null
+/*\r
+ * Copyright (c) 2014 Pantheon Technologies s.r.o. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.junit.Assert;\r
+import org.junit.Test;\r
+import org.opendaylight.openflowplugin.api.openflow.md.util.OpenflowVersion;\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.rev130731.CopyTtlIn;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.CopyTtlOut;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.DecNwTtl;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PopPbb;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupId;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupType;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumber;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.buckets.grouping.BucketsList;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.buckets.grouping.BucketsListBuilder;\r
+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;\r
+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.GroupDescBuilder;\r
+\r
+/**\r
+ * @author michal.polkorab\r
+ *\r
+ */\r
+public class GroupStatsResponseConvertorTest2 {\r
+\r
+ GroupStatsResponseConvertor convertor = new GroupStatsResponseConvertor();\r
+\r
+ /**\r
+ * Test empty GroupDescStats conversion\r
+ */\r
+ @Test\r
+ public void test() {\r
+ List<GroupDesc> groupDescStats = new ArrayList<>();\r
+\r
+ List<GroupDescStats> statsList = convertor.toSALGroupDescStatsList(groupDescStats, OpenflowVersion.OF13);\r
+\r
+ Assert.assertEquals("Wrong groupDesc stats size", 0, statsList.size());\r
+ }\r
+\r
+ /**\r
+ * Test single GroupDescStat conversion without buckets\r
+ */\r
+ @Test\r
+ public void testSingleGroupDescStat() {\r
+ List<GroupDesc> groupDescStats = new ArrayList<>();\r
+ GroupDescBuilder builder = new GroupDescBuilder();\r
+ builder.setType(GroupType.OFPGTALL);\r
+ builder.setGroupId(new GroupId(42L));\r
+ builder.setBucketsList(new ArrayList<BucketsList>());\r
+ groupDescStats.add(builder.build());\r
+\r
+ List<GroupDescStats> statsList = convertor.toSALGroupDescStatsList(groupDescStats, OpenflowVersion.OF13);\r
+\r
+ Assert.assertEquals("Wrong groupDesc stats size", 1, statsList.size());\r
+ GroupDescStats stat = statsList.get(0);\r
+ Assert.assertEquals("Wrong type", GroupTypes.GroupAll, 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", 0, stat.getBuckets().getBucket().size());\r
+ }\r
+\r
+ /**\r
+ * Test single GroupDescStats conversion\r
+ */\r
+ @Test\r
+ public void testGroupDescStats() {\r
+ List<GroupDesc> groupDescStats = new ArrayList<>();\r
+ GroupDescBuilder builder = new GroupDescBuilder();\r
+ builder.setType(GroupType.OFPGTFF);\r
+ builder.setGroupId(new GroupId(42L));\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
+ List<Action> actions = new ArrayList<>();\r
+ ActionBuilder actionBuilder = new ActionBuilder();\r
+ actionBuilder.setType(CopyTtlIn.class);\r
+ actions.add(actionBuilder.build());\r
+ bucketsBuilder.setAction(actions);\r
+ bucketsList.add(bucketsBuilder.build());\r
+ builder.setBucketsList(bucketsList);\r
+ groupDescStats.add(builder.build());\r
+ builder = new GroupDescBuilder();\r
+ builder.setType(GroupType.OFPGTINDIRECT);\r
+ builder.setGroupId(new GroupId(50L));\r
+ bucketsList = new ArrayList<>();\r
+ bucketsBuilder = new BucketsListBuilder();\r
+ bucketsBuilder.setWeight(100);\r
+ bucketsBuilder.setWatchPort(new PortNumber(200L));\r
+ bucketsBuilder.setWatchGroup(400L);\r
+ actions = new ArrayList<>();\r
+ actionBuilder = new ActionBuilder();\r
+ actionBuilder.setType(CopyTtlOut.class);\r
+ actions.add(actionBuilder.build());\r
+ actionBuilder = new ActionBuilder();\r
+ actionBuilder.setType(DecNwTtl.class);\r
+ actions.add(actionBuilder.build());\r
+ actionBuilder = new ActionBuilder();\r
+ actionBuilder.setType(PopPbb.class);\r
+ actions.add(actionBuilder.build());\r
+ bucketsBuilder.setAction(actions);\r
+ bucketsList.add(bucketsBuilder.build());\r
+ bucketsBuilder = new BucketsListBuilder();\r
+ bucketsBuilder.setWeight(5);\r
+ bucketsBuilder.setWatchPort(new PortNumber(10L));\r
+ bucketsBuilder.setWatchGroup(15L);\r
+ actions = new ArrayList<>();\r
+ bucketsBuilder.setAction(actions);\r
+ bucketsList.add(bucketsBuilder.build());\r
+ builder.setBucketsList(bucketsList);\r
+ groupDescStats.add(builder.build());\r
+\r
+ List<GroupDescStats> statsList = convertor.toSALGroupDescStatsList(groupDescStats, OpenflowVersion.OF13);\r
+\r
+ Assert.assertEquals("Wrong groupDesc stats size", 2, statsList.size());\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
+ 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", 16, bucket.getWeight().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
+ org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list\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
+ 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
+ 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", 100, bucket.getWeight().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
+ 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
+ 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
+ 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
+ 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", 5, bucket.getWeight().intValue());\r
+ Assert.assertEquals("Wrong type", 15, bucket.getWatchGroup().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
--- /dev/null
+/*\r
+ * Copyright (c) 2014 Pantheon Technologies s.r.o. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.openflowplugin.openflow.md.core.sal.convertor;\r
+\r
+import java.math.BigInteger;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.junit.Assert;\r
+import org.junit.Test;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ActionRelatedTableFeatureProperty;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.ActionRelatedTableFeaturePropertyBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.InstructionRelatedTableFeatureProperty;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.InstructionRelatedTableFeaturePropertyBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.NextTableRelatedTableFeatureProperty;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.NextTableRelatedTableFeaturePropertyBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.OxmRelatedTableFeatureProperty;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.OxmRelatedTableFeaturePropertyBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.table.features.properties.container.table.feature.properties.NextTableIds;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.augments.rev131002.table.features.properties.container.table.feature.properties.NextTableIdsBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.CopyTtlIn;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.CopyTtlOut;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.DecMplsTtl;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Group;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.Output;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PopPbb;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PopVlan;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PushPbb;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.PushVlan;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetField;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetMplsTtl;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.SetNwTtl;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.Action;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.action.rev130731.actions.grouping.ActionBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.ApplyActions;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.ClearActions;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.GotoTable;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.Meter;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.WriteActions;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.WriteMetadata;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.Instruction;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.InstructionBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.TableConfig;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.TableFeaturesPropType;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.EthDst;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.EthSrc;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.InPhyPort;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.InPort;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.IpEcn;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.IpProto;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.Ipv6Exthdr;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OpenflowBasicClass;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.TcpSrc;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.UdpDst;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.UdpSrc;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.VlanPcp;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.VlanVid;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntries;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntriesBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.table.features._case.MultipartReplyTableFeaturesBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.table.features._case.multipart.reply.table.features.TableFeaturesBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.table.features.properties.grouping.TableFeatureProperties;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.table.features.properties.grouping.TableFeaturePropertiesBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.set.field.match.SetFieldMatch;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplySetfield;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplySetfieldMiss;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.Instructions;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.InstructionsMiss;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.Match;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.NextTable;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.NextTableMiss;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.Wildcards;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteSetfield;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteSetfieldMiss;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.TableFeatures;\r
+\r
+/**\r
+ * @author michal.polkorab\r
+ *\r
+ */\r
+public class TableFeaturesReplyConvertorTest {\r
+\r
+ /**\r
+ * Incorrect / empty input test\r
+ */\r
+ @Test\r
+ public void test() {\r
+ List<TableFeatures> list = TableFeaturesReplyConvertor.toTableFeaturesReply(null);\r
+ Assert.assertEquals("Returned list is not empty", 0, list.size());\r
+ }\r
+\r
+ /**\r
+ * Incorrect / empty input test\r
+ */\r
+ @Test\r
+ public void test2() {\r
+ MultipartReplyTableFeaturesBuilder builder = new MultipartReplyTableFeaturesBuilder();\r
+ List<TableFeatures> list = TableFeaturesReplyConvertor.toTableFeaturesReply(builder.build());\r
+ Assert.assertEquals("Returned list is not empty", 0, list.size());\r
+ }\r
+\r
+ /**\r
+ * Test correct input - without table properties\r
+ */\r
+ @Test\r
+ public void testWithMPTableFeature() {\r
+ MultipartReplyTableFeaturesBuilder builder = new MultipartReplyTableFeaturesBuilder();\r
+ List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart\r
+ .reply.multipart.reply.body.multipart.reply.table.features._case.multipart.reply.table.features\r
+ .TableFeatures> features = new ArrayList<>();\r
+ TableFeaturesBuilder featuresBuilder = new TableFeaturesBuilder();\r
+ featuresBuilder.setTableId((short) 5);\r
+ featuresBuilder.setName("Aloha");\r
+ byte[] metaMatch = new byte[]{0, 1, 2, 3, 4, 5, 6, 7};\r
+ featuresBuilder.setMetadataMatch(metaMatch);\r
+ byte[] metaWrite = new byte[]{8, 9, 10, 11, 12, 13, 14, 15};\r
+ featuresBuilder.setMetadataWrite(metaWrite);\r
+ featuresBuilder.setConfig(new TableConfig(false));\r
+ featuresBuilder.setMaxEntries(42L);\r
+ features.add(featuresBuilder.build());\r
+ builder.setTableFeatures(features);\r
+ List<TableFeatures> list = TableFeaturesReplyConvertor.toTableFeaturesReply(builder.build());\r
+ Assert.assertEquals("Returned empty list", 1, list.size());\r
+ TableFeatures feature = list.get(0);\r
+ Assert.assertEquals("Wrong table-id", 5, feature.getTableId().intValue());\r
+ Assert.assertEquals("Wrong name", "Aloha", feature.getName());\r
+ Assert.assertEquals("Wrong metadata match", new BigInteger(1, metaMatch), feature.getMetadataMatch());\r
+ Assert.assertEquals("Wrong metadata write", new BigInteger(1, metaWrite), feature.getMetadataWrite());\r
+ Assert.assertEquals("Wrong config", false, feature.getConfig().isDEPRECATEDMASK());\r
+ Assert.assertEquals("Wrong max-entries", 42, feature.getMaxEntries().intValue());\r
+ Assert.assertEquals("Wrong properties", 0, feature.getTableProperties().getTableFeatureProperties().size());\r
+ }\r
+\r
+ /**\r
+ * Test correct input\r
+ */\r
+ @Test\r
+ public void testWithMPTableFeatureWithProperties() {\r
+ MultipartReplyTableFeaturesBuilder builder = new MultipartReplyTableFeaturesBuilder();\r
+ List<org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart\r
+ .reply.multipart.reply.body.multipart.reply.table.features._case.multipart.reply.table.features\r
+ .TableFeatures> features = new ArrayList<>();\r
+ TableFeaturesBuilder featuresBuilder = new TableFeaturesBuilder();\r
+ featuresBuilder.setTableId((short) 5);\r
+ featuresBuilder.setName("Aloha");\r
+ byte[] metaMatch = new byte[]{0, 1, 2, 3, 4, 5, 6, 7};\r
+ featuresBuilder.setMetadataMatch(metaMatch);\r
+ byte[] metaWrite = new byte[]{8, 9, 10, 11, 12, 13, 14, 15};\r
+ featuresBuilder.setMetadataWrite(metaWrite);\r
+ featuresBuilder.setConfig(new TableConfig(false));\r
+ featuresBuilder.setMaxEntries(42L);\r
+ List<TableFeatureProperties> properties = new ArrayList<>();\r
+ TableFeaturePropertiesBuilder propBuilder = new TableFeaturePropertiesBuilder();\r
+ propBuilder.setType(TableFeaturesPropType.OFPTFPTNEXTTABLES);\r
+ NextTableRelatedTableFeaturePropertyBuilder nextPropBuilder =\r
+ new NextTableRelatedTableFeaturePropertyBuilder();\r
+ List<NextTableIds> nextIds = new ArrayList<>();\r
+ nextIds.add(new NextTableIdsBuilder().setTableId((short) 1).build());\r
+ nextIds.add(new NextTableIdsBuilder().setTableId((short) 2).build());\r
+ nextPropBuilder.setNextTableIds(nextIds);\r
+ propBuilder.addAugmentation(NextTableRelatedTableFeatureProperty.class, nextPropBuilder.build());\r
+ properties.add(propBuilder.build());\r
+ propBuilder = new TableFeaturePropertiesBuilder();\r
+ propBuilder.setType(TableFeaturesPropType.OFPTFPTNEXTTABLESMISS);\r
+ nextPropBuilder = new NextTableRelatedTableFeaturePropertyBuilder();\r
+ nextIds = new ArrayList<>();\r
+ nextIds.add(new NextTableIdsBuilder().setTableId((short) 3).build());\r
+ nextPropBuilder.setNextTableIds(nextIds);\r
+ propBuilder.addAugmentation(NextTableRelatedTableFeatureProperty.class, nextPropBuilder.build());\r
+ properties.add(propBuilder.build());\r
+ propBuilder = new TableFeaturePropertiesBuilder();\r
+ propBuilder.setType(TableFeaturesPropType.OFPTFPTINSTRUCTIONS);\r
+ InstructionRelatedTableFeaturePropertyBuilder insPropBuilder =\r
+ new InstructionRelatedTableFeaturePropertyBuilder();\r
+ List<Instruction> insIds = new ArrayList<>();\r
+ InstructionBuilder insBuilder = new InstructionBuilder();\r
+ insBuilder.setType(WriteActions.class);\r
+ insIds.add(insBuilder.build());\r
+ insBuilder = new InstructionBuilder();\r
+ insBuilder.setType(GotoTable.class);\r
+ insIds.add(insBuilder.build());\r
+ insPropBuilder.setInstruction(insIds);\r
+ propBuilder.addAugmentation(InstructionRelatedTableFeatureProperty.class, insPropBuilder.build());\r
+ properties.add(propBuilder.build());\r
+ propBuilder = new TableFeaturePropertiesBuilder();\r
+ propBuilder.setType(TableFeaturesPropType.OFPTFPTINSTRUCTIONSMISS);\r
+ insPropBuilder = new InstructionRelatedTableFeaturePropertyBuilder();\r
+ insIds = new ArrayList<>();\r
+ insBuilder = new InstructionBuilder();\r
+ insBuilder.setType(WriteMetadata.class);\r
+ insIds.add(insBuilder.build());\r
+ insBuilder = new InstructionBuilder();\r
+ insBuilder.setType(ApplyActions.class);\r
+ insIds.add(insBuilder.build());\r
+ insBuilder = new InstructionBuilder();\r
+ insBuilder.setType(Meter.class);\r
+ insIds.add(insBuilder.build());\r
+ insBuilder = new InstructionBuilder();\r
+ insBuilder.setType(ClearActions.class);\r
+ insIds.add(insBuilder.build());\r
+ insBuilder = new InstructionBuilder();\r
+ insBuilder.setType(GotoTable.class);\r
+ insIds.add(insBuilder.build());\r
+ insPropBuilder.setInstruction(insIds);\r
+ propBuilder.addAugmentation(InstructionRelatedTableFeatureProperty.class, insPropBuilder.build());\r
+ properties.add(propBuilder.build());\r
+ featuresBuilder.setTableFeatureProperties(properties);\r
+ features.add(featuresBuilder.build());\r
+ featuresBuilder = new TableFeaturesBuilder();\r
+ featuresBuilder.setTableId((short) 6);\r
+ featuresBuilder.setName("Mahalo");\r
+ byte[] metaMatch2 = new byte[]{8, 9, 10, 11, 12, 13, 14, 15};\r
+ featuresBuilder.setMetadataMatch(metaMatch2);\r
+ byte[] metaWrite2 = new byte[]{0, 1, 2, 3, 4, 5, 6, 7};\r
+ featuresBuilder.setMetadataWrite(metaWrite2);\r
+ featuresBuilder.setConfig(new TableConfig(false));\r
+ featuresBuilder.setMaxEntries(24L);\r
+ properties = new ArrayList<>();\r
+ propBuilder = new TableFeaturePropertiesBuilder();\r
+ propBuilder.setType(TableFeaturesPropType.OFPTFPTMATCH);\r
+ OxmRelatedTableFeaturePropertyBuilder oxmBuilder = new OxmRelatedTableFeaturePropertyBuilder();\r
+ List<MatchEntries> entries = new ArrayList<>();\r
+ MatchEntriesBuilder entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(InPhyPort.class);\r
+ entriesBuilder.setHasMask(false);\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(InPort.class);\r
+ entriesBuilder.setHasMask(false);\r
+ entries.add(entriesBuilder.build());\r
+ oxmBuilder.setMatchEntries(entries);\r
+ propBuilder.addAugmentation(OxmRelatedTableFeatureProperty.class, oxmBuilder.build());\r
+ properties.add(propBuilder.build());\r
+ propBuilder = new TableFeaturePropertiesBuilder();\r
+ propBuilder.setType(TableFeaturesPropType.OFPTFPTAPPLYSETFIELD);\r
+ oxmBuilder = new OxmRelatedTableFeaturePropertyBuilder();\r
+ entries = new ArrayList<>();\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(IpProto.class);\r
+ entriesBuilder.setHasMask(false);\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(IpEcn.class);\r
+ entriesBuilder.setHasMask(false);\r
+ entries.add(entriesBuilder.build());\r
+ oxmBuilder.setMatchEntries(entries);\r
+ propBuilder.addAugmentation(OxmRelatedTableFeatureProperty.class, oxmBuilder.build());\r
+ properties.add(propBuilder.build());\r
+ propBuilder = new TableFeaturePropertiesBuilder();\r
+ propBuilder.setType(TableFeaturesPropType.OFPTFPTWRITESETFIELD);\r
+ oxmBuilder = new OxmRelatedTableFeaturePropertyBuilder();\r
+ entries = new ArrayList<>();\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(Ipv6Exthdr.class);\r
+ entriesBuilder.setHasMask(false);\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(VlanVid.class);\r
+ entriesBuilder.setHasMask(false);\r
+ entries.add(entriesBuilder.build());\r
+ oxmBuilder.setMatchEntries(entries);\r
+ propBuilder.addAugmentation(OxmRelatedTableFeatureProperty.class, oxmBuilder.build());\r
+ properties.add(propBuilder.build());\r
+ propBuilder = new TableFeaturePropertiesBuilder();\r
+ propBuilder.setType(TableFeaturesPropType.OFPTFPTWRITESETFIELDMISS);\r
+ oxmBuilder = new OxmRelatedTableFeaturePropertyBuilder();\r
+ entries = new ArrayList<>();\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(VlanPcp.class);\r
+ entriesBuilder.setHasMask(false);\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(TcpSrc.class);\r
+ entriesBuilder.setHasMask(false);\r
+ entries.add(entriesBuilder.build());\r
+ oxmBuilder.setMatchEntries(entries);\r
+ propBuilder.addAugmentation(OxmRelatedTableFeatureProperty.class, oxmBuilder.build());\r
+ properties.add(propBuilder.build());\r
+ propBuilder = new TableFeaturePropertiesBuilder();\r
+ propBuilder.setType(TableFeaturesPropType.OFPTFPTAPPLYSETFIELDMISS);\r
+ oxmBuilder = new OxmRelatedTableFeaturePropertyBuilder();\r
+ entries = new ArrayList<>();\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(UdpSrc.class);\r
+ entriesBuilder.setHasMask(false);\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(UdpDst.class);\r
+ entriesBuilder.setHasMask(false);\r
+ entries.add(entriesBuilder.build());\r
+ oxmBuilder.setMatchEntries(entries);\r
+ propBuilder.addAugmentation(OxmRelatedTableFeatureProperty.class, oxmBuilder.build());\r
+ properties.add(propBuilder.build());\r
+ propBuilder = new TableFeaturePropertiesBuilder();\r
+ propBuilder.setType(TableFeaturesPropType.OFPTFPTWILDCARDS);\r
+ oxmBuilder = new OxmRelatedTableFeaturePropertyBuilder();\r
+ entries = new ArrayList<>();\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(EthSrc.class);\r
+ entriesBuilder.setHasMask(false);\r
+ entries.add(entriesBuilder.build());\r
+ entriesBuilder = new MatchEntriesBuilder();\r
+ entriesBuilder.setOxmClass(OpenflowBasicClass.class);\r
+ entriesBuilder.setOxmMatchField(EthDst.class);\r
+ entriesBuilder.setHasMask(false);\r
+ entries.add(entriesBuilder.build());\r
+ oxmBuilder.setMatchEntries(entries);\r
+ propBuilder.addAugmentation(OxmRelatedTableFeatureProperty.class, oxmBuilder.build());\r
+ properties.add(propBuilder.build());\r
+ propBuilder = new TableFeaturePropertiesBuilder();\r
+ propBuilder.setType(TableFeaturesPropType.OFPTFPTAPPLYACTIONS);\r
+ ActionRelatedTableFeaturePropertyBuilder actBuilder = new ActionRelatedTableFeaturePropertyBuilder();\r
+ List<Action> actions = new ArrayList<>();\r
+ ActionBuilder actionBuilder = new ActionBuilder();\r
+ actionBuilder.setType(Output.class);\r
+ actions.add(actionBuilder.build());\r
+ actionBuilder = new ActionBuilder();\r
+ actionBuilder.setType(PopPbb.class);\r
+ actions.add(actionBuilder.build());\r
+ actionBuilder = new ActionBuilder();\r
+ actionBuilder.setType(SetNwTtl.class);\r
+ actions.add(actionBuilder.build());\r
+ actBuilder.setAction(actions);\r
+ propBuilder.addAugmentation(ActionRelatedTableFeatureProperty.class, actBuilder.build());\r
+ properties.add(propBuilder.build());\r
+ propBuilder = new TableFeaturePropertiesBuilder();\r
+ propBuilder.setType(TableFeaturesPropType.OFPTFPTAPPLYACTIONSMISS);\r
+ actBuilder = new ActionRelatedTableFeaturePropertyBuilder();\r
+ actions = new ArrayList<>();\r
+ actionBuilder = new ActionBuilder();\r
+ actionBuilder.setType(Group.class);\r
+ actions.add(actionBuilder.build());\r
+ actionBuilder = new ActionBuilder();\r
+ actionBuilder.setType(CopyTtlIn.class);\r
+ actions.add(actionBuilder.build());\r
+ actionBuilder = new ActionBuilder();\r
+ actionBuilder.setType(CopyTtlOut.class);\r
+ actions.add(actionBuilder.build());\r
+ actBuilder.setAction(actions);\r
+ propBuilder.addAugmentation(ActionRelatedTableFeatureProperty.class, actBuilder.build());\r
+ properties.add(propBuilder.build());\r
+ propBuilder = new TableFeaturePropertiesBuilder();\r
+ propBuilder.setType(TableFeaturesPropType.OFPTFPTWRITEACTIONS);\r
+ actBuilder = new ActionRelatedTableFeaturePropertyBuilder();\r
+ actions = new ArrayList<>();\r
+ actionBuilder = new ActionBuilder();\r
+ actionBuilder.setType(SetMplsTtl.class);\r
+ actions.add(actionBuilder.build());\r
+ actionBuilder = new ActionBuilder();\r
+ actionBuilder.setType(DecMplsTtl.class);\r
+ actions.add(actionBuilder.build());\r
+ actionBuilder = new ActionBuilder();\r
+ actionBuilder.setType(PushVlan.class);\r
+ actions.add(actionBuilder.build());\r
+ actBuilder.setAction(actions);\r
+ propBuilder.addAugmentation(ActionRelatedTableFeatureProperty.class, actBuilder.build());\r
+ properties.add(propBuilder.build());\r
+ propBuilder = new TableFeaturePropertiesBuilder();\r
+ propBuilder.setType(TableFeaturesPropType.OFPTFPTWRITEACTIONSMISS);\r
+ actBuilder = new ActionRelatedTableFeaturePropertyBuilder();\r
+ actions = new ArrayList<>();\r
+ actionBuilder = new ActionBuilder();\r
+ actionBuilder.setType(PopVlan.class);\r
+ actions.add(actionBuilder.build());\r
+ actionBuilder = new ActionBuilder();\r
+ actionBuilder.setType(PushPbb.class);\r
+ actions.add(actionBuilder.build());\r
+ actionBuilder = new ActionBuilder();\r
+ actionBuilder.setType(SetField.class);\r
+ actions.add(actionBuilder.build());\r
+ actBuilder.setAction(actions);\r
+ propBuilder.addAugmentation(ActionRelatedTableFeatureProperty.class, actBuilder.build());\r
+ properties.add(propBuilder.build());\r
+ featuresBuilder.setTableFeatureProperties(properties);\r
+ features.add(featuresBuilder.build());\r
+ builder.setTableFeatures(features);\r
+\r
+ List<TableFeatures> list = TableFeaturesReplyConvertor.toTableFeaturesReply(builder.build());\r
+\r
+ Assert.assertEquals("Returned empty list", 2, list.size());\r
+ TableFeatures feature = list.get(0);\r
+ Assert.assertEquals("Wrong table-id", 5, feature.getTableId().intValue());\r
+ Assert.assertEquals("Wrong name", "Aloha", feature.getName());\r
+ Assert.assertEquals("Wrong metadata match", new BigInteger(1, metaMatch), feature.getMetadataMatch());\r
+ Assert.assertEquals("Wrong metadata write", new BigInteger(1, metaWrite), feature.getMetadataWrite());\r
+ Assert.assertEquals("Wrong config", false, feature.getConfig().isDEPRECATEDMASK());\r
+ Assert.assertEquals("Wrong max-entries", 42, feature.getMaxEntries().intValue());\r
+ Assert.assertEquals("Wrong properties", 4, feature.getTableProperties().getTableFeatureProperties().size());\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.features.table.features.table.properties\r
+ .TableFeatureProperties property = feature.getTableProperties().getTableFeatureProperties().get(0);\r
+ Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.NextTable",\r
+ property.getTableFeaturePropType().getImplementedInterface().getName());\r
+ NextTable propType = (NextTable) property.getTableFeaturePropType();\r
+ List<Short> ids = propType.getTables().getTableIds();\r
+ Assert.assertEquals("Wrong next table-id size", 2, ids.size());\r
+ Assert.assertEquals("Wrong next-registry-id", 1, ids.get(0).intValue());\r
+ Assert.assertEquals("Wrong next-registry-id", 2, ids.get(1).intValue());\r
+ property = feature.getTableProperties().getTableFeatureProperties().get(1);\r
+ Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.NextTableMiss",\r
+ property.getTableFeaturePropType().getImplementedInterface().getName());\r
+ NextTableMiss propType2 = (NextTableMiss) property.getTableFeaturePropType();\r
+ ids = propType2.getTablesMiss().getTableIds();\r
+ Assert.assertEquals("Wrong next table-id size", 1, ids.size());\r
+ Assert.assertEquals("Wrong next-registry-id", 3, ids.get(0).intValue());\r
+ property = feature.getTableProperties().getTableFeatureProperties().get(2);\r
+ Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.Instructions",\r
+ property.getTableFeaturePropType().getImplementedInterface().getName());\r
+ Instructions propType3 = (Instructions) property.getTableFeaturePropType();\r
+ List<org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.list\r
+ .Instruction> instructionIds = propType3.getInstructions().getInstruction();\r
+ Assert.assertEquals("Wrong instruction-ids size", 2, instructionIds.size());\r
+ Assert.assertEquals("Wrong instruction-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.WriteActionsCase",\r
+ instructionIds.get(0).getInstruction().getImplementedInterface().getName());\r
+ Assert.assertEquals("Wrong instruction-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.GoToTableCase",\r
+ instructionIds.get(1).getInstruction().getImplementedInterface().getName());\r
+ property = feature.getTableProperties().getTableFeatureProperties().get(3);\r
+ Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.InstructionsMiss",\r
+ property.getTableFeaturePropType().getImplementedInterface().getName());\r
+ InstructionsMiss propType4 = (InstructionsMiss) property.getTableFeaturePropType();\r
+ instructionIds = propType4.getInstructionsMiss().getInstruction();\r
+ Assert.assertEquals("Wrong instruction-ids size", 5, instructionIds.size());\r
+ Assert.assertEquals("Wrong instruction-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.WriteMetadataCase",\r
+ instructionIds.get(0).getInstruction().getImplementedInterface().getName());\r
+ Assert.assertEquals("Wrong instruction-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ApplyActionsCase",\r
+ instructionIds.get(1).getInstruction().getImplementedInterface().getName());\r
+ Assert.assertEquals("Wrong instruction-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.MeterCase",\r
+ instructionIds.get(2).getInstruction().getImplementedInterface().getName());\r
+ Assert.assertEquals("Wrong instruction-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.ClearActionsCase",\r
+ instructionIds.get(3).getInstruction().getImplementedInterface().getName());\r
+ Assert.assertEquals("Wrong instruction-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.instruction.instruction.GoToTableCase",\r
+ instructionIds.get(4).getInstruction().getImplementedInterface().getName());\r
+ feature = list.get(1);\r
+ Assert.assertEquals("Wrong table-id", 6, feature.getTableId().intValue());\r
+ Assert.assertEquals("Wrong name", "Mahalo", feature.getName());\r
+ Assert.assertEquals("Wrong metadata match", new BigInteger(1, metaMatch2), feature.getMetadataMatch());\r
+ Assert.assertEquals("Wrong metadata write", new BigInteger(1, metaWrite2), feature.getMetadataWrite());\r
+ Assert.assertEquals("Wrong config", false, feature.getConfig().isDEPRECATEDMASK());\r
+ Assert.assertEquals("Wrong max-entries", 24, feature.getMaxEntries().intValue());\r
+ Assert.assertEquals("Wrong properties", 10, feature.getTableProperties().getTableFeatureProperties().size());\r
+ property = feature.getTableProperties().getTableFeatureProperties().get(0);\r
+ Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.Match",\r
+ property.getTableFeaturePropType().getImplementedInterface().getName());\r
+ Match propType5 = (Match) property.getTableFeaturePropType();\r
+ List<SetFieldMatch> fieldMatch = propType5.getMatchSetfield().getSetFieldMatch();\r
+ Assert.assertEquals("Wrong match-entry-ids size", 2, fieldMatch.size());\r
+ Assert.assertEquals("Wrong match-entry-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.InPhyPort",\r
+ fieldMatch.get(0).getMatchType().getName());\r
+ Assert.assertEquals("Wrong match-entry-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.InPort",\r
+ fieldMatch.get(1).getMatchType().getName());\r
+ property = feature.getTableProperties().getTableFeatureProperties().get(1);\r
+ Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplySetfield",\r
+ property.getTableFeaturePropType().getImplementedInterface().getName());\r
+ ApplySetfield propType6 = (ApplySetfield) property.getTableFeaturePropType();\r
+ fieldMatch = propType6.getApplySetfield().getSetFieldMatch();\r
+ Assert.assertEquals("Wrong match-entry-ids size", 2, fieldMatch.size());\r
+ Assert.assertEquals("Wrong match-entry-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.IpProto",\r
+ fieldMatch.get(0).getMatchType().getName());\r
+ Assert.assertEquals("Wrong match-entry-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.IpEcn",\r
+ fieldMatch.get(1).getMatchType().getName());\r
+ property = feature.getTableProperties().getTableFeatureProperties().get(2);\r
+ Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteSetfield",\r
+ property.getTableFeaturePropType().getImplementedInterface().getName());\r
+ WriteSetfield propType7 = (WriteSetfield) property.getTableFeaturePropType();\r
+ fieldMatch = propType7.getWriteSetfield().getSetFieldMatch();\r
+ Assert.assertEquals("Wrong match-entry-ids size", 2, fieldMatch.size());\r
+ Assert.assertEquals("Wrong match-entry-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.Ipv6Exthdr",\r
+ fieldMatch.get(0).getMatchType().getName());\r
+ Assert.assertEquals("Wrong match-entry-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.VlanVid",\r
+ fieldMatch.get(1).getMatchType().getName());\r
+ property = feature.getTableProperties().getTableFeatureProperties().get(3);\r
+ Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteSetfieldMiss",\r
+ property.getTableFeaturePropType().getImplementedInterface().getName());\r
+ WriteSetfieldMiss propType8 = (WriteSetfieldMiss) property.getTableFeaturePropType();\r
+ fieldMatch = propType8.getWriteSetfieldMiss().getSetFieldMatch();\r
+ Assert.assertEquals("Wrong match-entry-ids size", 2, fieldMatch.size());\r
+ Assert.assertEquals("Wrong match-entry-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.VlanPcp",\r
+ fieldMatch.get(0).getMatchType().getName());\r
+ Assert.assertEquals("Wrong match-entry-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.TcpSrc",\r
+ fieldMatch.get(1).getMatchType().getName());\r
+ property = feature.getTableProperties().getTableFeatureProperties().get(4);\r
+ Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplySetfieldMiss",\r
+ property.getTableFeaturePropType().getImplementedInterface().getName());\r
+ ApplySetfieldMiss propType9 = (ApplySetfieldMiss) property.getTableFeaturePropType();\r
+ fieldMatch = propType9.getApplySetfieldMiss().getSetFieldMatch();\r
+ Assert.assertEquals("Wrong match-entry-ids size", 2, fieldMatch.size());\r
+ Assert.assertEquals("Wrong match-entry-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.UdpSrc",\r
+ fieldMatch.get(0).getMatchType().getName());\r
+ Assert.assertEquals("Wrong match-entry-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.UdpDst",\r
+ fieldMatch.get(1).getMatchType().getName());\r
+ property = feature.getTableProperties().getTableFeatureProperties().get(5);\r
+ Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.Wildcards",\r
+ property.getTableFeaturePropType().getImplementedInterface().getName());\r
+ Wildcards propType10 = (Wildcards) property.getTableFeaturePropType();\r
+ fieldMatch = propType10.getWildcardSetfield().getSetFieldMatch();\r
+ Assert.assertEquals("Wrong match-entry-ids size", 2, fieldMatch.size());\r
+ Assert.assertEquals("Wrong match-entry-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.EthSrc",\r
+ fieldMatch.get(0).getMatchType().getName());\r
+ Assert.assertEquals("Wrong match-entry-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.EthDst",\r
+ fieldMatch.get(1).getMatchType().getName());\r
+ property = feature.getTableProperties().getTableFeatureProperties().get(6);\r
+ Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplyActions",\r
+ property.getTableFeaturePropType().getImplementedInterface().getName());\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type\r
+ .ApplyActions propType11 = (org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplyActions) property.getTableFeaturePropType();\r
+ List<org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action> actionsList = propType11.getApplyActions().getAction();\r
+ Assert.assertEquals("Wrong actions-ids size", 3, actionsList.size());\r
+ Assert.assertEquals("Wrong actions-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.OutputActionCase",\r
+ actionsList.get(0).getAction().getImplementedInterface().getName());\r
+ Assert.assertEquals("Wrong actions-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopPbbActionCase",\r
+ actionsList.get(1).getAction().getImplementedInterface().getName());\r
+ Assert.assertEquals("Wrong actions-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetNwTtlActionCase",\r
+ actionsList.get(2).getAction().getImplementedInterface().getName());\r
+ property = feature.getTableProperties().getTableFeatureProperties().get(7);\r
+ Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.ApplyActionsMiss",\r
+ property.getTableFeaturePropType().getImplementedInterface().getName());\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type\r
+ .ApplyActionsMiss propType12 = (org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type\r
+ .ApplyActionsMiss) property.getTableFeaturePropType();\r
+ actionsList = propType12.getApplyActionsMiss().getAction();\r
+ Assert.assertEquals("Wrong actions-ids size", 3, actionsList.size());\r
+ Assert.assertEquals("Wrong actions-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCase",\r
+ actionsList.get(0).getAction().getImplementedInterface().getName());\r
+ Assert.assertEquals("Wrong actions-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlInCase",\r
+ actionsList.get(1).getAction().getImplementedInterface().getName());\r
+ Assert.assertEquals("Wrong actions-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.CopyTtlOutCase",\r
+ actionsList.get(2).getAction().getImplementedInterface().getName());\r
+ property = feature.getTableProperties().getTableFeatureProperties().get(8);\r
+ Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteActions",\r
+ property.getTableFeaturePropType().getImplementedInterface().getName());\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type\r
+ .WriteActions propType13 = (org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type\r
+ .WriteActions) property.getTableFeaturePropType();\r
+ actionsList = propType13.getWriteActions().getAction();\r
+ Assert.assertEquals("Wrong actions-ids size", 3, actionsList.size());\r
+ Assert.assertEquals("Wrong actions-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetMplsTtlActionCase",\r
+ actionsList.get(0).getAction().getImplementedInterface().getName());\r
+ Assert.assertEquals("Wrong actions-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.DecMplsTtlCase",\r
+ actionsList.get(1).getAction().getImplementedInterface().getName());\r
+ Assert.assertEquals("Wrong actions-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushVlanActionCase",\r
+ actionsList.get(2).getAction().getImplementedInterface().getName());\r
+ property = feature.getTableProperties().getTableFeatureProperties().get(9);\r
+ Assert.assertEquals("Wrong property type", "org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type.WriteActionsMiss",\r
+ property.getTableFeaturePropType().getImplementedInterface().getName());\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type\r
+ .WriteActionsMiss propType14 = (org.opendaylight.yang.gen.v1.urn.opendaylight.table.types.rev131026.table.feature.prop.type.table.feature.prop.type\r
+ .WriteActionsMiss) property.getTableFeaturePropType();\r
+ actionsList = propType14.getWriteActionsMiss().getAction();\r
+ Assert.assertEquals("Wrong actions-ids size", 3, actionsList.size());\r
+ Assert.assertEquals("Wrong actions-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PopVlanActionCase",\r
+ actionsList.get(0).getAction().getImplementedInterface().getName());\r
+ Assert.assertEquals("Wrong actions-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.PushPbbActionCase",\r
+ actionsList.get(1).getAction().getImplementedInterface().getName());\r
+ Assert.assertEquals("Wrong actions-id", "org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.SetFieldCase",\r
+ actionsList.get(2).getAction().getImplementedInterface().getName());\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+/*\r
+ * Copyright (c) 2014 Pantheon Technologies s.r.o. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.openflowplugin.openflow.md.core.translator;\r
+\r
+import static org.mockito.Mockito.when;\r
+\r
+import java.math.BigInteger;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.junit.Assert;\r
+import org.junit.Before;\r
+import org.junit.Test;\r
+import org.mockito.Mock;\r
+import org.mockito.MockitoAnnotations;\r
+import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;\r
+import org.opendaylight.openflowplugin.api.openflow.md.core.SwitchConnectionDistinguisher;\r
+import org.opendaylight.openflowplugin.openflow.md.core.ConnectionConductor;\r
+import org.opendaylight.openflowplugin.openflow.md.core.session.SessionContext;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.FlowsStatisticsUpdate;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.flow.and.statistics.map.list.FlowAndStatisticsMapList;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.Match;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.instruction.rev130731.instructions.grouping.Instruction;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowModFlags;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartRequestFlags;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.OxmMatchType;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.match.grouping.MatchBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.oxm.rev130731.oxm.fields.grouping.MatchEntries;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetFeaturesOutput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.HelloMessageBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessage;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessageBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyFlowCaseBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.flow._case.MultipartReplyFlowBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.flow._case.multipart.reply.flow.FlowStats;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.flow._case.multipart.reply.flow.FlowStatsBuilder;\r
+import org.opendaylight.yangtools.yang.binding.DataObject;\r
+\r
+/**\r
+ * @author michal.polkorab\r
+ *\r
+ */\r
+public class MultipartReplyTranslatorTest {\r
+\r
+ @Mock SwitchConnectionDistinguisher cookie;\r
+ @Mock SessionContext sc;\r
+ @Mock ConnectionConductor conductor;\r
+ @Mock GetFeaturesOutput features;\r
+\r
+ MultipartReplyTranslator translator = new MultipartReplyTranslator();\r
+\r
+ /**\r
+ * Initializes mocks\r
+ */\r
+ @Before\r
+ public void startUp() {\r
+ MockitoAnnotations.initMocks(this);\r
+ when(sc.getPrimaryConductor()).thenReturn(conductor);\r
+ when(conductor.getVersion()).thenReturn((short) EncodeConstants.OF13_VERSION_ID);\r
+ when(sc.getFeatures()).thenReturn(features);\r
+ when(features.getDatapathId()).thenReturn(new BigInteger("42"));\r
+ }\r
+\r
+ /**\r
+ * Test with null and incorrect message\r
+ */\r
+ @Test\r
+ public void test() {\r
+ List<DataObject> list = translator.translate(cookie, sc, null);\r
+\r
+ Assert.assertEquals("Wrong list size", 0, list.size());\r
+ HelloMessageBuilder helloBuilder = new HelloMessageBuilder();\r
+ list = translator.translate(cookie, sc, helloBuilder.build());\r
+ Assert.assertEquals("Wrong list size", 0, list.size());\r
+ }\r
+\r
+ /**\r
+ * Test with experimenter MultipartReply message\r
+ */\r
+ @Test\r
+ public void testExperimenterCase() {\r
+ MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder();\r
+ mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID);\r
+ mpBuilder.setXid(123L);\r
+ mpBuilder.setFlags(new MultipartRequestFlags(false));\r
+ mpBuilder.setType(MultipartType.OFPMPEXPERIMENTER);\r
+ MultipartReplyMessage message = mpBuilder.build();\r
+\r
+ List<DataObject> list = translator.translate(cookie, sc, message);\r
+\r
+ Assert.assertEquals("Wrong list size", 0, list.size());\r
+ }\r
+\r
+ /**\r
+ * Test MultipartReply message with empty flow stats\r
+ */\r
+ @Test\r
+ public void testEmptyFlowCase() {\r
+ MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder();\r
+ mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID);\r
+ mpBuilder.setXid(123L);\r
+ mpBuilder.setFlags(new MultipartRequestFlags(false));\r
+ mpBuilder.setType(MultipartType.OFPMPFLOW);\r
+ \r
+ MultipartReplyFlowCaseBuilder caseBuilder = new MultipartReplyFlowCaseBuilder();\r
+ MultipartReplyFlowBuilder flowBuilder = new MultipartReplyFlowBuilder();\r
+ List<FlowStats> flowStats = new ArrayList<>();\r
+ flowBuilder.setFlowStats(flowStats);\r
+ caseBuilder.setMultipartReplyFlow(flowBuilder.build());\r
+ mpBuilder.setMultipartReplyBody(caseBuilder.build());\r
+ MultipartReplyMessage message = mpBuilder.build();\r
+\r
+ List<DataObject> list = translator.translate(cookie, sc, message);\r
+\r
+ Assert.assertEquals("Wrong list size", 1, list.size());\r
+ FlowsStatisticsUpdate flowUpdate = (FlowsStatisticsUpdate) list.get(0);\r
+ Assert.assertEquals("Wrong node-id", "openflow:42", flowUpdate.getId().getValue());\r
+ Assert.assertEquals("Wrong more-replies", false, flowUpdate.isMoreReplies());\r
+ Assert.assertEquals("Wrong transaction-id", 123, flowUpdate.getTransactionId().getValue().intValue());\r
+ List<FlowAndStatisticsMapList> mapList = flowUpdate.getFlowAndStatisticsMapList();\r
+ Assert.assertEquals("Wrong flow stats size", 0, mapList.size());\r
+ }\r
+\r
+ /**\r
+ * Test with experimenter MultipartReply message\r
+ */\r
+ @Test\r
+ public void testFlowCase() {\r
+ MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder();\r
+ mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID);\r
+ mpBuilder.setXid(123L);\r
+ mpBuilder.setFlags(new MultipartRequestFlags(false));\r
+ mpBuilder.setType(MultipartType.OFPMPFLOW);\r
+ \r
+ MultipartReplyFlowCaseBuilder caseBuilder = new MultipartReplyFlowCaseBuilder();\r
+ MultipartReplyFlowBuilder flowBuilder = new MultipartReplyFlowBuilder();\r
+ List<FlowStats> flowStats = new ArrayList<>();\r
+ FlowStatsBuilder statsBuilder = new FlowStatsBuilder();\r
+ statsBuilder.setTableId((short) 1);\r
+ statsBuilder.setDurationSec(2L);\r
+ statsBuilder.setDurationNsec(3L);\r
+ statsBuilder.setPriority(4);\r
+ statsBuilder.setIdleTimeout(5);\r
+ statsBuilder.setHardTimeout(6);\r
+ FlowModFlags flags = new FlowModFlags(true, false, true, false, true);\r
+ statsBuilder.setFlags(flags);\r
+ statsBuilder.setCookie(new BigInteger("7"));\r
+ statsBuilder.setPacketCount(new BigInteger("8"));\r
+ statsBuilder.setByteCount(new BigInteger("9"));\r
+ MatchBuilder matchBuilder = new MatchBuilder();\r
+ matchBuilder.setType(OxmMatchType.class);\r
+ matchBuilder.setMatchEntries(new ArrayList<MatchEntries>());\r
+ statsBuilder.setMatch(matchBuilder.build());\r
+ statsBuilder.setInstruction(new ArrayList<Instruction>());\r
+ flowStats.add(statsBuilder.build());\r
+ statsBuilder = new FlowStatsBuilder();\r
+ statsBuilder.setTableId((short) 10);\r
+ statsBuilder.setDurationSec(20L);\r
+ statsBuilder.setDurationNsec(30L);\r
+ statsBuilder.setPriority(40);\r
+ statsBuilder.setIdleTimeout(50);\r
+ statsBuilder.setHardTimeout(60);\r
+ flags = new FlowModFlags(false, true, false, true, false);\r
+ statsBuilder.setFlags(flags);\r
+ statsBuilder.setCookie(new BigInteger("70"));\r
+ statsBuilder.setPacketCount(new BigInteger("80"));\r
+ statsBuilder.setByteCount(new BigInteger("90"));\r
+ matchBuilder = new MatchBuilder();\r
+ matchBuilder.setType(OxmMatchType.class);\r
+ matchBuilder.setMatchEntries(new ArrayList<MatchEntries>());\r
+ statsBuilder.setMatch(matchBuilder.build());\r
+ statsBuilder.setInstruction(new ArrayList<Instruction>());\r
+ flowStats.add(statsBuilder.build());\r
+ flowBuilder.setFlowStats(flowStats);\r
+ caseBuilder.setMultipartReplyFlow(flowBuilder.build());\r
+ mpBuilder.setMultipartReplyBody(caseBuilder.build());\r
+ MultipartReplyMessage message = mpBuilder.build();\r
+\r
+ List<DataObject> list = translator.translate(cookie, sc, message);\r
+\r
+ Assert.assertEquals("Wrong list size", 1, list.size());\r
+ FlowsStatisticsUpdate flowUpdate = (FlowsStatisticsUpdate) list.get(0);\r
+ Assert.assertEquals("Wrong node-id", "openflow:42", flowUpdate.getId().getValue());\r
+ Assert.assertEquals("Wrong more-replies", false, flowUpdate.isMoreReplies());\r
+ Assert.assertEquals("Wrong transaction-id", 123, flowUpdate.getTransactionId().getValue().intValue());\r
+ List<FlowAndStatisticsMapList> mapList = flowUpdate.getFlowAndStatisticsMapList();\r
+ Assert.assertEquals("Wrong flow stats size", 2, mapList.size());\r
+ FlowAndStatisticsMapList stat = mapList.get(0);\r
+ Assert.assertEquals("Wrong table-id", 1, stat.getTableId().intValue());\r
+ Assert.assertEquals("Wrong duration sec", 2, stat.getDuration().getSecond().getValue().intValue());\r
+ Assert.assertEquals("Wrong duration n sec", 3, stat.getDuration().getNanosecond().getValue().intValue());\r
+ Assert.assertEquals("Wrong priority", 4, stat.getPriority().intValue());\r
+ Assert.assertEquals("Wrong idle-timeout", 5, stat.getIdleTimeout().intValue());\r
+ Assert.assertEquals("Wrong hard-timeout", 6, stat.getHardTimeout().intValue());\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowModFlags expectedFlags = \r
+ new org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026\r
+ .FlowModFlags(!flags.isOFPFFCHECKOVERLAP(), !flags.isOFPFFNOBYTCOUNTS(), !flags.isOFPFFNOPKTCOUNTS(),\r
+ !flags.isOFPFFRESETCOUNTS(), !flags.isOFPFFSENDFLOWREM());\r
+ Assert.assertEquals("Wrong flags", expectedFlags, stat.getFlags());\r
+ Assert.assertEquals("Wrong cookie", 7, stat.getCookie().getValue().intValue());\r
+ Assert.assertEquals("Wrong packet count", 8, stat.getPacketCount().getValue().intValue());\r
+ Assert.assertEquals("Wrong byte count", 9, stat.getByteCount().getValue().intValue());\r
+ org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder emptyMatchBuilder = \r
+ new org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder();\r
+ Match emptyMatch = emptyMatchBuilder.build();\r
+ Assert.assertEquals("Wrong match", emptyMatch, stat.getMatch());\r
+ Assert.assertEquals("Wrong instructions", 0, stat.getInstructions().getInstruction().size());\r
+ stat = mapList.get(1);\r
+ Assert.assertEquals("Wrong table-id", 10, stat.getTableId().intValue());\r
+ Assert.assertEquals("Wrong duration sec", 20, stat.getDuration().getSecond().getValue().intValue());\r
+ Assert.assertEquals("Wrong duration n sec", 30, stat.getDuration().getNanosecond().getValue().intValue());\r
+ Assert.assertEquals("Wrong priority", 40, stat.getPriority().intValue());\r
+ Assert.assertEquals("Wrong idle-timeout", 50, stat.getIdleTimeout().intValue());\r
+ Assert.assertEquals("Wrong hard-timeout", 60, stat.getHardTimeout().intValue());\r
+ expectedFlags = new org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026\r
+ .FlowModFlags(flags.isOFPFFCHECKOVERLAP(), flags.isOFPFFNOBYTCOUNTS(), flags.isOFPFFNOPKTCOUNTS(),\r
+ flags.isOFPFFRESETCOUNTS(), flags.isOFPFFSENDFLOWREM());\r
+ Assert.assertEquals("Wrong flags", expectedFlags, stat.getFlags());\r
+ Assert.assertEquals("Wrong cookie", 70, stat.getCookie().getValue().intValue());\r
+ Assert.assertEquals("Wrong packet count", 80, stat.getPacketCount().getValue().intValue());\r
+ Assert.assertEquals("Wrong byte count", 90, stat.getByteCount().getValue().intValue());\r
+ Assert.assertEquals("Wrong match", emptyMatch, stat.getMatch());\r
+ Assert.assertEquals("Wrong instructions", 0, stat.getInstructions().getInstruction().size());\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+/*\r
+ * Copyright (c) 2014 Pantheon Technologies s.r.o. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.openflowplugin.openflow.md.core.translator;\r
+\r
+import static org.mockito.Mockito.when;\r
+\r
+import java.math.BigInteger;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.junit.Assert;\r
+import org.junit.Before;\r
+import org.junit.Test;\r
+import org.mockito.Mock;\r
+import org.mockito.MockitoAnnotations;\r
+import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;\r
+import org.opendaylight.openflowplugin.api.openflow.md.core.SwitchConnectionDistinguisher;\r
+import org.opendaylight.openflowplugin.openflow.md.core.ConnectionConductor;\r
+import org.opendaylight.openflowplugin.openflow.md.core.session.SessionContext;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.AggregateFlowStatisticsUpdate;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.group.statistics.rev131111.GroupFeaturesUpdated;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.meter.statistics.rev131111.MeterFeaturesUpdated;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.ActionType;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupCapabilities;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.GroupTypes;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterBandTypeBitmap;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MeterFlags;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartRequestFlags;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetFeaturesOutput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessage;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessageBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyAggregateCaseBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyGroupFeaturesCaseBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyMeterFeaturesCaseBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.aggregate._case.MultipartReplyAggregateBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.group.features._case.MultipartReplyGroupFeaturesBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.meter.features._case.MultipartReplyMeterFeaturesBuilder;\r
+import org.opendaylight.yangtools.yang.binding.DataObject;\r
+\r
+/**\r
+ * @author michal.polkorab\r
+ *\r
+ */\r
+public class MultipartReplyTranslatorTest2 {\r
+\r
+ @Mock SwitchConnectionDistinguisher cookie;\r
+ @Mock SessionContext sc;\r
+ @Mock ConnectionConductor conductor;\r
+ @Mock GetFeaturesOutput features;\r
+\r
+ MultipartReplyTranslator translator = new MultipartReplyTranslator();\r
+\r
+ /**\r
+ * Initializes mocks\r
+ */\r
+ @Before\r
+ public void startUp() {\r
+ MockitoAnnotations.initMocks(this);\r
+ when(sc.getPrimaryConductor()).thenReturn(conductor);\r
+ when(conductor.getVersion()).thenReturn((short) EncodeConstants.OF13_VERSION_ID);\r
+ when(sc.getFeatures()).thenReturn(features);\r
+ when(features.getDatapathId()).thenReturn(new BigInteger("42"));\r
+ }\r
+\r
+ /**\r
+ * Test MultipartReply message with aggregate stat\r
+ */\r
+ @Test\r
+ public void testAggregateCase() {\r
+ MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder();\r
+ mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID);\r
+ mpBuilder.setXid(123L);\r
+ mpBuilder.setFlags(new MultipartRequestFlags(false));\r
+ mpBuilder.setType(MultipartType.OFPMPAGGREGATE);\r
+ \r
+ MultipartReplyAggregateCaseBuilder caseBuilder = new MultipartReplyAggregateCaseBuilder();\r
+ MultipartReplyAggregateBuilder aggBuilder = new MultipartReplyAggregateBuilder();\r
+ aggBuilder.setByteCount(new BigInteger("52"));\r
+ aggBuilder.setFlowCount(6587L);\r
+ aggBuilder.setPacketCount(new BigInteger("25"));\r
+ caseBuilder.setMultipartReplyAggregate(aggBuilder.build());\r
+ mpBuilder.setMultipartReplyBody(caseBuilder.build());\r
+ MultipartReplyMessage message = mpBuilder.build();\r
+\r
+ List<DataObject> list = translator.translate(cookie, sc, message);\r
+\r
+ Assert.assertEquals("Wrong list size", 1, list.size());\r
+ AggregateFlowStatisticsUpdate aggUpdate = (AggregateFlowStatisticsUpdate) list.get(0);\r
+ Assert.assertEquals("Wrong node-id", "openflow:42", aggUpdate.getId().getValue());\r
+ Assert.assertEquals("Wrong more-replies", false, aggUpdate.isMoreReplies());\r
+ Assert.assertEquals("Wrong transaction-id", 123, aggUpdate.getTransactionId().getValue().intValue());\r
+ Assert.assertEquals("Wrong byte count", 52, aggUpdate.getByteCount().getValue().intValue());\r
+ Assert.assertEquals("Wrong packet count", 25, aggUpdate.getPacketCount().getValue().intValue());\r
+ Assert.assertEquals("Wrong flow count", 6587, aggUpdate.getFlowCount().getValue().intValue());\r
+ }\r
+\r
+ /**\r
+ * Test MultipartReply message with group features stat\r
+ */\r
+ @Test\r
+ public void testGroupFeaturesCase() {\r
+ MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder();\r
+ mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID);\r
+ mpBuilder.setXid(123L);\r
+ mpBuilder.setFlags(new MultipartRequestFlags(false));\r
+ mpBuilder.setType(MultipartType.OFPMPGROUPFEATURES);\r
+ \r
+ MultipartReplyGroupFeaturesCaseBuilder caseBuilder = new MultipartReplyGroupFeaturesCaseBuilder();\r
+ MultipartReplyGroupFeaturesBuilder featBuilder = new MultipartReplyGroupFeaturesBuilder();\r
+ featBuilder.setTypes(new GroupTypes(true, false, true, false));\r
+ featBuilder.setCapabilities(new GroupCapabilities(false, true, false, true));\r
+ List<Long> maxGroups = new ArrayList<>();\r
+ maxGroups.add(1L);\r
+ maxGroups.add(2L);\r
+ maxGroups.add(3L);\r
+ maxGroups.add(4L);\r
+ featBuilder.setMaxGroups(maxGroups);\r
+ List<ActionType> actionTypes = new ArrayList<>();\r
+ ActionType actionType1 = new ActionType(true, false, true, false, false, false, true,\r
+ false, true, false, true, false, true, false, true, false, true);\r
+ actionTypes.add(actionType1);\r
+ ActionType actionType2 = new ActionType(false, true, false, true, false, true, false,\r
+ true, false, true, false, true, false, true, false, true, false);\r
+ actionTypes.add(actionType2);\r
+ ActionType actionType3 = new ActionType(false, false, false, false, false, false, false,\r
+ true, true, true, true, true, true, true, true, true, true);\r
+ actionTypes.add(actionType3);\r
+ ActionType actionType4 = new ActionType(true, true, true, true, true, true, true,\r
+ false, false, false, false, false, false, false, false, false, false);\r
+ actionTypes.add(actionType4);\r
+ featBuilder.setActionsBitmap(actionTypes);\r
+ caseBuilder.setMultipartReplyGroupFeatures(featBuilder.build());\r
+ mpBuilder.setMultipartReplyBody(caseBuilder.build());\r
+ MultipartReplyMessage message = mpBuilder.build();\r
+\r
+ List<DataObject> list = translator.translate(cookie, sc, message);\r
+\r
+ Assert.assertEquals("Wrong list size", 1, list.size());\r
+ GroupFeaturesUpdated groupUpdate = (GroupFeaturesUpdated) list.get(0);\r
+ Assert.assertEquals("Wrong node-id", "openflow:42", groupUpdate.getId().getValue());\r
+ Assert.assertEquals("Wrong more-replies", false, groupUpdate.isMoreReplies());\r
+ Assert.assertEquals("Wrong transaction-id", 123, groupUpdate.getTransactionId().getValue().intValue());\r
+ Assert.assertEquals("Wrong group types size", 2, groupUpdate.getGroupTypesSupported().size());\r
+ Assert.assertEquals("Wrong group type", "org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupAll",\r
+ groupUpdate.getGroupTypesSupported().get(0).getName());\r
+ Assert.assertEquals("Wrong group type", "org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupIndirect",\r
+ groupUpdate.getGroupTypesSupported().get(1).getName());\r
+ Assert.assertEquals("Wrong group capabilities size", 2, groupUpdate.getGroupCapabilitiesSupported().size());\r
+ Assert.assertEquals("Wrong group capability", "org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.ChainingChecks",\r
+ groupUpdate.getGroupCapabilitiesSupported().get(0).getName());\r
+ Assert.assertEquals("Wrong group capability", "org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.SelectWeight",\r
+ groupUpdate.getGroupCapabilitiesSupported().get(1).getName());\r
+ Assert.assertEquals("Wrong max groups", maxGroups, groupUpdate.getMaxGroups());\r
+ Assert.assertEquals("Wrong actions bitmap", 137072641, groupUpdate.getActions().get(0).longValue());\r
+ Assert.assertEquals("Wrong actions bitmap", 131336192, groupUpdate.getActions().get(1).longValue());\r
+ Assert.assertEquals("Wrong actions bitmap", 247365632, groupUpdate.getActions().get(2).longValue());\r
+ Assert.assertEquals("Wrong actions bitmap", 21043201, groupUpdate.getActions().get(3).longValue());\r
+ }\r
+\r
+ /**\r
+ * Test MultipartReply message with meter features stat\r
+ */\r
+ @Test\r
+ public void testMeterFeaturesCase() {\r
+ MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder();\r
+ mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID);\r
+ mpBuilder.setXid(123L);\r
+ mpBuilder.setFlags(new MultipartRequestFlags(false));\r
+ mpBuilder.setType(MultipartType.OFPMPMETERFEATURES);\r
+ \r
+ MultipartReplyMeterFeaturesCaseBuilder caseBuilder = new MultipartReplyMeterFeaturesCaseBuilder();\r
+ MultipartReplyMeterFeaturesBuilder featBuilder = new MultipartReplyMeterFeaturesBuilder();\r
+ featBuilder.setMaxMeter(1L);\r
+ featBuilder.setBandTypes(new MeterBandTypeBitmap(true, true));\r
+ featBuilder.setCapabilities(new MeterFlags(true, true, true, true));\r
+ featBuilder.setMaxBands((short) 2);\r
+ featBuilder.setMaxColor((short) 3);\r
+ caseBuilder.setMultipartReplyMeterFeatures(featBuilder.build());\r
+ mpBuilder.setMultipartReplyBody(caseBuilder.build());\r
+ MultipartReplyMessage message = mpBuilder.build();\r
+\r
+ List<DataObject> list = translator.translate(cookie, sc, message);\r
+\r
+ Assert.assertEquals("Wrong list size", 1, list.size());\r
+ MeterFeaturesUpdated megterUpdate = (MeterFeaturesUpdated) list.get(0);\r
+ Assert.assertEquals("Wrong node-id", "openflow:42", megterUpdate.getId().getValue());\r
+ Assert.assertEquals("Wrong more-replies", false, megterUpdate.isMoreReplies());\r
+ Assert.assertEquals("Wrong transaction-id", 123, megterUpdate.getTransactionId().getValue().intValue());\r
+ Assert.assertEquals("Wrong max meter", 1, megterUpdate.getMaxMeter().getValue().intValue());\r
+ Assert.assertEquals("Wrong max bands", 2, megterUpdate.getMaxBands().intValue());\r
+ Assert.assertEquals("Wrong max color", 3, megterUpdate.getMaxColor().intValue());\r
+ Assert.assertEquals("Wrong capabilities size", 4, megterUpdate.getMeterCapabilitiesSupported().size());\r
+ Assert.assertEquals("Wrong capability", "org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918"\r
+ + ".MeterBurst", megterUpdate.getMeterCapabilitiesSupported().get(0).getName());\r
+ Assert.assertEquals("Wrong capability", "org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918"\r
+ + ".MeterKbps", megterUpdate.getMeterCapabilitiesSupported().get(1).getName());\r
+ Assert.assertEquals("Wrong capability", "org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918"\r
+ + ".MeterPktps", megterUpdate.getMeterCapabilitiesSupported().get(2).getName());\r
+ Assert.assertEquals("Wrong capability", "org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918"\r
+ + ".MeterStats", megterUpdate.getMeterCapabilitiesSupported().get(3).getName());\r
+ Assert.assertEquals("Wrong band types size", 2, megterUpdate.getMeterBandSupported().size());\r
+ Assert.assertEquals("Wrong band type", "org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterBandDrop",\r
+ megterUpdate.getMeterBandSupported().get(0).getName());\r
+ Assert.assertEquals("Wrong band type", "org.opendaylight.yang.gen.v1.urn.opendaylight.meter.types.rev130918.MeterBandDscpRemark",\r
+ megterUpdate.getMeterBandSupported().get(1).getName());\r
+ }\r
+}
\ No newline at end of file
--- /dev/null
+/*\r
+ * Copyright (c) 2014 Pantheon Technologies s.r.o. and others. All rights reserved.\r
+ *\r
+ * This program and the accompanying materials are made available under the\r
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,\r
+ * and is available at http://www.eclipse.org/legal/epl-v10.html\r
+ */\r
+\r
+package org.opendaylight.openflowplugin.openflow.md.core.translator;\r
+\r
+import static org.mockito.Mockito.when;\r
+\r
+import java.math.BigInteger;\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.junit.Assert;\r
+import org.junit.Before;\r
+import org.junit.Test;\r
+import org.mockito.Mock;\r
+import org.mockito.MockitoAnnotations;\r
+import org.opendaylight.openflowjava.protocol.api.util.BinContent;\r
+import org.opendaylight.openflowjava.protocol.api.util.EncodeConstants;\r
+import org.opendaylight.openflowplugin.api.openflow.md.core.SwitchConnectionDistinguisher;\r
+import org.opendaylight.openflowplugin.openflow.md.core.ConnectionConductor;\r
+import org.opendaylight.openflowplugin.openflow.md.core.session.SessionContext;\r
+import org.opendaylight.openflowplugin.openflow.md.util.OpenflowPortsUtil;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.table.statistics.rev131215.FlowTableStatisticsUpdate;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.table.statistics.rev131215.flow.table.and.statistics.map.FlowTableAndStatisticsMap;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartRequestFlags;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.PortNumberValues;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.GetFeaturesOutput;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessage;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReplyMessageBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyPortStatsCaseBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyQueueCaseBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyTableCaseBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.port.stats._case.MultipartReplyPortStatsBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.port.stats._case.multipart.reply.port.stats.PortStats;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.port.stats._case.multipart.reply.port.stats.PortStatsBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.queue._case.MultipartReplyQueueBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.queue._case.multipart.reply.queue.QueueStats;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.queue._case.multipart.reply.queue.QueueStatsBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.table._case.MultipartReplyTableBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.table._case.multipart.reply.table.TableStats;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.multipart.reply.table._case.multipart.reply.table.TableStatsBuilder;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.NodeConnectorStatisticsUpdate;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.port.statistics.rev131214.node.connector.statistics.and.port.number.map.NodeConnectorStatisticsAndPortNumberMap;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.QueueStatisticsUpdate;\r
+import org.opendaylight.yang.gen.v1.urn.opendaylight.queue.statistics.rev131216.queue.id.and.statistics.map.QueueIdAndStatisticsMap;\r
+import org.opendaylight.yangtools.yang.binding.DataObject;\r
+\r
+/**\r
+ * @author michal.polkorab\r
+ *\r
+ */\r
+public class MultipartReplyTranslatorTest3 {\r
+\r
+ @Mock SwitchConnectionDistinguisher cookie;\r
+ @Mock SessionContext sc;\r
+ @Mock ConnectionConductor conductor;\r
+ @Mock GetFeaturesOutput features;\r
+\r
+ MultipartReplyTranslator translator = new MultipartReplyTranslator();\r
+\r
+ /**\r
+ * Initializes mocks\r
+ */\r
+ @Before\r
+ public void startUp() {\r
+ MockitoAnnotations.initMocks(this);\r
+ when(sc.getPrimaryConductor()).thenReturn(conductor);\r
+ when(conductor.getVersion()).thenReturn((short) EncodeConstants.OF13_VERSION_ID);\r
+ when(sc.getFeatures()).thenReturn(features);\r
+ when(features.getDatapathId()).thenReturn(new BigInteger("42"));\r
+ OpenflowPortsUtil.init();\r
+ }\r
+\r
+ /**\r
+ * Test empty port stats\r
+ */\r
+ @Test\r
+ public void testEmptyPortStats() {\r
+ MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder();\r
+ mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID);\r
+ mpBuilder.setXid(123L);\r
+ mpBuilder.setFlags(new MultipartRequestFlags(false));\r
+ mpBuilder.setType(MultipartType.OFPMPPORTSTATS);\r
+ \r
+ MultipartReplyPortStatsCaseBuilder caseBuilder = new MultipartReplyPortStatsCaseBuilder();\r
+ MultipartReplyPortStatsBuilder statsBuilder = new MultipartReplyPortStatsBuilder();\r
+ List<PortStats> portStats = new ArrayList<>();\r
+ statsBuilder.setPortStats(portStats);\r
+ caseBuilder.setMultipartReplyPortStats(statsBuilder.build());\r
+ mpBuilder.setMultipartReplyBody(caseBuilder.build());\r
+ MultipartReplyMessage message = mpBuilder.build();\r
+ \r
+ List<DataObject> list = translator.translate(cookie, sc, message);\r
+\r
+ Assert.assertEquals("Wrong list size", 1, list.size());\r
+ NodeConnectorStatisticsUpdate statUpdate = (NodeConnectorStatisticsUpdate) list.get(0);\r
+ Assert.assertEquals("Wrong node-id", "openflow:42", statUpdate.getId().getValue());\r
+ Assert.assertEquals("Wrong more-replies", false, statUpdate.isMoreReplies());\r
+ Assert.assertEquals("Wrong transaction-id", 123, statUpdate.getTransactionId().getValue().intValue());\r
+ Assert.assertEquals("Wrong port stats size", 0, statUpdate.getNodeConnectorStatisticsAndPortNumberMap().size());\r
+ }\r
+\r
+ /**\r
+ * Test port stats\r
+ */\r
+ @Test\r
+ public void testPortStats() {\r
+ MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder();\r
+ mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID);\r
+ mpBuilder.setXid(123L);\r
+ mpBuilder.setFlags(new MultipartRequestFlags(false));\r
+ mpBuilder.setType(MultipartType.OFPMPPORTSTATS);\r
+ \r
+ MultipartReplyPortStatsCaseBuilder caseBuilder = new MultipartReplyPortStatsCaseBuilder();\r
+ MultipartReplyPortStatsBuilder statsBuilder = new MultipartReplyPortStatsBuilder();\r
+ List<PortStats> portStats = new ArrayList<>();\r
+ PortStatsBuilder builder = new PortStatsBuilder();\r
+ builder.setPortNo(1L);\r
+ builder.setRxPackets(new BigInteger("2"));\r
+ builder.setTxPackets(new BigInteger("3"));\r
+ builder.setRxBytes(new BigInteger("4"));\r
+ builder.setTxBytes(new BigInteger("5"));\r
+ builder.setRxDropped(new BigInteger("6"));\r
+ builder.setTxDropped(new BigInteger("7"));\r
+ builder.setRxErrors(new BigInteger("8"));\r
+ builder.setTxErrors(new BigInteger("9"));\r
+ builder.setRxFrameErr(new BigInteger("10"));\r
+ builder.setRxOverErr(new BigInteger("11"));\r
+ builder.setRxCrcErr(new BigInteger("12"));\r
+ builder.setCollisions(new BigInteger("13"));\r
+ builder.setDurationSec(14L);\r
+ builder.setDurationNsec(15L);\r
+ portStats.add(builder.build());\r
+ builder = new PortStatsBuilder();\r
+ builder.setPortNo(BinContent.intToUnsignedLong(PortNumberValues.CONTROLLER.getIntValue()));\r
+ builder.setRxPackets(new BigInteger("20"));\r
+ builder.setTxPackets(new BigInteger("30"));\r
+ builder.setRxBytes(new BigInteger("40"));\r
+ builder.setTxBytes(new BigInteger("50"));\r
+ builder.setRxDropped(new BigInteger("60"));\r
+ builder.setTxDropped(new BigInteger("70"));\r
+ builder.setRxErrors(new BigInteger("80"));\r
+ builder.setTxErrors(new BigInteger("90"));\r
+ builder.setRxFrameErr(new BigInteger("100"));\r
+ builder.setRxOverErr(new BigInteger("110"));\r
+ builder.setRxCrcErr(new BigInteger("120"));\r
+ builder.setCollisions(new BigInteger("130"));\r
+ portStats.add(builder.build());\r
+ statsBuilder.setPortStats(portStats);\r
+ caseBuilder.setMultipartReplyPortStats(statsBuilder.build());\r
+ mpBuilder.setMultipartReplyBody(caseBuilder.build());\r
+ MultipartReplyMessage message = mpBuilder.build();\r
+ \r
+ List<DataObject> list = translator.translate(cookie, sc, message);\r
+\r
+ Assert.assertEquals("Wrong list size", 1, list.size());\r
+ NodeConnectorStatisticsUpdate statUpdate = (NodeConnectorStatisticsUpdate) list.get(0);\r
+ Assert.assertEquals("Wrong node-id", "openflow:42", statUpdate.getId().getValue());\r
+ Assert.assertEquals("Wrong more-replies", false, statUpdate.isMoreReplies());\r
+ Assert.assertEquals("Wrong transaction-id", 123, statUpdate.getTransactionId().getValue().intValue());\r
+ Assert.assertEquals("Wrong port stats size", 2, statUpdate.getNodeConnectorStatisticsAndPortNumberMap().size());\r
+ NodeConnectorStatisticsAndPortNumberMap stat = statUpdate.getNodeConnectorStatisticsAndPortNumberMap().get(0);\r
+ Assert.assertEquals("Wrong port number", "openflow:42:1", stat.getNodeConnectorId().getValue());\r
+ Assert.assertEquals("Wrong rx packets", 2, stat.getPackets().getReceived().intValue());\r
+ Assert.assertEquals("Wrong tx packets", 3, stat.getPackets().getTransmitted().intValue());\r
+ Assert.assertEquals("Wrong rx bytes", 4, stat.getBytes().getReceived().intValue());\r
+ Assert.assertEquals("Wrong tx bytes", 5, stat.getBytes().getTransmitted().intValue());\r
+ Assert.assertEquals("Wrong rx dropped", 6, stat.getReceiveDrops().intValue());\r
+ Assert.assertEquals("Wrong tx dropped", 7, stat.getTransmitDrops().intValue());\r
+ Assert.assertEquals("Wrong rx errors", 8, stat.getReceiveErrors().intValue());\r
+ Assert.assertEquals("Wrong tx errors", 9, stat.getTransmitErrors().intValue());\r
+ Assert.assertEquals("Wrong rx frame error", 10, stat.getReceiveFrameError().intValue());\r
+ Assert.assertEquals("Wrong rx over error", 11, stat.getReceiveOverRunError().intValue());\r
+ Assert.assertEquals("Wrong rx crc error", 12, stat.getReceiveCrcError().intValue());\r
+ Assert.assertEquals("Wrong collision count", 13, stat.getCollisionCount().intValue());\r
+ Assert.assertEquals("Wrong duration sec", 14, stat.getDuration().getSecond().getValue().intValue());\r
+ Assert.assertEquals("Wrong duration n sec", 15, stat.getDuration().getNanosecond().getValue().intValue());\r
+ stat = statUpdate.getNodeConnectorStatisticsAndPortNumberMap().get(1);\r
+ Assert.assertEquals("Wrong port number", "openflow:42:CONTROLLER", stat.getNodeConnectorId().getValue());\r
+ Assert.assertEquals("Wrong rx packets", 20, stat.getPackets().getReceived().intValue());\r
+ Assert.assertEquals("Wrong tx packets", 30, stat.getPackets().getTransmitted().intValue());\r
+ Assert.assertEquals("Wrong rx bytes", 40, stat.getBytes().getReceived().intValue());\r
+ Assert.assertEquals("Wrong tx bytes", 50, stat.getBytes().getTransmitted().intValue());\r
+ Assert.assertEquals("Wrong rx dropped", 60, stat.getReceiveDrops().intValue());\r
+ Assert.assertEquals("Wrong tx dropped", 70, stat.getTransmitDrops().intValue());\r
+ Assert.assertEquals("Wrong rx errors", 80, stat.getReceiveErrors().intValue());\r
+ Assert.assertEquals("Wrong tx errors", 90, stat.getTransmitErrors().intValue());\r
+ Assert.assertEquals("Wrong rx frame error", 100, stat.getReceiveFrameError().intValue());\r
+ Assert.assertEquals("Wrong rx over error", 110, stat.getReceiveOverRunError().intValue());\r
+ Assert.assertEquals("Wrong rx crc error", 120, stat.getReceiveCrcError().intValue());\r
+ Assert.assertEquals("Wrong collision count", 130, stat.getCollisionCount().intValue());\r
+ Assert.assertEquals("Wrong duration sec", null, stat.getDuration().getSecond());\r
+ Assert.assertEquals("Wrong duration n sec", null, stat.getDuration().getNanosecond());\r
+ }\r
+\r
+ /**\r
+ * Test empty table stats\r
+ */\r
+ @Test\r
+ public void testEmptyTableStats() {\r
+ MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder();\r
+ mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID);\r
+ mpBuilder.setXid(123L);\r
+ mpBuilder.setFlags(new MultipartRequestFlags(false));\r
+ mpBuilder.setType(MultipartType.OFPMPTABLE);\r
+ \r
+ MultipartReplyTableCaseBuilder caseBuilder = new MultipartReplyTableCaseBuilder();\r
+ MultipartReplyTableBuilder statsBuilder = new MultipartReplyTableBuilder();\r
+ List<TableStats> tableStats = new ArrayList<>();\r
+ statsBuilder.setTableStats(tableStats);\r
+ caseBuilder.setMultipartReplyTable(statsBuilder.build());\r
+ mpBuilder.setMultipartReplyBody(caseBuilder.build());\r
+ MultipartReplyMessage message = mpBuilder.build();\r
+ \r
+ List<DataObject> list = translator.translate(cookie, sc, message);\r
+\r
+ Assert.assertEquals("Wrong list size", 1, list.size());\r
+ FlowTableStatisticsUpdate statUpdate = (FlowTableStatisticsUpdate) list.get(0);\r
+ Assert.assertEquals("Wrong node-id", "openflow:42", statUpdate.getId().getValue());\r
+ Assert.assertEquals("Wrong more-replies", false, statUpdate.isMoreReplies());\r
+ Assert.assertEquals("Wrong transaction-id", 123, statUpdate.getTransactionId().getValue().intValue());\r
+ Assert.assertEquals("Wrong table stats size", 0, statUpdate.getFlowTableAndStatisticsMap().size());\r
+ }\r
+\r
+ /**\r
+ * Test table stats\r
+ */\r
+ @Test\r
+ public void testTableStats() {\r
+ MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder();\r
+ mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID);\r
+ mpBuilder.setXid(123L);\r
+ mpBuilder.setFlags(new MultipartRequestFlags(false));\r
+ mpBuilder.setType(MultipartType.OFPMPTABLE);\r
+ \r
+ MultipartReplyTableCaseBuilder caseBuilder = new MultipartReplyTableCaseBuilder();\r
+ MultipartReplyTableBuilder statsBuilder = new MultipartReplyTableBuilder();\r
+ List<TableStats> tableStats = new ArrayList<>();\r
+ TableStatsBuilder builder = new TableStatsBuilder();\r
+ builder.setTableId((short) 1);\r
+ builder.setActiveCount(2L);\r
+ builder.setLookupCount(new BigInteger("3"));\r
+ builder.setMatchedCount(new BigInteger("4"));\r
+ tableStats.add(builder.build());\r
+ builder = new TableStatsBuilder();\r
+ builder.setTableId((short) 10);\r
+ builder.setActiveCount(20L);\r
+ builder.setLookupCount(new BigInteger("30"));\r
+ builder.setMatchedCount(new BigInteger("40"));\r
+ tableStats.add(builder.build());\r
+ statsBuilder.setTableStats(tableStats);\r
+ caseBuilder.setMultipartReplyTable(statsBuilder.build());\r
+ mpBuilder.setMultipartReplyBody(caseBuilder.build());\r
+ MultipartReplyMessage message = mpBuilder.build();\r
+ \r
+ List<DataObject> list = translator.translate(cookie, sc, message);\r
+\r
+ Assert.assertEquals("Wrong list size", 1, list.size());\r
+ FlowTableStatisticsUpdate statUpdate = (FlowTableStatisticsUpdate) list.get(0);\r
+ Assert.assertEquals("Wrong node-id", "openflow:42", statUpdate.getId().getValue());\r
+ Assert.assertEquals("Wrong more-replies", false, statUpdate.isMoreReplies());\r
+ Assert.assertEquals("Wrong transaction-id", 123, statUpdate.getTransactionId().getValue().intValue());\r
+ Assert.assertEquals("Wrong table stats size", 2, statUpdate.getFlowTableAndStatisticsMap().size());\r
+ FlowTableAndStatisticsMap stat = statUpdate.getFlowTableAndStatisticsMap().get(0);\r
+ Assert.assertEquals("Wrong table-id", 1, stat.getTableId().getValue().intValue());\r
+ Assert.assertEquals("Wrong active count", 2, stat.getActiveFlows().getValue().intValue());\r
+ Assert.assertEquals("Wrong lookup count", 3, stat.getPacketsLookedUp().getValue().intValue());\r
+ Assert.assertEquals("Wrong matched count", 4, stat.getPacketsMatched().getValue().intValue());\r
+ stat = statUpdate.getFlowTableAndStatisticsMap().get(1);\r
+ Assert.assertEquals("Wrong table-id", 10, stat.getTableId().getValue().intValue());\r
+ Assert.assertEquals("Wrong active count", 20, stat.getActiveFlows().getValue().intValue());\r
+ Assert.assertEquals("Wrong lookup count", 30, stat.getPacketsLookedUp().getValue().intValue());\r
+ Assert.assertEquals("Wrong matched count", 40, stat.getPacketsMatched().getValue().intValue());\r
+ }\r
+\r
+ /**\r
+ * Test empty queue stats\r
+ */\r
+ @Test\r
+ public void testEmptyQueueStats() {\r
+ MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder();\r
+ mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID);\r
+ mpBuilder.setXid(123L);\r
+ mpBuilder.setFlags(new MultipartRequestFlags(false));\r
+ mpBuilder.setType(MultipartType.OFPMPQUEUE);\r
+ \r
+ MultipartReplyQueueCaseBuilder caseBuilder = new MultipartReplyQueueCaseBuilder();\r
+ MultipartReplyQueueBuilder statsBuilder = new MultipartReplyQueueBuilder();\r
+ List<QueueStats> queueStats = new ArrayList<>();\r
+ statsBuilder.setQueueStats(queueStats);\r
+ caseBuilder.setMultipartReplyQueue(statsBuilder.build());\r
+ mpBuilder.setMultipartReplyBody(caseBuilder.build());\r
+ MultipartReplyMessage message = mpBuilder.build();\r
+ \r
+ List<DataObject> list = translator.translate(cookie, sc, message);\r
+\r
+ Assert.assertEquals("Wrong list size", 1, list.size());\r
+ QueueStatisticsUpdate statUpdate = (QueueStatisticsUpdate) list.get(0);\r
+ Assert.assertEquals("Wrong node-id", "openflow:42", statUpdate.getId().getValue());\r
+ Assert.assertEquals("Wrong more-replies", false, statUpdate.isMoreReplies());\r
+ Assert.assertEquals("Wrong transaction-id", 123, statUpdate.getTransactionId().getValue().intValue());\r
+ Assert.assertEquals("Wrong queue stats size", 0, statUpdate.getQueueIdAndStatisticsMap().size());\r
+ }\r
+\r
+ /**\r
+ * Test queue stats\r
+ */\r
+ @Test\r
+ public void testQueueStats() {\r
+ MultipartReplyMessageBuilder mpBuilder = new MultipartReplyMessageBuilder();\r
+ mpBuilder.setVersion((short) EncodeConstants.OF13_VERSION_ID);\r
+ mpBuilder.setXid(123L);\r
+ mpBuilder.setFlags(new MultipartRequestFlags(false));\r
+ mpBuilder.setType(MultipartType.OFPMPQUEUE);\r
+ \r
+ MultipartReplyQueueCaseBuilder caseBuilder = new MultipartReplyQueueCaseBuilder();\r
+ MultipartReplyQueueBuilder statsBuilder = new MultipartReplyQueueBuilder();\r
+ List<QueueStats> queueStats = new ArrayList<>();\r
+ QueueStatsBuilder builder = new QueueStatsBuilder();\r
+ builder.setPortNo(BinContent.intToUnsignedLong(PortNumberValues.FLOOD.getIntValue()));\r
+ builder.setQueueId(2L);\r
+ builder.setTxPackets(new BigInteger("3"));\r
+ builder.setTxBytes(new BigInteger("4"));\r
+ builder.setTxErrors(new BigInteger("5"));\r
+ builder.setDurationSec(6L);\r
+ builder.setDurationNsec(7L);\r
+ queueStats.add(builder.build());\r
+ builder = new QueueStatsBuilder();\r
+ builder.setPortNo(BinContent.intToUnsignedLong(PortNumberValues.INPORT.getIntValue()));\r
+ builder.setQueueId(20L);\r
+ builder.setTxPackets(new BigInteger("30"));\r
+ builder.setTxBytes(new BigInteger("40"));\r
+ builder.setTxErrors(new BigInteger("50"));\r
+ builder.setDurationSec(60L);\r
+ builder.setDurationNsec(70L);\r
+ queueStats.add(builder.build());\r
+ statsBuilder.setQueueStats(queueStats);\r
+ caseBuilder.setMultipartReplyQueue(statsBuilder.build());\r
+ mpBuilder.setMultipartReplyBody(caseBuilder.build());\r
+ MultipartReplyMessage message = mpBuilder.build();\r
+ \r
+ List<DataObject> list = translator.translate(cookie, sc, message);\r
+\r
+ Assert.assertEquals("Wrong list size", 1, list.size());\r
+ QueueStatisticsUpdate statUpdate = (QueueStatisticsUpdate) list.get(0);\r
+ Assert.assertEquals("Wrong node-id", "openflow:42", statUpdate.getId().getValue());\r
+ Assert.assertEquals("Wrong more-replies", false, statUpdate.isMoreReplies());\r
+ Assert.assertEquals("Wrong transaction-id", 123, statUpdate.getTransactionId().getValue().intValue());\r
+ Assert.assertEquals("Wrong queue stats size", 2, statUpdate.getQueueIdAndStatisticsMap().size());\r
+ QueueIdAndStatisticsMap stat = statUpdate.getQueueIdAndStatisticsMap().get(0);\r
+ Assert.assertEquals("Wrong port number", "openflow:42:FLOOD", stat.getNodeConnectorId().getValue());\r
+ Assert.assertEquals("Wrong queue-id", 2, stat.getQueueId().getValue().intValue());\r
+ Assert.assertEquals("Wrong tx packets", 3, stat.getTransmittedPackets().getValue().intValue());\r
+ Assert.assertEquals("Wrong tx bytes", 4, stat.getTransmittedBytes().getValue().intValue());\r
+ Assert.assertEquals("Wrong tx errors", 5, stat.getTransmissionErrors().getValue().intValue());\r
+ Assert.assertEquals("Wrong duration sec", 6, stat.getDuration().getSecond().getValue().intValue());\r
+ Assert.assertEquals("Wrong duration n sec", 7, stat.getDuration().getNanosecond().getValue().intValue());\r
+ stat = statUpdate.getQueueIdAndStatisticsMap().get(1);\r
+ Assert.assertEquals("Wrong port number", "openflow:42:INPORT", stat.getNodeConnectorId().getValue());\r
+ Assert.assertEquals("Wrong queue-id", 20, stat.getQueueId().getValue().intValue());\r
+ Assert.assertEquals("Wrong tx packets", 30, stat.getTransmittedPackets().getValue().intValue());\r
+ Assert.assertEquals("Wrong tx bytes", 40, stat.getTransmittedBytes().getValue().intValue());\r
+ Assert.assertEquals("Wrong tx errors", 50, stat.getTransmissionErrors().getValue().intValue());\r
+ Assert.assertEquals("Wrong duration sec", 60, stat.getDuration().getSecond().getValue().intValue());\r
+ Assert.assertEquals("Wrong duration n sec", 70, stat.getDuration().getNanosecond().getValue().intValue());\r
+ }\r
+}
\ No newline at end of file