Started to work on topology abstraction.
Added more unit tests.
Changed mastership application to be synchronous.
diff --git a/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManager.java b/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManager.java
index 2914673..29c119d 100644
--- a/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManager.java
+++ b/net/core/trivial/src/main/java/org/onlab/onos/net/trivial/impl/SimpleDeviceManager.java
@@ -27,11 +27,8 @@
 import org.slf4j.Logger;
 
 import java.util.List;
-import java.util.concurrent.ExecutorService;
 
 import static com.google.common.base.Preconditions.checkNotNull;
-import static java.util.concurrent.Executors.newSingleThreadExecutor;
-import static org.onlab.util.Tools.namedThreads;
 import static org.slf4j.LoggerFactory.getLogger;
 
 /**
@@ -56,9 +53,6 @@
 
     private final SimpleDeviceStore store = new SimpleDeviceStore();
 
-    private final ExecutorService executor =
-            newSingleThreadExecutor(namedThreads("onos-device-%d"));
-
     @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
     protected EventDeliveryService eventDispatcher;
 
@@ -139,7 +133,7 @@
             Device device = event.subject();
             DeviceProvider provider = getProvider(device.providerId());
             if (provider != null) {
-                triggerRoleSelection(device, provider);
+                provider.roleChanged(device, newRole);
             }
             post(event);
         }
@@ -168,11 +162,12 @@
             log.info("Device {} connected", deviceId);
             DeviceEvent event = store.createOrUpdateDevice(provider().id(),
                                                            deviceId, deviceDescription);
-            post(event);
 
             // If there was a change of any kind, trigger role selection process.
             if (event != null) {
-                triggerRoleSelection(event.subject(), provider());
+                Device device = event.subject();
+                provider().roleChanged(device, store.getRole(device.id()));
+                post(event);
             }
         }
 
@@ -210,22 +205,6 @@
         }
     }
 
-    /**
-     * Triggers asynchronous role selection.
-     *
-     * @param device   device
-     * @param provider device provider
-     */
-    private void triggerRoleSelection(final Device device,
-                                      final DeviceProvider provider) {
-        executor.execute(new Runnable() {
-            @Override
-            public void run() {
-                provider.roleChanged(device, store.getRole(device.id()));
-            }
-        });
-    }
-
     // Posts the specified event to the local event dispatcher.
     private void post(DeviceEvent event) {
         if (event != null && eventDispatcher != null) {