More Unit tests

Change-Id: I32dd3851e490979621c4a5205c6e041dee900244
diff --git a/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/Match.java b/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/Match.java
index 804514c..5f707d6 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/Match.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/Match.java
@@ -108,12 +108,13 @@
         return Objects.hash(matchAny, value);
     }
 
+    @SuppressWarnings("unchecked")
     @Override
     public boolean equals(Object other) {
         if (!(other instanceof Match)) {
             return false;
         }
-        Match<T> that = (Match) other;
+        Match<T> that = (Match<T>) other;
         return Objects.equals(this.matchAny, that.matchAny) &&
                Objects.equals(this.value, that.value);
     }
diff --git a/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/Result.java b/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/Result.java
index 548174a..856f706 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/Result.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/consistent/impl/Result.java
@@ -15,6 +15,10 @@
  */
 package org.onosproject.store.consistent.impl;
 
+import static com.google.common.base.MoreObjects.toStringHelper;
+
+import java.util.Objects;
+
 /**
  * Result of a database update operation.
  *
@@ -74,6 +78,7 @@
 
     /**
      * Returns the status of database update operation.
+     *
      * @return database update status
      */
     public Status status() {
@@ -82,10 +87,35 @@
 
     /**
      * Returns the return value for the update.
+     *
      * @return value returned by database update. If the status is another
      * other than Status.OK, this returns a null
      */
     public V value() {
         return value;
     }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(value, status);
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public boolean equals(Object other) {
+        if (!(other instanceof Result)) {
+            return false;
+        }
+        Result<V> that = (Result<V>) other;
+        return Objects.equals(this.value, that.value) &&
+               Objects.equals(this.status, that.status);
+    }
+
+    @Override
+    public String toString() {
+        return toStringHelper(this)
+                .add("status", status)
+                .add("value", value)
+                .toString();
+    }
 }
\ No newline at end of file
diff --git a/core/store/dist/src/main/java/org/onosproject/store/ecmap/EventuallyConsistentMapImpl.java b/core/store/dist/src/main/java/org/onosproject/store/ecmap/EventuallyConsistentMapImpl.java
index 2de8947..b56d74b 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/ecmap/EventuallyConsistentMapImpl.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/ecmap/EventuallyConsistentMapImpl.java
@@ -653,7 +653,7 @@
         public void processItems(List<UpdateEntry<K, V>> items) {
             Map<K, UpdateEntry<K, V>> map = Maps.newHashMap();
             items.forEach(item -> map.compute(item.key(), (key, existing) ->
-                    existing == null || item.compareTo(existing) > 0 ? item : existing));
+                    item.isNewerThan(existing) ? item : existing));
             communicationExecutor.submit(() -> {
                 clusterCommunicator.unicast(ImmutableList.copyOf(map.values()),
                                             updateMessageSubject,
diff --git a/core/store/dist/src/main/java/org/onosproject/store/ecmap/MapValue.java b/core/store/dist/src/main/java/org/onosproject/store/ecmap/MapValue.java
index 1a89c6b..bb69b47 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/ecmap/MapValue.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/ecmap/MapValue.java
@@ -83,10 +83,11 @@
         return Objects.hashCode(timestamp, value);
     }
 
+    @SuppressWarnings("unchecked")
     @Override
     public boolean equals(Object other) {
         if (other instanceof MapValue) {
-            MapValue<V> that = (MapValue) other;
+            MapValue<V> that = (MapValue<V>) other;
             return Objects.equal(this.timestamp, that.timestamp) &&
                     Objects.equal(this.value, that.value);
         }
diff --git a/core/store/dist/src/main/java/org/onosproject/store/ecmap/UpdateEntry.java b/core/store/dist/src/main/java/org/onosproject/store/ecmap/UpdateEntry.java
index 41eb3a2..fcf6198 100644
--- a/core/store/dist/src/main/java/org/onosproject/store/ecmap/UpdateEntry.java
+++ b/core/store/dist/src/main/java/org/onosproject/store/ecmap/UpdateEntry.java
@@ -22,7 +22,7 @@
 /**
  * Describes a single update event in an EventuallyConsistentMap.
  */
-final class UpdateEntry<K, V> implements Comparable<UpdateEntry<K, V>> {
+final class UpdateEntry<K, V> {
     private final K key;
     private final MapValue<V> value;
 
@@ -55,9 +55,13 @@
         return value;
     }
 
-    @Override
-    public int compareTo(UpdateEntry<K, V> o) {
-        return this.value.timestamp().compareTo(o.value.timestamp());
+    /**
+     * Returns if this entry is newer than other entry.
+     * @param other other entry
+     * @return true if this entry is newer; false otherwise
+     */
+    public boolean isNewerThan(UpdateEntry<K, V> other) {
+        return other == null || value.isNewerThan(other.value);
     }
 
     @Override
diff --git a/core/store/dist/src/test/java/org/onosproject/store/consistent/impl/ResultTest.java b/core/store/dist/src/test/java/org/onosproject/store/consistent/impl/ResultTest.java
new file mode 100644
index 0000000..2a3bab8
--- /dev/null
+++ b/core/store/dist/src/test/java/org/onosproject/store/consistent/impl/ResultTest.java
@@ -0,0 +1,42 @@
+package org.onosproject.store.consistent.impl;
+
+import static junit.framework.TestCase.assertEquals;
+import static junit.framework.TestCase.assertFalse;
+import static junit.framework.TestCase.assertNull;
+import static junit.framework.TestCase.assertTrue;
+
+import org.junit.Test;
+
+/**
+ * Unit tests for Result.
+ */
+public class ResultTest {
+
+    @Test
+    public void testLocked() {
+        Result<String> r = Result.locked();
+        assertFalse(r.success());
+        assertNull(r.value());
+        assertEquals(Result.Status.LOCKED, r.status());
+    }
+
+    @Test
+    public void testOk() {
+        Result<String> r = Result.ok("foo");
+        assertTrue(r.success());
+        assertEquals("foo", r.value());
+        assertEquals(Result.Status.OK, r.status());
+    }
+
+    @Test
+    public void testEquality() {
+        Result<String> r1 = Result.ok("foo");
+        Result<String> r2 = Result.locked();
+        Result<String> r3 = Result.ok("bar");
+        Result<String> r4 = Result.ok("foo");
+        assertTrue(r1.equals(r4));
+        assertFalse(r1.equals(r2));
+        assertFalse(r1.equals(r3));
+        assertFalse(r2.equals(r3));
+    }
+}