diff --git a/protocols/isis/isisio/src/test/java/org/onosproject/isis/io/util/IsisUtilTest.java b/protocols/isis/isisio/src/test/java/org/onosproject/isis/io/util/IsisUtilTest.java
new file mode 100644
index 0000000..b04ac14
--- /dev/null
+++ b/protocols/isis/isisio/src/test/java/org/onosproject/isis/io/util/IsisUtilTest.java
@@ -0,0 +1,267 @@
+/*
+ * 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.isis.io.util;
+
+import com.google.common.primitives.Bytes;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.onlab.packet.Ip4Address;
+import org.onosproject.isis.controller.IsisPduType;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.junit.Assert.assertThat;
+
+/**
+ * Unit test class for IsisUtil.
+ */
+public class IsisUtilTest {
+
+    private final String systemId = "2929.2929.2929";
+    private final String lanId = "2929.2929.2929.01";
+    private final String areaAddres = "490001";
+    private final byte[] l1Lsp = {
+            -125, 27, 1, 0, 18, 1, 0, 0, 0, 86, 4, -81, 34, 34, 34,
+            34, 34, 34, 0, 0, 0, 0, 0, 9, 99, 11, 1, 1, 4, 3, 73,
+            0, 10, -127, 1, -52, -119, 2, 82, 50, -124, 4, -64, -88, 10, 1, -128,
+            24, 10, -128, -128, -128, 10, 0, 10, 0, -1, -1, -1, -4, 10, -128, -128,
+            -128, -64, -88, 10, 0, -1, -1, -1, 0, 2, 12, 0, 10, -128, -128, -128,
+            51, 51, 51, 51, 51, 51, 2
+    };
+    private final byte[] intger = {0, 0, 0, 1};
+    private Ip4Address ip4Address1 = Ip4Address.valueOf("10.10.10.10");
+    private Ip4Address ip4Address2 = Ip4Address.valueOf("10.10.10.11");
+    private Ip4Address mask = Ip4Address.valueOf("255.255.255.0");
+    private boolean result;
+    private String result1;
+    private byte[] result2;
+    private int result3;
+    private long result4;
+    private byte[] prefixBytes = {0, 0, 0, 1};
+    private String prefix = "192.16.17";
+
+    @Before
+    public void setUp() throws Exception {
+
+    }
+
+    @After
+    public void tearDown() throws Exception {
+
+    }
+
+    /**
+     * Tests sameNetwork() method.
+     */
+    @Test
+    public void testSameNetwork() throws Exception {
+        result = IsisUtil.sameNetwork(ip4Address1, ip4Address2, mask.toOctets());
+        assertThat(result, is(true));
+    }
+
+    /**
+     * Tests systemId() method.
+     */
+    @Test
+    public void testSystemId() throws Exception {
+        result1 = IsisUtil.systemId(Bytes.toArray(
+                IsisUtil.sourceAndLanIdToBytes(systemId)));
+        assertThat(result1, is(systemId));
+    }
+
+    /**
+     * Tests systemIdPlus() method.
+     */
+    @Test
+    public void testSystemIdPlus() throws Exception {
+        result1 = IsisUtil.systemIdPlus(Bytes.toArray(
+                IsisUtil.sourceAndLanIdToBytes(lanId)));
+        assertThat(result1, is(lanId));
+    }
+
+    /**
+     * Tests areaAddres() method.
+     */
+    @Test
+    public void testAreaAddres() throws Exception {
+        result1 = IsisUtil.areaAddres(Bytes.toArray(
+                IsisUtil.areaAddressToBytes(areaAddres)));
+        assertThat(result1, is(areaAddres));
+    }
+
+    /**
+     * Tests areaAddressToBytes() method.
+     */
+    @Test
+    public void testAreaAddressToBytes() throws Exception {
+        result2 = Bytes.toArray(IsisUtil.areaAddressToBytes(areaAddres));
+        assertThat(result2, is(notNullValue()));
+    }
+
+    /**
+     * Tests getPduHeaderLength() method.
+     */
+    @Test
+    public void testGetPduHeaderLength() throws Exception {
+        result3 = IsisUtil.getPduHeaderLength(IsisPduType.L1CSNP.value());
+        assertThat(result3, is(33));
+        result3 = IsisUtil.getPduHeaderLength(IsisPduType.L1PSNP.value());
+        assertThat(result3, is(17));
+        result3 = IsisUtil.getPduHeaderLength(IsisPduType.L1HELLOPDU.value());
+        assertThat(result3, is(27));
+        result3 = IsisUtil.getPduHeaderLength(IsisPduType.P2PHELLOPDU.value());
+        assertThat(result3, is(20));
+    }
+
+    /**
+     * Tests addLengthAndMarkItInReserved() method.
+     */
+    @Test
+    public void testAddLengthAndMarkItInReserved() throws Exception {
+        result2 = IsisUtil.addLengthAndMarkItInReserved(l1Lsp,
+                                                        IsisConstants.LENGTHPOSITION, IsisConstants.LENGTHPOSITION + 1,
+                                                        IsisConstants.RESERVEDPOSITION);
+        assertThat(result2, is(notNullValue()));
+    }
+
+    /**
+     * Tests addChecksum() method.
+     */
+    @Test
+    public void testAddChecksum() throws Exception {
+        result2 = IsisUtil.addChecksum(l1Lsp,
+                                       IsisConstants.CHECKSUMPOSITION, IsisConstants.CHECKSUMPOSITION + 1);
+        assertThat(result2, is(notNullValue()));
+    }
+
+    /**
+     * Tests framePacket() method.
+     */
+    @Test
+    public void testFramePacket() throws Exception {
+        result2 = IsisUtil.framePacket(l1Lsp, 2);
+        assertThat(result2, is(notNullValue()));
+    }
+
+    /**
+     * Tests sourceAndLanIdToBytes() method.
+     */
+    @Test
+    public void testSourceAndLanIdToBytes() throws Exception {
+        result2 = Bytes.toArray(IsisUtil.sourceAndLanIdToBytes(lanId));
+        assertThat(result2, is(notNullValue()));
+    }
+
+    /**
+     * Tests getPaddingTlvs() method.
+     */
+    @Test
+    public void testGetPaddingTlvs() throws Exception {
+        result2 = IsisUtil.getPaddingTlvs(250);
+        assertThat(result2, is(notNullValue()));
+    }
+
+    /**
+     * Tests convertToTwoBytes() method.
+     */
+    @Test
+    public void testConvertToTwoBytes() throws Exception {
+        result2 = IsisUtil.convertToTwoBytes(250);
+        assertThat(result2.length, is(2));
+    }
+
+    /**
+     * Tests convertToFourBytes() method.
+     */
+    @Test
+    public void testConvertToFourBytes() throws Exception {
+        result2 = IsisUtil.convertToFourBytes(250);
+        assertThat(result2.length, is(4));
+    }
+
+    /**
+     * Tests byteToInteger() method.
+     */
+    @Test
+    public void testByteToInteger() throws Exception {
+        result3 = IsisUtil.byteToInteger(intger);
+        assertThat(result3, is(1));
+    }
+
+    /**
+     * Tests byteToInteger() method.
+     */
+    @Test
+    public void testByteToLong() throws Exception {
+        result4 = IsisUtil.byteToLong(intger);
+        assertThat(result4, is(1L));
+    }
+
+    /**
+     * Tests convertToFourBytes() method.
+     */
+    @Test
+    public void testConvertToFourBytes1() throws Exception {
+        result2 = IsisUtil.convertToFourBytes(250L);
+        assertThat(result2.length, is(4));
+    }
+
+    /**
+     * Tests toFourBitBinary() method.
+     */
+    @Test
+    public void testToEightBitBinary() throws Exception {
+        result1 = IsisUtil.toEightBitBinary("01");
+        assertThat(result1.length(), is(8));
+    }
+
+    /**
+     * Tests toFourBitBinary() method.
+     */
+    @Test
+    public void testToFourBitBinary() throws Exception {
+        result1 = IsisUtil.toFourBitBinary("01");
+        assertThat(result1.length(), is(4));
+    }
+
+    /**
+     * Tests convertToThreeBytes() method.
+     */
+    @Test
+    public void testConvertToThreeBytes() throws Exception {
+        result2 = IsisUtil.convertToThreeBytes(30);
+        assertThat(result2.length, is(3));
+    }
+
+    /**
+     * Tests prefixConversion() method.
+     */
+    @Test
+    public void testPrefixConversion() throws Exception {
+        result1 = IsisUtil.prefixConversion(prefixBytes);
+        assertThat(result1, is(notNullValue()));
+    }
+
+    /**
+     * Tests prefixToBytes() method.
+     */
+    @Test
+    public void testPrefixToBytes() throws Exception {
+        result2 = IsisUtil.prefixToBytes(prefix);
+        assertThat(result2, is(notNullValue()));
+    }
+}
\ No newline at end of file
