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();
         }