Adding more unit tests.
Made some classes abstract which should have been.
diff --git a/core/api/src/test/java/org/onlab/onos/net/ConnectPointTest.java b/core/api/src/test/java/org/onlab/onos/net/ConnectPointTest.java
new file mode 100644
index 0000000..ebb5217
--- /dev/null
+++ b/core/api/src/test/java/org/onlab/onos/net/ConnectPointTest.java
@@ -0,0 +1,37 @@
+package org.onlab.onos.net;
+
+import com.google.common.testing.EqualsTester;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+import static org.onlab.onos.net.Device.Type.SWITCH;
+import static org.onlab.onos.net.DeviceId.deviceId;
+import static org.onlab.onos.net.PortNumber.portNumber;
+
+/**
+ * Test of the connetion point entity.
+ */
+public class ConnectPointTest {
+
+    public static final DeviceId DID1 = deviceId("1");
+    public static final DeviceId DID2 = deviceId("2");
+    public static final PortNumber P1 = portNumber(1);
+    public static final PortNumber P2 = portNumber(2);
+
+    @Test
+    public void basics() {
+        ConnectPoint p = new ConnectPoint(DID1, P2);
+        assertEquals("incorrect element id", DID1, p.deviceId());
+        assertEquals("incorrect element id", P2, p.port());
+    }
+
+
+    @Test
+    public void testEquality() {
+        new EqualsTester()
+                .addEqualityGroup(new ConnectPoint(DID1, P1), new ConnectPoint(DID1, P1))
+                .addEqualityGroup(new ConnectPoint(DID1, P2), new ConnectPoint(DID1, P2))
+                .addEqualityGroup(new ConnectPoint(DID2, P1), new ConnectPoint(DID2, P1))
+                .testEquals();
+    }
+}
\ No newline at end of file
diff --git a/core/api/src/test/java/org/onlab/onos/net/DefaultAnnotationsTest.java b/core/api/src/test/java/org/onlab/onos/net/DefaultAnnotationsTest.java
new file mode 100644
index 0000000..274f4b8
--- /dev/null
+++ b/core/api/src/test/java/org/onlab/onos/net/DefaultAnnotationsTest.java
@@ -0,0 +1,68 @@
+package org.onlab.onos.net;
+
+import org.junit.Test;
+
+import static com.google.common.collect.ImmutableSet.of;
+import static org.junit.Assert.*;
+import static org.onlab.onos.net.DefaultAnnotations.builder;
+
+/**
+ * Tests of the default annotations.
+ */
+public class DefaultAnnotationsTest {
+
+    private DefaultAnnotations annotations;
+
+    @Test
+    public void basics() {
+        annotations = builder().set("foo", "1").set("bar", "2").build();
+        assertEquals("incorrect keys", of("foo", "bar"), annotations.keys());
+        assertEquals("incorrect value", "1", annotations.value("foo"));
+        assertEquals("incorrect value", "2", annotations.value("bar"));
+    }
+
+    @Test
+    public void empty() {
+        annotations = builder().build();
+        assertTrue("incorrect keys", annotations.keys().isEmpty());
+    }
+
+    @Test
+    public void remove() {
+        annotations = builder().remove("foo").set("bar", "2").build();
+        assertEquals("incorrect keys", of("foo", "bar"), annotations.keys());
+        assertNull("incorrect value", annotations.value("foo"));
+        assertEquals("incorrect value", "2", annotations.value("bar"));
+    }
+
+    @Test
+    public void merge() {
+        annotations = builder().set("foo", "1").set("bar", "2").build();
+        assertEquals("incorrect keys", of("foo", "bar"), annotations.keys());
+
+        SparseAnnotations updates = builder().remove("foo").set("bar", "3").set("goo", "4").build();
+
+        annotations = DefaultAnnotations.merge(annotations, updates);
+        assertEquals("incorrect keys", of("goo", "bar"), annotations.keys());
+        assertNull("incorrect value", annotations.value("foo"));
+        assertEquals("incorrect value", "3", annotations.value("bar"));
+    }
+
+    @Test
+    public void noopMerge() {
+        annotations = builder().set("foo", "1").set("bar", "2").build();
+        assertEquals("incorrect keys", of("foo", "bar"), annotations.keys());
+
+        SparseAnnotations updates = builder().build();
+        assertSame("same annotations expected", annotations,
+                   DefaultAnnotations.merge(annotations, updates));
+        assertSame("same annotations expected", annotations,
+                   DefaultAnnotations.merge(annotations, null));
+    }
+
+    @Test(expected = NullPointerException.class)
+    public void badMerge() {
+        DefaultAnnotations.merge(null, null);
+    }
+
+}
\ No newline at end of file
diff --git a/core/api/src/test/java/org/onlab/onos/net/DefaultDeviceTest.java b/core/api/src/test/java/org/onlab/onos/net/DefaultDeviceTest.java
index ea1c8fd..f7bc617 100644
--- a/core/api/src/test/java/org/onlab/onos/net/DefaultDeviceTest.java
+++ b/core/api/src/test/java/org/onlab/onos/net/DefaultDeviceTest.java
@@ -40,6 +40,18 @@
     @Test
     public void basics() {
         Device device = new DefaultDevice(PID, DID1, SWITCH, MFR, HW, SW, SN1);
+        validate(device);
+    }
+
+    @Test
+    public void annotations() {
+        Device device = new DefaultDevice(PID, DID1, SWITCH, MFR, HW, SW, SN1,
+                                          DefaultAnnotations.builder().set("foo", "bar").build());
+        validate(device);
+        assertEquals("incorrect provider", "bar", device.annotations().value("foo"));
+    }
+
+    private void validate(Device device) {
         assertEquals("incorrect provider", PID, device.providerId());
         assertEquals("incorrect id", DID1, device.id());
         assertEquals("incorrect type", SWITCH, device.type());
@@ -50,4 +62,4 @@
         assertEquals("incorrect serial", SN1, device.serialNumber());
     }
 
-}
+}
\ No newline at end of file