diff --git a/core/api/src/main/java/org/onlab/onos/net/topology/DefaultGraphDescription.java b/core/api/src/main/java/org/onlab/onos/net/topology/DefaultGraphDescription.java
index dfc3ad6..b723f11 100644
--- a/core/api/src/main/java/org/onlab/onos/net/topology/DefaultGraphDescription.java
+++ b/core/api/src/main/java/org/onlab/onos/net/topology/DefaultGraphDescription.java
@@ -23,7 +23,6 @@
 
     private final Map<DeviceId, TopologyVertex> vertexesById = Maps.newHashMap();
 
-
     /**
      * Creates a minimal topology graph description to allow core to construct
      * and process the topology graph.
@@ -84,9 +83,7 @@
         DeviceId id = connectPoint.deviceId();
         TopologyVertex vertex = vertexesById.get(id);
         if (vertex == null) {
-            // If vertex does not exist, create one and register it.
-            vertex = new DefaultTopologyVertex(id);
-            vertexesById.put(id, vertex);
+            throw new IllegalArgumentException("Vertex missing for " + id);
         }
         return vertex;
     }
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
index ebb5217..6d3e793 100644
--- a/core/api/src/test/java/org/onlab/onos/net/ConnectPointTest.java
+++ b/core/api/src/test/java/org/onlab/onos/net/ConnectPointTest.java
@@ -3,8 +3,7 @@
 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.junit.Assert.assertEquals;
 import static org.onlab.onos.net.DeviceId.deviceId;
 import static org.onlab.onos.net.PortNumber.portNumber;
 
@@ -13,10 +12,10 @@
  */
 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);
+    private static final DeviceId DID1 = deviceId("1");
+    private static final DeviceId DID2 = deviceId("2");
+    private static final PortNumber P1 = portNumber(1);
+    private static final PortNumber P2 = portNumber(2);
 
     @Test
     public void basics() {
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 f7bc617..b4018e3 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
@@ -13,15 +13,14 @@
  */
 public class DefaultDeviceTest {
 
-    private static final ProviderId PID = new ProviderId("of", "foo");
-    private static final DeviceId DID1 = deviceId("of:foo");
-    private static final DeviceId DID2 = deviceId("of:bar");
-    private static final String MFR = "whitebox";
-    private static final String HW = "1.1.x";
-    private static final String SW = "3.9.1";
-    private static final String SN1 = "43311-12345";
-    private static final String SN2 = "42346-43512";
-
+    static final ProviderId PID = new ProviderId("of", "foo");
+    static final DeviceId DID1 = deviceId("of:foo");
+    static final DeviceId DID2 = deviceId("of:bar");
+    static final String MFR = "whitebox";
+    static final String HW = "1.1.x";
+    static final String SW = "3.9.1";
+    static final String SN1 = "43311-12345";
+    static final String SN2 = "42346-43512";
 
     @Test
     public void testEquality() {
diff --git a/core/api/src/test/java/org/onlab/onos/net/topology/DefaultGraphDescriptionTest.java b/core/api/src/test/java/org/onlab/onos/net/topology/DefaultGraphDescriptionTest.java
new file mode 100644
index 0000000..a968abf
--- /dev/null
+++ b/core/api/src/test/java/org/onlab/onos/net/topology/DefaultGraphDescriptionTest.java
@@ -0,0 +1,41 @@
+package org.onlab.onos.net.topology;
+
+import com.google.common.collect.ImmutableSet;
+import org.junit.Test;
+import org.onlab.onos.net.DefaultDevice;
+import org.onlab.onos.net.Device;
+import org.onlab.onos.net.DeviceId;
+
+import static org.junit.Assert.assertEquals;
+import static org.onlab.onos.net.Device.Type.SWITCH;
+import static org.onlab.onos.net.DeviceId.deviceId;
+import static org.onlab.onos.net.topology.DefaultTopologyEdgeTest.*;
+
+public class DefaultGraphDescriptionTest {
+
+    static final DefaultTopologyEdge E1 = new DefaultTopologyEdge(V1, V2, L1);
+    static final DefaultTopologyEdge E2 = new DefaultTopologyEdge(V1, V2, L1);
+
+    private static final DeviceId D3 = deviceId("3");
+
+    static final Device DEV1 = new DefaultDevice(PID, D1, SWITCH, "", "", "", "");
+    static final Device DEV2 = new DefaultDevice(PID, D2, SWITCH, "", "", "", "");
+    static final Device DEV3 = new DefaultDevice(PID, D3, SWITCH, "", "", "", "");
+
+    @Test
+    public void basics() {
+        DefaultGraphDescription desc =
+                new DefaultGraphDescription(4321L, ImmutableSet.of(DEV1, DEV2, DEV3),
+                                            ImmutableSet.of(L1, L2));
+        assertEquals("incorrect time", 4321L, desc.timestamp());
+        assertEquals("incorrect vertex count", 3, desc.vertexes().size());
+        assertEquals("incorrect edge count", 2, desc.edges().size());
+    }
+
+    @Test(expected = IllegalArgumentException.class)
+    public void missingVertex() {
+        new DefaultGraphDescription(4321L, ImmutableSet.of(DEV1, DEV3),
+                                    ImmutableSet.of(L1, L2));
+    }
+
+}
\ No newline at end of file
diff --git a/core/api/src/test/java/org/onlab/onos/net/topology/DefaultTopologyEdgeTest.java b/core/api/src/test/java/org/onlab/onos/net/topology/DefaultTopologyEdgeTest.java
new file mode 100644
index 0000000..6c3c112
--- /dev/null
+++ b/core/api/src/test/java/org/onlab/onos/net/topology/DefaultTopologyEdgeTest.java
@@ -0,0 +1,54 @@
+package org.onlab.onos.net.topology;
+
+import com.google.common.testing.EqualsTester;
+import org.junit.Test;
+import org.onlab.onos.net.ConnectPoint;
+import org.onlab.onos.net.DefaultLink;
+import org.onlab.onos.net.DeviceId;
+import org.onlab.onos.net.Link;
+import org.onlab.onos.net.PortNumber;
+import org.onlab.onos.net.provider.ProviderId;
+
+import static org.junit.Assert.assertEquals;
+import static org.onlab.onos.net.DeviceId.deviceId;
+import static org.onlab.onos.net.PortNumber.portNumber;
+
+/**
+ * Tests of the topology graph edge.
+ */
+public class DefaultTopologyEdgeTest {
+
+    static final DeviceId D1 = deviceId("1");
+    static final DeviceId D2 = deviceId("2");
+    static final PortNumber P1 = portNumber(1);
+    static final PortNumber P2 = portNumber(2);
+
+    static final ConnectPoint CP1 = new ConnectPoint(D1, P1);
+    static final ConnectPoint CP2 = new ConnectPoint(D2, P1);
+    static final ConnectPoint CP3 = new ConnectPoint(D2, P1);
+    static final ConnectPoint CP4 = new ConnectPoint(D1, P2);
+
+    static final DefaultTopologyVertex V1 = new DefaultTopologyVertex(D1);
+    static final DefaultTopologyVertex V2 = new DefaultTopologyVertex(D2);
+
+    static final ProviderId PID = new ProviderId("foo", "bar");
+
+    static final Link L1 = new DefaultLink(PID, CP1, CP2, Link.Type.INDIRECT);
+    static final Link L2 = new DefaultLink(PID, CP3, CP4, Link.Type.INDIRECT);
+
+    @Test
+    public void basics() {
+        DefaultTopologyEdge e = new DefaultTopologyEdge(V1, V2, L1);
+        assertEquals("incorrect src", V1, e.src());
+        assertEquals("incorrect dst", V2, e.dst());
+        assertEquals("incorrect link", L1, e.link());
+
+        new EqualsTester()
+                .addEqualityGroup(new DefaultTopologyEdge(V1, V2, L1),
+                                  new DefaultTopologyEdge(V1, V2, L1))
+                .addEqualityGroup(new DefaultTopologyEdge(V2, V1, L2),
+                                  new DefaultTopologyEdge(V2, V1, L2))
+                .testEquals();
+    }
+
+}
\ No newline at end of file
diff --git a/core/api/src/test/java/org/onlab/onos/net/topology/DefaultTopologyVertexTest.java b/core/api/src/test/java/org/onlab/onos/net/topology/DefaultTopologyVertexTest.java
new file mode 100644
index 0000000..1284624
--- /dev/null
+++ b/core/api/src/test/java/org/onlab/onos/net/topology/DefaultTopologyVertexTest.java
@@ -0,0 +1,30 @@
+package org.onlab.onos.net.topology;
+
+import com.google.common.testing.EqualsTester;
+import org.junit.Test;
+import org.onlab.onos.net.DeviceId;
+
+import static org.junit.Assert.*;
+import static org.onlab.onos.net.DeviceId.deviceId;
+
+/**
+ * Tests of the topology graph vertex.
+ */
+public class DefaultTopologyVertexTest {
+
+    private static final DeviceId D1 = deviceId("1");
+    private static final DeviceId D2 = deviceId("2");
+
+    @Test
+    public void basics() {
+        DefaultTopologyVertex v = new DefaultTopologyVertex(D1);
+        assertEquals("incorrect device id", D1, v.deviceId());
+
+        new EqualsTester()
+                .addEqualityGroup(new DefaultTopologyVertex(D1),
+                                  new DefaultTopologyVertex(D1))
+                .addEqualityGroup(new DefaultTopologyVertex(D2),
+                                  new DefaultTopologyVertex(D2)).testEquals();
+    }
+
+}
\ No newline at end of file
