diff --git a/utils/misc/src/test/java/org/onlab/util/GroupedThreadFactoryTest.java b/utils/misc/src/test/java/org/onlab/util/GroupedThreadFactoryTest.java
new file mode 100644
index 0000000..5be1cda
--- /dev/null
+++ b/utils/misc/src/test/java/org/onlab/util/GroupedThreadFactoryTest.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2015 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.onlab.util;
+
+import org.junit.Test;
+import org.onlab.junit.TestTools;
+
+import static org.junit.Assert.*;
+
+/**
+ * Tests of the group thread factory.
+ */
+public class GroupedThreadFactoryTest {
+
+    @Test
+    public void basics() {
+        GroupedThreadFactory a = GroupedThreadFactory.groupedThreadFactory("foo");
+        GroupedThreadFactory b = GroupedThreadFactory.groupedThreadFactory("foo");
+        assertSame("factories should be same", a, b);
+
+        assertTrue("wrong toString", a.toString().contains("foo"));
+        Thread t = a.newThread(() -> TestTools.print("yo"));
+        assertSame("wrong group", a.threadGroup(), t.getThreadGroup());
+    }
+
+    @Test
+    public void hierarchical() {
+        GroupedThreadFactory a = GroupedThreadFactory.groupedThreadFactory("foo/bar");
+        GroupedThreadFactory b = GroupedThreadFactory.groupedThreadFactory("foo/goo");
+        GroupedThreadFactory p = GroupedThreadFactory.groupedThreadFactory("foo");
+
+        assertSame("groups should be same", p.threadGroup(), a.threadGroup().getParent());
+        assertSame("groups should be same", p.threadGroup(), b.threadGroup().getParent());
+
+        assertEquals("wrong name", "foo/bar", a.threadGroup().getName());
+        assertEquals("wrong name", "foo/goo", b.threadGroup().getName());
+        assertEquals("wrong name", "foo", p.threadGroup().getName());
+    }
+
+}
\ No newline at end of file
