diff --git a/utils/jdvue/src/test/java/org/onlab/jdvue/CatalogTest.java b/utils/jdvue/src/test/java/org/onlab/jdvue/CatalogTest.java
new file mode 100644
index 0000000..99d2208
--- /dev/null
+++ b/utils/jdvue/src/test/java/org/onlab/jdvue/CatalogTest.java
@@ -0,0 +1,43 @@
+package org.onlab.jdvue;
+
+import org.junit.Test;
+import org.onlab.jdvue.Catalog;
+import org.onlab.jdvue.JavaPackage;
+import org.onlab.jdvue.JavaSource;
+
+import java.io.IOException;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+/**
+ * Unit test for the source catalog.
+ *
+ * @author Thomas Vachuska
+ */
+public class CatalogTest {
+
+    @Test
+    public void basics() throws IOException {
+        Catalog cat = new Catalog();
+        cat.load("src/test/resources/catalog.db");
+        cat.analyze();
+
+        assertEquals("incorrect package count", 12, cat.getPackages().size());
+        assertEquals("incorrect source count", 14, cat.getSources().size());
+
+        JavaPackage pkg = cat.getPackage("k");
+        assertNotNull("package should be found", pkg);
+
+        JavaSource src = cat.getSource("k.K");
+        assertNotNull("source should be found", src);
+
+        assertEquals("incorrect package source count", 1, pkg.getSources().size());
+        assertEquals("incorrect package dependency count", 1, pkg.getDependencies().size());
+        assertEquals("incorrect package cycle count", 3, cat.getPackageCycles(pkg).size());
+
+        assertEquals("incorrect segment count", 11, cat.getCycleSegments().size());
+        assertEquals("incorrect cycle count", 5, cat.getCycles().size());
+    }
+
+}
diff --git a/utils/jdvue/src/test/java/org/onlab/jdvue/DependencyCycleTest.java b/utils/jdvue/src/test/java/org/onlab/jdvue/DependencyCycleTest.java
new file mode 100644
index 0000000..a0a7c7c
--- /dev/null
+++ b/utils/jdvue/src/test/java/org/onlab/jdvue/DependencyCycleTest.java
@@ -0,0 +1,47 @@
+package org.onlab.jdvue;
+
+import org.junit.Test;
+import org.onlab.jdvue.DependencyCycle;
+import org.onlab.jdvue.JavaPackage;
+
+import java.util.Arrays;
+
+import static org.junit.Assert.*;
+
+/**
+ * Unit test for the dependency cycle entity.
+ *
+ * @author Thomas Vachuska
+ */
+public class DependencyCycleTest {
+
+    @Test
+    public void normalize() {
+        JavaPackage x = new JavaPackage("x");
+        JavaPackage y = new JavaPackage("y");
+        JavaPackage z = new JavaPackage("z");
+
+        DependencyCycle a = new DependencyCycle(Arrays.asList(new JavaPackage[] {x, y, z}), x);
+        DependencyCycle b = new DependencyCycle(Arrays.asList(new JavaPackage[] {y, z, x}), y);
+        DependencyCycle c = new DependencyCycle(Arrays.asList(new JavaPackage[] {z, x, y}), z);
+
+        assertEquals("incorrect normalization", a, b);
+        assertEquals("incorrect normalization", a, c);
+    }
+
+    @Test
+    public void testToString() {
+        JavaPackage x = new JavaPackage("x");
+        JavaPackage y = new JavaPackage("y");
+        JavaPackage z = new JavaPackage("z");
+
+        DependencyCycle a = new DependencyCycle(Arrays.asList(new JavaPackage[] {x, y, z}), x);
+        assertEquals("incorrect toString", "[x, y, z]", a.toShortString());
+        assertEquals("incorrect toString",
+                     "DependencyCycle{cycle=[" +
+                             "JavaPackage{name=x, sources=0, dependencies=0}, " +
+                             "JavaPackage{name=y, sources=0, dependencies=0}, " +
+                             "JavaPackage{name=z, sources=0, dependencies=0}]}",
+                     a.toString());
+    }
+}
diff --git a/utils/jdvue/src/test/java/org/onlab/jdvue/DependencyTest.java b/utils/jdvue/src/test/java/org/onlab/jdvue/DependencyTest.java
new file mode 100644
index 0000000..4dfe961
--- /dev/null
+++ b/utils/jdvue/src/test/java/org/onlab/jdvue/DependencyTest.java
@@ -0,0 +1,29 @@
+package org.onlab.jdvue;
+
+import com.google.common.testing.EqualsTester;
+import org.junit.Test;
+import org.onlab.jdvue.Dependency;
+import org.onlab.jdvue.JavaPackage;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+
+/**
+ * Unit test for the dependency entity.
+ *
+ * @author Thomas Vachuska
+ */
+public class DependencyTest {
+
+    @Test
+    public void basics() {
+        JavaPackage x = new JavaPackage("x");
+        JavaPackage y = new JavaPackage("y");
+
+        new EqualsTester()
+                .addEqualityGroup(new Dependency(x, y), new Dependency(x, y))
+                .addEqualityGroup(new Dependency(y, x), new Dependency(y, x))
+                .testEquals();
+    }
+
+}
diff --git a/utils/jdvue/src/test/java/org/onlab/jdvue/DependencyViewerTest.java b/utils/jdvue/src/test/java/org/onlab/jdvue/DependencyViewerTest.java
new file mode 100644
index 0000000..cdac0c2
--- /dev/null
+++ b/utils/jdvue/src/test/java/org/onlab/jdvue/DependencyViewerTest.java
@@ -0,0 +1,31 @@
+package org.onlab.jdvue;
+
+import org.junit.Test;
+import org.onlab.jdvue.DependencyViewer;
+
+import java.io.FileInputStream;
+import java.io.IOException;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotEquals;
+import static org.onlab.jdvue.DependencyViewer.slurp;
+
+/**
+ * Unit test for the dependency viewer.
+ *
+ * @author Thomas Vachuska
+ */
+public class DependencyViewerTest {
+
+    @Test
+    public void basics() throws IOException {
+        DependencyViewer.main(new String[]{"src/test/resources/catalog"});
+
+        String expected = slurp(new FileInputStream("src/test/resources/expected.html"));
+        String actual = slurp(new FileInputStream("src/test/resources/catalog.html"));
+
+        // FIXME: add more manageable assertions here
+//        assertEquals("incorrect html", expected, actual);
+    }
+
+}
