[ONOS-4718] Initial implementation of LISP control msg deserializer

- Add LispLocatorRecord interface along with
  DefaultLispLocatorRecord class and unit test class
- Add deserialization logic for four LISP control message classes
  and two auxiliary classes
- Add ByteOperator utility to ease the bit access and manipulation
  for byte data type

Change-Id: I68edf6877a0ebb52260296fc556e0690b795a845
diff --git a/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispLocatorRecordTest.java b/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispLocatorRecordTest.java
new file mode 100644
index 0000000..7b99612
--- /dev/null
+++ b/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispLocatorRecordTest.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright 2016-present 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.lisp.msg.protocols;
+
+import com.google.common.testing.EqualsTester;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+
+/**
+ * Unit tests for DefaultLispLocatorRecord class.
+ */
+public final class DefaultLispLocatorRecordTest {
+
+    private LispLocatorRecord record1;
+    private LispLocatorRecord sameAsRecord1;
+    private LispLocatorRecord record2;
+
+    @Before
+    public void setup() {
+
+        LispLocatorRecord.LocatorRecordBuilder builder1 =
+                    new DefaultLispLocatorRecord.DefaultLocatorRecordBuilder();
+
+        record1 = builder1
+                        .withPriority((byte) 0x01)
+                        .withWeight((byte) 0x01)
+                        .withMulticastPriority((byte) 0x01)
+                        .withMulticastWeight((byte) 0x01)
+                        .withLocalLocator(true)
+                        .withRlocProbed(false)
+                        .withRouted(true)
+                        .build();
+
+        LispLocatorRecord.LocatorRecordBuilder builder2 =
+                    new DefaultLispLocatorRecord.DefaultLocatorRecordBuilder();
+
+        sameAsRecord1 = builder2
+                        .withPriority((byte) 0x01)
+                        .withWeight((byte) 0x01)
+                        .withMulticastPriority((byte) 0x01)
+                        .withMulticastWeight((byte) 0x01)
+                        .withLocalLocator(true)
+                        .withRlocProbed(false)
+                        .withRouted(true)
+                        .build();
+
+        LispLocatorRecord.LocatorRecordBuilder builder3 =
+                    new DefaultLispLocatorRecord.DefaultLocatorRecordBuilder();
+
+        record2 = builder3
+                        .withPriority((byte) 0x02)
+                        .withWeight((byte) 0x02)
+                        .withMulticastPriority((byte) 0x02)
+                        .withMulticastWeight((byte) 0x02)
+                        .withLocalLocator(false)
+                        .withRlocProbed(true)
+                        .withRouted(false)
+                        .build();
+    }
+
+    @Test
+    public void testEquality() {
+        new EqualsTester()
+                .addEqualityGroup(record1, sameAsRecord1)
+                .addEqualityGroup(record2).testEquals();
+    }
+
+    @Test
+    public void testConstruction() {
+        DefaultLispLocatorRecord record = (DefaultLispLocatorRecord) record1;
+
+        assertThat(record.getPriority(), is((byte) 0x01));
+        assertThat(record.getWeight(), is((byte) 0x01));
+        assertThat(record.getMulticastPriority(), is((byte) 0x01));
+        assertThat(record.getMulticastWeight(), is((byte) 0x01));
+        assertThat(record.isLocalLocator(), is(true));
+        assertThat(record.isRlocProbed(), is(false));
+        assertThat(record.isRouted(), is(true));
+    }
+}
diff --git a/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapNotifyTest.java b/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapNotifyTest.java
index 219d6ab..26d8ff0 100644
--- a/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapNotifyTest.java
+++ b/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapNotifyTest.java
@@ -25,7 +25,7 @@
 /**
  * Unit tests for DefaultLispMapNotify class.
  */
-public class DefaultLispMapNotifyTest {
+public final class DefaultLispMapNotifyTest {
 
     private LispMapNotify notify1;
     private LispMapNotify sameAsNotify1;
diff --git a/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRecordTest.java b/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRecordTest.java
index 78af45d..1c85b11 100644
--- a/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRecordTest.java
+++ b/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRecordTest.java
@@ -25,7 +25,7 @@
 /**
  * Unit tests for DefaultLispMapRecord class.
  */
-public class DefaultLispMapRecordTest {
+public final class DefaultLispMapRecordTest {
 
     private LispMapRecord record1;
     private LispMapRecord sameAsRecord1;
diff --git a/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRegisterTest.java b/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRegisterTest.java
index 940345c..1b0a5a4 100644
--- a/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRegisterTest.java
+++ b/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRegisterTest.java
@@ -25,7 +25,7 @@
 /**
  * Unit tests for DefaultLispMapRegister class.
  */
-public class DefaultLispMapRegisterTest {
+public final class DefaultLispMapRegisterTest {
 
     private LispMapRegister register1;
     private LispMapRegister sameAsRegister1;
diff --git a/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapReplyTest.java b/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapReplyTest.java
index e078cd9..7b530d2 100644
--- a/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapReplyTest.java
+++ b/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapReplyTest.java
@@ -25,7 +25,7 @@
 /**
  * Unit tests for DefaultLispMapReply class.
  */
-public class DefaultLispMapReplyTest {
+public final class DefaultLispMapReplyTest {
 
     private LispMapReply reply1;
     private LispMapReply sameAsReply1;
diff --git a/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRequestTest.java b/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRequestTest.java
index 13fafc8..155c6a6 100644
--- a/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRequestTest.java
+++ b/protocols/lisp/msg/src/test/java/org/onosproject/lisp/msg/protocols/DefaultLispMapRequestTest.java
@@ -25,7 +25,7 @@
 /**
  * Unit tests for DefaultLispMapRequest class.
  */
-public class DefaultLispMapRequestTest {
+public final class DefaultLispMapRequestTest {
 
     private LispMapRequest request1;
     private LispMapRequest sameAsRequest1;