diff --git a/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingIcmpHandlerTest.java b/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingIcmpHandlerTest.java
index ece96ee..d5227c3 100644
--- a/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingIcmpHandlerTest.java
+++ b/apps/openstacknetworking/app/src/test/java/org/onosproject/openstacknetworking/impl/OpenstackRoutingIcmpHandlerTest.java
@@ -25,6 +25,7 @@
 import org.onlab.packet.DeserializationException;
 import org.onlab.packet.Ethernet;
 import org.onlab.packet.ICMP;
+import org.onlab.packet.ICMPEcho;
 import org.onlab.packet.IPv4;
 import org.onlab.packet.IpAddress;
 import org.onlab.packet.MacAddress;
@@ -197,8 +198,9 @@
 
     private void validateIcmpRespFromExternal(IPv4 ipPacket) {
         ICMP icmpResp = (ICMP) ipPacket.getPayload();
-        short icmpId = ByteBuffer.wrap(icmpResp.serialize(), 4, 2).getShort();
-        short seqNum = ByteBuffer.wrap(icmpResp.serialize(), 6, 2).getShort();
+        ICMPEcho icmpEchoResp = (ICMPEcho) icmpResp.getPayload();
+        short icmpId = icmpEchoResp.getIdentifier();
+        short seqNum = icmpEchoResp.getSequenceNum();
 
         assertEquals(icmpResp.getIcmpType(), TYPE_ECHO_REPLY);
         assertEquals(icmpResp.getIcmpCode(), CODE_ECHO_REPLY);
@@ -210,9 +212,9 @@
 
     private void validateIcmpReqToExternal(IPv4 ipPacket) {
         ICMP icmpReq = (ICMP) ipPacket.getPayload();
-        short icmpId = ByteBuffer.wrap(icmpReq.serialize(), 4, 2).getShort();
-        short seqNum = ByteBuffer.wrap(icmpReq.serialize(), 6, 2).getShort();
-
+        ICMPEcho icmpEchoReq = (ICMPEcho) icmpReq.getPayload();
+        short icmpId = icmpEchoReq.getIdentifier();
+        short seqNum = icmpEchoReq.getSequenceNum();
 
         assertEquals(icmpReq.getIcmpType(), TYPE_ECHO_REQUEST);
         assertEquals(icmpReq.getIcmpCode(), CODE_ECHO_REQUEST);
@@ -224,8 +226,9 @@
     }
     private void validateIcmpReqToGw(IPv4 ipPacket) {
         ICMP icmpReq = (ICMP) ipPacket.getPayload();
-        short icmpId = ByteBuffer.wrap(icmpReq.serialize(), 4, 2).getShort();
-        short seqNum = ByteBuffer.wrap(icmpReq.serialize(), 6, 2).getShort();
+        ICMPEcho icmpEchoReq = (ICMPEcho) icmpReq.getPayload();
+        short icmpId = icmpEchoReq.getIdentifier();
+        short seqNum = icmpEchoReq.getSequenceNum();
 
         assertEquals(icmpReq.getIcmpType(), TYPE_ECHO_REPLY);
         assertEquals(icmpReq.getIcmpCode(), CODE_ECHO_REPLY);
@@ -240,20 +243,20 @@
                                                 IpAddress dstIp,
                                                 MacAddress dstMac, byte icmpType) {
         try {
-            IcmpEcho icmp = new IcmpEcho();
-            if (icmpType == TYPE_ECHO_REQUEST) {
-                icmp.setIcmpType(TYPE_ECHO_REQUEST)
-                        .setIcmpCode(CODE_ECHO_REQUEST);
-            } else {
-                icmp.setIcmpType(TYPE_ECHO_REPLY)
-                        .setIcmpCode(CODE_ECHO_REPLY);
-            }
-
-            icmp.setChecksum((short) 0)
-                    .setIdentifier((short) 0)
+            ICMPEcho icmpEcho = new ICMPEcho();
+            icmpEcho.setIdentifier((short) 0)
                     .setSequenceNum((short) 0);
+            ByteBuffer byteBufferIcmpEcho = ByteBuffer.wrap(icmpEcho.serialize());
 
-            ByteBuffer bb = ByteBuffer.wrap(icmp.serialize());
+            ICMP icmp = new ICMP();
+            icmp.setIcmpType(icmpType)
+                    .setIcmpCode(icmpType == TYPE_ECHO_REQUEST ? CODE_ECHO_REQUEST : CODE_ECHO_REPLY)
+                    .setChecksum((short) 0);
+
+            icmp.setPayload(ICMPEcho.deserializer().deserialize(byteBufferIcmpEcho.array(),
+                    0, ICMPEcho.ICMP_ECHO_HEADER_LENGTH));
+
+            ByteBuffer byteBufferIcmp = ByteBuffer.wrap(icmp.serialize());
 
             IPv4 iPacket = new IPv4();
             iPacket.setDestinationAddress(dstIp.toString());
@@ -263,7 +266,7 @@
             iPacket.setDiffServ((byte) 0);
             iPacket.setProtocol(IPv4.PROTOCOL_ICMP);
 
-            iPacket.setPayload(ICMP.deserializer().deserialize(bb.array(), 0, 8));
+            iPacket.setPayload(ICMP.deserializer().deserialize(byteBufferIcmp.array(), 0, 8));
 
             Ethernet ethPacket = new Ethernet();
 
