Various small fixes

Change-Id: I83802169d0d968f7b88d4be2cedba74b15fdd7da
diff --git a/core/api/src/main/java/org/onosproject/net/flow/criteria/UnresolvedExtensionSelector.java b/core/api/src/main/java/org/onosproject/net/flow/criteria/UnresolvedExtensionSelector.java
index 17f527b..22bf95c 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/criteria/UnresolvedExtensionSelector.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/criteria/UnresolvedExtensionSelector.java
@@ -17,7 +17,6 @@
 
 import org.onosproject.net.flow.AbstractExtension;
 import java.util.Arrays;
-import java.util.Objects;
 import static com.google.common.base.MoreObjects.toStringHelper;
 
 
@@ -57,7 +56,7 @@
 
     @Override
     public int hashCode() {
-        return Objects.hash(bytes);
+        return Arrays.hashCode(bytes);
     }
 
     @Override
diff --git a/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java b/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java
index 460976a..95ee08d 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/instructions/Instructions.java
@@ -97,7 +97,6 @@
      * @return set-queue instruction
      */
     public static SetQueueInstruction setQueue(final long queueId, final PortNumber port) {
-        checkNotNull(queueId, "queue ID cannot be null");
         return new SetQueueInstruction(queueId, port);
     }
 
@@ -324,7 +323,6 @@
      * @return a l3 modification
      */
     public static L3ModificationInstruction modL3ArpOp(short op) {
-        checkNotNull(op, "Arp operation cannot be null");
         return new ModArpOpInstruction(L3SubType.ARP_OP, op);
     }
 
@@ -424,7 +422,6 @@
      * @return a L2 modification
      */
     public static L2ModificationInstruction modTunnelId(long tunnelId) {
-        checkNotNull(tunnelId, "Tunnel id cannot be null");
         return new L2ModificationInstruction.ModTunnelIdInstruction(tunnelId);
     }
 
diff --git a/core/api/src/main/java/org/onosproject/net/flow/instructions/UnresolvedExtensionTreatment.java b/core/api/src/main/java/org/onosproject/net/flow/instructions/UnresolvedExtensionTreatment.java
index bbe1d33..6c4a8c2 100644
--- a/core/api/src/main/java/org/onosproject/net/flow/instructions/UnresolvedExtensionTreatment.java
+++ b/core/api/src/main/java/org/onosproject/net/flow/instructions/UnresolvedExtensionTreatment.java
@@ -19,7 +19,6 @@
 import com.google.common.base.MoreObjects;
 import org.onosproject.net.flow.AbstractExtension;
 import java.util.Arrays;
-import java.util.Objects;
 
 /**
  * Unresolved extension treatment.
@@ -57,7 +56,7 @@
 
     @Override
     public int hashCode() {
-        return Objects.hash(bytes);
+        return Arrays.hashCode(bytes);
     }
 
     @Override
diff --git a/core/api/src/main/java/org/onosproject/net/intent/IntentOperationContext.java b/core/api/src/main/java/org/onosproject/net/intent/IntentOperationContext.java
index 6fc3f2e..528f4ba 100644
--- a/core/api/src/main/java/org/onosproject/net/intent/IntentOperationContext.java
+++ b/core/api/src/main/java/org/onosproject/net/intent/IntentOperationContext.java
@@ -103,7 +103,7 @@
         IntentOperationContext that = (IntentOperationContext) obj;
         return Objects.equals(intentsToInstall, that.intentsToInstall) &&
                 Objects.equals(intentsToUninstall, that.intentsToUninstall) &&
-                Objects.equals(intentInstallationContext, intentInstallationContext);
+                Objects.equals(intentInstallationContext, that.intentInstallationContext);
     }
 
     @Override
diff --git a/core/api/src/main/java/org/onosproject/store/cluster/messaging/ClusterMessage.java b/core/api/src/main/java/org/onosproject/store/cluster/messaging/ClusterMessage.java
index 4c03699..5327d48 100644
--- a/core/api/src/main/java/org/onosproject/store/cluster/messaging/ClusterMessage.java
+++ b/core/api/src/main/java/org/onosproject/store/cluster/messaging/ClusterMessage.java
@@ -155,6 +155,6 @@
 
     @Override
     public int hashCode() {
-        return Objects.hash(sender, subject, payload);
+        return Objects.hash(sender, subject, Arrays.hashCode(payload));
     }
 }
diff --git a/core/api/src/test/java/org/onosproject/net/link/LinkProviderRegistryAdapter.java b/core/api/src/test/java/org/onosproject/net/link/LinkProviderRegistryAdapter.java
index d2cfec2..c0ee902 100644
--- a/core/api/src/test/java/org/onosproject/net/link/LinkProviderRegistryAdapter.java
+++ b/core/api/src/test/java/org/onosproject/net/link/LinkProviderRegistryAdapter.java
@@ -36,11 +36,18 @@
 
     @Override
     public void unregister(LinkProvider provider) {
+        if (providerService != null && provider.id().equals(providerService.provider().id())) {
+            providerService = null;
+        }
     }
 
     @Override
     public Set<ProviderId> getProviders() {
-        return ImmutableSet.of(providerService.provider().id());
+        if (providerService != null) {
+            return ImmutableSet.of(providerService.provider().id());
+        } else {
+            return ImmutableSet.of();
+        }
     }
 
     public LinkProviderServiceAdapter registeredProvider() {
diff --git a/core/api/src/test/java/org/onosproject/security/PermissionTest.java b/core/api/src/test/java/org/onosproject/security/PermissionTest.java
index 191d868..bdab240 100644
--- a/core/api/src/test/java/org/onosproject/security/PermissionTest.java
+++ b/core/api/src/test/java/org/onosproject/security/PermissionTest.java
@@ -17,8 +17,6 @@
 package org.onosproject.security;
 
 import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertSame;
-
 import org.junit.Test;
 
 /**
@@ -70,7 +68,7 @@
     public void testEqualsObject() {
         Permission permissionA = new Permission("classname", "name", "actions");
         Permission permissionB = new Permission("classname", "name", "actions");
-        assertSame(permissionA, permissionA);
+        assertEquals(permissionA, permissionB);
         assertEquals(permissionA.getClassName(), permissionB.getClassName());
         assertEquals(permissionA.getName(), permissionB.getName());
         assertEquals(permissionA.getActions(), permissionB.getActions());
diff --git a/core/api/src/test/java/org/onosproject/store/service/DocumentPathTest.java b/core/api/src/test/java/org/onosproject/store/service/DocumentPathTest.java
index 6e69eb6..80f411f 100644
--- a/core/api/src/test/java/org/onosproject/store/service/DocumentPathTest.java
+++ b/core/api/src/test/java/org/onosproject/store/service/DocumentPathTest.java
@@ -68,6 +68,7 @@
         DocumentPath path1 = exceptions("node|name", parentPath);
     }
 
+    @SuppressWarnings("SelfComparison")
     @Test
     public void comparePaths() {
         DocumentPath one = path("root");
diff --git a/core/api/src/test/java/org/onosproject/store/service/TestEventuallyConsistentMap.java b/core/api/src/test/java/org/onosproject/store/service/TestEventuallyConsistentMap.java
index b28356d..352210d 100644
--- a/core/api/src/test/java/org/onosproject/store/service/TestEventuallyConsistentMap.java
+++ b/core/api/src/test/java/org/onosproject/store/service/TestEventuallyConsistentMap.java
@@ -86,6 +86,7 @@
         return map.get(key);
     }
 
+    @SuppressWarnings("ReturnValueIgnored")
     @Override
     public void put(K key, V value) {
         map.put(key, value);
diff --git a/core/api/src/test/java/org/onosproject/store/service/WallClockTimestampTest.java b/core/api/src/test/java/org/onosproject/store/service/WallClockTimestampTest.java
index 3f02fef..8ea04fd 100644
--- a/core/api/src/test/java/org/onosproject/store/service/WallClockTimestampTest.java
+++ b/core/api/src/test/java/org/onosproject/store/service/WallClockTimestampTest.java
@@ -30,6 +30,7 @@
  */
 public class WallClockTimestampTest {
 
+    @SuppressWarnings("SelfComparison")
     @Test
     public final void testBasic() throws InterruptedException {
         WallClockTimestamp ts1 = new WallClockTimestamp();
diff --git a/core/net/src/main/java/org/onosproject/net/flowobjective/impl/FlowObjectiveManager.java b/core/net/src/main/java/org/onosproject/net/flowobjective/impl/FlowObjectiveManager.java
index 09d3a24..c623bf2 100644
--- a/core/net/src/main/java/org/onosproject/net/flowobjective/impl/FlowObjectiveManager.java
+++ b/core/net/src/main/java/org/onosproject/net/flowobjective/impl/FlowObjectiveManager.java
@@ -208,7 +208,7 @@
         public ObjectiveInstaller(DeviceId deviceId, Objective objective, int attemps) {
             this.deviceId = checkNotNull(deviceId);
             this.objective = checkNotNull(objective);
-            this.numAttempts = checkNotNull(attemps);
+            this.numAttempts = attemps;
         }
 
         @Override
diff --git a/core/net/src/main/java/org/onosproject/net/flowobjective/impl/composition/FlowObjectiveCompositionManager.java b/core/net/src/main/java/org/onosproject/net/flowobjective/impl/composition/FlowObjectiveCompositionManager.java
index be90cb5..a765648 100644
--- a/core/net/src/main/java/org/onosproject/net/flowobjective/impl/composition/FlowObjectiveCompositionManager.java
+++ b/core/net/src/main/java/org/onosproject/net/flowobjective/impl/composition/FlowObjectiveCompositionManager.java
@@ -177,7 +177,7 @@
         public ObjectiveInstaller(DeviceId deviceId, Objective objective, int attemps) {
             this.deviceId = checkNotNull(deviceId);
             this.objective = checkNotNull(objective);
-            this.numAttempts = checkNotNull(attemps);
+            this.numAttempts = attemps;
         }
 
         @Override
diff --git a/core/net/src/test/java/org/onosproject/net/config/basics/PortAnnotationConfigTest.java b/core/net/src/test/java/org/onosproject/net/config/basics/PortAnnotationConfigTest.java
index dd3211c..df6ce7b 100644
--- a/core/net/src/test/java/org/onosproject/net/config/basics/PortAnnotationConfigTest.java
+++ b/core/net/src/test/java/org/onosproject/net/config/basics/PortAnnotationConfigTest.java
@@ -126,6 +126,7 @@
         assertThat(annotations.get(key), is(value));
     }
 
+    @Test
     public void writeEntryTest() throws JsonProcessingException, IOException {
 
         PortAnnotationConfig w = new PortAnnotationConfig();
@@ -146,6 +147,7 @@
         assertThat(annotations.get(key), is(value));
     }
 
+    @Test
     public void writeMapTest() throws JsonProcessingException, IOException {
 
         PortAnnotationConfig w = new PortAnnotationConfig();
diff --git a/core/net/src/test/java/org/onosproject/net/pi/impl/PiPipeconfManagerTest.java b/core/net/src/test/java/org/onosproject/net/pi/impl/PiPipeconfManagerTest.java
index 1982d7f..d818b3d 100644
--- a/core/net/src/test/java/org/onosproject/net/pi/impl/PiPipeconfManagerTest.java
+++ b/core/net/src/test/java/org/onosproject/net/pi/impl/PiPipeconfManagerTest.java
@@ -148,7 +148,7 @@
     @Test
     public void register() {
         piPipeconfService.register(piPipeconf);
-        assertTrue("PiPipeconf should be registered", piPipeconfService.piPipeconfs.contains(piPipeconf));
+        assertTrue("PiPipeconf should be registered", piPipeconfService.piPipeconfs.containsValue(piPipeconf));
     }
 
     @Test
diff --git a/core/store/dist/src/main/java/org/onosproject/store/device/impl/GossipDeviceStore.java b/core/store/dist/src/main/java/org/onosproject/store/device/impl/GossipDeviceStore.java
index 03bfc55..67066fd 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/device/impl/GossipDeviceStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/device/impl/GossipDeviceStore.java
@@ -318,7 +318,7 @@
                     ? deviceClockService.getTimestamp(deviceId)
                     : removalRequest.getOrDefault(deviceId, DEFAULT_TIMESTAMP);
         } catch (IllegalStateException e) {
-            newTimestamp = removalRequest.getOrDefault(deviceDescription, DEFAULT_TIMESTAMP);
+            newTimestamp = removalRequest.getOrDefault(deviceId, DEFAULT_TIMESTAMP);
             isMaster = false;
         }
         final Timestamped<DeviceDescription> deltaDesc = new Timestamped<>(deviceDescription, newTimestamp);
diff --git a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ConsistentResourceStore.java b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ConsistentResourceStore.java
index 14ed0ed..e5ed75b 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ConsistentResourceStore.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/resource/impl/ConsistentResourceStore.java
@@ -63,6 +63,7 @@
 
 import static com.google.common.base.Preconditions.checkArgument;
 import static com.google.common.base.Preconditions.checkNotNull;
+import static java.util.stream.Collectors.groupingBy;
 import static org.onosproject.net.resource.ResourceEvent.Type.RESOURCE_ADDED;
 import static org.onosproject.net.resource.ResourceEvent.Type.RESOURCE_REMOVED;
 
@@ -132,7 +133,7 @@
             // the order is preserved by LinkedHashMap
             Map<DiscreteResource, List<Resource>> resourceMap = resources.stream()
                     .filter(x -> x.parent().isPresent())
-                    .collect(Collectors.groupingBy(x -> x.parent().get(), LinkedHashMap::new, Collectors.toList()));
+                    .collect(groupingBy(x -> x.parent().get(), LinkedHashMap::new, Collectors.<Resource>toList()));
 
             TransactionalDiscreteResourceSubStore discreteTxStore = discreteStore.transactional(tx);
             TransactionalContinuousResourceSubStore continuousTxStore = continuousStore.transactional(tx);
diff --git a/core/store/dist/src/test/java/org/onosproject/store/impl/MastershipBasedTimestampTest.java b/core/store/dist/src/test/java/org/onosproject/store/impl/MastershipBasedTimestampTest.java
index 605de95..bbbc616 100644
--- a/core/store/dist/src/test/java/org/onosproject/store/impl/MastershipBasedTimestampTest.java
+++ b/core/store/dist/src/test/java/org/onosproject/store/impl/MastershipBasedTimestampTest.java
@@ -47,6 +47,7 @@
         assertEquals(sequenceNumber, ts.sequenceNumber());
     }
 
+    @SuppressWarnings("SelfComparison")
     @Test
     public final void testCompareTo() {
         assertTrue(TS_1_1.compareTo(TS_1_1) == 0);
diff --git a/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/DefaultDocumentTree.java b/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/DefaultDocumentTree.java
index 31bd20c..4c1ff6a 100644
--- a/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/DefaultDocumentTree.java
+++ b/core/store/primitives/src/main/java/org/onosproject/store/primitives/resources/impl/DefaultDocumentTree.java
@@ -19,6 +19,7 @@
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Objects;
+import java.util.Optional;
 import java.util.concurrent.atomic.AtomicLong;
 
 import org.onosproject.store.service.DocumentPath;
@@ -147,13 +148,17 @@
     }
 
     @Override
-    public boolean replace(DocumentPath path, V newValue, V currentValue) {
+    public boolean replace(DocumentPath path, V newValue, V expectedValue) {
         checkRootModification(path);
-        if (Objects.equals(newValue, currentValue)) {
+        if (Objects.equals(newValue, expectedValue)) {
             return false;
         }
         DocumentTreeNode<V> node = getNode(path);
-        if (node != null && Objects.equals(Versioned.valueOrNull(node.value()), currentValue)) {
+        V prevValue = Optional.ofNullable(node)
+                    .map(DocumentTreeNode::value)
+                    .map(Versioned::valueOrNull)
+                    .orElse(null);
+        if (Objects.equals(prevValue, expectedValue)) {
             set(path, newValue);
             return true;
         }
diff --git a/core/store/primitives/src/test/java/org/onosproject/store/primitives/impl/MapValueTest.java b/core/store/primitives/src/test/java/org/onosproject/store/primitives/impl/MapValueTest.java
index 70c33e1..cfad4e4 100644
--- a/core/store/primitives/src/test/java/org/onosproject/store/primitives/impl/MapValueTest.java
+++ b/core/store/primitives/src/test/java/org/onosproject/store/primitives/impl/MapValueTest.java
@@ -48,6 +48,7 @@
         assertEquals(actual, expected);
     }
 
+    @SuppressWarnings("SelfComparison")
     @Test
     public void testComparison() {
         Timestamp ts1 = new LogicalTimestamp(9);
diff --git a/core/store/primitives/src/test/java/org/onosproject/store/primitives/impl/TranscodingAsyncConsistentMapTest.java b/core/store/primitives/src/test/java/org/onosproject/store/primitives/impl/TranscodingAsyncConsistentMapTest.java
index 2cc9631..6466c12 100644
--- a/core/store/primitives/src/test/java/org/onosproject/store/primitives/impl/TranscodingAsyncConsistentMapTest.java
+++ b/core/store/primitives/src/test/java/org/onosproject/store/primitives/impl/TranscodingAsyncConsistentMapTest.java
@@ -115,6 +115,7 @@
         assertFalse(transcodingMap.containsValue(DEV1).join());
     }
 
+    @Test
     public void testGet() throws Exception {
         assertNull(transcodingMap.get(KEY1).join().value());
         transcodingMap.put(KEY2, DEV1).join();
diff --git a/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixConsistentSetMultimapServiceTest.java b/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixConsistentSetMultimapServiceTest.java
index c05ebcb..66173d0 100644
--- a/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixConsistentSetMultimapServiceTest.java
+++ b/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixConsistentSetMultimapServiceTest.java
@@ -15,8 +15,8 @@
  */
 package org.onosproject.store.primitives.resources.impl;
 
-import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
 
 import io.atomix.protocols.raft.service.ServiceId;
 import io.atomix.protocols.raft.service.impl.DefaultCommit;
@@ -57,7 +57,7 @@
                 2,
                 PUT,
                 new AtomixConsistentSetMultimapOperations.Put(
-                        "foo", Arrays.asList("Hello world!".getBytes()), Match.ANY),
+                        "foo", Collections.singletonList("Hello world!".getBytes()), Match.ANY),
                 mock(RaftSessionContext.class),
                 System.currentTimeMillis()));
 
diff --git a/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixDocumentTreeTest.java b/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixDocumentTreeTest.java
index 18746a7..7a41395 100644
--- a/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixDocumentTreeTest.java
+++ b/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixDocumentTreeTest.java
@@ -27,6 +27,7 @@
 import com.google.common.base.Throwables;
 import io.atomix.protocols.raft.proxy.RaftProxy;
 import io.atomix.protocols.raft.service.RaftService;
+
 import org.junit.Test;
 import org.onosproject.store.primitives.NodeUpdate;
 import org.onosproject.store.primitives.TransactionId;
@@ -219,6 +220,9 @@
         assertArrayEquals("newAB".getBytes(), tree.get(path("root.a.b")).join().value());
 
         assertFalse(tree.replace(path("root.a.d"), "bar".getBytes(), "foo".getBytes()).join());
+
+        assertTrue(tree.replace(path("root.x"), "beta".getBytes(), null).join());
+
     }
 
     /**
diff --git a/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixWorkQueueServiceTest.java b/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixWorkQueueServiceTest.java
index 919d3c9..2529523 100644
--- a/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixWorkQueueServiceTest.java
+++ b/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/AtomixWorkQueueServiceTest.java
@@ -15,8 +15,8 @@
  */
 package org.onosproject.store.primitives.resources.impl;
 
-import java.util.Arrays;
 import java.util.Collection;
+import java.util.Collections;
 
 import io.atomix.protocols.raft.ReadConsistency;
 import io.atomix.protocols.raft.cluster.MemberId;
@@ -93,7 +93,7 @@
         service.add(new DefaultCommit<>(
                 2,
                 ADD,
-                new AtomixWorkQueueOperations.Add(Arrays.asList("Hello world!".getBytes())),
+                new AtomixWorkQueueOperations.Add(Collections.singletonList("Hello world!".getBytes())),
                 session,
                 System.currentTimeMillis()));
 
diff --git a/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/DefaultDocumentTreeTest.java b/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/DefaultDocumentTreeTest.java
index 5505e0d..1398300 100644
--- a/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/DefaultDocumentTreeTest.java
+++ b/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/DefaultDocumentTreeTest.java
@@ -148,6 +148,7 @@
         tree.set(path("root.a.b"), "alpha");
     }
 
+    @Test
     public void testReplaceWithVersion() {
         DocumentTree<String> tree = new DefaultDocumentTree<>();
         tree.create(path("root.a"), "bar");
@@ -158,6 +159,7 @@
         Assert.assertFalse(tree.replace(path("root.x"), "beta", 1));
     }
 
+    @Test
     public void testReplaceWithValue() {
         DocumentTree<String> tree = new DefaultDocumentTree<>();
         tree.create(path("root.a"), "bar");
diff --git a/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/TestClusterCommunicationService.java b/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/TestClusterCommunicationService.java
index a15bba4..791a488 100644
--- a/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/TestClusterCommunicationService.java
+++ b/core/store/primitives/src/test/java/org/onosproject/store/primitives/resources/impl/TestClusterCommunicationService.java
@@ -72,9 +72,9 @@
 
     @Override
     public <M> void multicast(M message, MessageSubject subject, Function<M, byte[]> encoder, Set<NodeId> nodeIds) {
-        nodes.values().stream()
-                .filter(n -> nodeIds.contains(n))
-                .forEach(n -> n.handle(subject, encoder.apply(message)));
+        nodes.entrySet().stream()
+                .filter(e -> nodeIds.contains(e.getKey()))
+                .forEach(e -> e.getValue().handle(subject, encoder.apply(message)));
     }
 
     @Override