Add unit tests for cluster messaging classes

Change-Id: I77dd4155956dca77e86e9990c7d4f5de394c0e87
diff --git a/core/api/src/main/java/org/onosproject/store/cluster/messaging/MessageSubject.java b/core/api/src/main/java/org/onosproject/store/cluster/messaging/MessageSubject.java
index d81e6f1..8d5e313 100644
--- a/core/api/src/main/java/org/onosproject/store/cluster/messaging/MessageSubject.java
+++ b/core/api/src/main/java/org/onosproject/store/cluster/messaging/MessageSubject.java
@@ -24,7 +24,7 @@
  * Cluster messages have associated subjects that dictate how they get handled
  * on the receiving side.
  */
-public class MessageSubject {
+public final class MessageSubject {
 
     private final String value;
 
diff --git a/core/api/src/test/java/org/onosproject/store/cluster/messaging/ClusterMessageTest.java b/core/api/src/test/java/org/onosproject/store/cluster/messaging/ClusterMessageTest.java
new file mode 100644
index 0000000..22f841b
--- /dev/null
+++ b/core/api/src/test/java/org/onosproject/store/cluster/messaging/ClusterMessageTest.java
@@ -0,0 +1,82 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.store.cluster.messaging;
+
+import org.junit.Test;
+import org.onosproject.cluster.NodeId;
+
+import com.google.common.testing.EqualsTester;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+
+/**
+ * Units tests for ClusterMessage class.
+ */
+public class ClusterMessageTest {
+    private final MessageSubject subject1 = new MessageSubject("Message 1");
+    private final MessageSubject subject2 = new MessageSubject("Message 2");
+
+    private final byte[] payload1 = {0, 1, 2, 3, 4, 5};
+    private final byte[] payload2 = {0, 1, 2, 3, 4, 5, 6};
+
+    private final NodeId nodeId = new NodeId("node");
+
+    private final ClusterMessage message1 =
+            new ClusterMessage(nodeId, subject1, payload1);
+    private final ClusterMessage sameAsMessage1 =
+            new ClusterMessage(nodeId, subject1, payload1);
+    private final ClusterMessage message2 =
+            new ClusterMessage(nodeId, subject1, payload2);
+    private final ClusterMessage message3 =
+            new ClusterMessage(nodeId, subject2, payload1);
+
+    /**
+     * Checks the operation of equals(), hashCode() and toString() methods.
+     */
+    @Test
+    public void testEquals() {
+        new EqualsTester()
+                .addEqualityGroup(message1, sameAsMessage1)
+                .addEqualityGroup(message2)
+                .addEqualityGroup(message3)
+                .testEquals();
+    }
+
+    /**
+     * Checks the construction of a FlowId object.
+     */
+    @Test
+    public void testConstruction() {
+        assertThat(message1.payload(), is(payload1));
+        assertThat(message1.sender(), is(nodeId));
+        assertThat(message1.subject(), is(subject1));
+
+        byte[] response = {2, 2, 2, 2, 2, 2, 2, 2};
+        message1.respond(response);
+        assertThat(message1.response(), is(response));
+    }
+
+    /**
+     * Tests the toBytes and fromBytes methods.
+     */
+    @Test
+    public void testByteMethods() {
+        byte[] fromBytes = message3.getBytes();
+        ClusterMessage message = ClusterMessage.fromBytes(fromBytes);
+        assertThat(message, is(message3));
+    }
+}
diff --git a/core/api/src/test/java/org/onosproject/store/cluster/messaging/EndpointTest.java b/core/api/src/test/java/org/onosproject/store/cluster/messaging/EndpointTest.java
new file mode 100644
index 0000000..c88c711
--- /dev/null
+++ b/core/api/src/test/java/org/onosproject/store/cluster/messaging/EndpointTest.java
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.store.cluster.messaging;
+
+
+import org.junit.Test;
+import org.onlab.packet.IpAddress;
+
+import com.google.common.testing.EqualsTester;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
+
+/**
+ * Unit tests for the Endpoint class.
+ */
+public class EndpointTest {
+    IpAddress host1 = IpAddress.valueOf("1.2.3.4");
+    IpAddress host2 = IpAddress.valueOf("1.2.3.5");
+
+    private final Endpoint endpoint1 = new Endpoint(host1, 1);
+    private final Endpoint sameAsEndpoint1 = new Endpoint(host1, 1);
+    private final Endpoint endpoint2 = new Endpoint(host2, 1);
+    private final Endpoint endpoint3 = new Endpoint(host1, 2);
+
+    /**
+     * Checks that the MessageSubject class is immutable.
+     */
+    @Test
+    public void testImmutability() {
+        assertThatClassIsImmutable(Endpoint.class);
+    }
+
+    /**
+     * Checks the operation of equals(), hashCode() and toString() methods.
+     */
+    @Test
+    public void testEquals() {
+        new EqualsTester()
+                .addEqualityGroup(endpoint1, sameAsEndpoint1)
+                .addEqualityGroup(endpoint2)
+                .addEqualityGroup(endpoint3)
+                .testEquals();
+    }
+
+    /**
+     * Checks the construction of a MessageSubject object.
+     */
+    @Test
+    public void testConstruction() {
+        assertThat(endpoint2.host(), is(host2));
+        assertThat(endpoint2.port(), is(1));
+    }
+}
diff --git a/core/api/src/test/java/org/onosproject/store/cluster/messaging/MessageSubjectTest.java b/core/api/src/test/java/org/onosproject/store/cluster/messaging/MessageSubjectTest.java
new file mode 100644
index 0000000..498edd3
--- /dev/null
+++ b/core/api/src/test/java/org/onosproject/store/cluster/messaging/MessageSubjectTest.java
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2015 Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.onosproject.store.cluster.messaging;
+
+import org.junit.Test;
+
+import com.google.common.testing.EqualsTester;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
+
+/**
+ * Unit tests for MessageSubject class.
+ */
+public class MessageSubjectTest {
+    private final MessageSubject subject1 = new MessageSubject("Message 1");
+    private final MessageSubject sameAsSubject1 = new MessageSubject("Message 1");
+    private final MessageSubject subject2 = new MessageSubject("Message 2");
+    private final MessageSubject subject3 = new MessageSubject("Message 3");
+
+    /**
+     * Checks that the MessageSubject class is immutable.
+     */
+    @Test
+    public void testImmutability() {
+        assertThatClassIsImmutable(MessageSubject.class);
+    }
+
+    /**
+     * Checks the operation of equals(), hashCode() and toString() methods.
+     */
+    @Test
+    public void testEquals() {
+        new EqualsTester()
+                .addEqualityGroup(subject1, sameAsSubject1)
+                .addEqualityGroup(subject2)
+                .addEqualityGroup(subject3)
+                .testEquals();
+    }
+
+    /**
+     * Checks the construction of a MessageSubject object.
+     */
+    @Test
+    public void testConstruction() {
+        assertThat(subject3.value(), is("Message 3"));
+        MessageSubject serializerObject = new MessageSubject();
+        assertThat(serializerObject.value(), is(""));
+    }
+}