diff --git a/providers/bgp/topology/src/test/java/org/onosproject/provider/bgp/topology/impl/BgpTopologyProviderTest.java b/providers/bgp/topology/src/test/java/org/onosproject/provider/bgp/topology/impl/BgpTopologyProviderTest.java
index 15a51de..dd8721b 100644
--- a/providers/bgp/topology/src/test/java/org/onosproject/provider/bgp/topology/impl/BgpTopologyProviderTest.java
+++ b/providers/bgp/topology/src/test/java/org/onosproject/provider/bgp/topology/impl/BgpTopologyProviderTest.java
@@ -53,10 +53,7 @@
 import org.onosproject.incubator.net.resource.label.LabelResourceAdminService;
 import org.onosproject.incubator.net.resource.label.LabelResourceId;
 import org.onosproject.incubator.net.resource.label.LabelResourcePool;
-import org.onosproject.mastership.MastershipEvent;
-import org.onosproject.mastership.MastershipListener;
 import org.onosproject.mastership.MastershipServiceAdapter;
-import org.onosproject.mastership.MastershipEvent.Type;
 import org.onosproject.net.link.LinkServiceAdapter;
 import org.onosproject.bgpio.types.LinkLocalRemoteIdentifiersTlv;
 import org.onosproject.bgpio.types.RouteDistinguisher;
@@ -68,8 +65,8 @@
 import org.onosproject.bgpio.types.attr.BgpLinkAttrTeDefaultMetric;
 import org.onosproject.bgpio.util.Constants;
 import org.onosproject.cluster.NodeId;
-import org.onosproject.cluster.RoleInfo;
 import org.onosproject.net.ConnectPoint;
+import org.onosproject.net.DefaultAnnotations;
 import org.onosproject.net.DefaultDevice;
 import org.onosproject.net.DefaultLink;
 import org.onosproject.net.Device;
@@ -81,8 +78,9 @@
 import org.onosproject.net.config.ConfigApplyDelegate;
 import org.onosproject.net.config.ConfigFactory;
 import org.onosproject.net.config.NetworkConfigRegistryAdapter;
-import org.onosproject.net.config.basics.BandwidthCapacity;
 import org.onosproject.net.device.DeviceDescription;
+import org.onosproject.net.device.DeviceEvent;
+import org.onosproject.net.device.DeviceListener;
 import org.onosproject.net.device.DeviceProvider;
 import org.onosproject.net.device.DeviceProviderRegistry;
 import org.onosproject.net.device.DeviceProviderService;
@@ -94,6 +92,7 @@
 import org.onosproject.net.link.LinkProviderRegistry;
 import org.onosproject.net.link.LinkProviderService;
 import org.onosproject.net.provider.ProviderId;
+import org.onosproject.net.config.basics.BandwidthCapacity;
 import org.onosproject.net.resource.Resource;
 import org.onosproject.net.resource.ResourceAdminService;
 import org.onosproject.net.resource.ResourceId;
@@ -122,7 +121,7 @@
     private MockNetConfigRegistryAdapter networkConfigService = new MockNetConfigRegistryAdapter();
     private MockLabelResourceService labelResourceAdminService = new MockLabelResourceService();
     private Map<DeviceId, Device> deviceMap = new HashMap<>();
-    private MastershipListener listener;
+    private DeviceListener listener;
 
     @Before
     public void startUp() throws TestUtilsException {
@@ -134,7 +133,7 @@
         provider.labelResourceAdminService = labelResourceAdminService;
         provider.mastershipService = mastershipService;
         provider.networkConfigService = networkConfigService;
-        listener = TestUtils.getField(provider, "masterListener");
+        listener = TestUtils.getField(provider, "deviceListener");
         provider.activate();
         assertThat("device provider should be registered", not(nodeRegistry.provider));
         assertThat("link provider should be registered", not(linkRegistry.linkProvider));
@@ -887,10 +886,14 @@
             l.addNode(nodeNlri, details);
             assertThat(nodeRegistry.connected.size(), is(1));
         }
+        DefaultAnnotations.Builder newBuilder = DefaultAnnotations.builder();
 
-        MastershipEvent event = new MastershipEvent(Type.MASTER_CHANGED, nodeRegistry.connected.iterator().next(),
-                new RoleInfo(NodeId.nodeId("Node1"), new LinkedList<>()));
+        newBuilder.set("lsrId", "1.1.1.1");
 
+        Device device = new DefaultDevice(BgpTopologyProviderTest.providerId, nodeRegistry.connected.iterator().next(),
+                Device.Type.ROUTER, UNKNOWN, UNKNOWN, UNKNOWN, UNKNOWN, new ChassisId(), newBuilder.build());
+
+        DeviceEvent event = new DeviceEvent(DeviceEvent.Type.DEVICE_ADDED, device);
         listener.event(event);
         assertThat(labelResourceAdminService.resourcePool.keySet().size(), is(1));
     }
@@ -926,9 +929,16 @@
         for (BgpNodeListener l : controller.nodeListener) {
             l.addNode(nodeNlri, details);
             assertThat(nodeRegistry.connected.size(), is(1));
-            // Check label resource reserved for that device
-            MastershipEvent event = new MastershipEvent(Type.MASTER_CHANGED, nodeRegistry.connected.iterator().next(),
-                    new RoleInfo(NodeId.nodeId("Node1"), new LinkedList<>()));
+
+            DefaultAnnotations.Builder newBuilder = DefaultAnnotations.builder();
+
+            newBuilder.set("lsrId", "1.1.1.1");
+
+            Device device = new DefaultDevice(BgpTopologyProviderTest.providerId,
+                   nodeRegistry.connected.iterator().next(), Device.Type.ROUTER, UNKNOWN,
+                   UNKNOWN, UNKNOWN, UNKNOWN, new ChassisId(), newBuilder.build());
+
+            DeviceEvent event = new DeviceEvent(DeviceEvent.Type.DEVICE_ADDED, device);
             listener.event(event);
             assertThat(labelResourceAdminService.resourcePool.keySet().size(), is(1));
 
@@ -988,8 +998,15 @@
             l.addNode(nodeNlri, details);
             assertThat(nodeRegistry.connected.size(), is(1));
             //Check label resource reserved for that device
-            MastershipEvent event = new MastershipEvent(Type.MASTER_CHANGED, nodeRegistry.connected.iterator().next(),
-                    new RoleInfo(NodeId.nodeId("Node1"), new LinkedList<>()));
+            DefaultAnnotations.Builder newBuilder = DefaultAnnotations.builder();
+
+            newBuilder.set("lsrId", "1.1.1.1");
+
+            Device device = new DefaultDevice(BgpTopologyProviderTest.providerId,
+                    nodeRegistry.connected.iterator().next(), Device.Type.ROUTER,
+                    UNKNOWN, UNKNOWN, UNKNOWN, UNKNOWN, new ChassisId(), newBuilder.build());
+
+            DeviceEvent event = new DeviceEvent(DeviceEvent.Type.DEVICE_ADDED, device);
             listener.event(event);
             assertThat(labelResourceAdminService.resourcePool.keySet().size(), is(1));
             l.addNode(remNodeNlri, details);
