diff --git a/apps/vpls/src/test/java/org/onosproject/vpls/VplsTest.java b/apps/vpls/src/test/java/org/onosproject/vpls/VplsTest.java
index e8715dc..18d1d03 100644
--- a/apps/vpls/src/test/java/org/onosproject/vpls/VplsTest.java
+++ b/apps/vpls/src/test/java/org/onosproject/vpls/VplsTest.java
@@ -28,6 +28,7 @@
 import org.onosproject.core.CoreService;
 import org.onosproject.core.IdGenerator;
 import org.onosproject.incubator.net.intf.Interface;
+import org.onosproject.incubator.net.intf.InterfaceListener;
 import org.onosproject.incubator.net.intf.InterfaceService;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DefaultHost;
@@ -57,16 +58,14 @@
 
 import java.util.ArrayList;
 import java.util.Collections;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicLong;
 import java.util.stream.Collectors;
 
 import static java.lang.String.format;
-import static org.easymock.EasyMock.createMock;
-import static org.easymock.EasyMock.expect;
-import static org.easymock.EasyMock.replay;
+import static org.easymock.EasyMock.*;
+import static org.easymock.EasyMock.expectLastCall;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
@@ -157,6 +156,8 @@
                 new TestIntentSynchronizer(intentService);
 
         interfaceService = createMock(InterfaceService.class);
+        interfaceService.addListener(anyObject(InterfaceListener.class));
+        expectLastCall().anyTimes();
         addIntfConfig();
 
         vpls = new Vpls();
@@ -177,21 +178,24 @@
      */
     private void addIntfConfig() {
         Set<Interface> interfaces = Sets.newHashSet();
-        Set<Interface> vlanOneSet = new HashSet<>();
-        Set<Interface> vlanTwoSet = new HashSet<>();
+        Set<Interface> vlanOneSet = Sets.newHashSet();
+        Set<Interface> vlanTwoSet = Sets.newHashSet();
 
         for (int i = 1; i <= NUM_DEVICES - 1; i++) {
             ConnectPoint cp = new ConnectPoint(getDeviceId(i), P1);
 
             Interface intf =
-                    new Interface(cp, Collections.emptySet(), null, VlanId.NONE);
+                    new Interface("intfOne", cp, Collections.emptyList(), null,
+                                  VlanId.NONE);
 
             if (i <= 3) {
-                intf = new Interface(cp, Collections.emptySet(), null, VLAN1);
+                intf = new Interface("intfTwo", cp, Collections.emptyList(),
+                                     null, VLAN1);
                 interfaces.add(intf);
                 vlanOneSet.add(intf);
             } else if (i > 3 && i <= 6) {
-                intf = new Interface(cp, Collections.emptySet(), null, VLAN2);
+                intf = new Interface("intfThree", cp, Collections.emptyList(),
+                                     null, VLAN2);
                 interfaces.add(intf);
                 vlanTwoSet.add(intf);
             }
