diff --git a/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/ospfpacket/subtype/LsRequestPacketTest.java b/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/ospfpacket/subtype/LsRequestPacketTest.java
new file mode 100644
index 0000000..91974da
--- /dev/null
+++ b/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/ospfpacket/subtype/LsRequestPacketTest.java
@@ -0,0 +1,122 @@
+/*
+ * Copyright 2016 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.ospf.protocol.ospfpacket.subtype;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.CoreMatchers.notNullValue;
+import static org.hamcrest.MatcherAssert.assertThat;
+
+/**
+ * Unit test class for LsRequestPacket.
+ */
+public class LsRequestPacketTest {
+
+    private LsRequestPacket lsrPacket;
+    private int result;
+
+    @Before
+    public void setUp() throws Exception {
+        lsrPacket = new LsRequestPacket();
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        lsrPacket = null;
+    }
+
+    /**
+     * Tests lsType() getter method.
+     */
+    @Test
+    public void testGetLsType() throws Exception {
+        lsrPacket.setLsType(1);
+        assertThat(lsrPacket.lsType(), is(1));
+    }
+
+    /**
+     * Tests lsType() setter method.
+     */
+    @Test
+    public void testSetLsType() throws Exception {
+        lsrPacket.setLsType(1);
+        assertThat(lsrPacket.lsType(), is(1));
+    }
+
+    /**
+     * Tests linkStateId() getter method.
+     */
+    @Test
+    public void testGetLinkStateId() throws Exception {
+        lsrPacket.setLinkStateId("1.1.1.1");
+        assertThat(lsrPacket.linkStateId(), is("1.1.1.1"));
+    }
+
+    /**
+     * Tests linkStateId() setter method.
+     */
+    @Test
+    public void testSetLinkStateId() throws Exception {
+        lsrPacket.setLinkStateId("1.1.1.1");
+        assertThat(lsrPacket.linkStateId(), is("1.1.1.1"));
+    }
+
+    /**
+     * Tests ownRouterId() getter method.
+     */
+    @Test
+    public void testGetOwnRouterId() throws Exception {
+        lsrPacket.setOwnRouterId("1.1.1.1");
+        assertThat(lsrPacket.ownRouterId(), is("1.1.1.1"));
+    }
+
+    /**
+     * Tests ownRouterId() setter method.
+     */
+    @Test
+    public void testSetOwnRouterId() throws Exception {
+        lsrPacket.setOwnRouterId("1.1.1.1");
+        assertThat(lsrPacket.ownRouterId(), is("1.1.1.1"));
+    }
+
+    /**
+     * Tests to string method.
+     */
+    @Test
+    public void testToString() throws Exception {
+        assertThat(lsrPacket.toString(), is(notNullValue()));
+    }
+
+    /**
+     * Tests equals() method.
+     */
+    @Test
+    public void testEquals() throws Exception {
+        assertThat(lsrPacket.equals(new LsRequestPacket()), is(false));
+    }
+
+    /**
+     * Tests hashCode() method.
+     */
+    @Test
+    public void testHashCode() throws Exception {
+        result = lsrPacket.hashCode();
+        assertThat(result, is(notNullValue()));
+    }
+}
\ No newline at end of file
