diff --git a/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkManagerTest.java b/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkManagerTest.java
index 81fbdf5..dafd1f7 100644
--- a/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkManagerTest.java
+++ b/incubator/net/src/test/java/org/onosproject/incubator/net/virtual/impl/VirtualNetworkManagerTest.java
@@ -40,6 +40,7 @@
 import org.onosproject.incubator.net.virtual.VirtualNetworkListener;
 import org.onosproject.incubator.net.virtual.VirtualNetworkProviderService;
 import org.onosproject.incubator.net.virtual.VirtualPort;
+import org.onosproject.incubator.net.virtual.impl.provider.DefaultVirtualNetworkProvider;
 import org.onosproject.incubator.store.virtual.impl.DistributedVirtualNetworkStore;
 import org.onosproject.net.ConnectPoint;
 import org.onosproject.net.DeviceId;
@@ -74,7 +75,7 @@
     private final String tenantIdValue2 = "TENANT_ID2";
 
     private VirtualNetworkManager manager;
-    private VirtualNetworkTopologyProvider topologyProvider;
+    private DefaultVirtualNetworkProvider topologyProvider;
     private DistributedVirtualNetworkStore virtualNetworkManagerStore;
     private CoreService coreService;
     private TestListener listener = new TestListener();
@@ -93,7 +94,8 @@
         coreService = new TestCoreService();
         virtualNetworkManagerStore.setCoreService(coreService);
         TestUtils.setField(coreService, "coreService", new TestCoreService());
-        TestUtils.setField(virtualNetworkManagerStore, "storageService", new TestStorageService());
+        TestUtils.setField(virtualNetworkManagerStore, "storageService",
+                           new TestStorageService());
         virtualNetworkManagerStore.activate();
 
         manager = new VirtualNetworkManager();
@@ -138,8 +140,10 @@
         assertTrue("The tenantId set should be empty.", tenantIdCollection.isEmpty());
 
         // Validate that the events were all received in the correct order.
-        validateEvents(VirtualNetworkEvent.Type.TENANT_UNREGISTERED, VirtualNetworkEvent.Type.TENANT_REGISTERED,
-                       VirtualNetworkEvent.Type.TENANT_REGISTERED, VirtualNetworkEvent.Type.TENANT_UNREGISTERED,
+        validateEvents(VirtualNetworkEvent.Type.TENANT_UNREGISTERED,
+                       VirtualNetworkEvent.Type.TENANT_REGISTERED,
+                       VirtualNetworkEvent.Type.TENANT_REGISTERED,
+                       VirtualNetworkEvent.Type.TENANT_UNREGISTERED,
                        VirtualNetworkEvent.Type.TENANT_UNREGISTERED);
     }
 
@@ -184,9 +188,12 @@
         assertTrue("The virtual network set should be empty.", virtualNetworks.isEmpty());
 
         // Validate that the events were all received in the correct order.
-        validateEvents(VirtualNetworkEvent.Type.TENANT_REGISTERED, VirtualNetworkEvent.Type.NETWORK_ADDED,
-                       VirtualNetworkEvent.Type.NETWORK_ADDED, VirtualNetworkEvent.Type.NETWORK_REMOVED,
-                       VirtualNetworkEvent.Type.NETWORK_REMOVED, VirtualNetworkEvent.Type.NETWORK_ADDED,
+        validateEvents(VirtualNetworkEvent.Type.TENANT_REGISTERED,
+                       VirtualNetworkEvent.Type.NETWORK_ADDED,
+                       VirtualNetworkEvent.Type.NETWORK_ADDED,
+                       VirtualNetworkEvent.Type.NETWORK_REMOVED,
+                       VirtualNetworkEvent.Type.NETWORK_REMOVED,
+                       VirtualNetworkEvent.Type.NETWORK_ADDED,
                        VirtualNetworkEvent.Type.NETWORK_REMOVED);
     }
 
@@ -207,7 +214,9 @@
     @Test(expected = IllegalStateException.class)
     public void testCreateVirtualDeviceWithNoNetwork() {
         manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
-        VirtualNetwork virtualNetwork = new DefaultVirtualNetwork(NetworkId.NONE, TenantId.tenantId(tenantIdValue1));
+        VirtualNetwork virtualNetwork =
+                new DefaultVirtualNetwork(NetworkId.NONE,
+                                          TenantId.tenantId(tenantIdValue1));
 
         manager.createVirtualDevice(virtualNetwork.id(), DID1);
     }
@@ -218,8 +227,10 @@
     @Test
     public void testAddRemoveVirtualDevice() {
         manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
-        VirtualNetwork virtualNetwork1 = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
-        VirtualNetwork virtualNetwork2 = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
+        VirtualNetwork virtualNetwork1 =
+                manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
+        VirtualNetwork virtualNetwork2 =
+                manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
         manager.createVirtualDevice(virtualNetwork1.id(), DID1);
         manager.createVirtualDevice(virtualNetwork2.id(), DID2);
 
@@ -246,7 +257,8 @@
         assertTrue("The virtual device set should be empty.", virtualDevices1.isEmpty());
 
         // Validate that the events were all received in the correct order.
-        validateEvents(VirtualNetworkEvent.Type.TENANT_REGISTERED, VirtualNetworkEvent.Type.NETWORK_ADDED,
+        validateEvents(VirtualNetworkEvent.Type.TENANT_REGISTERED,
+                       VirtualNetworkEvent.Type.NETWORK_ADDED,
                        VirtualNetworkEvent.Type.NETWORK_ADDED);
     }
 
@@ -256,7 +268,8 @@
     @Test(expected = NullPointerException.class)
     public void testCreateNullVirtualHost() {
         manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
-        VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
+        VirtualNetwork virtualNetwork =
+                manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
 
         manager.createVirtualHost(virtualNetwork.id(), null, null, null, null, null);
     }
@@ -267,7 +280,8 @@
     @Test(expected = IllegalStateException.class)
     public void testCreateVirtualHostWithNoNetwork() {
         manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
-        VirtualNetwork virtualNetwork = new DefaultVirtualNetwork(NetworkId.NONE, TenantId.tenantId(tenantIdValue1));
+        VirtualNetwork virtualNetwork =
+                new DefaultVirtualNetwork(NetworkId.NONE, TenantId.tenantId(tenantIdValue1));
 
         manager.createVirtualHost(virtualNetwork.id(), HID1, null, null, null, null);
     }
@@ -278,8 +292,10 @@
     @Test
     public void testAddRemoveVirtualHost() {
         manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
-        VirtualNetwork virtualNetwork1 = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
-        VirtualNetwork virtualNetwork2 = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
+        VirtualNetwork virtualNetwork1 =
+                manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
+        VirtualNetwork virtualNetwork2 =
+                manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
         manager.createVirtualHost(virtualNetwork1.id(), HID1, MAC1, VLAN1, LOC1, IPSET1);
         manager.createVirtualHost(virtualNetwork2.id(), HID2, MAC2, VLAN2, LOC2, IPSET2);
 
@@ -300,7 +316,9 @@
         assertTrue("The virtual host set should be empty.", virtualHosts1.isEmpty());
 
         // Add/remove the virtual host again.
-        VirtualHost virtualHost = manager.createVirtualHost(virtualNetwork1.id(), HID1, MAC1, VLAN1, LOC1, IPSET1);
+        VirtualHost virtualHost =
+                manager.createVirtualHost(virtualNetwork1.id(),
+                                          HID1, MAC1, VLAN1, LOC1, IPSET1);
         manager.removeVirtualHost(virtualHost.networkId(), virtualHost.id());
         virtualHosts1 = manager.getVirtualHosts(virtualNetwork1.id());
         assertTrue("The virtual host set should be empty.", virtualHosts1.isEmpty());
@@ -312,7 +330,8 @@
     @Test
     public void testAddRemoveVirtualLink() {
         manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
-        VirtualNetwork virtualNetwork1 = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
+        VirtualNetwork virtualNetwork1 =
+                manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
         VirtualDevice srcVirtualDevice =
                 manager.createVirtualDevice(virtualNetwork1.id(), DID1);
         VirtualDevice dstVirtualDevice =
@@ -353,7 +372,8 @@
     @Test(expected = IllegalStateException.class)
     public void testAddSameVirtualLink() {
         manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
-        VirtualNetwork virtualNetwork1 = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
+        VirtualNetwork virtualNetwork1 =
+                manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
         VirtualDevice srcVirtualDevice =
                 manager.createVirtualDevice(virtualNetwork1.id(), DID1);
         VirtualDevice dstVirtualDevice =
@@ -376,13 +396,16 @@
     @Test
     public void testAddRemoveVirtualPort() {
         manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
-        VirtualNetwork virtualNetwork1 = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
+        VirtualNetwork virtualNetwork1 =
+                manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
         VirtualDevice virtualDevice =
                 manager.createVirtualDevice(virtualNetwork1.id(), DID1);
         ConnectPoint cp = new ConnectPoint(virtualDevice.id(), PortNumber.portNumber(1));
 
-        manager.createVirtualPort(virtualNetwork1.id(), virtualDevice.id(), PortNumber.portNumber(1), cp);
-        manager.createVirtualPort(virtualNetwork1.id(), virtualDevice.id(), PortNumber.portNumber(2), cp);
+        manager.createVirtualPort(virtualNetwork1.id(),
+                                  virtualDevice.id(), PortNumber.portNumber(1), cp);
+        manager.createVirtualPort(virtualNetwork1.id(),
+                                  virtualDevice.id(), PortNumber.portNumber(2), cp);
 
         Set<VirtualPort> virtualPorts = manager.getVirtualPorts(virtualNetwork1.id(), virtualDevice.id());
         assertNotNull("The virtual port set should not be null", virtualPorts);
@@ -399,9 +422,11 @@
         assertTrue("The virtual port set should be empty.", virtualPorts.isEmpty());
 
         // Add/remove the virtual port again.
-        VirtualPort virtualPort = manager.createVirtualPort(virtualNetwork1.id(), virtualDevice.id(),
+        VirtualPort virtualPort =
+                manager.createVirtualPort(virtualNetwork1.id(), virtualDevice.id(),
                                                             PortNumber.portNumber(1), cp);
-        manager.removeVirtualPort(virtualNetwork1.id(), (DeviceId) virtualPort.element().id(), virtualPort.number());
+        manager.removeVirtualPort(virtualNetwork1.id(),
+                                  (DeviceId) virtualPort.element().id(), virtualPort.number());
         virtualPorts = manager.getVirtualPorts(virtualNetwork1.id(), virtualDevice.id());
         assertTrue("The virtual port set should be empty.", virtualPorts.isEmpty());
     }
@@ -428,7 +453,8 @@
     @Test
     public void testAddOrUpdateIntent() {
         manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
-        VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
+        VirtualNetwork virtualNetwork =
+                manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
         ConnectPoint cp1 = new ConnectPoint(DID1, P1);
         ConnectPoint cp2 = new ConnectPoint(DID2, P1);
 
@@ -442,13 +468,17 @@
 
         // Add the intent to the store.
         manager.store.addOrUpdateIntent(virtualIntent, IntentState.INSTALL_REQ);
-        assertEquals("The intent size should match.", 1, manager.store.getIntents().size());
-        assertNotNull("The intent should not be null.", manager.store.getIntent(virtualIntent.key()));
+        assertEquals("The intent size should match.", 1,
+                     manager.store.getIntents().size());
+        assertNotNull("The intent should not be null.",
+                      manager.store.getIntent(virtualIntent.key()));
 
         // remove the intent from the store.
         manager.store.removeIntent(virtualIntent.key());
-        assertTrue("The intents should be empty.", manager.store.getIntents().isEmpty());
-        assertNull("The intent should be null.", manager.store.getIntent(virtualIntent.key()));
+        assertTrue("The intents should be empty.",
+                   manager.store.getIntents().isEmpty());
+        assertNull("The intent should be null.",
+                   manager.store.getIntent(virtualIntent.key()));
     }
 
     /**
@@ -488,11 +518,13 @@
         TunnelId tunnelId = TunnelId.valueOf("virtual tunnel");
         // Add the intent to tunnelID mapping to the store.
         manager.store.addTunnelId(virtualIntent, tunnelId);
-        assertEquals("The tunnels size should match.", 1, manager.store.getTunnelIds(virtualIntent).size());
+        assertEquals("The tunnels size should match.", 1,
+                     manager.store.getTunnelIds(virtualIntent).size());
 
         // Remove the intent to tunnelID mapping from the store.
         manager.store.removeTunnelId(virtualIntent, tunnelId);
-        assertTrue("The tunnels should be empty.", manager.store.getTunnelIds(virtualIntent).isEmpty());
+        assertTrue("The tunnels should be empty.",
+                   manager.store.getTunnelIds(virtualIntent).isEmpty());
     }
 
 
@@ -501,7 +533,8 @@
      **/
     private VirtualNetwork setupVirtualNetworkTopology() {
         manager.registerTenantId(TenantId.tenantId(tenantIdValue1));
-        VirtualNetwork virtualNetwork = manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
+        VirtualNetwork virtualNetwork =
+                manager.createVirtualNetwork(TenantId.tenantId(tenantIdValue1));
 
         VirtualDevice virtualDevice1 =
                 manager.createVirtualDevice(virtualNetwork.id(), DID1);
@@ -564,8 +597,13 @@
         virtualNetworkManagerStore.updateLink(link6, link6.tunnelId(), Link.State.ACTIVE);
 
         topologyService = manager.get(virtualNetwork.id(), TopologyService.class);
-        topologyProvider = new VirtualNetworkTopologyProvider();
-        topologyProvider.topologyService = topologyService;
+        topologyProvider = new DefaultVirtualNetworkProvider();
+        try {
+            TestUtils.setField(topologyProvider, "topologyService", topologyService);
+        } catch (TestUtils.TestUtilsException e) {
+            e.printStackTrace();
+        }
+//        topologyProvider.topologyService = topologyService;
 
         return virtualNetwork;
     }
@@ -576,10 +614,12 @@
     @Test
     public void testTopologyChanged() {
         VirtualNetwork virtualNetwork = setupVirtualNetworkTopology();
-        VirtualNetworkProviderService providerService = manager.createProviderService(topologyProvider);
+        VirtualNetworkProviderService providerService =
+                manager.createProviderService(topologyProvider);
 
         // Initial setup is two clusters of devices/links.
-        assertEquals("The cluster count did not match.", 2, topologyService.currentTopology().clusterCount());
+        assertEquals("The cluster count did not match.", 2,
+                     topologyService.currentTopology().clusterCount());
 
         // Adding this link will join the two clusters together.
         List<Event> reasons = new ArrayList<>();
@@ -593,7 +633,8 @@
 
         // Validate that all links are still active.
         manager.getVirtualLinks(virtualNetwork.id()).forEach(virtualLink -> {
-            assertTrue("The virtual link should be active.", virtualLink.state().equals(Link.State.ACTIVE));
+            assertTrue("The virtual link should be active.",
+                       virtualLink.state().equals(Link.State.ACTIVE));
         });
 
         virtualNetworkManagerStore.updateLink(link, link.tunnelId(), Link.State.INACTIVE);
@@ -602,7 +643,8 @@
 
         // Validate that all links are active again.
         manager.getVirtualLinks(virtualNetwork.id()).forEach(virtualLink -> {
-            assertTrue("The virtual link should be active.", virtualLink.state().equals(Link.State.ACTIVE));
+            assertTrue("The virtual link should be active.",
+                       virtualLink.state().equals(Link.State.ACTIVE));
         });
     }
 
