diff --git a/core/api/src/test/java/org/onosproject/net/ConnectPointTest.java b/core/api/src/test/java/org/onosproject/net/ConnectPointTest.java
index 9580481..2aecabd 100644
--- a/core/api/src/test/java/org/onosproject/net/ConnectPointTest.java
+++ b/core/api/src/test/java/org/onosproject/net/ConnectPointTest.java
@@ -18,12 +18,14 @@
 import com.google.common.testing.EqualsTester;
 import org.junit.Test;
 
+import static junit.framework.TestCase.fail;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
 import static org.onosproject.net.DeviceId.deviceId;
 import static org.onosproject.net.PortNumber.portNumber;
 
 /**
- * Test of the connetion point entity.
+ * Test of the connection point entity.
  */
 public class ConnectPointTest {
 
@@ -39,7 +41,6 @@
         assertEquals("incorrect element id", P2, p.port());
     }
 
-
     @Test
     public void testEquality() {
         new EqualsTester()
@@ -48,4 +49,62 @@
                 .addEqualityGroup(new ConnectPoint(DID2, P1), new ConnectPoint(DID2, P1))
                 .testEquals();
     }
+
+    @Test
+    public void testParseDeviceConnectPoint() {
+        String cp = "of:0011223344556677/1";
+
+        ConnectPoint connectPoint = ConnectPoint.deviceConnectPoint(cp);
+        assertEquals("of:0011223344556677", connectPoint.deviceId().toString());
+        assertEquals("1", connectPoint.port().toString());
+
+        expectDeviceParseException("");
+        expectDeviceParseException("1/");
+        expectDeviceParseException("1/1/1");
+        expectDeviceParseException("of:0011223344556677/word");
+    }
+
+    /**
+     * Parse a device connect point and expect an exception to be thrown.
+     *
+     * @param string string to parse
+     */
+    private static void expectDeviceParseException(String string) {
+        try {
+            ConnectPoint.deviceConnectPoint(string);
+            fail("Expected exception was not thrown");
+        } catch (Exception e) {
+            assertTrue(true);
+        }
+    }
+
+    @Test
+    public void testParseHostConnectPoint() {
+        String cp = "16:3A:BD:6E:31:E4/-1/1";
+
+        ConnectPoint connectPoint = ConnectPoint.hostConnectPoint(cp);
+        assertEquals("16:3A:BD:6E:31:E4/-1", connectPoint.hostId().toString());
+        assertEquals("1", connectPoint.port().toString());
+
+        expectHostParseException("");
+        expectHostParseException("1/");
+        expectHostParseException("1/1");
+        expectHostParseException("1/1/1/1");
+        expectHostParseException("16:3A:BD:6E:31:E4/word/1");
+        expectHostParseException("16:3A:BD:6E:31:E4/1/word");
+    }
+
+    /**
+     * Parse a host connect point and expect an exception to be thrown.
+     *
+     * @param string string to parse
+     */
+    private static void expectHostParseException(String string) {
+        try {
+            ConnectPoint.hostConnectPoint(string);
+            fail("Expected exception was not thrown");
+        } catch (Exception e) {
+            assertTrue(true);
+        }
+    }
 }
