diff --git a/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/lsa/subtypes/OspfLsaLinkTest.java b/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/lsa/subtypes/OspfLsaLinkTest.java
new file mode 100644
index 0000000..0927e88
--- /dev/null
+++ b/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/lsa/subtypes/OspfLsaLinkTest.java
@@ -0,0 +1,140 @@
+/*
+ * 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.lsa.subtypes;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.notNullValue;
+
+/**
+ * Unit test class for OspfLsaLink.
+ */
+public class OspfLsaLinkTest {
+
+    private OspfLsaLink ospfLsaLink;
+
+    @Before
+    public void setUp() throws Exception {
+        ospfLsaLink = new OspfLsaLink();
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        ospfLsaLink = null;
+    }
+
+    /**
+     * Tests linkId() getter method.
+     */
+    @Test
+    public void testGetLinkID() throws Exception {
+        ospfLsaLink.setLinkId("1.1.1.1");
+        assertThat(ospfLsaLink.linkId(), is("1.1.1.1"));
+    }
+
+    /**
+     * Tests linkId() setter method.
+     */
+    @Test
+    public void testSetLinkID() throws Exception {
+        ospfLsaLink.setLinkId("1.1.1.1");
+        assertThat(ospfLsaLink.linkId(), is("1.1.1.1"));
+    }
+
+    /**
+     * Tests linkData() getter method.
+     */
+    @Test
+    public void testGetLinkData() throws Exception {
+        ospfLsaLink.setLinkData("1.1.1.1");
+        assertThat(ospfLsaLink.linkData(), is("1.1.1.1"));
+    }
+
+    /**
+     * Tests linkData() setter method.
+     */
+    @Test
+    public void testSetLinkData() throws Exception {
+        ospfLsaLink.setLinkData("1.1.1.1");
+        assertThat(ospfLsaLink.linkData(), is("1.1.1.1"));
+    }
+
+    /**
+     * Tests linkType() getter method.
+     */
+    @Test
+    public void testGetLinkType() throws Exception {
+        ospfLsaLink.setLinkType(1);
+        assertThat(ospfLsaLink.linkType(), is(1));
+    }
+
+    /**
+     * Tests linkType() setter method.
+     */
+    @Test
+    public void testSetLinkType() throws Exception {
+        ospfLsaLink.setLinkType(1);
+        assertThat(ospfLsaLink.linkType(), is(1));
+    }
+
+    /**
+     * Tests metric() getter method.
+     */
+    @Test
+    public void testGetMetric() throws Exception {
+        ospfLsaLink.setMetric(100);
+        assertThat(ospfLsaLink.metric(), is(100));
+    }
+
+    /**
+     * Tests metric() setter method.
+     */
+    @Test
+    public void testSetMetric() throws Exception {
+        ospfLsaLink.setMetric(100);
+        assertThat(ospfLsaLink.metric(), is(100));
+    }
+
+    /**
+     * Tests tos() getter method.
+     */
+    @Test
+    public void testGetTos() throws Exception {
+        ospfLsaLink.setTos(100);
+        assertThat(ospfLsaLink.tos(), is(100));
+    }
+
+    /**
+     * Tests tos() setter method.
+     */
+    @Test
+    public void testSetTos() throws Exception {
+        ospfLsaLink.setTos(100);
+        assertThat(ospfLsaLink.tos(), is(100));
+    }
+
+    /**
+     * Tests to string method.
+     */
+    @Test
+    public void testToString() throws Exception {
+        assertThat(ospfLsaLink.toString(), is(notNullValue()));
+    }
+}
\ No newline at end of file
