Merge "Fix ExperimenterActionSerializerKey initializer use"
authorArunprakash D <d.arunprakash@ericsson.com>
Wed, 22 Jul 2020 08:51:02 +0000 (08:51 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Wed, 22 Jul 2020 08:51:02 +0000 (08:51 +0000)
model/model-flow-statistics/src/main/yang/opendaylight-flow-statistics.yang
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/datastore/multipart/FlowStatsMultipartWriter.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/protocol/deserialization/multipart/MultipartReplyFlowStatsDeserializer.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/multilayer/FlowDirectStatisticsService.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/singlelayer/FlowDirectStatisticsService.java
openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/protocol/deserialization/multipart/MultipartReplyFlowStatsDeserializerTest.java
openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/protocol/deserialization/multipart/MultipartReplyMessageDeserializerTest.java
openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/registry/flow/FlowRegistryKeyFactoryTest.java
openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/registry/flow/TestFlowHelper.java
openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/multilayer/FlowDirectStatisticsServiceTest.java
openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/statistics/services/direct/singlelayer/FlowDirectStatisticsServiceTest.java

index 68ab1b2d4d12cdae33fcd2992fcb3ef40a482849..13c735377a2b3a2a89189e458ab5dbe5e96092d3 100644 (file)
@@ -39,7 +39,6 @@ module opendaylight-flow-statistics {
     grouping flow-and-statistics-map-list {
         description "List of flow and statistics map";
         list flow-and-statistics-map-list {
-            key "flow-id";
             leaf flow-id {
                 type flow-id;
             }
index 7695b0eddbd59e9d6976d22a8e7c60bdff181a88..c85506daac35448ac00b5b6e0174a02694278ee7 100644 (file)
@@ -46,7 +46,7 @@ public class FlowStatsMultipartWriter extends AbstractMultipartWriter<FlowAndSta
 
     @Override
     public void storeStatistics(final FlowAndStatisticsMapList statistics, final boolean withParents) {
-        statistics.nonnullFlowAndStatisticsMapList().values()
+        statistics.nonnullFlowAndStatisticsMapList()
             .forEach(stat -> {
                 final FlowBuilder flow = new FlowBuilder(stat)
                     .addAugmentation(
index 8f944e0532e642811a380892294bc67fe7a9e23f..694ab0beff9d9460368d45cb4a4ab25e26bf2d21 100644 (file)
@@ -25,10 +25,8 @@ import org.opendaylight.openflowplugin.impl.protocol.deserialization.util.Instru
 import org.opendaylight.openflowplugin.impl.util.MatchUtil;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Counter32;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Counter64;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.FlowId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.flow.and.statistics.map.list.FlowAndStatisticsMapList;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.flow.and.statistics.map.list.FlowAndStatisticsMapListBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.flow.and.statistics.map.list.FlowAndStatisticsMapListKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.multipart.reply.multipart.reply.body.MultipartReplyFlowStatsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowModFlags;
@@ -54,7 +52,6 @@ public class MultipartReplyFlowStatsDeserializer implements OFDeserializer<Multi
     public MultipartReplyBody deserialize(ByteBuf message) {
         final MultipartReplyFlowStatsBuilder builder = new MultipartReplyFlowStatsBuilder();
         final List<FlowAndStatisticsMapList> items = new ArrayList<>();
-        int key = 0;
 
         while (message.readableBytes() > 0) {
             final FlowAndStatisticsMapListBuilder itemBuilder = new FlowAndStatisticsMapListBuilder();
@@ -118,7 +115,6 @@ public class MultipartReplyFlowStatsDeserializer implements OFDeserializer<Multi
                         .build());
             }
 
-            itemBuilder.withKey(new FlowAndStatisticsMapListKey(new FlowId(String.valueOf(key++))));
             items.add(itemBuilder.build());
         }
 
index fff83bb8fe9740a5a97db9a75f3be91c0fa8758e..c7061d3b7ad40eb66a1e0bee11f34fe6a3c04981 100644 (file)
@@ -27,7 +27,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.FlowId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.flow.and.statistics.map.list.FlowAndStatisticsMapList;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.flow.and.statistics.map.list.FlowAndStatisticsMapListBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.flow.and.statistics.map.list.FlowAndStatisticsMapListKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.MultipartReply;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.multipart.reply.multipart.reply.body.MultipartReplyFlowCase;
@@ -64,7 +63,6 @@ public class FlowDirectStatisticsService extends AbstractFlowDirectStatisticsSer
                     for (final FlowAndStatisticsMapList part : flowAndStatisticsMapLists) {
                         final FlowId flowId = new FlowId(generateFlowId(part).getValue());
                         statsList.add(new FlowAndStatisticsMapListBuilder(part)
-                                .withKey(new FlowAndStatisticsMapListKey(flowId))
                                 .setFlowId(flowId)
                                 .build());
                     }
index 27271d44297549529ddb814c4ae7a5794c562ab3..1b12b0b54b9205f3258173423053f47acfd76ec4 100644 (file)
@@ -21,7 +21,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetFlowStatisticsOutputBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.FlowId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.flow.and.statistics.map.list.FlowAndStatisticsMapListBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.flow.and.statistics.map.list.FlowAndStatisticsMapListKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.multipart.reply.multipart.reply.body.MultipartReplyFlowStats;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.multipart.request.multipart.request.body.MultipartRequestFlowStatsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.multipart.request.multipart.request.body.multipart.request.flow.stats.FlowStatsBuilder;
@@ -44,12 +43,11 @@ public class FlowDirectStatisticsService extends AbstractFlowDirectStatisticsSer
             .setFlowAndStatisticsMapList(input
                 .stream()
                 .flatMap(multipartReply -> ((MultipartReplyFlowStats) multipartReply.getMultipartReplyBody())
-                    .nonnullFlowAndStatisticsMapList().values()
+                    .nonnullFlowAndStatisticsMapList()
                     .stream())
                 .map(flowAndStatisticsMapList -> {
                     final FlowId flowId = new FlowId(generateFlowId(flowAndStatisticsMapList));
                     return new FlowAndStatisticsMapListBuilder(flowAndStatisticsMapList)
-                        .withKey(new FlowAndStatisticsMapListKey(flowId))
                         .setFlowId(flowId)
                         .build();
                 })
index 3e4dbd174c9b25d873caac32841c424c806c6754..a9c40ffe3d88fe5b31a05e6feb834ac130e40467 100644 (file)
@@ -130,7 +130,7 @@ public class MultipartReplyFlowStatsDeserializerTest extends AbstractMultipartDe
 
         final MultipartReplyFlowStats reply = (MultipartReplyFlowStats) deserializeMultipart(buffer);
         final FlowAndStatisticsMapList flowAndStatisticsMapList =
-                reply.nonnullFlowAndStatisticsMapList().values().iterator().next();
+                reply.nonnullFlowAndStatisticsMapList().iterator().next();
         assertEquals(TABLE_ID, flowAndStatisticsMapList.getTableId().shortValue());
         assertEquals(SECOND, flowAndStatisticsMapList.getDuration().getSecond().getValue().intValue());
         assertEquals(NANOSECOND, flowAndStatisticsMapList.getDuration().getNanosecond().getValue().intValue());
index eb2bc28cb4fcb7a093bafb90a3100148155e067a..f5e181330b258dfbdce2b53ef68079eabe4e1f02 100644 (file)
@@ -135,7 +135,7 @@ public class MultipartReplyMessageDeserializerTest extends AbstractDeserializerT
 
         assertEquals(XID, message.getXid().intValue());
         final FlowAndStatisticsMapList flowAndStatisticsMapList =
-                reply.nonnullFlowAndStatisticsMapList().values().iterator().next();
+                reply.nonnullFlowAndStatisticsMapList().iterator().next();
         assertEquals(TABLE_ID, flowAndStatisticsMapList.getTableId().shortValue());
         assertEquals(SECOND, flowAndStatisticsMapList.getDuration().getSecond().getValue().intValue());
         assertEquals(NANOSECOND, flowAndStatisticsMapList.getDuration().getNanosecond().getValue().intValue());
index ae03f75565b504bef29d80ec2664218fd4306d03..2651f75f8434f91a363e627b8b6e1eba7a254da5 100644 (file)
@@ -72,7 +72,7 @@ public class FlowRegistryKeyFactoryTest {
         FlowsStatisticsUpdate flowStats = FLOWS_STATISTICS_UPDATE_BUILDER.build();
 
         HashSet<FlowRegistryKey> flowRegistryKeys = new HashSet<>();
-        for (FlowAndStatisticsMapList item : flowStats.nonnullFlowAndStatisticsMapList().values()) {
+        for (FlowAndStatisticsMapList item : flowStats.nonnullFlowAndStatisticsMapList()) {
             final FlowRegistryKey key1 = FlowRegistryKeyFactory.create(deviceInfo.getVersion(), item);
             final FlowRegistryKey key2 = FlowRegistryKeyFactory.create(deviceInfo.getVersion(), item);
             flowRegistryKeys.add(key1);
@@ -178,7 +178,7 @@ public class FlowRegistryKeyFactoryTest {
     public void testGetHash() {
         FlowsStatisticsUpdate flowStats = FLOWS_STATISTICS_UPDATE_BUILDER.build();
 
-        for (FlowAndStatisticsMapList item : flowStats.nonnullFlowAndStatisticsMapList().values()) {
+        for (FlowAndStatisticsMapList item : flowStats.nonnullFlowAndStatisticsMapList()) {
             FlowRegistryKey flowRegistryKey = FlowRegistryKeyFactory.create(deviceInfo.getVersion(), item);
             FlowRegistryKey lastHash = null;
             if (null != lastHash) {
index 0b838129f18c150df26e2314dcf08057ee5f1afe..09ff0ce30018828942ca8cfc4759c4dd97609c03 100644 (file)
@@ -12,7 +12,6 @@ import java.math.BigInteger;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.FlowId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.flow.and.statistics.map.list.FlowAndStatisticsMapListBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.flow.and.statistics.map.list.FlowAndStatisticsMapListKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetDestinationBuilder;
@@ -53,7 +52,7 @@ public final class TestFlowHelper {
         matchBuilder.setEthernetMatch(ethernetMatchBuilder.build());
 
         flowAndStatisticsMapListBuilder.setMatch(matchBuilder.build());
-        flowAndStatisticsMapListBuilder.withKey(new FlowAndStatisticsMapListKey(new FlowId(String.valueOf(index))));
+        flowAndStatisticsMapListBuilder.setFlowId(new FlowId(String.valueOf(index)));
         return flowAndStatisticsMapListBuilder;
     }
 }
index cf941cb1bd006501120f828c916aa601f588284b..abef16147711e9c763f912e72d0215bbd5e9d233 100644 (file)
@@ -18,7 +18,6 @@ import static org.mockito.Mockito.when;
 import java.math.BigInteger;
 import java.util.Collections;
 import java.util.List;
-import java.util.Map;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.openflowplugin.api.openflow.device.Xid;
 import org.opendaylight.openflowplugin.api.openflow.registry.flow.DeviceFlowRegistry;
@@ -29,7 +28,6 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.FlowAndStatisticsMap;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.flow.and.statistics.map.list.FlowAndStatisticsMapList;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.flow.and.statistics.map.list.FlowAndStatisticsMapListKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.FlowModFlags;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
@@ -102,7 +100,7 @@ public class FlowDirectStatisticsServiceTest extends AbstractDirectStatisticsSer
         final GetFlowStatisticsOutput output = service.buildReply(input, true);
         assertTrue(output.nonnullFlowAndStatisticsMapList().size() > 0);
 
-        final FlowAndStatisticsMap stats = output.nonnullFlowAndStatisticsMapList().values().iterator().next();
+        final FlowAndStatisticsMap stats = output.nonnullFlowAndStatisticsMapList().iterator().next();
 
         assertEquals(stats.getTableId(), TABLE_NO);
     }
@@ -113,8 +111,7 @@ public class FlowDirectStatisticsServiceTest extends AbstractDirectStatisticsSer
         when(stat.getTableId()).thenReturn(TABLE_NO);
         when(stat.getMatch()).thenReturn(new MatchBuilder().build());
 
-        final Map<FlowAndStatisticsMapListKey, FlowAndStatisticsMapList> stats
-                = Collections.singletonMap(stat.key(), stat);
+        final List<FlowAndStatisticsMapList> stats = Collections.singletonList(stat);
         final GetFlowStatisticsOutput output = mock(GetFlowStatisticsOutput.class);
         when(output.nonnullFlowAndStatisticsMapList()).thenReturn(stats);
 
index 06753337c0be2595d890dc34be52cade910a4049..f19e2a537b1c03cd0bbec1fb7b6965d8f0420c4b 100644 (file)
@@ -16,9 +16,9 @@ import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
 
 import java.math.BigInteger;
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
-import java.util.Map;
 import org.opendaylight.mdsal.common.api.LogicalDatastoreType;
 import org.opendaylight.openflowplugin.api.openflow.device.Xid;
 import org.opendaylight.openflowplugin.api.openflow.registry.flow.DeviceFlowRegistry;
@@ -26,23 +26,29 @@ import org.opendaylight.openflowplugin.impl.registry.flow.FlowDescriptorFactory;
 import org.opendaylight.openflowplugin.impl.statistics.services.direct.AbstractDirectStatisticsServiceTest;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Counter32;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Counter64;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.MacAddress;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetFlowStatisticsInput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.direct.statistics.rev160511.GetFlowStatisticsOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.FlowAndStatisticsMap;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.flow.and.statistics.map.list.FlowAndStatisticsMapList;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.flow.and.statistics.map.list.FlowAndStatisticsMapListBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.flow.and.statistics.map.list.FlowAndStatisticsMapListKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.multipart.reply.multipart.reply.body.MultipartReplyFlowStatsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowCookie;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.FlowModFlags;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.InstructionsBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.flow.MatchBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.types.rev131026.multipart.request.multipart.request.body.MultipartRequestFlowStats;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.ethernet.match.fields.EthernetDestinationBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.model.match.types.rev131026.match.EthernetMatchBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.model.statistics.types.rev130925.duration.DurationBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.multipart.types.rev170112.MultipartReply;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.multipart.types.rev170112.MultipartReplyBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.multipart.types.rev170112.MultipartRequest;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType;
+import org.opendaylight.yangtools.yang.common.Uint16;
 import org.opendaylight.yangtools.yang.common.Uint32;
+import org.opendaylight.yangtools.yang.common.Uint64;
 import org.opendaylight.yangtools.yang.common.Uint8;
 
 public class FlowDirectStatisticsServiceTest extends AbstractDirectStatisticsServiceTest {
@@ -51,11 +57,11 @@ public class FlowDirectStatisticsServiceTest extends AbstractDirectStatisticsSer
 
     @Override
     public void setUp() {
+        final DeviceFlowRegistry registry = mock(DeviceFlowRegistry.class);
         service = new FlowDirectStatisticsService(requestContextStack,
                                                   deviceContext,
                                                   convertorManager,
                                                   multipartWriterProvider);
-        final DeviceFlowRegistry registry = mock(DeviceFlowRegistry.class);
         when(registry.retrieveDescriptor(any())).thenReturn(FlowDescriptorFactory.create(TABLE_NO, new FlowId("1")));
         when(deviceContext.getDeviceFlowRegistry()).thenReturn(registry);
     }
@@ -78,13 +84,21 @@ public class FlowDirectStatisticsServiceTest extends AbstractDirectStatisticsSer
         final FlowAndStatisticsMapList flowStat = new FlowAndStatisticsMapListBuilder()
                 .setDuration(new DurationBuilder()
                         .setSecond(new Counter32(1L))
-                        .setNanosecond(new Counter32(1L))
+                        .setNanosecond(new Counter32(2L))
                         .build())
-                .setTableId(TABLE_NO)
-                .setByteCount(new Counter64(BigInteger.ONE))
-                .setPacketCount(new Counter64(BigInteger.ONE))
+                .setTableId(Uint8.valueOf(50))
+                .setByteCount(new Counter64(BigInteger.valueOf(7094)))
+                .setPacketCount(new Counter64(BigInteger.valueOf(63)))
+                .setCookie(new FlowCookie(Uint64.valueOf(134419365)))
                 .setFlags(new FlowModFlags(true, false, false, false, false))
-                .setMatch(new MatchBuilder().build())
+                .setMatch(new MatchBuilder().setEthernetMatch(
+                        new EthernetMatchBuilder()
+                                .setEthernetDestination(
+                                        new EthernetDestinationBuilder()
+                                                .setAddress(new MacAddress("fa:16:3e:92:81:45"))
+                                                .build()).build()).build())
+                .setInstructions(new InstructionsBuilder().build())
+                .setPriority(Uint16.valueOf(20))
                 .build();
 
         final MultipartReply reply = new MultipartReplyBuilder()
@@ -93,14 +107,41 @@ public class FlowDirectStatisticsServiceTest extends AbstractDirectStatisticsSer
                         .build())
                 .build();
 
-        final List<MultipartReply> input = Collections.singletonList(reply);
 
+        final FlowAndStatisticsMapList flowStat1 = new FlowAndStatisticsMapListBuilder()
+                .setDuration(new DurationBuilder()
+                        .setSecond(new Counter32(1L))
+                        .setNanosecond(new Counter32(2L))
+                        .build())
+                .setTableId(Uint8.valueOf(51))
+                .setByteCount(new Counter64(BigInteger.valueOf(9853)))
+                .setPacketCount(new Counter64(BigInteger.valueOf(99)))
+                .setCookie(new FlowCookie(Uint64.valueOf(134550437)))
+                .setFlags(new FlowModFlags(true, false, false, false, false))
+                .setMatch(new MatchBuilder().setEthernetMatch(
+                        new EthernetMatchBuilder()
+                                .setEthernetDestination(
+                                        new EthernetDestinationBuilder()
+                                                .setAddress(new MacAddress("fa:16:3e:92:81:45"))
+                                                .build()).build()).build())
+                .setInstructions(new InstructionsBuilder().build())
+                .setPriority(Uint16.valueOf(20))
+                .build();
+
+        final MultipartReply reply1 = new MultipartReplyBuilder()
+                .setMultipartReplyBody(new MultipartReplyFlowStatsBuilder()
+                        .setFlowAndStatisticsMapList(Collections.singletonList(flowStat1))
+                        .build())
+                .build();
+        final List<MultipartReply> input = new ArrayList<>();
+        input.add(reply);
+        input.add(reply1);
         final GetFlowStatisticsOutput output = service.buildReply(input, true);
         assertTrue(output.getFlowAndStatisticsMapList().size() > 0);
-
-        final FlowAndStatisticsMap stats = output.nonnullFlowAndStatisticsMapList().values().iterator().next();
-
-        assertEquals(stats.getTableId(), TABLE_NO);
+        FlowAndStatisticsMap stats = output.nonnullFlowAndStatisticsMapList().iterator().next();
+        assertEquals(Uint8.valueOf(50),stats.getTableId());
+        stats = output.nonnullFlowAndStatisticsMapList().get(1);
+        assertEquals(Uint8.valueOf(51),stats.getTableId());
     }
 
     @Override
@@ -109,8 +150,8 @@ public class FlowDirectStatisticsServiceTest extends AbstractDirectStatisticsSer
         when(stat.getTableId()).thenReturn(TABLE_NO);
         when(stat.getMatch()).thenReturn(new MatchBuilder().build());
 
-        final Map<FlowAndStatisticsMapListKey, FlowAndStatisticsMapList> stats
-                = Collections.singletonMap(stat.key(), stat);
+        final List<FlowAndStatisticsMapList> stats
+                = Collections.singletonList(stat);
         final GetFlowStatisticsOutput output = mock(GetFlowStatisticsOutput.class);
         when(output.nonnullFlowAndStatisticsMapList()).thenReturn(stats);