diff --git a/protocols/pcep/pcepio/src/test/java/org/onosproject/pcepio/protocol/PcepOpenMsgTest.java b/protocols/pcep/pcepio/src/test/java/org/onosproject/pcepio/protocol/PcepOpenMsgTest.java
index 6e0a059..eea8a26 100644
--- a/protocols/pcep/pcepio/src/test/java/org/onosproject/pcepio/protocol/PcepOpenMsgTest.java
+++ b/protocols/pcep/pcepio/src/test/java/org/onosproject/pcepio/protocol/PcepOpenMsgTest.java
@@ -18,6 +18,7 @@
 import org.jboss.netty.buffer.ChannelBuffer;
 import org.jboss.netty.buffer.ChannelBuffers;
 import org.junit.Test;
+import org.onosproject.pcepio.exceptions.PcepOutOfBoundMessageException;
 import org.onosproject.pcepio.exceptions.PcepParseException;
 
 import static org.hamcrest.MatcherAssert.assertThat;
@@ -33,7 +34,7 @@
      * PCECC-CAPABILITY-TLV in Pcep Open message.
      */
     @Test
-    public void openMessageTest1() throws PcepParseException {
+    public void openMessageTest1() throws PcepParseException, PcepOutOfBoundMessageException {
 
         byte[] openMsg = new byte[] {0x20, 0x01, 0x00, 0x24, 0x01, 0x10, 0x00, 0x20, 0x20, 0x1e, 0x78, (byte) 0xbd,
                 0x00, 0x10, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0f, //STATEFUL-PCE-CAPABILITY
@@ -67,7 +68,7 @@
      * This test case checks open object with STATEFUL-PCE-CAPABILITY-TLV in Pcep Open message.
      */
     @Test
-    public void openMessageTest2() throws PcepParseException {
+    public void openMessageTest2() throws PcepParseException, PcepOutOfBoundMessageException {
 
         byte[] openMsg = new byte[] {0x20, 0x01, 0x00, 0x14, // common header
                 0x01, 0x10, 0x00, 0x10, // common object header
@@ -99,7 +100,7 @@
      * This test case checks open object with GmplsCapability tlv in Pcep Open message.
      */
     @Test
-    public void openMessageTest3() throws PcepParseException {
+    public void openMessageTest3() throws PcepParseException, PcepOutOfBoundMessageException {
 
         byte[] openMsg = new byte[] {0x20, 0x01, 0x00, 0x14, // common header
                 0x01, 0x10, 0x00, 0x10, // common object header
@@ -133,7 +134,7 @@
      * This test case checks open object with StatefulLspDbVer Tlv in Pcep Open message.
      */
     @Test
-    public void openMessageTest4() throws PcepParseException {
+    public void openMessageTest4() throws PcepParseException, PcepOutOfBoundMessageException {
 
         byte[] openMsg = new byte[] {0x20, 0x01, 0x00, 0x18,
                 0x01, 0x10, 0x00, 0x14, 0x20, 0x1e, 0x78, 0x20,
@@ -165,7 +166,7 @@
      * This test case checks open object with no tlv's in Pcep Open message.
      */
     @Test
-    public void openMessageTest5() throws PcepParseException {
+    public void openMessageTest5() throws PcepParseException, PcepOutOfBoundMessageException {
 
         byte[] openMsg = new byte[] {0x20, 0x01, 0x00, 0x0C,
                 0x01, 0x10, 0x00, 0x08, 0x20, 0x1e, 0x78, (byte) 0xbd }; // no Tlvs in open messsage
@@ -197,7 +198,7 @@
      * with I bit set in Pcep Open message.
      */
     @Test
-    public void openMessageTest6() throws PcepParseException {
+    public void openMessageTest6() throws PcepParseException, PcepOutOfBoundMessageException {
 
         byte[] openMsg = new byte[] {0x20, 0x01, 0x00, 0x24, 0x01, 0x11, 0x00, 0x20, //p bit not set & i bit set
                 0x20, 0x1e, 0x78, (byte) 0xbd,
@@ -233,7 +234,7 @@
      * with P bit set in Pcep Open message.
      */
     @Test
-    public void openMessageTest7() throws PcepParseException {
+    public void openMessageTest7() throws PcepParseException, PcepOutOfBoundMessageException {
 
         byte[] openMsg = new byte[] {0x20, 0x01, 0x00, 0x24, 0x01, 0x12, 0x00, 0x20, //p bit set & i bit not set
                 0x20, 0x1e, 0x78, (byte) 0xbd,
@@ -269,7 +270,7 @@
      * with P & I bits set in Pcep Open message.
      */
     @Test
-    public void openMessageTest8() throws PcepParseException {
+    public void openMessageTest8() throws PcepParseException, PcepOutOfBoundMessageException {
 
         /* OPEN OBJECT (STATEFUL-PCE-CAPABILITY, GMPLS-CAPABILITY-TLV, PCECC-CAPABILITY-TLV)
         with p bit set & i bit set.
@@ -308,7 +309,7 @@
      * with P & I bits set and invalid session id in Pcep Open message.
      */
     @Test
-    public void openMessageTest9() throws PcepParseException {
+    public void openMessageTest9() throws PcepParseException, PcepOutOfBoundMessageException {
 
         byte[] openMsg = new byte[] {0x20, 0x01, 0x00, 0x24, 0x01, 0x13, 0x00, 0x20, //p bit set & i bit set
                 0x20, 0x1e, 0x78, 0x00, //invalid sessionID
@@ -345,7 +346,7 @@
      * in Pcep Open message.
      */
     @Test
-    public void openMessageTest10() throws PcepParseException {
+    public void openMessageTest10() throws PcepParseException, PcepOutOfBoundMessageException {
 
         byte[] openMsg = new byte[] {0x20, 0x01, 0x00, 0x1C, // common header
                 0x01, 0x10, 0x00, 0x18, // common object header
@@ -382,7 +383,7 @@
      * PCECC-CAPABILITY-TLV, TED Capability TLV in Pcep Open message.
      */
     @Test
-    public void openMessageTest11() throws PcepParseException {
+    public void openMessageTest11() throws PcepParseException, PcepOutOfBoundMessageException {
 
         byte[] openMsg = new byte[] {0x20, 0x01, 0x00, 0x2C, // common header
                 0x01, 0x10, 0x00, 0x28, // common object header
@@ -390,7 +391,7 @@
                 0x00, 0x10, 0x00, 0x04, // STATEFUL-PCE-CAPABILITY
                 0x00, 0x00, 0x00, 0x05, 0x00, 0x0E, 0x00, 0x04, // GMPLS-CAPABILITY-TLV
                 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x04, // PCECC-CAPABILITY-TLV
-                0x00, 0x00, 0x00, 0x03, 0x00, (byte) 0x84, 0x00, 0x04, // TED Capability TLV
+                0x00, 0x00, 0x00, 0x03, (byte) 0xFF, (byte) 0x00, 0x00, 0x04, // LS Capability TLV
                 0x00, 0x00, 0x00, 0x00 };
 
         byte[] testOpenMsg = {0};
@@ -412,7 +413,6 @@
         buf.readBytes(testOpenMsg, 0, readLen);
 
         assertThat(testOpenMsg, is(openMsg));
-
     }
 
     /**
@@ -420,7 +420,7 @@
      * PCECC-CAPABILITY-TLV in Pcep Open message.
      */
     @Test
-    public void openMessageTest12() throws PcepParseException {
+    public void openMessageTest12() throws PcepParseException, PcepOutOfBoundMessageException {
 
         byte[] openMsg = new byte[] {0x20, 0x01, 0x00, 0x24, // common header
                 0x01, 0x10, 0x00, 0x20, // common object header
@@ -457,7 +457,7 @@
      * in Pcep Open message.
      */
     @Test
-    public void openMessageTest13() throws PcepParseException {
+    public void openMessageTest13() throws PcepParseException, PcepOutOfBoundMessageException {
 
         byte[] openMsg = new byte[] {0x20, 0x01, 0x00, 0x1c, // common header
                 0x01, 0x10, 0x00, 0x18, // common object header
@@ -493,7 +493,7 @@
      * This test case checks open object with STATEFUL-PCE-CAPABILITY in Pcep Open message.
      */
     @Test
-    public void openMessageTest14() throws PcepParseException {
+    public void openMessageTest14() throws PcepParseException, PcepOutOfBoundMessageException {
 
         byte[] openMsg = new byte[] {0x20, 0x01, 0x00, 0x14, // common header
                 0x01, 0x10, 0x00, 0x10, // common object header
@@ -527,7 +527,7 @@
      * This test case checks open object with no tlv Pcep Open message.
      */
     @Test
-    public void openMessageTest15() throws PcepParseException {
+    public void openMessageTest15() throws PcepParseException, PcepOutOfBoundMessageException {
 
         byte[] openMsg = new byte[] {0x20, 0x01, 0x00, 0x0c, // common header
                 0x01, 0x10, 0x00, 0x08, // common object header
