diff --git a/core/api/src/test/java/org/onosproject/ui/model/topo/UiClusterMemberTest.java b/core/api/src/test/java/org/onosproject/ui/model/topo/UiClusterMemberTest.java
index db35b33..e7c75a8 100644
--- a/core/api/src/test/java/org/onosproject/ui/model/topo/UiClusterMemberTest.java
+++ b/core/api/src/test/java/org/onosproject/ui/model/topo/UiClusterMemberTest.java
@@ -16,6 +16,7 @@
 
 package org.onosproject.ui.model.topo;
 
+import org.junit.Before;
 import org.junit.Test;
 import org.onlab.packet.IpAddress;
 import org.onosproject.cluster.ControllerNode;
@@ -36,12 +37,18 @@
     private static final ControllerNode CNODE_1 =
             new DefaultControllerNode(NODE_ID, NODE_IP);
 
+    private UiTopology topo;
     private UiClusterMember member;
 
+    @Before
+    public void setUp() {
+        topo = new UiTopology();
+    }
+
     @Test
     public void basic() {
         title("basic");
-        member = new UiClusterMember(CNODE_1);
+        member = new UiClusterMember(topo, CNODE_1);
         print(member);
 
         assertEquals("wrong id", NODE_ID, member.id());
diff --git a/core/api/src/test/java/org/onosproject/ui/model/topo/UiLinkIdTest.java b/core/api/src/test/java/org/onosproject/ui/model/topo/UiLinkIdTest.java
new file mode 100644
index 0000000..51389d1
--- /dev/null
+++ b/core/api/src/test/java/org/onosproject/ui/model/topo/UiLinkIdTest.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.ui.model.topo;
+
+import org.junit.Test;
+import org.onosproject.net.ConnectPoint;
+import org.onosproject.net.DefaultLink;
+import org.onosproject.net.DeviceId;
+import org.onosproject.net.Link;
+import org.onosproject.net.PortNumber;
+import org.onosproject.net.provider.ProviderId;
+import org.onosproject.ui.model.AbstractUiModelTest;
+
+import static org.junit.Assert.assertEquals;
+import static org.onosproject.net.DeviceId.deviceId;
+import static org.onosproject.net.PortNumber.portNumber;
+
+/**
+ * Unit tests for {@link UiLinkId}.
+ */
+public class UiLinkIdTest extends AbstractUiModelTest {
+
+
+    private static final ProviderId PROVIDER_ID = ProviderId.NONE;
+
+    private static final DeviceId DEV_X = deviceId("device-X");
+    private static final DeviceId DEV_Y = deviceId("device-Y");
+    private static final PortNumber P1 = portNumber(1);
+    private static final PortNumber P2 = portNumber(2);
+
+    private static final ConnectPoint CP_X = new ConnectPoint(DEV_X, P1);
+    private static final ConnectPoint CP_Y = new ConnectPoint(DEV_Y, P2);
+
+    private static final Link LINK_X_TO_Y = DefaultLink.builder()
+            .providerId(ProviderId.NONE)
+            .src(CP_X)
+            .dst(CP_Y)
+            .type(Link.Type.DIRECT)
+            .build();
+
+    private static final Link LINK_Y_TO_X = DefaultLink.builder()
+            .providerId(ProviderId.NONE)
+            .src(CP_Y)
+            .dst(CP_X)
+            .type(Link.Type.DIRECT)
+            .build();
+
+
+    @Test
+    public void canonical() {
+        title("canonical");
+        UiLinkId one = UiLinkId.uiLinkId(LINK_X_TO_Y);
+        UiLinkId two = UiLinkId.uiLinkId(LINK_Y_TO_X);
+        print("link one: %s", one);
+        print("link two: %s", two);
+        assertEquals("not equiv", one, two);
+    }
+}
diff --git a/core/api/src/test/java/org/onosproject/ui/model/topo/UiTopologyTest.java b/core/api/src/test/java/org/onosproject/ui/model/topo/UiTopologyTest.java
new file mode 100644
index 0000000..17d2de7
--- /dev/null
+++ b/core/api/src/test/java/org/onosproject/ui/model/topo/UiTopologyTest.java
@@ -0,0 +1,35 @@
+/*
+ * Copyright 2016-present Open Networking Laboratory
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onosproject.ui.model.topo;
+
+import org.junit.Test;
+import org.onosproject.ui.AbstractUiTest;
+
+/**
+ * Unit tests for {@link UiTopology}.
+ */
+public class UiTopologyTest extends AbstractUiTest {
+
+    private UiTopology topo;
+
+    @Test
+    public void basic() {
+        title("basic");
+        topo = new UiTopology();
+        print(topo);
+    }
+}
