Refining driver subsystem to facilitate coordinated start-up.

- for ONOS-6402

Change-Id: I7f64fc62ad1d451fcf55624b2422b60631a3c8e8
diff --git a/core/net/src/test/java/org/onosproject/net/flow/impl/FlowRuleManagerTest.java b/core/net/src/test/java/org/onosproject/net/flow/impl/FlowRuleManagerTest.java
index 88a7e7a..b3df232 100644
--- a/core/net/src/test/java/org/onosproject/net/flow/impl/FlowRuleManagerTest.java
+++ b/core/net/src/test/java/org/onosproject/net/flow/impl/FlowRuleManagerTest.java
@@ -42,7 +42,9 @@
 import org.onosproject.net.device.DeviceServiceAdapter;
 import org.onosproject.net.driver.AbstractHandlerBehaviour;
 import org.onosproject.net.driver.DefaultDriver;
+import org.onosproject.net.driver.DriverRegistry;
 import org.onosproject.net.driver.impl.DriverManager;
+import org.onosproject.net.driver.impl.DriverRegistryManager;
 import org.onosproject.net.flow.CompletedBatchOperation;
 import org.onosproject.net.flow.DefaultFlowEntry;
 import org.onosproject.net.flow.DefaultFlowRule;
@@ -118,7 +120,6 @@
 
     private TestDriverManager driverService;
 
-
     @Before
     public void setUp() {
         mgr = new FlowRuleManager();
@@ -133,19 +134,20 @@
         service = mgr;
         registry = mgr;
 
-        driverService = new TestDriverManager();
-        driverService.addDriver(new DefaultDriver("foo", ImmutableList.of(), "", "", "",
-                                                  ImmutableMap.of(FlowRuleProgrammable.class,
-                                                                  TestFlowRuleProgrammable.class),
-                                                  ImmutableMap.of()));
+        DriverRegistryManager driverRegistry = new DriverRegistryManager();
+        driverService = new TestDriverManager(driverRegistry);
+        driverRegistry.addDriver(new DefaultDriver("foo", ImmutableList.of(), "", "", "",
+                                                   ImmutableMap.of(FlowRuleProgrammable.class,
+                                                                   TestFlowRuleProgrammable.class),
+                                                   ImmutableMap.of()));
 
         mgr.activate(null);
         mgr.addListener(listener);
         provider = new TestProvider(PID);
-        providerService = registry.register(provider);
+        providerService = this.registry.register(provider);
         appId = new TestApplicationId(0, "FlowRuleManagerTest");
         assertTrue("provider should be registered",
-                   registry.getProviders().contains(provider.id()));
+                   this.registry.getProviders().contains(provider.id()));
     }
 
     @After
@@ -270,7 +272,7 @@
         FlowEntry fe3 = new DefaultFlowEntry(f3);
         providerService.pushFlowMetrics(DID, ImmutableList.of(fe1, fe2, fe3));
         validateEvents(RULE_ADD_REQUESTED, RULE_ADD_REQUESTED, RULE_ADD_REQUESTED,
-                RULE_ADDED, RULE_ADDED, RULE_ADDED);
+                       RULE_ADDED, RULE_ADDED, RULE_ADDED);
         mgr.purgeFlowRules(DID);
         assertEquals("0 rule should exist", 0, flowCount());
     }
@@ -697,7 +699,8 @@
     }
 
     private class TestDriverManager extends DriverManager {
-        TestDriverManager() {
+        TestDriverManager(DriverRegistry registry) {
+            this.registry = registry;
             this.deviceService = mgr.deviceService;
             activate();
         }
diff --git a/core/net/src/test/java/org/onosproject/net/flowobjective/impl/FlowObjectiveManagerTest.java b/core/net/src/test/java/org/onosproject/net/flowobjective/impl/FlowObjectiveManagerTest.java
index f4a12a9..5e03b7e 100644
--- a/core/net/src/test/java/org/onosproject/net/flowobjective/impl/FlowObjectiveManagerTest.java
+++ b/core/net/src/test/java/org/onosproject/net/flowobjective/impl/FlowObjectiveManagerTest.java
@@ -15,9 +15,6 @@
  */
 package org.onosproject.net.flowobjective.impl;
 
-import java.util.ArrayList;
-import java.util.List;
-
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -36,11 +33,9 @@
 import org.onosproject.net.device.DeviceEvent;
 import org.onosproject.net.device.DeviceListener;
 import org.onosproject.net.device.DeviceServiceAdapter;
-import org.onosproject.net.driver.AbstractDriverLoader;
 import org.onosproject.net.driver.Behaviour;
 import org.onosproject.net.driver.DefaultDriverData;
 import org.onosproject.net.driver.DefaultDriverHandler;
-import org.onosproject.net.driver.DefaultDriverProviderService;
 import org.onosproject.net.driver.Driver;
 import org.onosproject.net.driver.DriverAdapter;
 import org.onosproject.net.driver.DriverData;
@@ -61,6 +56,9 @@
 import org.onosproject.net.flowobjective.ObjectiveEvent;
 import org.onosproject.net.intent.TestTools;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import static org.hamcrest.CoreMatchers.hasItem;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.hasSize;
@@ -125,12 +123,6 @@
 
     }
 
-    private class TestDriversLoader extends AbstractDriverLoader implements DefaultDriverProviderService {
-        public TestDriversLoader() {
-            super("/onos-drivers.xml");
-        }
-    }
-
     private class TestDriver extends DriverAdapter {
 
         @Override
@@ -192,7 +184,6 @@
         manager = new FlowObjectiveManager();
         manager.flowObjectiveStore = new TestFlowObjectiveStore();
         manager.deviceService = new TestDeviceService();
-        manager.defaultDriverService = new TestDriversLoader();
         manager.driverService = new TestDriverService();
         manager.cfgService = new TestComponentConfigService();
 
diff --git a/core/net/src/test/java/org/onosproject/net/group/impl/GroupManagerTest.java b/core/net/src/test/java/org/onosproject/net/group/impl/GroupManagerTest.java
index a85046b..42b4863 100644
--- a/core/net/src/test/java/org/onosproject/net/group/impl/GroupManagerTest.java
+++ b/core/net/src/test/java/org/onosproject/net/group/impl/GroupManagerTest.java
@@ -37,7 +37,9 @@
 import org.onosproject.net.device.DeviceServiceAdapter;
 import org.onosproject.net.driver.AbstractHandlerBehaviour;
 import org.onosproject.net.driver.DefaultDriver;
+import org.onosproject.net.driver.DriverRegistry;
 import org.onosproject.net.driver.impl.DriverManager;
+import org.onosproject.net.driver.impl.DriverRegistryManager;
 import org.onosproject.net.flow.DefaultTrafficTreatment;
 import org.onosproject.net.flow.TrafficTreatment;
 import org.onosproject.net.group.DefaultGroup;
@@ -112,11 +114,12 @@
         mgr.activate(null);
         mgr.addListener(listener);
 
-        driverService = new TestDriverManager();
-        driverService.addDriver(new DefaultDriver("foo", ImmutableList.of(), "", "", "",
-                                                  ImmutableMap.of(GroupProgrammable.class,
-                                                                  TestGroupProgrammable.class),
-                                                  ImmutableMap.of()));
+        DriverRegistryManager driverRegistry = new DriverRegistryManager();
+        driverService = new TestDriverManager(driverRegistry);
+        driverRegistry.addDriver(new DefaultDriver("foo", ImmutableList.of(), "", "", "",
+                                                   ImmutableMap.of(GroupProgrammable.class,
+                                                                   TestGroupProgrammable.class),
+                                                   ImmutableMap.of()));
 
         internalProvider = new TestGroupProvider(PID);
         provider = internalProvider;
@@ -747,7 +750,8 @@
     }
 
     private class TestDriverManager extends DriverManager {
-        TestDriverManager() {
+        TestDriverManager(DriverRegistry registry) {
+            this.registry = registry;
             this.deviceService = mgr.deviceService;
             activate();
         }
@@ -773,7 +777,7 @@
 
         assertEquals(lastDeviceIdProgrammable, expectedDeviceId);
         assertTrue(groupOperations.containsAll(expectedGroupOps) &&
-                   expectedGroupOps.containsAll(groupOperations));
+                           expectedGroupOps.containsAll(groupOperations));
 
         groupOperations.clear();
         lastDeviceIdProgrammable = null;
diff --git a/core/net/src/test/java/org/onosproject/net/packet/impl/PacketManagerTest.java b/core/net/src/test/java/org/onosproject/net/packet/impl/PacketManagerTest.java
index 5e0a432..095d797 100644
--- a/core/net/src/test/java/org/onosproject/net/packet/impl/PacketManagerTest.java
+++ b/core/net/src/test/java/org/onosproject/net/packet/impl/PacketManagerTest.java
@@ -33,7 +33,9 @@
 import org.onosproject.net.device.DeviceServiceAdapter;
 import org.onosproject.net.driver.AbstractHandlerBehaviour;
 import org.onosproject.net.driver.DefaultDriver;
+import org.onosproject.net.driver.DriverRegistry;
 import org.onosproject.net.driver.impl.DriverManager;
+import org.onosproject.net.driver.impl.DriverRegistryManager;
 import org.onosproject.net.flow.DefaultTrafficTreatment;
 import org.onosproject.net.packet.DefaultOutboundPacket;
 import org.onosproject.net.packet.OutboundPacket;
@@ -84,11 +86,13 @@
         mgr.coreService = new TestCoreService();
         providerRegistry = mgr;
         mgr.activate();
-        driverService = new TestDriverManager();
-        driverService.addDriver(new DefaultDriver("foo", ImmutableList.of(), "", "", "",
-                                                  ImmutableMap.of(PacketProgrammable.class,
-                                                                  TestPacketProgrammable.class),
-                                                  ImmutableMap.of()));
+
+        DriverRegistryManager driverRegistry = new DriverRegistryManager();
+        driverService = new TestDriverManager(driverRegistry);
+        driverRegistry.addDriver(new DefaultDriver("foo", ImmutableList.of(), "", "", "",
+                                                   ImmutableMap.of(PacketProgrammable.class,
+                                                                   TestPacketProgrammable.class),
+                                                   ImmutableMap.of()));
     }
 
     /**
@@ -140,7 +144,8 @@
     }
 
     private class TestDriverManager extends DriverManager {
-        TestDriverManager() {
+        TestDriverManager(DriverRegistry registry) {
+            this.registry = registry;
             this.deviceService = mgr.deviceService;
             activate();
         }