diff --git a/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/lsa/subtypes/OspfExternalDestinationTest.java b/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/lsa/subtypes/OspfExternalDestinationTest.java
index 947f34a..fcaafad 100644
--- a/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/lsa/subtypes/OspfExternalDestinationTest.java
+++ b/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/lsa/subtypes/OspfExternalDestinationTest.java
@@ -20,8 +20,6 @@
 import org.junit.Test;
 import org.onlab.packet.Ip4Address;
 
-import java.net.InetAddress;
-
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.is;
 import static org.hamcrest.Matchers.notNullValue;
@@ -31,6 +29,8 @@
  */
 public class OspfExternalDestinationTest {
 
+    private static final Ip4Address LOCAL_ADDRESS = Ip4Address.valueOf("127.0.0.1");
+
     private OspfExternalDestination ospfExternalDestination;
 
     @Before
@@ -84,8 +84,8 @@
      */
     @Test
     public void testGetForwardingAddress() throws Exception {
-        ospfExternalDestination.setForwardingAddress(Ip4Address.valueOf(InetAddress.getLocalHost()));
-        assertThat(ospfExternalDestination.forwardingAddress(), is(Ip4Address.valueOf(InetAddress.getLocalHost())));
+        ospfExternalDestination.setForwardingAddress(LOCAL_ADDRESS);
+        assertThat(ospfExternalDestination.forwardingAddress(), is(LOCAL_ADDRESS));
 
     }
 
@@ -94,8 +94,8 @@
      */
     @Test
     public void testSetForwardingAddress() throws Exception {
-        ospfExternalDestination.setForwardingAddress(Ip4Address.valueOf(InetAddress.getLocalHost()));
-        assertThat(ospfExternalDestination.forwardingAddress(), is(Ip4Address.valueOf(InetAddress.getLocalHost())));
+        ospfExternalDestination.setForwardingAddress(LOCAL_ADDRESS);
+        assertThat(ospfExternalDestination.forwardingAddress(), is(LOCAL_ADDRESS));
     }
 
     /**
@@ -123,4 +123,4 @@
     public void testToString() throws Exception {
         assertThat(ospfExternalDestination.toString(), is(notNullValue()));
     }
-}
\ No newline at end of file
+}
diff --git a/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/lsa/types/ExternalLsaTest.java b/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/lsa/types/ExternalLsaTest.java
index 5796f34..d8b3d57 100644
--- a/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/lsa/types/ExternalLsaTest.java
+++ b/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/lsa/types/ExternalLsaTest.java
@@ -25,8 +25,6 @@
 import org.onosproject.ospf.protocol.lsa.LsaHeader;
 import org.onosproject.ospf.protocol.lsa.subtypes.OspfExternalDestination;
 
-
-import java.net.InetAddress;
 import java.net.UnknownHostException;
 import java.util.Vector;
 
@@ -39,6 +37,8 @@
  */
 public class ExternalLsaTest {
 
+    private static final Ip4Address LOCAL_ADDRESS = Ip4Address.valueOf("127.0.0.1");
+
     private ExternalLsa externalLsa;
     private Vector<OspfExternalDestination> externalDestinations = new Vector<OspfExternalDestination>();
     private Ip4Address result;
@@ -127,7 +127,7 @@
         ospfExternalDestination.setMetric(50);
         ospfExternalDestination.setType1orType2Metric(true);
         externalLsa.addExternalDestination(ospfExternalDestination1);
-        ospfExternalDestination.setForwardingAddress(Ip4Address.valueOf(InetAddress.getLocalHost()));
+        ospfExternalDestination.setForwardingAddress(LOCAL_ADDRESS);
         inputByteArray = createByteForNetworkLsa();
         lsaHeader = createLsaHeader();
         externalLsa = new ExternalLsa(lsaHeader);
@@ -151,7 +151,7 @@
         ospfExternalDestination.setMetric(50);
         ospfExternalDestination.setType1orType2Metric(true);
         externalLsa.addExternalDestination(ospfExternalDestination1);
-        ospfExternalDestination.setForwardingAddress(Ip4Address.valueOf(InetAddress.getLocalHost()));
+        ospfExternalDestination.setForwardingAddress(LOCAL_ADDRESS);
         byte[] temp = {0, 0, 0};
         inputByteArray = temp;
         lsaHeader = createLsaHeader();
@@ -261,7 +261,7 @@
         ospfExternalDestination.setExternalRouterTag(1);
         ospfExternalDestination.setMetric(10);
         ospfExternalDestination.setType1orType2Metric(true);
-        ospfExternalDestination.setForwardingAddress(Ip4Address.valueOf(InetAddress.getLocalHost()));
+        ospfExternalDestination.setForwardingAddress(LOCAL_ADDRESS);
         return ospfExternalDestination;
     }
-}
\ No newline at end of file
+}
diff --git a/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/lsa/types/NetworkLsaTest.java b/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/lsa/types/NetworkLsaTest.java
index d2f1a2c..3f25792 100644
--- a/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/lsa/types/NetworkLsaTest.java
+++ b/protocols/ospf/protocol/src/test/java/org/onosproject/ospf/protocol/lsa/types/NetworkLsaTest.java
@@ -24,8 +24,6 @@
 import org.onosproject.ospf.controller.OspfLsaType;
 import org.onosproject.ospf.protocol.lsa.LsaHeader;
 
-
-import java.net.InetAddress;
 import java.util.Vector;
 
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -37,6 +35,8 @@
  */
 public class NetworkLsaTest {
 
+    private static final Ip4Address LOCAL_ADDRESS = Ip4Address.valueOf("127.0.0.1");
+
     private Vector<String> attachedRouters = new Vector();
     private NetworkLsa networkLsa;
     private Ip4Address result;
@@ -112,10 +112,8 @@
      */
     @Test
     public void testAddAttachedRouter() throws Exception {
-        inetAddres = Ip4Address.valueOf(InetAddress.getLocalHost());
-        networkLsa.addAttachedRouter(inetAddres);
-        inetAddres = Ip4Address.valueOf(InetAddress.getLocalHost());
-        networkLsa.addAttachedRouter(inetAddres);
+        networkLsa.addAttachedRouter(LOCAL_ADDRESS);
+        networkLsa.addAttachedRouter(LOCAL_ADDRESS);
         assertThat(networkLsa, is(notNullValue()));
     }
 
@@ -227,4 +225,4 @@
         lsaHeader.setOptions(2);
         return lsaHeader;
     }
-}
\ No newline at end of file
+}
