Merge "Fixed vendor specific tlv's payload parser/serializer"
authorDana Kutenicsova <dkutenic@cisco.com>
Fri, 27 Jun 2014 08:55:26 +0000 (08:55 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Fri, 27 Jun 2014 08:55:26 +0000 (08:55 +0000)
pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/tlv/AbstractVendorSpecificTlvParser.java
pcep/impl/src/test/java/org/opendaylight/protocol/pcep/impl/PCEPTlvParserTest.java

index 2b85ef625e5bd3e8d57c1a5412968d4e1fe2554a..245d2c34c7a023ac186e2188680d4f4fa49a643a 100644 (file)
@@ -8,15 +8,12 @@
 package org.opendaylight.protocol.pcep.impl.tlv;
 
 import com.google.common.base.Preconditions;
-
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
-
 import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
 import org.opendaylight.protocol.pcep.spi.TlvParser;
 import org.opendaylight.protocol.pcep.spi.TlvSerializer;
 import org.opendaylight.protocol.pcep.spi.TlvUtil;
-import org.opendaylight.protocol.util.ByteArray;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.iana.rev130816.EnterpriseNumber;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Tlv;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.vs.tlv.VsTlv;
@@ -36,7 +33,7 @@ public abstract class AbstractVendorSpecificTlvParser implements TlvParser, TlvS
         final ByteBuf body = Unpooled.buffer();
         if (vsTlv.getEnterpriseNumber().getValue() == getEnterpriseNumber()) {
             body.writeInt(vsTlv.getEnterpriseNumber().getValue().intValue());
-            body.writeBytes(serializeVendorPayload(vsTlv.getVendorPayload()));
+            serializeVendorPayload(vsTlv.getVendorPayload(), body);
             TlvUtil.formatTlv(TYPE, body, buffer);
         }
     }
@@ -46,15 +43,14 @@ public abstract class AbstractVendorSpecificTlvParser implements TlvParser, TlvS
         if (buffer == null) {
             return null;
         }
-        VsTlvBuilder vsTlvBuider = new VsTlvBuilder();
-        long en = buffer.readUnsignedInt();
+        final VsTlvBuilder vsTlvBuider = new VsTlvBuilder();
+        final long en = buffer.readUnsignedInt();
         if (en == getEnterpriseNumber()) {
             vsTlvBuider.setEnterpriseNumber(new EnterpriseNumber(getEnterpriseNumber()));
             VendorPayload vendorPayload = null;
             if (buffer.isReadable()) {
-                ByteBuf payloadBytes = buffer.slice();
-                // FIXME: change this to ByteBuf
-                vendorPayload = parseVendorPayload(ByteArray.getAllBytes(payloadBytes));
+                final ByteBuf payloadBytes = buffer.slice();
+                vendorPayload = parseVendorPayload(payloadBytes);
                 if (vendorPayload != null) {
                     vsTlvBuider.setVendorPayload(vendorPayload);
                 }
@@ -63,13 +59,9 @@ public abstract class AbstractVendorSpecificTlvParser implements TlvParser, TlvS
         return vsTlvBuider.build();
     }
 
-    protected abstract byte[] serializeVendorPayload(VendorPayload payload);
+    protected abstract void serializeVendorPayload(final VendorPayload payload, final ByteBuf buffer);
 
     protected abstract long getEnterpriseNumber();
 
-    protected abstract VendorPayload parseVendorPayload(byte[] payloadBytes) throws PCEPDeserializerException;
-
-    protected static int getPadding(final int length, final int padding) {
-        return (padding - (length % padding)) % padding;
-    }
+    protected abstract VendorPayload parseVendorPayload(final ByteBuf payloadBytes) throws PCEPDeserializerException;
 }
index f9e1adc5769a0633044c5975071feae6fe703451..5d717d99b232a1251adae2917dee7799d07ba4c2 100644 (file)
@@ -11,12 +11,9 @@ import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 
 import com.google.common.collect.Lists;
-
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
-
 import java.util.List;
-
 import org.junit.Test;
 import org.opendaylight.protocol.pcep.impl.tlv.AbstractVendorSpecificTlvParser;
 import org.opendaylight.protocol.pcep.impl.tlv.NoPathVectorTlvParser;
@@ -58,12 +55,12 @@ public class PCEPTlvParserTest {
     private final AbstractVendorSpecificTlvParser vsParser = new AbstractVendorSpecificTlvParser() {
 
         @Override
-        protected byte[] serializeVendorPayload(VendorPayload payload) {
-            return new byte[] { 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05 };
+        protected void serializeVendorPayload(final VendorPayload payload, final ByteBuf buffer) {
+            buffer.writeBytes(new byte[] { 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05 });
         }
 
         @Override
-        protected VendorPayload parseVendorPayload(byte[] payloadBytes) throws PCEPDeserializerException {
+        protected VendorPayload parseVendorPayload(final ByteBuf payloadBytes) throws PCEPDeserializerException {
             return PCEPTlvParserTest.this.vp;
         }