Added unit tests for the event abstractions.
Added Element as the notion of common ancestry between Device and Host.
diff --git a/net/api/src/test/java/org/onlab/onos/event/AbstractListenerManagerTest.java b/net/api/src/test/java/org/onlab/onos/event/AbstractListenerManagerTest.java
new file mode 100644
index 0000000..effcc79
--- /dev/null
+++ b/net/api/src/test/java/org/onlab/onos/event/AbstractListenerManagerTest.java
@@ -0,0 +1,49 @@
+package org.onlab.onos.event;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Tests of the base listener manager.
+ */
+public class AbstractListenerManagerTest {
+
+    @Test
+    public void basics() {
+        TestListener listener = new TestListener();
+        TestListener secondListener = new TestListener();
+        TestListenerManager manager = new TestListenerManager();
+        manager.addListener(listener);
+        manager.addListener(secondListener);
+
+        TestEvent event = new TestEvent(TestEvent.Type.BAR, "bar");
+        manager.process(event);
+        assertTrue("event not processed", listener.events.contains(event));
+        assertTrue("event not processed", secondListener.events.contains(event));
+
+        manager.removeListener(listener);
+
+        TestEvent another = new TestEvent(TestEvent.Type.FOO, "foo");
+        manager.process(another);
+        assertFalse("event processed", listener.events.contains(another));
+        assertTrue("event not processed", secondListener.events.contains(event));
+    }
+
+    @Test
+    public void badListener() {
+        TestListener listener = new BrokenListener();
+        TestListener secondListener = new TestListener();
+        TestListenerManager manager = new TestListenerManager();
+        manager.addListener(listener);
+        manager.addListener(secondListener);
+
+        TestEvent event = new TestEvent(TestEvent.Type.BAR, "bar");
+        manager.process(event);
+        assertFalse("event processed", listener.events.contains(event));
+        assertFalse("error not reported", manager.errors.isEmpty());
+        assertTrue("event not processed", secondListener.events.contains(event));
+    }
+
+}