diff --git a/incubator/api/src/test/java/org/onosproject/incubator/net/key/CommunityNameTest.java b/incubator/api/src/test/java/org/onosproject/incubator/net/key/CommunityNameTest.java
new file mode 100644
index 0000000..5da0f1d
--- /dev/null
+++ b/incubator/api/src/test/java/org/onosproject/incubator/net/key/CommunityNameTest.java
@@ -0,0 +1,62 @@
+/*
+ * Copyright 2016 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.incubator.net.key;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
+
+/**
+ * Test class for CommunityName.
+ */
+public class CommunityNameTest {
+
+    final String cName = "CommunityName";
+
+    /**
+     * Checks that the CommunityName class is immutable.
+     */
+    @Test
+    public void testImmutability() {
+        assertThatClassIsImmutable(CommunityName.class);
+    }
+
+    /**
+     * Checks the construction of a community name object with a null
+     * value passed into it.
+     */
+    @Test
+    public void testCommunityNameNull() {
+        CommunityName communityName = CommunityName.communityName(null);
+
+        assertNotNull("The CommunityName should not be null.", communityName);
+        assertNull("The name should be null.", communityName.name());
+    }
+
+    /**
+     * Checks the construction of a community name object with a non-null
+     * value passed into it.
+     */
+    @Test
+    public void testCommunityName() {
+        CommunityName communityName = CommunityName.communityName(cName);
+
+        assertNotNull("The CommunityName should not be null.", communityName);
+        assertEquals("The name should match the expected value.", cName, communityName.name());
+    }
+}
diff --git a/incubator/api/src/test/java/org/onosproject/incubator/net/key/DeviceKeyIdTest.java b/incubator/api/src/test/java/org/onosproject/incubator/net/key/DeviceKeyIdTest.java
new file mode 100644
index 0000000..5f6c477
--- /dev/null
+++ b/incubator/api/src/test/java/org/onosproject/incubator/net/key/DeviceKeyIdTest.java
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2016 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.incubator.net.key;
+
+import com.google.common.testing.EqualsTester;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.onlab.junit.ImmutableClassChecker.assertThatClassIsImmutable;
+
+/**
+ * Test class for DeviceDeyId.
+ */
+public class DeviceKeyIdTest {
+
+    final String deviceKeyIdValue1 = "DeviceKeyId1";
+    final String deviceKeyIdValue2 = "DeviceKeyId2";
+
+    /**
+     * Checks that the DeviceKeyId class is immutable.
+     */
+    @Test
+    public void testImmutability() {
+        assertThatClassIsImmutable(DeviceKeyId.class);
+    }
+
+    /**
+     * Checks the construction of a DeviceKeyId object throws an
+     * IllegalArgumentException when the input identifier is null.
+     */
+    @Test(expected = NullPointerException.class)
+    public void testConstructionUsingNullId() {
+        DeviceKeyId.deviceKeyId(null);
+    }
+
+    /**
+     * Checks the construction of a DeviceKeyId object.
+     */
+    @Test
+    public void testConstruction() {
+        DeviceKeyId deviceKeyId = DeviceKeyId.deviceKeyId(deviceKeyIdValue1);
+        assertNotNull("The deviceKeyId should not be null.", deviceKeyId);
+        assertEquals("The id should match the expected value.",
+                     deviceKeyIdValue1, deviceKeyId.id());
+    }
+
+    /**
+     * Tests the equality of device key identifiers.
+     */
+    @Test
+    public void testEquality() {
+        DeviceKeyId deviceKeyId1 = DeviceKeyId.deviceKeyId(deviceKeyIdValue1);
+        DeviceKeyId deviceKeyId2 = DeviceKeyId.deviceKeyId(deviceKeyIdValue1);
+        DeviceKeyId deviceKeyId3 = DeviceKeyId.deviceKeyId(deviceKeyIdValue2);
+
+        new EqualsTester().addEqualityGroup(deviceKeyId1, deviceKeyId2)
+                .addEqualityGroup(deviceKeyId3)
+                .testEquals();
+    }
+}
diff --git a/incubator/api/src/test/java/org/onosproject/incubator/net/key/DeviceKeyTest.java b/incubator/api/src/test/java/org/onosproject/incubator/net/key/DeviceKeyTest.java
new file mode 100644
index 0000000..5a5699b
--- /dev/null
+++ b/incubator/api/src/test/java/org/onosproject/incubator/net/key/DeviceKeyTest.java
@@ -0,0 +1,61 @@
+/*
+ * Copyright 2016 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.incubator.net.key;
+
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+/**
+ * Test class for DeviceKey.
+ */
+public class DeviceKeyTest {
+
+    final String deviceKeyIdValue = "DeviceKeyId1";
+    final String deviceKeyLabel = "DeviceKeyLabel";
+    final String deviceKeySnmpName = "DeviceKeySnmpName";
+
+    /**
+     * Checks the construction of a device key name with a null
+     * value passed into it. This will throw a NullPointerException.
+     */
+    @Test(expected = NullPointerException.class)
+    public void testCreateDeviceKeyUsingCommunityNameWithNull() {
+        DeviceKey deviceKey = DeviceKey.createDeviceKeyUsingCommunityName(null, null, null);
+    }
+
+    /**
+     * Checks the construction of a device key name with non-null
+     * values passed into it.
+     */
+    @Test
+    public void testCreateDeviceKeyUsingCommunityName() {
+        DeviceKeyId deviceKeyId = DeviceKeyId.deviceKeyId(deviceKeyIdValue);
+
+        DeviceKey deviceKey = DeviceKey.createDeviceKeyUsingCommunityName(deviceKeyId,
+                                                                          deviceKeyLabel, deviceKeySnmpName);
+        assertNotNull("The deviceKey should not be null.", deviceKey);
+        assertEquals("The deviceKeyId should match as expected", deviceKeyId, deviceKey.deviceKeyId());
+        assertEquals("The label should match as expected", deviceKeyLabel, deviceKey.label());
+        assertEquals("The type should match as expected", DeviceKey.Type.COMMUNITY_NAME, deviceKey.type());
+
+        CommunityName communityName = deviceKey.asCommunityName();
+        assertNotNull("The communityName should not be null.", communityName);
+        assertEquals("The name should match as expected", deviceKeySnmpName, communityName.name());
+    }
+}
