Madan Jampani

Added unit test for Match and UpdateResult + Javadoc fixes

Change-Id: I8dae6c9568d33d580d60a72fdcc1be45b7308727
...@@ -24,7 +24,7 @@ import java.util.function.Function; ...@@ -24,7 +24,7 @@ import java.util.function.Function;
24 import java.util.function.Predicate; 24 import java.util.function.Predicate;
25 25
26 /** 26 /**
27 - * A distributed, strongly consistent map. 27 + * A distributed, strongly consistent key-value map.
28 * <p> 28 * <p>
29 * This map offers strong read-after-update (where update == create/update/delete) 29 * This map offers strong read-after-update (where update == create/update/delete)
30 * consistency. All operations to the map are serialized and applied in a consistent 30 * consistency. All operations to the map are serialized and applied in a consistent
...@@ -55,7 +55,7 @@ public interface ConsistentMap<K, V> { ...@@ -55,7 +55,7 @@ public interface ConsistentMap<K, V> {
55 /** 55 /**
56 * Returns true if the map is empty. 56 * Returns true if the map is empty.
57 * 57 *
58 - * @return true if map has no entries, false otherwise. 58 + * @return true if map has no entries, false otherwise
59 */ 59 */
60 boolean isEmpty(); 60 boolean isEmpty();
61 61
...@@ -63,7 +63,7 @@ public interface ConsistentMap<K, V> { ...@@ -63,7 +63,7 @@ public interface ConsistentMap<K, V> {
63 * Returns true if this map contains a mapping for the specified key. 63 * Returns true if this map contains a mapping for the specified key.
64 * 64 *
65 * @param key key 65 * @param key key
66 - * @return true if map contains key, false otherwise. 66 + * @return true if map contains key, false otherwise
67 */ 67 */
68 boolean containsKey(K key); 68 boolean containsKey(K key);
69 69
......
...@@ -24,7 +24,7 @@ import org.onlab.util.KryoNamespace; ...@@ -24,7 +24,7 @@ import org.onlab.util.KryoNamespace;
24 import com.google.common.collect.Lists; 24 import com.google.common.collect.Lists;
25 25
26 /** 26 /**
27 - * Interface for serialization for store artifacts. 27 + * Interface for serialization of store artifacts.
28 */ 28 */
29 public interface Serializer { 29 public interface Serializer {
30 /** 30 /**
......
...@@ -20,7 +20,7 @@ package org.onosproject.store.service; ...@@ -20,7 +20,7 @@ package org.onosproject.store.service;
20 * Top level exception for Transaction failures. 20 * Top level exception for Transaction failures.
21 */ 21 */
22 @SuppressWarnings("serial") 22 @SuppressWarnings("serial")
23 -public class TransactionException extends RuntimeException { 23 +public class TransactionException extends StorageException {
24 public TransactionException() { 24 public TransactionException() {
25 } 25 }
26 26
......
...@@ -21,6 +21,7 @@ import java.util.function.Function; ...@@ -21,6 +21,7 @@ import java.util.function.Function;
21 import org.joda.time.DateTime; 21 import org.joda.time.DateTime;
22 22
23 import com.google.common.base.MoreObjects; 23 import com.google.common.base.MoreObjects;
24 +import com.google.common.base.Objects;
24 25
25 /** 26 /**
26 * Versioned value. 27 * Versioned value.
...@@ -90,7 +91,7 @@ public class Versioned<V> { ...@@ -90,7 +91,7 @@ public class Versioned<V> {
90 /** 91 /**
91 * Maps this instance into another after transforming its 92 * Maps this instance into another after transforming its
92 * value while retaining the same version and creationTime. 93 * value while retaining the same version and creationTime.
93 - * @param transformer function to mapping the value 94 + * @param transformer function for mapping the value
94 * @param <U> value type of the returned instance 95 * @param <U> value type of the returned instance
95 * @return mapped instance 96 * @return mapped instance
96 */ 97 */
...@@ -99,6 +100,22 @@ public class Versioned<V> { ...@@ -99,6 +100,22 @@ public class Versioned<V> {
99 } 100 }
100 101
101 @Override 102 @Override
103 + public int hashCode() {
104 + return Objects.hashCode(value, version, creationTime);
105 + }
106 +
107 + @Override
108 + public boolean equals(Object other) {
109 + if (!(other instanceof Versioned)) {
110 + return false;
111 + }
112 + Versioned<V> that = (Versioned) other;
113 + return Objects.equal(this.value, that.value) &&
114 + Objects.equal(this.version, that.version) &&
115 + Objects.equal(this.creationTime, that.creationTime);
116 + }
117 +
118 + @Override
102 public String toString() { 119 public String toString() {
103 return MoreObjects.toStringHelper(this) 120 return MoreObjects.toStringHelper(this)
104 .add("value", value) 121 .add("value", value)
......
...@@ -104,6 +104,21 @@ public final class Match<T> { ...@@ -104,6 +104,21 @@ public final class Match<T> {
104 } 104 }
105 105
106 @Override 106 @Override
107 + public int hashCode() {
108 + return Objects.hash(matchAny, value);
109 + }
110 +
111 + @Override
112 + public boolean equals(Object other) {
113 + if (!(other instanceof Match)) {
114 + return false;
115 + }
116 + Match<T> that = (Match) other;
117 + return Objects.equals(this.matchAny, that.matchAny) &&
118 + Objects.equals(this.value, that.value);
119 + }
120 +
121 + @Override
107 public String toString() { 122 public String toString() {
108 return toStringHelper(this) 123 return toStringHelper(this)
109 .add("matchAny", matchAny) 124 .add("matchAny", matchAny)
......
1 +package org.onosproject.store.consistent.impl;
2 +
3 +import static junit.framework.TestCase.assertEquals;
4 +import static junit.framework.TestCase.assertFalse;
5 +import static junit.framework.TestCase.assertTrue;
6 +
7 +import org.junit.Test;
8 +
9 +import com.google.common.base.Objects;
10 +
11 +/**
12 + * Unit tests for Match.
13 + */
14 +public class MatchTest {
15 +
16 + @Test
17 + public void testMatches() {
18 + Match<String> m1 = Match.any();
19 + assertTrue(m1.matches(null));
20 + assertTrue(m1.matches("foo"));
21 + assertTrue(m1.matches("bar"));
22 +
23 + Match<String> m2 = Match.ifNull();
24 + assertTrue(m2.matches(null));
25 + assertFalse(m2.matches("foo"));
26 +
27 + Match<String> m3 = Match.ifValue("foo");
28 + assertFalse(m3.matches(null));
29 + assertFalse(m3.matches("bar"));
30 + assertTrue(m3.matches("foo"));
31 + }
32 +
33 + @Test
34 + public void testEquals() {
35 + Match<String> m1 = Match.any();
36 + Match<String> m2 = Match.any();
37 + Match<String> m3 = Match.ifNull();
38 + Match<String> m4 = Match.ifValue("bar");
39 + assertEquals(m1, m2);
40 + assertFalse(Objects.equal(m1, m3));
41 + assertFalse(Objects.equal(m3, m4));
42 + }
43 +
44 + @Test
45 + public void testMap() {
46 + Match<String> m1 = Match.ifNull();
47 + assertEquals(m1.map(s -> "bar"), Match.ifNull());
48 + Match<String> m2 = Match.ifValue("foo");
49 + Match<String> m3 = m2.map(s -> "bar");
50 + assertTrue(m3.matches("bar"));
51 + }
52 +}
1 +package org.onosproject.store.consistent.impl;
2 +
3 +import static junit.framework.TestCase.assertEquals;
4 +import static junit.framework.TestCase.assertNull;
5 +import static junit.framework.TestCase.assertTrue;
6 +
7 +import org.junit.Test;
8 +import org.onosproject.store.service.MapEvent;
9 +import org.onosproject.store.service.Versioned;
10 +
11 +/**
12 + * Unit tests for UpdateResult.
13 + */
14 +public class UpdateResultTest {
15 +
16 + @Test
17 + public void testGetters() {
18 + Versioned<String> oldValue = new Versioned<String>("a", 1);
19 + Versioned<String> newValue = new Versioned<String>("b", 2);
20 + UpdateResult<String, String> ur =
21 + new UpdateResult<>(true, "foo", "k", oldValue, newValue);
22 +
23 + assertTrue(ur.updated());
24 + assertEquals("foo", ur.mapName());
25 + assertEquals("k", ur.key());
26 + assertEquals(oldValue, ur.oldValue());
27 + assertEquals(newValue, ur.newValue());
28 + }
29 +
30 + @Test
31 + public void testToMapEvent() {
32 + Versioned<String> oldValue = new Versioned<String>("a", 1);
33 + Versioned<String> newValue = new Versioned<String>("b", 2);
34 + UpdateResult<String, String> ur1 =
35 + new UpdateResult<>(true, "foo", "k", oldValue, newValue);
36 + MapEvent<String, String> event1 = ur1.toMapEvent();
37 + assertEquals(MapEvent.Type.UPDATE, event1.type());
38 + assertEquals("k", event1.key());
39 + assertEquals(newValue, event1.value());
40 +
41 + UpdateResult<String, String> ur2 =
42 + new UpdateResult<>(true, "foo", "k", null, newValue);
43 + MapEvent<String, String> event2 = ur2.toMapEvent();
44 + assertEquals(MapEvent.Type.INSERT, event2.type());
45 + assertEquals("k", event2.key());
46 + assertEquals(newValue, event2.value());
47 +
48 + UpdateResult<String, String> ur3 =
49 + new UpdateResult<>(true, "foo", "k", oldValue, null);
50 + MapEvent<String, String> event3 = ur3.toMapEvent();
51 + assertEquals(MapEvent.Type.REMOVE, event3.type());
52 + assertEquals("k", event3.key());
53 + assertEquals(oldValue, event3.value());
54 +
55 + UpdateResult<String, String> ur4 =
56 + new UpdateResult<>(false, "foo", "k", oldValue, oldValue);
57 + assertNull(ur4.toMapEvent());
58 + }
59 +
60 + @Test
61 + public void testMap() {
62 + Versioned<String> oldValue = new Versioned<String>("a", 1);
63 + Versioned<String> newValue = new Versioned<String>("b", 2);
64 + UpdateResult<String, String> ur1 =
65 + new UpdateResult<>(true, "foo", "k", oldValue, newValue);
66 + UpdateResult<Integer, Integer> ur2 = ur1.map(s -> s.length(), s -> s.length());
67 +
68 + assertEquals(ur2.updated(), ur1.updated());
69 + assertEquals(ur1.mapName(), ur2.mapName());
70 + assertEquals(new Integer(1), ur2.key());
71 + assertEquals(oldValue.map(s -> s.length()), ur2.oldValue());
72 + assertEquals(newValue.map(s -> s.length()), ur2.newValue());
73 +
74 + UpdateResult<String, String> ur3 =
75 + new UpdateResult<>(true, "foo", "k", null, newValue);
76 + UpdateResult<Integer, Integer> ur4 = ur3.map(s -> s.length(), s -> s.length());
77 +
78 + assertEquals(ur3.updated(), ur4.updated());
79 + assertEquals(ur3.mapName(), ur4.mapName());
80 + assertEquals(new Integer(1), ur4.key());
81 + assertNull(ur4.oldValue());
82 + assertEquals(newValue.map(s -> s.length()), ur4.newValue());
83 + }
84 +}