IntentInstaller: changing from Set to Collection to improve perf

Change-Id: Ia7f0f7d893645c7528ac9f51acff133f6d82383d
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/IntentManager.java b/core/net/src/main/java/org/onosproject/net/intent/impl/IntentManager.java
index 945c6dc..8fa8b3f 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/IntentManager.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/IntentManager.java
@@ -15,23 +15,8 @@
  */
 package org.onosproject.net.intent.impl;
 
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.EnumSet;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Optional;
-import java.util.Set;
-import java.util.concurrent.Callable;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Future;
-import java.util.stream.Collectors;
-
+import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableMap;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
@@ -68,8 +53,21 @@
 import org.onosproject.net.intent.impl.phase.Withdrawn;
 import org.slf4j.Logger;
 
-import com.google.common.collect.ImmutableList;
-import com.google.common.collect.ImmutableMap;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EnumSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Optional;
+import java.util.concurrent.Callable;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Future;
+import java.util.stream.Collectors;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.base.Preconditions.checkState;
@@ -77,11 +75,7 @@
 import static java.util.concurrent.Executors.newSingleThreadExecutor;
 import static org.onlab.util.Tools.groupedThreads;
 import static org.onlab.util.Tools.isNullOrEmpty;
-import static org.onosproject.net.intent.IntentState.FAILED;
-import static org.onosproject.net.intent.IntentState.INSTALLED;
-import static org.onosproject.net.intent.IntentState.INSTALL_REQ;
-import static org.onosproject.net.intent.IntentState.WITHDRAWN;
-import static org.onosproject.net.intent.IntentState.WITHDRAW_REQ;
+import static org.onosproject.net.intent.IntentState.*;
 import static org.slf4j.LoggerFactory.getLogger;
 
 /**
@@ -310,7 +304,7 @@
                    oldInstallables.size() == newInstallables.size(),
                    "Old and New Intent must have equivalent installable intents.");
 
-        List<List<Set<FlowRuleOperation>>> plans = new ArrayList<>();
+        List<List<Collection<FlowRuleOperation>>> plans = new ArrayList<>();
         for (int i = 0; i < newInstallables.size(); i++) {
             Intent newInstallable = newInstallables.get(i);
             registerSubclassInstallerIfNeeded(newInstallable);
@@ -369,7 +363,7 @@
     // TODO: make this non-public due to short term hack for ONOS-1051
     public FlowRuleOperations uninstallCoordinate(IntentData current, IntentData pending) {
         List<Intent> installables = current.installables();
-        List<List<Set<FlowRuleOperation>>> plans = new ArrayList<>();
+        List<List<Collection<FlowRuleOperation>>> plans = new ArrayList<>();
         for (Intent installable : installables) {
             plans.add(getInstaller(installable).uninstall(installable));
             trackerService.removeTrackedResources(pending.key(), installable.resources());
@@ -395,20 +389,20 @@
 
 
     // TODO needs tests... or maybe it's just perfect
-    private FlowRuleOperations.Builder merge(List<List<Set<FlowRuleOperation>>> plans) {
+    private FlowRuleOperations.Builder merge(List<List<Collection<FlowRuleOperation>>> plans) {
         FlowRuleOperations.Builder builder = FlowRuleOperations.builder();
         // Build a batch one stage at a time
         for (int stageNumber = 0;; stageNumber++) {
             // Get the sub-stage from each plan (List<Set<FlowRuleOperation>)
-            for (Iterator<List<Set<FlowRuleOperation>>> itr = plans.iterator(); itr.hasNext();) {
-                List<Set<FlowRuleOperation>> plan = itr.next();
+            for (Iterator<List<Collection<FlowRuleOperation>>> itr = plans.iterator(); itr.hasNext();) {
+                List<Collection<FlowRuleOperation>> plan = itr.next();
                 if (plan.size() <= stageNumber) {
                     // we have consumed all stages from this plan, so remove it
                     itr.remove();
                     continue;
                 }
                 // write operations from this sub-stage into the builder
-                Set<FlowRuleOperation> stage = plan.get(stageNumber);
+                Collection<FlowRuleOperation> stage = plan.get(stageNumber);
                 for (FlowRuleOperation entry : stage) {
                     builder.operation(entry);
                 }
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/LinkCollectionIntentInstaller.java b/core/net/src/main/java/org/onosproject/net/intent/impl/LinkCollectionIntentInstaller.java
index ef6e8b5..260bd5b 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/LinkCollectionIntentInstaller.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/LinkCollectionIntentInstaller.java
@@ -15,10 +15,10 @@
  */
 package org.onosproject.net.intent.impl;
 
-import java.util.List;
-import java.util.Set;
-import java.util.stream.Collectors;
-
+import com.google.common.collect.HashMultimap;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Lists;
+import com.google.common.collect.SetMultimap;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
@@ -42,10 +42,10 @@
 import org.onosproject.net.intent.IntentInstaller;
 import org.onosproject.net.intent.LinkCollectionIntent;
 
-import com.google.common.collect.HashMultimap;
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Lists;
-import com.google.common.collect.SetMultimap;
+import java.util.Collection;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
 
 /**
  * Installer for {@link org.onosproject.net.intent.LinkCollectionIntent} path
@@ -75,18 +75,19 @@
     }
 
     @Override
-    public List<Set<FlowRuleOperation>> install(LinkCollectionIntent intent) {
+    public List<Collection<FlowRuleOperation>> install(LinkCollectionIntent intent) {
         return generateBatchOperations(intent, FlowRuleOperation.Type.ADD);
     }
 
     @Override
-    public List<Set<FlowRuleOperation>> uninstall(LinkCollectionIntent intent) {
+    public List<Collection<FlowRuleOperation>> uninstall(LinkCollectionIntent intent) {
         return generateBatchOperations(intent, FlowRuleOperation.Type.REMOVE);
     }
 
-    private List<Set<FlowRuleOperation>> generateBatchOperations(
+    private List<Collection<FlowRuleOperation>> generateBatchOperations(
             LinkCollectionIntent intent, FlowRuleOperation.Type operation) {
 
+        //TODO do we need a set here?
         SetMultimap<DeviceId, PortNumber> outputPorts = HashMultimap.create();
 
         for (Link link : intent.links()) {
@@ -121,10 +122,10 @@
     }
 
     @Override
-    public List<Set<FlowRuleOperation>> replace(LinkCollectionIntent oldIntent,
+    public List<Collection<FlowRuleOperation>> replace(LinkCollectionIntent oldIntent,
                                                 LinkCollectionIntent newIntent) {
         // FIXME: implement this in a more intelligent/less brute force way
-        List<Set<FlowRuleOperation>> batches = Lists.newArrayList();
+        List<Collection<FlowRuleOperation>> batches = Lists.newArrayList();
         batches.addAll(uninstall(oldIntent));
         batches.addAll(install(newIntent));
         return batches;
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/MplsPathIntentInstaller.java b/core/net/src/main/java/org/onosproject/net/intent/impl/MplsPathIntentInstaller.java
index 9ad1fe5..5b7ef1a 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/MplsPathIntentInstaller.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/MplsPathIntentInstaller.java
@@ -1,9 +1,8 @@
 package org.onosproject.net.intent.impl;
 
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Lists;
+import com.google.common.collect.Sets;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
@@ -40,9 +39,10 @@
 import org.onosproject.net.resource.ResourceType;
 import org.slf4j.Logger;
 
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
 
 import static com.google.common.base.Preconditions.checkNotNull;
 import static org.slf4j.LoggerFactory.getLogger;
@@ -81,14 +81,14 @@
     }
 
     @Override
-    public List<Set<FlowRuleOperation>> install(MplsPathIntent intent) {
+    public List<Collection<FlowRuleOperation>> install(MplsPathIntent intent) {
         LinkResourceAllocations allocations = assignMplsLabel(intent);
         return generateRules(intent, allocations, FlowRuleOperation.Type.ADD);
 
     }
 
     @Override
-    public List<Set<FlowRuleOperation>> uninstall(MplsPathIntent intent) {
+    public List<Collection<FlowRuleOperation>> uninstall(MplsPathIntent intent) {
         LinkResourceAllocations allocations = resourceService
                 .getAllocations(intent.id());
         resourceService.releaseResources(allocations);
@@ -97,10 +97,10 @@
     }
 
     @Override
-    public List<Set<FlowRuleOperation>> replace(MplsPathIntent oldIntent,
+    public List<Collection<FlowRuleOperation>> replace(MplsPathIntent oldIntent,
                                                  MplsPathIntent newIntent) {
-
-        List<Set<FlowRuleOperation>> batches = Lists.newArrayList();
+        //FIXME this is brute force
+        List<Collection<FlowRuleOperation>> batches = Lists.newArrayList();
         batches.addAll(uninstall(oldIntent));
         batches.addAll(install(newIntent));
         return batches;
@@ -140,7 +140,7 @@
         return null;
     }
 
-    private List<Set<FlowRuleOperation>> generateRules(MplsPathIntent intent,
+    private List<Collection<FlowRuleOperation>> generateRules(MplsPathIntent intent,
                                                        LinkResourceAllocations allocations,
                                                        FlowRuleOperation.Type operation) {
 
@@ -150,7 +150,7 @@
 
         Link link = links.next();
         // List of flow rules to be installed
-        Set<FlowRuleOperation> rules = Sets.newHashSet();
+        List<FlowRuleOperation> rules = Lists.newLinkedList();
 
         // Ingress traffic
         // Get the new MPLS label
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/ObjectiveTracker.java b/core/net/src/main/java/org/onosproject/net/intent/impl/ObjectiveTracker.java
index 3c7b733..b6edebf 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/ObjectiveTracker.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/ObjectiveTracker.java
@@ -49,10 +49,10 @@
 import static com.google.common.base.Preconditions.checkNotNull;
 import static com.google.common.collect.Multimaps.synchronizedSetMultimap;
 import static java.util.concurrent.Executors.newSingleThreadExecutor;
+import static org.onlab.util.Tools.namedThreads;
 import static org.onosproject.net.LinkKey.linkKey;
 import static org.onosproject.net.link.LinkEvent.Type.LINK_REMOVED;
 import static org.onosproject.net.link.LinkEvent.Type.LINK_UPDATED;
-import static org.onlab.util.Tools.namedThreads;
 import static org.slf4j.LoggerFactory.getLogger;
 
 /**
@@ -66,6 +66,7 @@
     private final Logger log = getLogger(getClass());
 
     private final SetMultimap<LinkKey, Key> intentsByLink =
+            //TODO this could be slow as a point of synchronization
             synchronizedSetMultimap(HashMultimap.<LinkKey, Key>create());
 
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/OpticalPathIntentInstaller.java b/core/net/src/main/java/org/onosproject/net/intent/impl/OpticalPathIntentInstaller.java
index e2dc0d4..9dea575 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/OpticalPathIntentInstaller.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/OpticalPathIntentInstaller.java
@@ -15,9 +15,8 @@
  */
 package org.onosproject.net.intent.impl;
 
-import java.util.List;
-import java.util.Set;
-
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Lists;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
@@ -49,9 +48,8 @@
 import org.onosproject.net.topology.TopologyService;
 import org.slf4j.Logger;
 
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
+import java.util.Collection;
+import java.util.List;
 
 import static org.onosproject.net.flow.DefaultTrafficTreatment.builder;
 import static org.slf4j.LoggerFactory.getLogger;
@@ -94,24 +92,24 @@
     }
 
     @Override
-    public List<Set<FlowRuleOperation>> install(OpticalPathIntent intent) {
+    public List<Collection<FlowRuleOperation>> install(OpticalPathIntent intent) {
         LinkResourceAllocations allocations = assignWavelength(intent);
         return generateRules(intent, allocations, FlowRuleOperation.Type.ADD);
     }
 
     @Override
-    public List<Set<FlowRuleOperation>> uninstall(OpticalPathIntent intent) {
+    public List<Collection<FlowRuleOperation>> uninstall(OpticalPathIntent intent) {
         LinkResourceAllocations allocations = resourceService.getAllocations(intent.id());
-        List<Set<FlowRuleOperation>> rules = generateRules(intent, allocations, FlowRuleOperation.Type.REMOVE);
+        List<Collection<FlowRuleOperation>> rules = generateRules(intent, allocations, FlowRuleOperation.Type.REMOVE);
         log.info("uninstall rules: {}", rules);
         return rules;
     }
 
     @Override
-    public List<Set<FlowRuleOperation>> replace(OpticalPathIntent oldIntent,
+    public List<Collection<FlowRuleOperation>> replace(OpticalPathIntent oldIntent,
                                                 OpticalPathIntent newIntent) {
         // FIXME: implement this
-        List<Set<FlowRuleOperation>> batches = Lists.newArrayList();
+        List<Collection<FlowRuleOperation>> batches = Lists.newArrayList();
         batches.addAll(uninstall(oldIntent));
         batches.addAll(install(newIntent));
         return batches;
@@ -125,13 +123,13 @@
         return retLambda;
     }
 
-    private List<Set<FlowRuleOperation>> generateRules(OpticalPathIntent intent,
+    private List<Collection<FlowRuleOperation>> generateRules(OpticalPathIntent intent,
                                                         LinkResourceAllocations allocations,
                                                         FlowRuleOperation.Type operation) {
         TrafficSelector.Builder selectorBuilder = DefaultTrafficSelector.builder();
         selectorBuilder.matchInPort(intent.src().port());
 
-        Set<FlowRuleOperation> rules = Sets.newHashSet();
+        List<FlowRuleOperation> rules = Lists.newLinkedList();
         ConnectPoint prev = intent.src();
 
         //FIXME check for null allocations
diff --git a/core/net/src/main/java/org/onosproject/net/intent/impl/PathIntentInstaller.java b/core/net/src/main/java/org/onosproject/net/intent/impl/PathIntentInstaller.java
index 65b6314..47ffabe 100644
--- a/core/net/src/main/java/org/onosproject/net/intent/impl/PathIntentInstaller.java
+++ b/core/net/src/main/java/org/onosproject/net/intent/impl/PathIntentInstaller.java
@@ -15,10 +15,8 @@
  */
 package org.onosproject.net.intent.impl;
 
-import java.util.Iterator;
-import java.util.List;
-import java.util.Set;
-
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Lists;
 import org.apache.felix.scr.annotations.Activate;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.Deactivate;
@@ -45,9 +43,9 @@
 import org.onosproject.net.resource.LinkResourceService;
 import org.slf4j.Logger;
 
-import com.google.common.collect.ImmutableSet;
-import com.google.common.collect.Lists;
-import com.google.common.collect.Sets;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
 
 import static org.onosproject.net.flow.DefaultTrafficTreatment.builder;
 import static org.slf4j.LoggerFactory.getLogger;
@@ -83,14 +81,14 @@
     }
 
     @Override
-    public List<Set<FlowRuleOperation>> install(PathIntent intent) {
+    public List<Collection<FlowRuleOperation>> install(PathIntent intent) {
         LinkResourceAllocations allocations = allocateResources(intent);
 
         TrafficSelector.Builder builder =
                 DefaultTrafficSelector.builder(intent.selector());
         Iterator<Link> links = intent.path().links().iterator();
         ConnectPoint prev = links.next().dst();
-        Set<FlowRuleOperation> rules = Sets.newHashSet();
+        List<FlowRuleOperation> rules = Lists.newLinkedList();
         // TODO Generate multiple batches
         while (links.hasNext()) {
             builder.matchInPort(prev.port());
@@ -113,13 +111,13 @@
     }
 
     @Override
-    public List<Set<FlowRuleOperation>> uninstall(PathIntent intent) {
+    public List<Collection<FlowRuleOperation>> uninstall(PathIntent intent) {
         deallocateResources(intent);
         TrafficSelector.Builder builder =
                 DefaultTrafficSelector.builder(intent.selector());
         Iterator<Link> links = intent.path().links().iterator();
         ConnectPoint prev = links.next().dst();
-        Set<FlowRuleOperation> rules = Sets.newHashSet();
+        List<FlowRuleOperation> rules = Lists.newLinkedList();
         // TODO Generate multiple batches
         while (links.hasNext()) {
             builder.matchInPort(prev.port());
@@ -140,9 +138,9 @@
     }
 
     @Override
-    public List<Set<FlowRuleOperation>> replace(PathIntent oldIntent, PathIntent newIntent) {
+    public List<Collection<FlowRuleOperation>> replace(PathIntent oldIntent, PathIntent newIntent) {
         // FIXME: implement this
-        List<Set<FlowRuleOperation>> batches = Lists.newArrayList();
+        List<Collection<FlowRuleOperation>> batches = Lists.newArrayList();
         batches.addAll(uninstall(oldIntent));
         batches.addAll(install(newIntent));
         return batches;
diff --git a/core/net/src/test/java/org/onosproject/net/intent/impl/IntentManagerTest.java b/core/net/src/test/java/org/onosproject/net/intent/impl/IntentManagerTest.java
index f55b575..642a66f 100644
--- a/core/net/src/test/java/org/onosproject/net/intent/impl/IntentManagerTest.java
+++ b/core/net/src/test/java/org/onosproject/net/intent/impl/IntentManagerTest.java
@@ -194,7 +194,7 @@
 
     private static class TestIntentInstaller implements IntentInstaller<MockInstallableIntent> {
         @Override
-        public List<Set<org.onosproject.net.flow.FlowRuleOperation>> install(MockInstallableIntent intent) {
+        public List<Collection<org.onosproject.net.flow.FlowRuleOperation>> install(MockInstallableIntent intent) {
             FlowRule fr = new IntentTestsMocks.MockFlowRule(intent.number().intValue());
             Set<FlowRuleOperation> rules = ImmutableSet.of(
                     new FlowRuleOperation(fr, FlowRuleOperation.Type.ADD));
@@ -202,7 +202,7 @@
         }
 
         @Override
-        public List<Set<FlowRuleOperation>> uninstall(MockInstallableIntent intent) {
+        public List<Collection<FlowRuleOperation>> uninstall(MockInstallableIntent intent) {
             FlowRule fr = new IntentTestsMocks.MockFlowRule(intent.number().intValue());
             Set<FlowRuleOperation> rules = ImmutableSet.of(
                     new FlowRuleOperation(fr, FlowRuleOperation.Type.REMOVE));
@@ -210,7 +210,8 @@
         }
 
         @Override
-        public List<Set<FlowRuleOperation>> replace(MockInstallableIntent oldIntent, MockInstallableIntent newIntent) {
+        public List<Collection<FlowRuleOperation>> replace(MockInstallableIntent oldIntent,
+                                                           MockInstallableIntent newIntent) {
             FlowRule fr = new IntentTestsMocks.MockFlowRule(oldIntent.number().intValue());
             FlowRule fr2 = new IntentTestsMocks.MockFlowRule(newIntent.number().intValue());
             Set<FlowRuleOperation> rules = ImmutableSet.of(
@@ -222,17 +223,18 @@
 
     private static class TestIntentErrorInstaller implements IntentInstaller<MockInstallableIntent> {
         @Override
-        public List<Set<FlowRuleOperation>> install(MockInstallableIntent intent) {
+        public List<Collection<FlowRuleOperation>> install(MockInstallableIntent intent) {
             throw new IntentInstallationException("install() always fails");
         }
 
         @Override
-        public List<Set<FlowRuleOperation>> uninstall(MockInstallableIntent intent) {
+        public List<Collection<FlowRuleOperation>> uninstall(MockInstallableIntent intent) {
             throw new IntentRemovalException("uninstall() always fails");
         }
 
         @Override
-        public List<Set<FlowRuleOperation>> replace(MockInstallableIntent oldIntent, MockInstallableIntent newIntent) {
+        public List<Collection<FlowRuleOperation>> replace(MockInstallableIntent oldIntent,
+                                                           MockInstallableIntent newIntent) {
             throw new IntentInstallationException("replace() always fails");
         }
     }
diff --git a/core/net/src/test/java/org/onosproject/net/intent/impl/PathConstraintCalculationTest.java b/core/net/src/test/java/org/onosproject/net/intent/impl/PathConstraintCalculationTest.java
index 5a5611b..8dd78c2 100644
--- a/core/net/src/test/java/org/onosproject/net/intent/impl/PathConstraintCalculationTest.java
+++ b/core/net/src/test/java/org/onosproject/net/intent/impl/PathConstraintCalculationTest.java
@@ -15,10 +15,6 @@
  */
 package org.onosproject.net.intent.impl;
 
-import java.util.LinkedList;
-import java.util.List;
-import java.util.Set;
-
 import org.junit.Test;
 import org.onosproject.net.flow.FlowRuleOperation;
 import org.onosproject.net.flow.TrafficSelector;
@@ -35,11 +31,12 @@
 import org.onosproject.net.resource.Lambda;
 import org.onosproject.net.resource.LinkResourceService;
 
+import java.util.Collection;
+import java.util.LinkedList;
+import java.util.List;
+
 import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.containsString;
-import static org.hamcrest.Matchers.hasSize;
-import static org.hamcrest.Matchers.instanceOf;
-import static org.hamcrest.Matchers.notNullValue;
+import static org.hamcrest.Matchers.*;
 import static org.junit.Assert.fail;
 import static org.onosproject.net.NetTestTools.APP_ID;
 import static org.onosproject.net.NetTestTools.connectPoint;
@@ -99,7 +96,7 @@
      * @param resourceService service to use for resource allocation requests
      * @return fow rule entries
      */
-    private List<Set<FlowRuleOperation>> installIntents(List<Intent> compiledIntents,
+    private List<Collection<FlowRuleOperation>> installIntents(List<Intent> compiledIntents,
                                                         LinkResourceService resourceService) {
         final PathIntent path = (PathIntent) compiledIntents.get(0);
 
@@ -193,7 +190,7 @@
         assertThat(compiledIntents, notNullValue());
         assertThat(compiledIntents, hasSize(1));
 
-        final List<Set<FlowRuleOperation>> flowOperations =
+        final List<Collection<FlowRuleOperation>> flowOperations =
                 installIntents(compiledIntents, resourceService);
 
         assertThat(flowOperations, notNullValue());
@@ -242,7 +239,7 @@
         assertThat(compiledIntents, notNullValue());
         assertThat(compiledIntents, hasSize(1));
 
-        final List<Set<FlowRuleOperation>> flowOperations =
+        final List<Collection<FlowRuleOperation>> flowOperations =
                 installIntents(compiledIntents, resourceService);
 
         assertThat(flowOperations, notNullValue());