Update MRI projects for Aluminium
[openflowplugin.git] / applications / forwardingrules-sync / src / test / java / org / opendaylight / openflowplugin / applications / frsync / util / ReconcileUtilTest.java
index 75aa3b23bcd36e0f8dbe863aeff8bbbf99e5336c..a4cd934b7439e7e5693957640b37b5ecb220a96b 100644 (file)
@@ -1,36 +1,47 @@
-/**
+/*
  * Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
  *
  * This program and the accompanying materials are made available under the
  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
  * and is available at http://www.eclipse.org/legal/epl-v10.html
  */
-
 package org.opendaylight.openflowplugin.applications.frsync.util;
 
 import com.google.common.base.Splitter;
+import com.google.common.collect.Maps;
 import com.google.common.util.concurrent.Futures;
 import com.google.common.util.concurrent.ListenableFuture;
+import com.google.common.util.concurrent.MoreExecutors;
 import com.google.common.util.concurrent.SettableFuture;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
 import org.junit.Assert;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.rules.ExpectedException;
 import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
+import org.mockito.ArgumentMatchers;
 import org.mockito.Captor;
-import org.mockito.Matchers;
 import org.mockito.Mock;
 import org.mockito.Mockito;
-import org.mockito.runners.MockitoJUnitRunner;
+import org.mockito.junit.MockitoJUnitRunner;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCase;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.GroupActionCaseBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.group.action._case.GroupAction;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.action.group.action._case.GroupActionBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.Action;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.action.types.rev131112.action.list.ActionKey;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev150304.FlowCapableTransactionService;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev150304.SendBarrierInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev150304.SendBarrierOutput;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.GroupId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.Buckets;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.group.types.rev131018.group.BucketsBuilder;
@@ -45,15 +56,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.N
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.opendaylight.yangtools.yang.common.RpcResult;
 import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import org.opendaylight.yangtools.yang.common.Uint32;
 
 /**
  * Test for {@link ReconcileUtil}.
@@ -62,7 +65,7 @@ import java.util.Set;
 public class ReconcileUtilTest {
 
     private static final NodeId NODE_ID = new NodeId("unit-node-id");
-    private InstanceIdentifier<Node> NODE_IDENT = InstanceIdentifier.create(Nodes.class)
+    private static final InstanceIdentifier<Node> NODE_IDENT = InstanceIdentifier.create(Nodes.class)
             .child(Node.class, new NodeKey(NODE_ID));
     private static final Splitter COMMA_SPLITTER = Splitter.on(",");
 
@@ -77,35 +80,26 @@ public class ReconcileUtilTest {
     public void testChainBarrierFlush() throws Exception {
         SettableFuture<RpcResult<Void>> testRabbit = SettableFuture.create();
         final ListenableFuture<RpcResult<Void>> vehicle =
-                Futures.transform(testRabbit, ReconcileUtil.chainBarrierFlush(NODE_IDENT, flowCapableService));
+                Futures.transformAsync(testRabbit, ReconcileUtil.chainBarrierFlush(NODE_IDENT, flowCapableService),
+                        MoreExecutors.directExecutor());
         Mockito.when(flowCapableService.sendBarrier(barrierInputCaptor.capture()))
-                .thenReturn(RpcResultBuilder.<Void>success().buildFuture());
+                .thenReturn(RpcResultBuilder.<SendBarrierOutput>success().buildFuture());
 
-        Mockito.verify(flowCapableService, Mockito.never()).sendBarrier(Matchers.<SendBarrierInput>any());
+        Mockito.verify(flowCapableService, Mockito.never()).sendBarrier(ArgumentMatchers.any());
         Assert.assertFalse(vehicle.isDone());
 
         testRabbit.set(RpcResultBuilder.<Void>success().build());
-        Mockito.verify(flowCapableService).sendBarrier(Matchers.<SendBarrierInput>any());
+        Mockito.verify(flowCapableService).sendBarrier(ArgumentMatchers.any());
         Assert.assertTrue(vehicle.isDone());
         Assert.assertTrue(vehicle.get().isSuccessful());
     }
 
-    @Test
-    public void testCreateRpcResultCondenser() throws Exception {
-
-    }
-
     /**
-     * add one missing group
-     *
-     * @throws Exception
+     * add one missing group.
      */
     @Test
-    public void testResolveAndDivideGroupDiffs1() throws Exception {
-        final Map<Long, Group> installedGroups = new HashMap<>();
-        installedGroups.put(1L, createGroup(1L));
-        installedGroups.put(2L, createGroup(2L));
-        installedGroups.put(3L, createGroup(3L));
+    public void testResolveAndDivideGroupDiffs1() {
+        final Map<Uint32, Group> installedGroups = createGroups(1, 2, 3);
 
         final List<Group> pendingGroups = new ArrayList<>();
         pendingGroups.add(createGroup(2L));
@@ -118,19 +112,17 @@ public class ReconcileUtilTest {
         Assert.assertEquals(1, plan.size());
 
         Assert.assertEquals(1, plan.get(0).getItemsToPush().size());
-        Assert.assertEquals(4L, plan.get(0).getItemsToPush().iterator().next().getKey().getGroupId().getValue().longValue());
+        Assert.assertEquals(4L, plan.get(0).getItemsToPush().iterator().next().key()
+                .getGroupId().getValue().longValue());
         Assert.assertEquals(0, plan.get(0).getItemsToUpdate().size());
     }
 
     /**
-     * add 3 groups with dependencies - 3 steps involved
-     *
-     * @throws Exception
+     * add 3 groups with dependencies - 3 steps involved.
      */
     @Test
-    public void testResolveAndDivideGroupDiffs2() throws Exception {
-        final Map<Long, Group> installedGroups = new HashMap<>();
-        installedGroups.put(1L, createGroup(1L));
+    public void testResolveAndDivideGroupDiffs2() {
+        final Map<Uint32, Group> installedGroups = createGroups(1);
 
         final List<Group> pendingGroups = new ArrayList<>();
         pendingGroups.add(createGroup(2L));
@@ -143,28 +135,29 @@ public class ReconcileUtilTest {
         Assert.assertEquals(3, plan.size());
 
         Assert.assertEquals(1, plan.get(0).getItemsToPush().size());
-        Assert.assertEquals(2L, plan.get(0).getItemsToPush().iterator().next().getKey().getGroupId().getValue().longValue());
+        Assert.assertEquals(2L, plan.get(0).getItemsToPush().iterator().next().key()
+                .getGroupId().getValue().longValue());
         Assert.assertEquals(0, plan.get(0).getItemsToUpdate().size());
 
         Assert.assertEquals(1, plan.get(1).getItemsToPush().size());
-        Assert.assertEquals(4L, plan.get(1).getItemsToPush().iterator().next().getKey().getGroupId().getValue().longValue());
+        Assert.assertEquals(4L, plan.get(1).getItemsToPush().iterator().next().key()
+                .getGroupId().getValue().longValue());
         Assert.assertEquals(0, plan.get(1).getItemsToUpdate().size());
 
         Assert.assertEquals(1, plan.get(2).getItemsToPush().size());
-        Assert.assertEquals(3L, plan.get(2).getItemsToPush().iterator().next().getKey().getGroupId().getValue().longValue());
+        Assert.assertEquals(3L, plan.get(2).getItemsToPush().iterator().next().key()
+                .getGroupId().getValue().longValue());
         Assert.assertEquals(0, plan.get(2).getItemsToUpdate().size());
     }
 
     /**
-     * no actions taken - installed and pending groups are the same
-     *
-     * @throws Exception
+     * no actions taken - installed and pending groups are the same.
      */
     @Test
-    public void testResolveAndDivideGroupDiffs3() throws Exception {
-        final Map<Long, Group> installedGroups = new HashMap<>();
-        installedGroups.put(1L, createGroup(1L));
-        installedGroups.put(2L, createGroupWithPreconditions(2L, 1L));
+    public void testResolveAndDivideGroupDiffs3() {
+        final Map<Uint32, Group> installedGroups = new HashMap<>();
+        installedGroups.put(Uint32.ONE, createGroup(1L));
+        installedGroups.put(Uint32.valueOf(2), createGroupWithPreconditions(2L, 1L));
 
         final List<Group> pendingGroups = new ArrayList<>();
         pendingGroups.add(createGroup(1L));
@@ -177,15 +170,11 @@ public class ReconcileUtilTest {
     }
 
     /**
-     * update 1 group
-     *
-     * @throws Exception
+     * update 1 group.
      */
     @Test
-    public void testResolveAndDivideGroupDiffs4() throws Exception {
-        final Map<Long, Group> installedGroups = new HashMap<>();
-        installedGroups.put(1L, createGroup(1L));
-        installedGroups.put(2L, createGroup(2L));
+    public void testResolveAndDivideGroupDiffs4() {
+        final Map<Uint32, Group> installedGroups = createGroups(1, 2);
 
         final List<Group> pendingGroups = new ArrayList<>();
         pendingGroups.add(createGroupWithPreconditions(1L, 2L));
@@ -197,21 +186,18 @@ public class ReconcileUtilTest {
         Assert.assertEquals(1, plan.size());
         Assert.assertEquals(0, plan.get(0).getItemsToPush().size());
         Assert.assertEquals(1, plan.get(0).getItemsToUpdate().size());
-        final ItemSyncBox.ItemUpdateTuple<Group> firstItemUpdateTuple = plan.get(0).getItemsToUpdate().iterator().next();
+        final ItemSyncBox.ItemUpdateTuple<Group> firstItemUpdateTuple =
+                plan.get(0).getItemsToUpdate().iterator().next();
         Assert.assertEquals(1L, firstItemUpdateTuple.getOriginal().getGroupId().getValue().longValue());
         Assert.assertEquals(1L, firstItemUpdateTuple.getUpdated().getGroupId().getValue().longValue());
     }
 
     /**
-     * no action taken - update 1 group will be ignored
-     *
-     * @throws Exception
+     * no action taken - update 1 group will be ignored.
      */
     @Test
-    public void testResolveAndDivideGroupDiffs5() throws Exception {
-        final Map<Long, Group> installedGroups = new HashMap<>();
-        installedGroups.put(1L, createGroup(1L));
-        installedGroups.put(2L, createGroup(2L));
+    public void testResolveAndDivideGroupDiffs5() {
+        final Map<Uint32, Group> installedGroups = createGroups(1, 2);
 
         final List<Group> pendingGroups = new ArrayList<>();
         pendingGroups.add(createGroupWithPreconditions(1L, 2L));
@@ -224,15 +210,11 @@ public class ReconcileUtilTest {
     }
 
     /**
-     * should add 1 group but preconditions are not met
-     *
-     * @throws Exception
+     * should add 1 group but preconditions are not met.
      */
     @Test
-    public void testResolveAndDivideGroupDiffs_negative1() throws Exception {
-        final Map<Long, Group> installedGroups = new HashMap<>();
-        installedGroups.put(1L, createGroup(1L));
-        installedGroups.put(2L, createGroup(2L));
+    public void testResolveAndDivideGroupDiffs_negative1() {
+        final Map<Uint32, Group> installedGroups = createGroups(1, 2);
 
         final List<Group> pendingGroups = new ArrayList<>();
         pendingGroups.add(createGroupWithPreconditions(3L, 4L));
@@ -243,15 +225,11 @@ public class ReconcileUtilTest {
     }
 
     /**
-     * should update 1 group but preconditions are not met
-     *
-     * @throws Exception
+     * should update 1 group but preconditions are not met.
      */
     @Test
-    public void testResolveAndDivideGroupDiffs_negative2() throws Exception {
-        final Map<Long, Group> installedGroups = new HashMap<>();
-        installedGroups.put(1L, createGroup(1L));
-        installedGroups.put(2L, createGroup(2L));
+    public void testResolveAndDivideGroupDiffs_negative2() {
+        final Map<Uint32, Group> installedGroups = createGroups(1, 2);
 
         final List<Group> pendingGroups = new ArrayList<>();
         pendingGroups.add(createGroupWithPreconditions(1L, 3L));
@@ -262,8 +240,8 @@ public class ReconcileUtilTest {
     }
 
     @Test
-    public void testCheckGroupPrecondition() throws Exception {
-        final Set<Long> installedGroups = new HashSet<>(Arrays.asList(new Long[]{1L, 2L}));
+    public void testCheckGroupPrecondition() {
+        final Set<Uint32> installedGroups = new HashSet<>(Arrays.asList(Uint32.ONE, Uint32.valueOf(2)));
 
         final Group pendingGroup1 = createGroupWithPreconditions(3L, 2L, 4L);
         Assert.assertFalse(ReconcileUtil.checkGroupPrecondition(installedGroups, pendingGroup1));
@@ -275,8 +253,9 @@ public class ReconcileUtilTest {
         Assert.assertTrue(ReconcileUtil.checkGroupPrecondition(installedGroups, pendingGroup3));
     }
 
-    private Group createGroupWithPreconditions(final long groupIdValue, final long... requiredId) {
+    private static Group createGroupWithPreconditions(final long groupIdValue, final long... requiredId) {
         final List<Action> actionBag = new ArrayList<>();
+        int key = 0;
         for (long groupIdPrecondition : requiredId) {
             final GroupAction groupAction = new GroupActionBuilder()
                     .setGroupId(groupIdPrecondition)
@@ -286,6 +265,7 @@ public class ReconcileUtilTest {
                     .build();
             final Action action = new ActionBuilder()
                     .setAction(groupActionCase)
+                    .withKey(new ActionKey(key++))
                     .build();
             actionBag.add(action);
         }
@@ -303,9 +283,17 @@ public class ReconcileUtilTest {
                 .build();
     }
 
-    private Group createGroup(final long groupIdValue) {
+    private static Map<Uint32, Group> createGroups(long... groupIds) {
+        final Map<Uint32, Group> ret = Maps.newHashMapWithExpectedSize(groupIds.length);
+        for (long groupId : groupIds) {
+            ret.put(Uint32.valueOf(groupId), createGroup(groupId));
+        }
+        return ret;
+    }
+
+    private static Group createGroup(final long groupIdValue) {
         final Buckets buckets = new BucketsBuilder()
-                .setBucket(Collections.<Bucket>emptyList())
+                .setBucket(Collections.emptyList())
                 .build();
         return new GroupBuilder()
                 .setGroupId(new GroupId(groupIdValue))
@@ -314,12 +302,10 @@ public class ReconcileUtilTest {
     }
 
     /**
-     * covers {@link ReconcileUtil#countTotalUpdated(Iterable)} too
-     *
-     * @throws Exception
+     * covers {@link ReconcileUtil#countTotalUpdated(Iterable)} too.
      */
     @Test
-    public void testCountTotalAdds() throws Exception {
+    public void testCountTotalAdds() {
         List<ItemSyncBox<String>> syncPlan = new ArrayList<>();
         ItemSyncBox<String> syncBox1 = createSyncBox("a,b", "x,y,z");
         syncPlan.add(syncBox1);
@@ -336,19 +322,4 @@ public class ReconcileUtilTest {
         }
         return syncBox1;
     }
-
-    @Test
-    public void testResolveMeterDiffs() throws Exception {
-
-    }
-
-    @Test
-    public void testResolveFlowDiffsInTable() throws Exception {
-
-    }
-
-    @Test
-    public void testResolveFlowDiffsInAllTables() throws Exception {
-
-    }
-}
\ No newline at end of file
+}