diff --git a/sdx-l2/src/test/java/org/onosproject/sdxl2/package-info.java b/sdx-l2/src/test/java/org/onosproject/sdxl2/package-info.java
deleted file mode 100644
index a358545..0000000
--- a/sdx-l2/src/test/java/org/onosproject/sdxl2/package-info.java
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * 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.
- */
-
-/**
- * Tests SDX-L2 functionality.
- */
-package org.onosproject.sdxl2;
diff --git a/sdx-l3/src/test/java/org/onosproject/sdxl3/SdxL3FibTest.java b/sdx-l3/src/test/java/org/onosproject/sdxl3/SdxL3FibTest.java
index bea2fe8..90dcb8a 100644
--- a/sdx-l3/src/test/java/org/onosproject/sdxl3/SdxL3FibTest.java
+++ b/sdx-l3/src/test/java/org/onosproject/sdxl3/SdxL3FibTest.java
@@ -48,8 +48,10 @@
 import org.onosproject.routing.IntentSynchronizationService;
 import org.onosproject.routing.RoutingServiceAdapter;
 
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashSet;
+import java.util.List;
 import java.util.Set;
 
 import static org.easymock.EasyMock.createMock;
@@ -112,6 +114,7 @@
 
     private FibListener fibListener;
 
+    @Override
     @Before
     public void setUp() throws Exception {
         super.setUp();
@@ -142,38 +145,42 @@
      * Sets up InterfaceService.
      */
     private void setUpInterfaceService() {
-        Set<InterfaceIpAddress> interfaceIpAddresses1 = Sets.newHashSet();
+        List<InterfaceIpAddress> interfaceIpAddresses1 = new ArrayList<>();
         interfaceIpAddresses1.add(new InterfaceIpAddress(
                 IpAddress.valueOf(SPEAKER1_IP),
                 IpPrefix.valueOf("192.168.10.0/24")));
-        interface1 = new Interface(CONN_POINT1,
+        interface1 = new Interface("test1",
+                                   CONN_POINT1,
                                    interfaceIpAddresses1, MacAddress.valueOf(MAC1),
                                    VlanId.NONE);
         interfaces.add(interface1);
 
-        Set<InterfaceIpAddress> interfaceIpAddresses2 = Sets.newHashSet();
+        List<InterfaceIpAddress> interfaceIpAddresses2 = new ArrayList<>();
         interfaceIpAddresses2.add(
                 new InterfaceIpAddress(IpAddress.valueOf(SPEAKER1_IP),
                                        IpPrefix.valueOf("192.168.10.0/24")));
-        interface2 = new Interface(CONN_POINT2,
+        interface2 = new Interface("test2",
+                                   CONN_POINT2,
                                    interfaceIpAddresses2, MacAddress.valueOf(MAC1),
                                    VlanId.NONE);
         interfaces.add(interface2);
 
-        Set<InterfaceIpAddress> interfaceIpAddresses3 = Sets.newHashSet();
+        List<InterfaceIpAddress> interfaceIpAddresses3 = new ArrayList<>();
         interfaceIpAddresses3.add(
                 new InterfaceIpAddress(IpAddress.valueOf(SPEAKER1_IP),
                                        IpPrefix.valueOf("192.168.10.0/24")));
-        interface3 = new Interface(CONN_POINT3,
+        interface3 = new Interface("test3",
+                                   CONN_POINT3,
                                    interfaceIpAddresses3, MacAddress.valueOf(MAC1),
                                    VlanId.vlanId((short) 1));
         interfaces.add(interface3);
 
-        Set<InterfaceIpAddress> interfaceIpAddresses4 = Sets.newHashSet();
+        List<InterfaceIpAddress> interfaceIpAddresses4 = new ArrayList<>();
         interfaceIpAddresses4.add(
                 new InterfaceIpAddress(IpAddress.valueOf(SPEAKER2_IP),
                                        IpPrefix.valueOf("192.168.20.0/24")));
-        interface4 = new Interface(CONN_POINT4,
+        interface4 = new Interface("test4",
+                                   CONN_POINT4,
                                    interfaceIpAddresses4, MacAddress.valueOf(MAC2),
                                    VlanId.NONE);
         interfaces.add(interface4);
diff --git a/sdx-l3/src/test/java/org/onosproject/sdxl3/impl/SdxL3PeerAdministrationTest.java b/sdx-l3/src/test/java/org/onosproject/sdxl3/impl/SdxL3PeerAdministrationTest.java
index 325d8fb..1881aad 100644
--- a/sdx-l3/src/test/java/org/onosproject/sdxl3/impl/SdxL3PeerAdministrationTest.java
+++ b/sdx-l3/src/test/java/org/onosproject/sdxl3/impl/SdxL3PeerAdministrationTest.java
@@ -16,6 +16,7 @@
 
 package org.onosproject.sdxl3.impl;
 
+import com.google.common.collect.ImmutableList;
 import com.google.common.collect.Sets;
 import org.junit.Before;
 import org.junit.Test;
@@ -133,6 +134,7 @@
     // Interface configured for peer
     Interface intfSw1Eth1;
 
+    @Override
     @Before
     public void setUp() throws Exception {
         super.setUp();
@@ -231,7 +233,7 @@
                                        IpPrefix.valueOf(SPEAKER1_IP + PREFIX24));
         intfSw1Eth1 = new Interface(INTERFACE_SW1_ETH1,
                                               SW1_ETH1,
-                                              Collections.singleton(ia1),
+                                              ImmutableList.of(ia1),
                                               MacAddress.valueOf(MAC1),
                                               VlanId.NONE);
 
@@ -241,7 +243,7 @@
                                        IpPrefix.valueOf(SPEAKER1_IP + PREFIX24));
         Interface intfSw2Eth1 = new Interface(INTERFACE_SW2_ETH1,
                                               SW2_ETH1,
-                                              Collections.singleton(ia2),
+                                              ImmutableList.of(ia2),
                                               MacAddress.valueOf(MAC1),
                                               VlanId.NONE);
 
@@ -252,7 +254,7 @@
                                        IpPrefix.valueOf(NON_MATCHING_IP + PREFIX24));
         Interface intfSw3Eth1 = new Interface(INTERFACE_SW3_ETH1,
                                               SW3_ETH1,
-                                              Collections.singleton(ia3),
+                                              ImmutableList.of(ia3),
                                               MacAddress.valueOf(MAC1),
                                               VlanId.NONE);
         configuredInterfaces.put(INTERFACE_SW3_ETH1, intfSw3Eth1);
