Convert bits leaf into a set of leaves for extensibility
[bgpcep.git] / pcep / impl / src / test / java / org / opendaylight / protocol / pcep / impl / PCEPObjectParserTest.java
index f3db4f9bf12890d2c3ae16bd5412ec17680d2868..857948880ccd7f7f983640e88ba8bb3ac4a7866a 100644 (file)
@@ -11,407 +11,157 @@ import static org.junit.Assert.assertArrayEquals;
 import static org.junit.Assert.assertEquals;
 
 import java.io.IOException;
+import java.math.BigInteger;
 import java.util.List;
 
 import org.junit.Before;
 import org.junit.Test;
 import org.opendaylight.protocol.concepts.Ipv4Util;
 import org.opendaylight.protocol.concepts.Ipv6Util;
-import org.opendaylight.protocol.pcep.PCEPDeserializerException;
-import org.opendaylight.protocol.pcep.PCEPDocumentedException;
+import org.opendaylight.protocol.pcep.impl.message.ObjectHeaderImpl;
 import org.opendaylight.protocol.pcep.impl.object.PCEPBandwidthObjectParser;
+import org.opendaylight.protocol.pcep.impl.object.PCEPClassTypeObjectParser;
+import org.opendaylight.protocol.pcep.impl.object.PCEPCloseObjectParser;
 import org.opendaylight.protocol.pcep.impl.object.PCEPEndPointsObjectParser;
+import org.opendaylight.protocol.pcep.impl.object.PCEPErrorObjectParser;
+import org.opendaylight.protocol.pcep.impl.object.PCEPExcludeRouteObjectParser;
+import org.opendaylight.protocol.pcep.impl.object.PCEPExplicitRouteObjectParser;
+import org.opendaylight.protocol.pcep.impl.object.PCEPGlobalConstraintsObjectParser;
+import org.opendaylight.protocol.pcep.impl.object.PCEPIncludeRouteObjectParser;
 import org.opendaylight.protocol.pcep.impl.object.PCEPLoadBalancingObjectParser;
+import org.opendaylight.protocol.pcep.impl.object.PCEPLspObjectParser;
+import org.opendaylight.protocol.pcep.impl.object.PCEPLspaObjectParser;
 import org.opendaylight.protocol.pcep.impl.object.PCEPMetricObjectParser;
+import org.opendaylight.protocol.pcep.impl.object.PCEPNoPathObjectParser;
+import org.opendaylight.protocol.pcep.impl.object.PCEPNotificationObjectParser;
+import org.opendaylight.protocol.pcep.impl.object.PCEPObjectiveFunctionObjectParser;
+import org.opendaylight.protocol.pcep.impl.object.PCEPOpenObjectParser;
+import org.opendaylight.protocol.pcep.impl.object.PCEPPathKeyObjectParser;
+import org.opendaylight.protocol.pcep.impl.object.PCEPReportedRouteObjectParser;
+import org.opendaylight.protocol.pcep.impl.object.PCEPRequestParameterObjectParser;
+import org.opendaylight.protocol.pcep.impl.object.PCEPSrpObjectParser;
 import org.opendaylight.protocol.pcep.impl.object.PCEPSvecObjectParser;
-import org.opendaylight.protocol.pcep.spi.ObjectHeaderImpl;
+import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
 import org.opendaylight.protocol.pcep.spi.TlvHandlerRegistry;
-import org.opendaylight.protocol.pcep.spi.pojo.PCEPExtensionProviderContextImpl;
+import org.opendaylight.protocol.pcep.spi.pojo.ServiceLoaderPCEPExtensionProviderContext;
 import org.opendaylight.protocol.util.ByteArray;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.AsNumber;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ieee754.rev130819.Float32;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.network.concepts.rev131125.Bandwidth;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.ClassType;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.OfId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.OperationalStatus;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.PathKey;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.PceId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.PlspId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.ProtocolVersion;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.RequestId;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.object.address.family.Ipv4Builder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.object.address.family.Ipv6Builder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcinitiate.message.pcinitiate.message.requests.EndpointsBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.SvecBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.requests.segment.computation.p2p.LoadBalancingBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.requests.segment.computation.p2p.reported.route.BandwidthBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.svec.MetricBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.SrpIdNumber;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.bandwidth.object.BandwidthBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.classtype.object.ClassTypeBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.close.object.CCloseBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.address.family.Ipv4Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.address.family.Ipv6Builder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.object.EndpointsObjBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.exclude.route.object.XroBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.exclude.route.object.xro.Subobjects;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.exclude.route.object.xro.SubobjectsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.EroBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.gc.object.GcBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.include.route.object.IroBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.load.balancing.object.LoadBalancingBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.db.version.tlv.LspDbVersion;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.db.version.tlv.LspDbVersionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.error.code.tlv.LspErrorCode;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.error.code.tlv.LspErrorCodeBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.object.LspBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lspa.object.LspaBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.metric.object.MetricBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.notification.object.CNotificationBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.of.object.OfBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.OpenBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.order.tlv.OrderBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.overload.duration.tlv.OverloadDurationBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.path.key.object.PathKeyBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.path.key.object.path.key.PathKeys;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.path.key.object.path.key.PathKeysBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcep.error.object.ErrorObjectBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcep.error.object.error.object.TlvsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.replies.result.failure.NoPathBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.replies.result.failure.no.path.tlvs.NoPathVectorBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.predundancy.group.id.tlv.PredundancyGroupId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.predundancy.group.id.tlv.PredundancyGroupIdBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reported.route.object.RroBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.req.missing.tlv.ReqMissingBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rp.object.RpBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.srp.object.SrpBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.stateful.capability.tlv.Stateful;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.stateful.capability.tlv.StatefulBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.svec.object.SvecBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.symbolic.path.name.tlv.SymbolicPathName;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.symbolic.path.name.tlv.SymbolicPathNameBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.AttributeFilter;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.ExcludeRouteSubobjects.Attribute;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.basic.explicit.route.subobjects.subobject.type.AsNumberBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.basic.explicit.route.subobjects.subobject.type.IpPrefixBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.basic.explicit.route.subobjects.subobject.type.UnnumberedBuilder;
 
 import com.google.common.collect.Lists;
 import com.google.common.primitives.UnsignedBytes;
 
-/*
- * Used resources<br/>
- * <br/>
- * PCEPOpenObject3.bin<br/>
- * objClass: 1<br/>
- * objType: 1<br/>
- * objLength: 8<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: true<br/>
- * - ignored: true<br/>
- * <br/>
- * keepAlive: 30<br/>
- * deadTimer: 120<br/>
- * sessionId: 1<br/>
- * tlvs:NO<br/>
- * <br/>
- * PCEPBandwidthObject1LowerBounds.bin<br/>
- * objClass: 5 <br/>
- * objType: 1<br/>
- * objLength: 16<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: true<br/>
- * - ignored: true<br/>
- * <br/>
- * Bandwidth: 0<br/>
- * <br/>
- * PCEPBandwidthObject2UpperBounds.bin<br/>
- * objClass: 5 <br/>
- * objType: 1<br/>
- * objLength: 16<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: true<br/>
- * - ignored: true<br/>
- * <br/>
- * Bandwidth: 0xFFFFFFFF<br/>
- * <br/>
- * PCEPEndPointsObject1IPv4.bin<br/>
- * objClass: 4 <br/>
- * objType: 1<br/>
- * objLength: 12<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: true<br/>
- * - ignored: true<br/>
- * <br/>
- * src IP: 0xA2F5110E <br/>
- * dest IP: 0xFFFFFFFF <br/>
- * <br/>
- * PCEPEndPointsObject2IPv6.bin<br/>
- * objClass: 4 <br/>
- * objType: 2<br/>
- * objLength: 36<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: true<br/>
- * - ignored: true<br/>
- * <br/>
- * src IP: 0xFFFFFFFFF FFFFFFFFF FFFFFFFFF FFFFFFFFF<br/>
- * dest IP: 0x00025DD2 FFECA1B6 581E9F50 00000000 <br/>
- * <br/>
- * PCEPErrorObject1.bin<br/>
- * objClass: 13 (RP)<br/>
- * objType: 1<br/>
- * objLength: 8<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: false<br/>
- * - ignored: false<br/>
- * <br/>
- * Error-type: 1<br/>
- * Error-value: 1<br/>
- * Tlvs: NO<br/>
- * <br/>
- * PCEPErrorObject2Invalid.bin<br/>
- * objClass: 13 (RP)<br/>
- * objType: 1<br/>
- * objLength: 8<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: false<br/>
- * - ignored: false<br/>
- * <br/>
- * Error-type: 3<br/>
- * Error-value: 0<br/>
- * Tlvs: NO<br/>
- * <br/>
- * PCEPErrorObject3.bin<br/>
- * objClass: 13 (RP)<br/>
- * objType: 1<br/>
- * objLength: 8<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: false<br/>
- * - ignored: false<br/>
- * <br/>
- * Error-type: 2<br/>
- * Error-value: 0<br/>
- * Tlvs: NO<br/>
- * <br/>
- * PCEPLspaObject1LowerBounds.bin<br/>
- * objClass: 9<br/>
- * objType: 1<br/>
- * objLength: 20<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: true<br/>
- * - ignored: true<br/>
- * <br/>
- * Exclude-any: 0x00000000L<br/>
- * Include-any: 0x00000000L<br/>
- * Include-all: 0x00000000L<br/>
- * Setup Prio: 0x00<br/>
- * Holding Prio: 0x00<br/>
- * Flags: - L : false<br/>
- * <br/>
- * PCEPLspaObject2UpperBounds.bin<br/>
- * objClass: 9<br/>
- * objType: 1<br/>
- * objLength: 20<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: true<br/>
- * - ignored: true<br/>
- * <br/>
- * Exclude-any: 0xFFFFFFFFL<br/>
- * Include-any: 0xFFFFFFFFL<br/>
- * Include-all: 0xFFFFFFFFL<br/>
- * Setup Prio: 0xFF<br/>
- * Holding Prio: 0xFF<br/>
- * Flags: - L : true<br/>
- * <br/>
- * PCEPLspaObject3RandVals.bin<br/>
- * objClass: 9<br/>
- * objType: 1<br/>
- * objLength: 20<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: true<br/>
- * - ignored: true<br/>
- * <br/>
- * Exclude-any: 0x20A1FEE3L<br/>
- * Include-any: 0x1A025CC7L<br/>
- * Include-all: 0x2BB66532L<br/>
- * Setup Prio: 0x03<br/>
- * Holding Prio: 0x02<br/>
- * Flags: - L : true<br/>
- * <br/>
- * NoPathObject1WithTLV.bin<br/>
- * objClass: 3 (RP)<br/>
- * objType: 1<br/>
- * objLength: 16<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: false<br/>
- * - ignored: false<br/>
- * <br/>
- * Nature of Issue: 2<br/>
- * No-Path flags:<br/>
- * - C: true<br/>
- * <br/>
- * tlvs:<br/>
- * -- NO-PATH-VECTOR<br/>
- * - flags (0x4000):<br/>
- * - PCE currently unavailable: false<br/>
- * - unknown destination: true<br/>
- * - unknown source: false<br/>
- * 
- * <br/>
- * NoPathObject2WithoutTLV.bin<br/>
- * objClass: 3 (RP)<br/>
- * objType: 1<br/>
- * objLength: 8<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: false<br/>
- * - ignored: true<br/>
- * <br/>
- * Nature of Issue: 16<br/>
- * No-Path flags:<br/>
- * - C: false<br/>
- * <br/>
- * tlvs:NO<br/>
- * <br/>
- * PCEPNotificationObject1WithTlv.bin <br/>
- * objClass: 12<br/>
- * objType: 1<br/>
- * objLength: 16<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: false<br/>
- * - ignored: false<br/>
- * <br/>
- * NT: 1<br/>
- * NV: 1<br/>
- * Tlvs:<br/>
- * - OverloaderDuration(0xFF0000A2L)<br/>
- * <br/>
- * PCEPNotificationObject2WithoutTlv.bin <br/>
- * objClass: 12<br/>
- * objType: 1<br/>
- * objLength: 8<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: false<br/>
- * - ignored: false<br/>
- * <br/>
- * NT: 0xFF<br/>
- * NV: 0xFF<br/>
- * Tlvs: NO<br/>
- * <br/>
- * PCEPOpenObject1.bin<br/>
- * objClass: 1<br/>
- * objType: 1<br/>
- * objLength: 28<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: false<br/>
- * - ignored: false<br/>
- * <br/>
- * keepAlive: 30<br/>
- * deadTimer: 120<br/>
- * sessionId: 1<br/>
- * tlvs:<br/>
- * - PCEPStatefulCapability<br/>
- * - LSPStateDBVersionTlv<br/>
- * - NodeIdentifierTlv<br/>
- * <br/>
- * PCEPOpenObject2UpperBoundsNoTlv.bin<br/>
- * objClass: 1<br/>
- * objType: 1<br/>
- * objLength: 34<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: false<br/>
- * - ignored: false<br/>
- * <br/>
- * keepAlive: 0xFF<br/>
- * deadTimer: 0xFF<br/>
- * sessionId: 0xFF<br/>
- * tlvs: NO<br/>
- * <br/>
- * PCEPRPObject1.bin<br/>
- * objClass: 2 (RP)<br/>
- * objType: 1<br/>
- * objLength: 12<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: false<br/>
- * - ignored: false<br/>
- * <br/>
- * RP flags:<br/>
- * - loose/strict: true<br/>
- * - Bi-directional: false<br/>
- * - Reoptimization: false<br/>
- * - Priority: 5<br/>
- * Request ID: 0xDEADBEEF<br/>
- * tlvs: NO<br/>
- * <br/>
- * PCEPSvecObject1_10ReqIDs.bin <br/>
- * objClass: 11<br/>
- * objType: 1<br/>
- * objLength: 48<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: true<br/>
- * - ignored: false<br/>
- * <br/>
- * Flags:<br/>
- * - Link diverse: true<br/>
- * - Node diverse: false<br/>
- * - SRLG diverse: true<br/>
- * Reques-ID-numbers:<br/>
- * #1 - 0xFFFFFFFFL<br/>
- * #2 - 0x00000000L<br/>
- * #3 - 0x01234567L<br/>
- * #4 - 0x89ABCDEFL<br/>
- * #5 - 0xFEDCBA98L<br/>
- * #6 - 0x76543210L<br/>
- * #7 - 0x15825266L<br/>
- * #8 - 0x48120BBEL<br/>
- * #9 - 0x25FB7E52L<br/>
- * #10 - 0xB2F2546BL<br/>
- * <br/>
- * PCEPSvecObject2.bin <br/>
- * objClass: 11<br/>
- * objType: 1<br/>
- * objLength: 08<br/>
- * version: 1<br/>
- * Flags:<br/>
- * - processing: false<br/>
- * - ignored: false<br/>
- * <br/>
- * Flags:<br/>
- * - Link diverse: false<br/>
- * - Node diverse: false<br/>
- * - SRLG diverse: false<br/>
- * Reques-ID-numbers:<br/>
- * #1 - 0x000000FFL<br/>
- * PCEPExcludeRouteObject.1.bin <br/>
- * objClass: 17 <br/>
- * objType: 1 <br/>
- * objLength: 20 <br/>
- * version: 1 <br/>
- * Flags: <br/>
- * - fail: true <br/>
- * Subobjects: <br/>
- * - XROIPv4PreffixSubobject(192.168.0.0/16, exclude, node) <br/>
- * - XROASnumber(0x1234) <br/>
- */
 public class PCEPObjectParserTest {
 
        private TlvHandlerRegistry tlvRegistry;
 
        @Before
        public void setUp() throws Exception {
-               this.tlvRegistry = PCEPExtensionProviderContextImpl.create().getTlvHandlerRegistry();
+               this.tlvRegistry = ServiceLoaderPCEPExtensionProviderContext.create().getTlvHandlerRegistry();
        }
 
-       // IPv4Address ipv4addr = new IPv4Address(new byte[] { (byte) 192, (byte) 168, 1, 8 });
-       //
-       // IPv6Address ipv6addr = new IPv6Address(new byte[] { (byte) 192, (byte) 168, 2, 1, (byte) 192, (byte) 168, 2, 1,
-       // (byte) 192, (byte) 168,
-       // 2, 1, (byte) 192, (byte) 168, 2, 1 });
-       //
-       //
-       // /**
-       // * Standard serialization test<br/>
-       // * Used resources:<br/>
-       // * - PCEPOpenObject1.bin<br/>
-       // *
-       // * @throws PCEPDeserializerException
-       // * @throws IOException
-       // * @throws PCEPDocumentedException
-       // */
-       // @Test
-       // @Ignore
-       // // FIXME: temporary
-       // public void testObjectDeserialization() throws PCEPDeserializerException, IOException, PCEPDocumentedException {
-       // PCEPObjectFactory.parseObjects(ByteArray.fileToBytes("src/test/resources/PCEPOpenObject1.bin"));
-       // }
-       //
-       // @Test
-       // public void testUnknownClass() throws PCEPDeserializerException, IOException, PCEPDocumentedException {
-       //
-       // final PCEPObject obj =
-       // PCEPObjectFactory.parseObjects(ByteArray.fileToBytes("src/test/resources/PCEPObject1UnknownClass.bin")).get(
-       // 0);
-       //
-       // // assertTrue(obj instanceof UnknownObject);
-       // // assertEquals(((UnknownObject) obj).getError(), PCEPErrors.UNRECOGNIZED_OBJ_CLASS);
-       // }
-       //
-       // // @Test
-       // // public void testUnknownType() throws PCEPDeserializerException, IOException, PCEPDocumentedException {
-       // // final PCEPObject obj =
-       // PCEPObjectFactory.parseObjects(ByteArray.fileToBytes("src/test/resources/PCEPObject2UnknownType.bin")).get(0);
-       // //
-       // // assertTrue(obj instanceof UnknownObject);
-       // // assertEquals(((UnknownObject) obj).getError(), PCEPErrors.UNRECOGNIZED_OBJ_TYPE);
-       // // }
-       // //
-       // // @Test
-       // // public void testCloseObjSerDeser() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
-       // // serDeserTest("src/test/resources/PCEPCloseObject1.bin", new PCEPCloseObject(Reason.TOO_MANY_UNKNOWN_MSG));
-       // // }
-       //
        @Test
-       public void testLoadBalancingObject() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
+       public void testOpenObjectWithTLV() throws PCEPDeserializerException, IOException {
+               final PCEPOpenObjectParser parser = new PCEPOpenObjectParser(this.tlvRegistry);
+               final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPOpenObject1.bin");
+
+               final OpenBuilder builder = new OpenBuilder();
+               builder.setProcessingRule(false);
+               builder.setIgnore(false);
+               builder.setVersion(new ProtocolVersion((short) 1));
+               builder.setKeepalive((short) 30);
+               builder.setDeadTimer((short) 120);
+               builder.setSessionId((short) 1);
+
+               final Stateful tlv1 = new StatefulBuilder().setLspUpdateCapability(Boolean.TRUE).setInitiation(Boolean.FALSE).setIncludeDbVersion(Boolean.TRUE).build();
+               final LspDbVersion tlv2 = new LspDbVersionBuilder().setVersion(BigInteger.valueOf(0x80L)).build();
+               final byte[] predundancyBytes = { (byte) 0x12, (byte) 0x34, (byte) 0x56, (byte) 0x78, (byte) 0x9a, (byte) 0xbc, (byte) 0xde,
+                               (byte) 0xf0 };
+               final PredundancyGroupId tlv3 = new PredundancyGroupIdBuilder().setIdentifier(predundancyBytes).build();
+
+               builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.TlvsBuilder().setStateful(
+                               tlv1).setPredundancyGroupId(tlv3).setLspDbVersion(tlv2).build());
+
+               assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false), result));
+               assertArrayEquals(result, parser.serializeObject(builder.build()));
+       }
+
+       @Test
+       public void testCloseObject() throws IOException, PCEPDeserializerException {
+               final PCEPCloseObjectParser parser = new PCEPCloseObjectParser(this.tlvRegistry);
+               final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPCloseObject1.bin");
+
+               final CCloseBuilder builder = new CCloseBuilder();
+               builder.setProcessingRule(false);
+               builder.setIgnore(false);
+               builder.setReason((short) 5);
+
+               assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false), result));
+               assertArrayEquals(result, parser.serializeObject(builder.build()));
+       }
+
+       @Test
+       public void testLoadBalancingObject() throws IOException, PCEPDeserializerException {
                final PCEPLoadBalancingObjectParser parser = new PCEPLoadBalancingObjectParser(this.tlvRegistry);
                final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPLoadBalancingObject1.bin");
 
@@ -419,117 +169,141 @@ public class PCEPObjectParserTest {
                builder.setProcessingRule(true);
                builder.setIgnore(false);
                builder.setMaxLsp((short) UnsignedBytes.toInt((byte) 0xf1));
-               builder.setMinBandwidth(new Float32(new byte[] { (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF }));
+               builder.setMinBandwidth(new Bandwidth(new byte[] { (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF }));
 
                assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, false), result));
                assertArrayEquals(result, parser.serializeObject(builder.build()));
        }
 
-       //
-       // @Test
-       // public void testLspObjectSerDeser() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
-       // serDeserTest("src/test/resources/PCEPLspObject1NoTlvsUpperBounds.bin", new PCEPLspObject(0xFFFFF, true, false,
-       // true, false, null));
-       // }
-       //
-       // @Test
-       // public void testERObjectSerDeser() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
-       // final byte[] bytesFromFile =
-       // ByteArray.fileToBytes("src/test/resources/PCEPExplicitRouteObject1PackOfSubobjects.bin");
-       //
-       // MockitoAnnotations.initMocks(this);
-       // PCEPExplicitRouteObjectParser parser = new PCEPExplicitRouteObjectParser(registry);
-       // doReturn(parser).when(registry).getObjectParser(PCEPExplicitRouteObjectParser.TYPE,
-       // PCEPExplicitRouteObjectParser.CLASS);
-       // doReturn(new EROAsNumberSubobjectParser()).when(registry).getSubobjectParser(EROAsNumberSubobjectParser.TYPE);
-       // ObjectHeader h = new ObjectHeader() {
-       //
-       // @Override
-       // public Class<? extends DataContainer> getImplementedInterface() {
-       // // TODO Auto-generated method stub
-       // return null;
-       // }
-       //
-       // @Override
-       // public Boolean isProcessingRule() {
-       // return false;
-       // }
-       //
-       // @Override
-       // public Boolean isIgnore() {
-       // return false;
-       // }
-       // };
-       //
-       // final ExplicitRouteSubobject specObj = (ExplicitRouteSubobject)
-       // registry.getObjectParser(PCEPExplicitRouteObjectParser.TYPE, PCEPExplicitRouteObjectParser.CLASS).parseObject(h,
-       // bytesFromFile);
-       //
-       // System.out.println(specObj.toString());
-       //
-       // //final byte[] bytesActual = PCEPObjectFactory.put(Arrays.asList((PCEPObject) specObj));
-       // //assertArrayEquals(bytesFromFile, bytesActual);
-       // }
-       //
-       // @Test
-       // public void testIRObjectSerDeser() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
-       // final byte[] bytesFromFile =
-       // ByteArray.fileToBytes("src/test/resources/PCEPIncludeRouteObject1PackOfSubobjects.bin");
-       //
-       // final PCEPIncludeRouteObject specObj = (PCEPIncludeRouteObject)
-       // PCEPObjectFactory.parseObjects(bytesFromFile).get(0);
-       //
-       // assertEquals(8, specObj.getSubobjects().size());
-       //
-       // final byte[] bytesActual = PCEPObjectFactory.put(Arrays.asList((PCEPObject) specObj));
-       // assertArrayEquals(bytesFromFile, bytesActual);
-       // }
-       //
-       // @Test
-       // public void tesRRObjectSerDeser() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
-       // final byte[] bytesFromFile =
-       // ByteArray.fileToBytes("src/test/resources/PCEPReportedRouteObject1PackOfSubobjects.bin");
-       //
-       // final PCEPReportedRouteObject specObj = (PCEPReportedRouteObject)
-       // PCEPObjectFactory.parseObjects(bytesFromFile).get(0);
-       //
-       // assertEquals(6, specObj.getSubobjects().size());
-       //
-       // final byte[] bytesActual = PCEPObjectFactory.put(Arrays.asList((PCEPObject) specObj));
-       // assertArrayEquals(bytesFromFile, bytesActual);
-       // }
-       //
+       @Test
+       public void testLspObjectWithTLV() throws IOException, PCEPDeserializerException {
+               final PCEPLspObjectParser parser = new PCEPLspObjectParser(this.tlvRegistry);
+               final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPLspObject1WithTLV.bin");
+
+               final LspBuilder builder = new LspBuilder();
+               builder.setProcessingRule(true);
+               builder.setIgnore(true);
+               builder.setAdministrative(true);
+               builder.setDelegate(false);
+               builder.setRemove(true);
+               builder.setSync(false);
+               builder.setOperational(OperationalStatus.GoingDown);
+               builder.setPlspId(new PlspId(0x12345L));
+
+               final LspErrorCode tlv1 = new LspErrorCodeBuilder().setErrorCode(627610883L).build();
+               final SymbolicPathName tlv2 = new SymbolicPathNameBuilder().setPathName(
+                               new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.SymbolicPathName("Med".getBytes())).build();
+               builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.object.lsp.TlvsBuilder().setLspErrorCode(
+                               tlv1).setSymbolicPathName(tlv2).build());
+               assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
+               assertArrayEquals(result, parser.serializeObject(builder.build()));
+       }
+
+       @Test
+       public void testERObject() throws Exception {
+               final PCEPExplicitRouteObjectParser parser = new PCEPExplicitRouteObjectParser(ServiceLoaderPCEPExtensionProviderContext.create().getEROSubobjectHandlerRegistry());
+               final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPExplicitRouteObject1PackOfSubobjects.bin");
+
+               final EroBuilder builder = new EroBuilder();
+               builder.setProcessingRule(false);
+               builder.setIgnore(false);
+               final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.ero.Subobjects> subs = Lists.newArrayList();
+               subs.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.ero.SubobjectsBuilder().setLoose(
+                               true).setSubobjectType(new AsNumberBuilder().setAsNumber(new AsNumber(0xffffL)).build()).build());
+               subs.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.ero.SubobjectsBuilder().setLoose(
+                               true).setSubobjectType(new IpPrefixBuilder().setIpPrefix(new IpPrefix(new Ipv4Prefix("255.255.255.255/32"))).build()).build());
+               subs.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.ero.SubobjectsBuilder().setLoose(
+                               true).setSubobjectType(new UnnumberedBuilder().setRouterId(0xffffffffL).setInterfaceId(0xffffffffL).build()).build());
+               builder.setSubobjects(subs);
+
+               assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false), result));
+               assertArrayEquals(result, parser.serializeObject(builder.build()));
+       }
+
+       @Test
+       public void testIRObject() throws Exception {
+               final PCEPIncludeRouteObjectParser parser = new PCEPIncludeRouteObjectParser(ServiceLoaderPCEPExtensionProviderContext.create().getEROSubobjectHandlerRegistry());
+               final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPIncludeRouteObject1PackOfSubobjects.bin");
+               final byte[] ip6PrefixBytes = { (byte) 0x12, (byte) 0x34, (byte) 0x54, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+                               (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 };
+
+               final IroBuilder builder = new IroBuilder();
+               builder.setProcessingRule(false);
+               builder.setIgnore(false);
+               final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.include.route.object.iro.Subobjects> subs = Lists.newArrayList();
+               subs.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.include.route.object.iro.SubobjectsBuilder().setSubobjectType(
+                               new AsNumberBuilder().setAsNumber(new AsNumber(0x10L)).build()).build());
+               subs.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.include.route.object.iro.SubobjectsBuilder().setSubobjectType(
+                               new IpPrefixBuilder().setIpPrefix(new IpPrefix(new Ipv4Prefix("18.52.80.0/21"))).build()).build());
+               subs.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.include.route.object.iro.SubobjectsBuilder().setSubobjectType(
+                               new IpPrefixBuilder().setIpPrefix(new IpPrefix(Ipv6Util.prefixForBytes(ip6PrefixBytes, 22))).build()).build());
+               subs.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.include.route.object.iro.SubobjectsBuilder().setSubobjectType(
+                               new UnnumberedBuilder().setRouterId(0x1245678L).setInterfaceId(0x9abcdef0L).build()).build());
+               builder.setSubobjects(subs);
+
+               assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false), result));
+               // FIXME: fix Ipv6Serializers (getType)
+               // assertArrayEquals(result, parser.serializeObject(builder.build()));
+       }
+
+       @Test
+       public void testRRObject() throws Exception {
+               final PCEPReportedRouteObjectParser parser = new PCEPReportedRouteObjectParser(ServiceLoaderPCEPExtensionProviderContext.create().getRROSubobjectHandlerRegistry());
+               final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPReportedRouteObject1PackOfSubobjects.bin");
+               final byte[] ip6PrefixBytes = { (byte) 0x12, (byte) 0x34, (byte) 0x54, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
+                               (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 };
+
+               final RroBuilder builder = new RroBuilder();
+               builder.setProcessingRule(false);
+               builder.setIgnore(false);
+               final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reported.route.object.rro.Subobjects> subs = Lists.newArrayList();
+               subs.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reported.route.object.rro.SubobjectsBuilder().setSubobjectType(
+                               new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.record.route.subobjects.subobject.type.IpPrefixBuilder().setIpPrefix(
+                                               new IpPrefix(new Ipv4Prefix("255.255.255.255/32"))).build()).setProtectionAvailable(false).setProtectionInUse(false).build());
+               subs.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reported.route.object.rro.SubobjectsBuilder().setSubobjectType(
+                               new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.record.route.subobjects.subobject.type.IpPrefixBuilder().setIpPrefix(
+                                               new IpPrefix(Ipv6Util.prefixForBytes(ip6PrefixBytes, 22))).build()).setProtectionAvailable(false).setProtectionInUse(
+                                                               false).build());
+               subs.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reported.route.object.rro.SubobjectsBuilder().setSubobjectType(
+                               new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.record.route.subobjects.subobject.type.UnnumberedBuilder().setRouterId(
+                                               0x1245678L).setInterfaceId(0x9abcdef0L).build()).setProtectionAvailable(false).setProtectionInUse(false).build());
+               builder.setSubobjects(subs);
+
+               assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false), result));
+               // FIXME: fix Ipv6Serializers (getType)
+               // assertArrayEquals(result, parser.serializeObject(builder.build()));
+       }
 
        @Test
-       public void testBandwidthObject() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
+       public void testBandwidthObject() throws IOException, PCEPDeserializerException {
                final PCEPBandwidthObjectParser parser = new PCEPBandwidthObjectParser(this.tlvRegistry);
                byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPBandwidthObject1LowerBounds.bin");
 
                final BandwidthBuilder builder = new BandwidthBuilder();
                builder.setProcessingRule(true);
                builder.setIgnore(true);
-               builder.setBandwidth(new Float32(result));
+               builder.setBandwidth(new Bandwidth(result));
 
                assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
                assertArrayEquals(result, parser.serializeObject(builder.build()));
 
                result = ByteArray.fileToBytes("src/test/resources/PCEPBandwidthObject2UpperBounds.bin");
 
-               builder.setBandwidth(new Float32(result));
+               builder.setBandwidth(new Bandwidth(result));
 
                assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
                assertArrayEquals(result, parser.serializeObject(builder.build()));
        }
 
        @Test
-       public void testEndPointsObjectIPv4() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
+       public void testEndPointsObjectIPv4() throws IOException, PCEPDeserializerException {
                final byte[] srcIPBytes = { (byte) 0xA2, (byte) 0xF5, (byte) 0x11, (byte) 0x0E };
                final byte[] destIPBytes = { (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF };
 
                final PCEPEndPointsObjectParser parser = new PCEPEndPointsObjectParser(this.tlvRegistry);
                final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPEndPointsObject1IPv4.bin");
 
-               final EndpointsBuilder builder = new EndpointsBuilder();
+               final EndpointsObjBuilder builder = new EndpointsObjBuilder();
                builder.setProcessingRule(true);
                builder.setIgnore(false);
                builder.setAddressFamily(new Ipv4Builder().setSourceIpv4Address(Ipv4Util.addressForBytes(srcIPBytes)).setDestinationIpv4Address(
@@ -540,7 +314,7 @@ public class PCEPObjectParserTest {
        }
 
        @Test
-       public void testEndPointsObjectSerDeserIPv6() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
+       public void testEndPointsObjectIPv6() throws IOException, PCEPDeserializerException {
                final byte[] destIPBytes = { (byte) 0x00, (byte) 0x02, (byte) 0x5D, (byte) 0xD2, (byte) 0xFF, (byte) 0xEC, (byte) 0xA1,
                                (byte) 0xB6, (byte) 0x58, (byte) 0x1E, (byte) 0x9F, (byte) 0x50, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, };
                final byte[] srcIPBytes = { (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
@@ -549,7 +323,7 @@ public class PCEPObjectParserTest {
                final PCEPEndPointsObjectParser parser = new PCEPEndPointsObjectParser(this.tlvRegistry);
                final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPEndPointsObject2IPv6.bin");
 
-               final EndpointsBuilder builder = new EndpointsBuilder();
+               final EndpointsObjBuilder builder = new EndpointsObjBuilder();
                builder.setProcessingRule(true);
                builder.setIgnore(false);
                builder.setAddressFamily(new Ipv6Builder().setSourceIpv6Address(Ipv6Util.addressForBytes(srcIPBytes)).setDestinationIpv6Address(
@@ -559,65 +333,75 @@ public class PCEPObjectParserTest {
                assertArrayEquals(result, parser.serializeObject(builder.build()));
        }
 
-       //
-       // /**
-       // * Test of Serialization/Deserialization of PCEPErrorObjectParser.<br/>
-       // * <br/>
-       // * Used resources:<br/>
-       // * - PCEPErrorObject1.bin<br/>
-       // * - PCEPErrorObject3.bin<br/>
-       // *
-       // * @throws PCEPDeserializerException
-       // * @throws IOException
-       // * @throws PCEPDocumentedException
-       // */
-       // @Test
-       // public void testErrorObjectSerDeserWithTlv() throws PCEPDeserializerException, IOException,
-       // PCEPDocumentedException {
-       // serDeserTest("src/test/resources/PCEPErrorObject1.bin", new PCEPErrorObject(PCEPErrors.NON_OR_INVALID_OPEN_MSG));
-       // serDeserTest("src/test/resources/PCEPErrorObject3.bin", new
-       // PCEPErrorObject(PCEPErrors.CAPABILITY_NOT_SUPPORTED));
-       // }
-       //
-       // /**
-       // * Test of validity of PCEPErrorObjectParser. Expect throwed NoSuchElementException.<br/>
-       // * <br/>
-       // * Used resources:<br/>
-       // * - PCEPErrorObject2Invalid.bin<br/>
-       // *
-       // * @throws NoSuchElementException
-       // * @throws IOException
-       // * @throws PCEPDocumentedException
-       // */
-       // @Test(expected = PCEPDeserializerException.class)
-       // public void testUnknownError() throws PCEPDeserializerException, IOException, PCEPDocumentedException {
-       // PCEPObjectFactory.parseObjects(ByteArray.fileToBytes("src/test/resources/PCEPErrorObject2Invalid.bin")).get(0);
-       // }
-       //
-       // /**
-       // * Test for upper/lower bounds of PCEPLspaObject (Serialization/Deserialization)<br/>
-       // * Used resources:<br/>
-       // * - PCEPLspaObject1LowerBounds.bin<br/>
-       // * - PCEPLspaObject2UpperBounds.bin<br/>
-       // * - PCEPLspaObject3RandVals.bin<br/>
-       // *
-       // * @throws IOException
-       // * @throws PCEPDeserializerException
-       // * @throws PCEPDocumentedException
-       // */
-       // @Test
-       // public void testLspaObjectSerDeser() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
-       // serDeserTest("src/test/resources/PCEPLspaObject2UpperBounds.bin",
-       // new PCEPLspaObject(0xFFFFFFFFL, 0xFFFFFFFFL, 0xFFFFFFFFL, (short) 0xFF, (short) 0xFF, false, true, true, true));
-       // serDeserTest("src/test/resources/PCEPLspaObject1LowerBounds.bin",
-       // new PCEPLspaObject(0x00000000L, 0x00000000L, 0x00000000L, (short) 0x00, (short) 0x00, false, false, true, true));
-       // serDeserTest("src/test/resources/PCEPLspaObject3RandVals.bin",
-       // new PCEPLspaObject(0x20A1FEE3L, 0x1A025CC7L, 0x2BB66532L, (short) 0x03, (short) 0x02, false, true, true, true));
-       // }
-       //
+       @Test
+       public void testErrorObjectWithTlv() throws PCEPDeserializerException, IOException {
+               final PCEPErrorObjectParser parser = new PCEPErrorObjectParser(this.tlvRegistry);
+               byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPErrorObject1.bin");
+
+               final ErrorObjectBuilder builder = new ErrorObjectBuilder();
+               builder.setProcessingRule(true);
+               builder.setIgnore(true);
+               builder.setType((short) 1);
+               builder.setValue((short) 1);
+
+               assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
+               assertArrayEquals(result, parser.serializeObject(builder.build()));
+
+               result = ByteArray.fileToBytes("src/test/resources/PCEPErrorObject3.bin");
+
+               builder.setType((short) 7);
+               builder.setValue((short) 0);
+               builder.setTlvs(new TlvsBuilder().setReqMissing(new ReqMissingBuilder().setRequestId(new RequestId(0x00001155L)).build()).build());
+
+               assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
+               assertArrayEquals(result, parser.serializeObject(builder.build()));
+       }
+
+       @Test
+       public void testLspaObject() throws IOException, PCEPDeserializerException {
+               final PCEPLspaObjectParser parser = new PCEPLspaObjectParser(this.tlvRegistry);
+               byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPLspaObject1LowerBounds.bin");
+
+               final LspaBuilder builder = new LspaBuilder();
+               builder.setProcessingRule(true);
+               builder.setIgnore(true);
+               builder.setExcludeAny(new AttributeFilter(0L));
+               builder.setIncludeAny(new AttributeFilter(0L));
+               builder.setIncludeAll(new AttributeFilter(0L));
+               builder.setHoldPriority((short) 0);
+               builder.setSetupPriority((short) 0);
+               builder.setLocalProtectionDesired(false);
+
+               assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
+               assertArrayEquals(result, parser.serializeObject(builder.build()));
+
+               result = ByteArray.fileToBytes("src/test/resources/PCEPLspaObject2UpperBounds.bin");
+
+               builder.setExcludeAny(new AttributeFilter(0xFFFFFFFFL));
+               builder.setIncludeAny(new AttributeFilter(0xFFFFFFFFL));
+               builder.setIncludeAll(new AttributeFilter(0xFFFFFFFFL));
+               builder.setHoldPriority((short) 0xFF);
+               builder.setSetupPriority((short) 0xFF);
+               builder.setLocalProtectionDesired(true);
+
+               assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
+               assertArrayEquals(result, parser.serializeObject(builder.build()));
+
+               result = ByteArray.fileToBytes("src/test/resources/PCEPLspaObject3RandVals.bin");
+
+               builder.setExcludeAny(new AttributeFilter(0x20A1FEE3L));
+               builder.setIncludeAny(new AttributeFilter(0x1A025CC7L));
+               builder.setIncludeAll(new AttributeFilter(0x2BB66532L));
+               builder.setHoldPriority((short) 0x02);
+               builder.setSetupPriority((short) 0x03);
+               builder.setLocalProtectionDesired(true);
+
+               assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
+               assertArrayEquals(result, parser.serializeObject(builder.build()));
+       }
 
        @Test
-       public void testMetricObject() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
+       public void testMetricObject() throws IOException, PCEPDeserializerException {
                final PCEPMetricObjectParser parser = new PCEPMetricObjectParser(this.tlvRegistry);
                byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPMetricObject1LowerBounds.bin");
 
@@ -643,144 +427,102 @@ public class PCEPObjectParserTest {
                assertArrayEquals(result, parser.serializeObject(builder.build()));
        }
 
-       //
-       // /**
-       // * Standard deserialization test + specific test without tlv<br/>
-       // * Used resources:<br/>
-       // * - NoPathObject1WithTLV.bin<br/>
-       // * - NoPathObject2WithoutTLV.bin<br/>
-       // *
-       // * @throws PCEPDeserializerException
-       // * @throws IOException
-       // * @throws PCEPDocumentedException
-       // */
-       // @Test
-       // public void testNoPathObjectDeserialization() throws PCEPDeserializerException, IOException,
-       // PCEPDocumentedException {
-       // // final List<PCEPTlv> tlvs = new ArrayList<PCEPTlv>(1);
-       // // tlvs.add(new NoPathVectorTlv(false, false, true, false, false, false));
-       // // serDeserTest("src/test/resources/NoPathObject1WithTLV.bin", new PCEPNoPathObject((short) 2, true, tlvs,
-       // false));
-       // serDeserTest("src/test/resources/NoPathObject2WithoutTLV.bin", new PCEPNoPathObject((short) 0x10, false, true));
-       //
-       // }
-       //
-       // /**
-       // * Standard serialization test + without tlv<br/>
-       // * Used resources:<br/>
-       // * - NoPathObject1WithTLV.bin<br/>
-       // * - NoPathObject2WithoutTLV.bin<br/>
-       // *
-       // * @throws PCEPDeserializerException
-       // * @throws IOException
-       // * @throws PCEPDocumentedException
-       // */
-       // @Test
-       // public void testNoPathObjectSerialization() throws IOException, PCEPDeserializerException,
-       // PCEPDocumentedException {
-       // byte[] bytesFromFile = ByteArray.fileToBytes("src/test/resources/NoPathObject2WithoutTLV.bin");
-       // PCEPNoPathObject noPathObject = (PCEPNoPathObject) PCEPObjectFactory.parseObjects(bytesFromFile).get(0);
-       // byte[] bytesActual = PCEPObjectFactory.put(Arrays.asList((PCEPObject) noPathObject));
-       // assertArrayEquals(bytesFromFile, bytesActual);
-       //
-       // bytesFromFile = ByteArray.fileToBytes("src/test/resources/NoPathObject1WithTLV.bin");
-       // noPathObject = (PCEPNoPathObject) PCEPObjectFactory.parseObjects(bytesFromFile).get(0);
-       // bytesActual = PCEPObjectFactory.put(Arrays.asList((PCEPObject) noPathObject));
-       // assertArrayEquals(bytesFromFile, bytesActual);
-       // }
-       //
-       // /**
-       // * Specific test with/without tlvs (Ser/Deser)<br/>
-       // * Used resources:<br/>
-       // * - PCEPNotificationObject1WithTlv.bin - PCEPNotificationObject2WithoutTlv.bin
-       // *
-       // * @throws PCEPDeserializerException
-       // * @throws IOException
-       // * @throws PCEPDocumentedException
-       // */
-       // @Test
-       // public void testNotifyObjectSerDeserWithTlv() throws PCEPDeserializerException, IOException,
-       // PCEPDocumentedException {
-       // // FINAL LIST<PCEPTLV> TLVS = NEW ARRAYLIST<PCEPTLV>(1);
-       // // TLVS.ADD(NEW OVERLOADEDDURATIONTLV(0XFF0000A2));
-       // // SERDESERTEST("src/test/resources/PCEPNotificationObject1WithTlv.bin", new PCEPNotificationObject((short) 1,
-       // (short) 1, tlvs));
-       // serDeserTest("src/test/resources/PCEPNotificationObject2WithoutTlv.bin", new PCEPNotificationObject((short) 0xFF,
-       // (short) 0xFF));
-       // }
-       //
-       // /**
-       // * Standard ser deser test<br/>
-       // * used resources:<br/>
-       // * - PCEPOpenObject1.bin
-       // *
-       // * @throws PCEPDeserializerException
-       // * @throws IOException
-       // * @throws PCEPDocumentedException
-       // */
-       // @Test
-       // @Ignore
-       // // FIXME: temporary
-       // public void testOpenObjectSerDeser() throws PCEPDeserializerException, IOException, PCEPDocumentedException {
-       // // final List<PCEPTlv> tlvs = new ArrayList<PCEPTlv>();
-       // // tlvs.add(new PCEStatefulCapabilityTlv(false, true, true));
-       // // tlvs.add(new LSPStateDBVersionTlv(0x80));
-       // // final byte[] valueBytes = { (byte) 0x12, (byte) 0x34, (byte) 0x56, (byte) 0x78, (byte) 0x9A, (byte) 0xBC,
-       // (byte) 0xDE, (byte) 0xF0 };
-       // // tlvs.add(new NodeIdentifierTlv(valueBytes));
-       // // final PCEPOpenObject specObject = new PCEPOpenObject(30, 120, 1, tlvs);
-       // //
-       // // serDeserTest("src/test/resources/PCEPOpenObject1.bin", specObject);
-       // }
-       //
-       // /**
-       // * Specific test for upper bounds and without tlvs<br/>
-       // * Used resources:<br/>
-       // * - PCEPOpenObject2UpperBoundsNoTlv.bin
-       // *
-       // * @throws PCEPDeserializerException
-       // * @throws IOException
-       // * @throws PCEPDocumentedException
-       // */
-       // @Test
-       // public void testOpenObjectBoundsWithoutTlvs() throws IOException, PCEPDeserializerException,
-       // PCEPDocumentedException {
-       // // final List<PCEPTlv> tlvs = new ArrayList<PCEPTlv>();
-       // // serDeserTest("src/test/resources/PCEPOpenObject2UpperBoundsNoTlv.bin", new PCEPOpenObject(0xFF, 0xFF, 0xFF,
-       // tlvs));
-       // serDeserTest("src/test/resources/PCEPOpenObject2UpperBoundsNoTlv.bin", new PCEPOpenObject(0xFF, 0xFF, 0xFF,
-       // null));
-       // }
-       //
-       // /**
-       // * Standard deserialization test<br/>
-       // * Used resources:<br/>
-       // * - PCEPRPObject1.bin
-       // *
-       // * @throws PCEPDeserializerException
-       // * @throws IOException
-       // * @throws PCEPDocumentedException
-       // */
-       // @Test
-       // public void testRPObjectSerDeser() throws PCEPDeserializerException, IOException, PCEPDocumentedException {
-       // serDeserTest("src/test/resources/PCEPRPObject1.bin",
-       // new PCEPRequestParameterObject(true, false, true, true, false, false, false, false, (short) 5, 0xdeadbeefL,
-       // false, false));
-       // // serDeserTest(
-       // // "src/test/resources/PCEPRPObject2.bin",
-       // // new PCEPRequestParameterObject(true, false, false, false, true, false, true, false, true, (short) 5,
-       // 0xdeadbeefL, new ArrayList<PCEPTlv>() {
-       // // private static final long serialVersionUID = 1L;
-       // //
-       // // {
-       // // this.add(new OrderTlv(0xFFFFFFFFL, 0x00000001L));
-       // // }
-       // // }, false, false));
-       // }
-       //
+       @Test
+       public void testNoPathObjectWithTlv() throws PCEPDeserializerException, IOException {
+               final PCEPNoPathObjectParser parser = new PCEPNoPathObjectParser(this.tlvRegistry);
+               byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPNoPathObject1WithoutTLV.bin");
+
+               final NoPathBuilder builder = new NoPathBuilder();
+               builder.setProcessingRule(true);
+               builder.setIgnore(true);
+               builder.setNatureOfIssue((short) 1);
+               builder.setUnsatisfiedConstraints(true);
+
+               assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
+               assertArrayEquals(result, parser.serializeObject(builder.build()));
+
+               result = ByteArray.fileToBytes("src/test/resources/PCEPNoPathObject2WithTLV.bin");
+
+               builder.setNatureOfIssue((short) 0);
+               builder.setUnsatisfiedConstraints(false);
+
+               final NoPathVectorBuilder b = new NoPathVectorBuilder();
+               b.setFlags(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.NoPathVectorTlv.Flags(false, true, false, true, false, true, true, true));
+               builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.replies.result.failure.no.path.TlvsBuilder().setNoPathVector(
+                               b.build()).build());
+
+               assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
+               assertArrayEquals(result, parser.serializeObject(builder.build()));
+       }
+
+       @Test
+       public void testNotifyObjectWithTlv() throws PCEPDeserializerException, IOException {
+               final PCEPNotificationObjectParser parser = new PCEPNotificationObjectParser(this.tlvRegistry);
+               byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPNotificationObject2WithoutTlv.bin");
+
+               final CNotificationBuilder builder = new CNotificationBuilder();
+               builder.setProcessingRule(true);
+               builder.setIgnore(true);
+               builder.setType((short) 0xff);
+               builder.setValue((short) 0xff);
+
+               assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
+               assertArrayEquals(result, parser.serializeObject(builder.build()));
+
+               result = ByteArray.fileToBytes("src/test/resources/PCEPNotificationObject1WithTlv.bin");
+
+               builder.setType((short) 2);
+               builder.setValue((short) 1);
+               builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.notification.object.c.notification.TlvsBuilder().setOverloadDuration(
+                               new OverloadDurationBuilder().setDuration(0xff0000a2L).build()).build());
+
+               assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
+               assertArrayEquals(result, parser.serializeObject(builder.build()));
+       }
+
+       @Test
+       public void testRPObjectWithTlv() throws PCEPDeserializerException, IOException {
+               final PCEPRequestParameterObjectParser parser = new PCEPRequestParameterObjectParser(this.tlvRegistry);
+               byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPRPObject1.bin");
+
+               final RpBuilder builder = new RpBuilder();
+               builder.setProcessingRule(true);
+               builder.setIgnore(true);
+               builder.setReoptimization(true);
+               builder.setBiDirectional(false);
+               builder.setLoose(true);
+               builder.setMakeBeforeBreak(true);
+               builder.setOrder(false);
+               builder.setPathKey(false);
+               builder.setSupplyOf(false);
+               builder.setFragmentation(false);
+               builder.setP2mp(false);
+               builder.setEroCompression(false);
+               builder.setPriority((short) 5);
+               builder.setRequestId(new RequestId(0xdeadbeefL));
+
+               assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
+               assertArrayEquals(result, parser.serializeObject(builder.build()));
+
+               result = ByteArray.fileToBytes("src/test/resources/PCEPRPObject2.bin");
+
+               builder.setReoptimization(false);
+               builder.setFragmentation(true);
+               builder.setEroCompression(true);
+
+               final OrderBuilder b = new OrderBuilder();
+               b.setDelete(0xffffffffL);
+               b.setSetup(1L);
+
+               builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rp.object.rp.TlvsBuilder().setOrder(
+                               b.build()).build());
+
+               assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
+               assertArrayEquals(result, parser.serializeObject(builder.build()));
+       }
 
        @Test
-       public void testSvecObject() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
+       public void testSvecObject() throws IOException, PCEPDeserializerException {
                final PCEPSvecObjectParser parser = new PCEPSvecObjectParser(this.tlvRegistry);
                byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPSvecObject2.bin");
 
@@ -803,7 +545,7 @@ public class PCEPObjectParserTest {
 
                final List<RequestId> requestIDs = Lists.newArrayList();
                requestIDs.add(new RequestId(0xFFFFFFFFL));
-               requestIDs.add(new RequestId(0x00000000L));
+               requestIDs.add(new RequestId(0x00000001L));
                requestIDs.add(new RequestId(0x01234567L));
                requestIDs.add(new RequestId(0x89ABCDEFL));
                requestIDs.add(new RequestId(0xFEDCBA98L));
@@ -819,141 +561,99 @@ public class PCEPObjectParserTest {
                assertArrayEquals(result, parser.serializeObject(builder.build()));
        }
 
-       //
-       // @Test
-       // public void testClassTypeObject() throws PCEPDeserializerException, PCEPDocumentedException {
-       // final PCEPClassTypeObject ct = new PCEPClassTypeObject((short) 4);
-       // // final PCEPClassTypeObjectParser parser = new PCEPClassTypeObjectParser();
-       // // final byte[] bytes = parser.put(ct);
-       // // assertEquals(ct, parser.parse(bytes, true, false));
-       // }
-       //
-       // /**
-       // * Test PCEPExcludeRouteObjectObject (Serialization/Deserialization)<br/>
-       // * Used resources:<br/>
-       // * - PCEPExcludeRouteObject.1.bin<br/>
-       // *
-       // * @throws IOException
-       // * @throws PCEPDeserializerException
-       // * @throws PCEPDocumentedException
-       // */
-       // @Test
-       // public void testExcludeRouteObject() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
-       // final List<ExcludeRouteSubobject> xroSubobjects = new ArrayList<ExcludeRouteSubobject>();
-       // xroSubobjects.add(new XROIPPrefixSubobject<IPv4Prefix>(new IPv4Prefix(new IPv4Address(new byte[] { (byte) 192,
-       // (byte) 168,
-       // (byte) 100, (byte) 100 }), 16), true, XROSubobjectAttribute.NODE));
-       // xroSubobjects.add(new XROAsNumberSubobject(new AsNumber(0x1234L), false));
-       //
-       // }
-       //
-       // @Test
-       // public void tesObjectiveFunctionObject() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
-       // serDeserTest("src/test/resources/PCEPObjectiveFunctionObject.1.bin", new
-       // PCEPObjectiveFunctionObject(PCEPOFCodes.MBC, true, false));
-       // }
-       //
-       // @Test
-       // public void tesGlobalConstraintsObject() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
-       // serDeserTest("src/test/resources/PCEPGlobalConstraintsObject.1.bin",
-       // new PCEPGlobalConstraintsObject((short) 1, (short) 0, (short) 100, (short) 0xFF, true, false));
-       // }
-       //
-       // // FIXME: add at least one test with true value
-       // @Test
-       // public void openObjectWithTlv() throws PCEPDeserializerException, PCEPDocumentedException {
-       // // this.testOpenObjectWithSpecTlv(new PCEStatefulCapabilityTlv(false, false, false));
-       // // this.testOpenObjectWithSpecTlv(new PCEStatefulCapabilityTlv(false, false, true));
-       // // this.testOpenObjectWithSpecTlv(new PCEStatefulCapabilityTlv(false, true, false));
-       // // this.testOpenObjectWithSpecTlv(new PCEStatefulCapabilityTlv(false, true, true));
-       // }
-       //
-       // // private void testOpenObjectWithSpecTlv(final PCEPTlv tlv) throws PCEPDeserializerException,
-       // PCEPDocumentedException {
-       // // final List<PCEPObject> objs = new ArrayList<PCEPObject>();
-       // // final List<PCEPTlv> tlvs = new ArrayList<PCEPTlv>();
-       // // tlvs.add(tlv);
-       // // final PCEPOpenObject oo = new PCEPOpenObject(30, 120, 0, tlvs);
-       // // objs.add(oo);
-       // // final byte[] bytes = PCEPObjectFactory.put(objs);
-       // // final PCEPObject obj = PCEPObjectFactory.parseObjects(bytes).get(0);
-       // // assertEquals(oo, obj);
-       // // }
-       //
-       // @Test
-       // public void testErrorsMapping() {
-       // final PCEPErrorObjectParser.PCEPErrorsMaping mapper = PCEPErrorObjectParser.PCEPErrorsMaping.getInstance();
-       //
-       // for (final PCEPErrors error : PCEPErrors.values()) {
-       // final PCEPErrorIdentifier errorId = mapper.getFromErrorsEnum(error);
-       // assertEquals(error, mapper.getFromErrorIdentifier(errorId));
-       // }
-       // }
-       //
-       // @Test
-       // public void testOFCodesMapping() {
-       // final PCEPOFCodesMapping mapper = PCEPOFCodesMapping.getInstance();
-       //
-       // for (final PCEPOFCodes ofCode : PCEPOFCodes.values()) {
-       // final int ofCodeId = mapper.getFromOFCodesEnum(ofCode);
-       // assertEquals(ofCode, mapper.getFromCodeIdentifier(ofCodeId));
-       // }
-       // }
-       //
-       // @SuppressWarnings("unchecked")
-       // private static <T extends PCEPObject> void serDeserTestWithoutBin(final T object) throws
-       // PCEPDeserializerException,
-       // PCEPDocumentedException {
-       // final byte[] serBytes = PCEPObjectFactory.put(Arrays.asList((PCEPObject) object));
-       // final T deserObj = (T) PCEPObjectFactory.parseObjects(serBytes).get(0);
-       //
-       // assertEquals(object, deserObj);
-       // }
-       //
-       // @Test
-       // public void testSERObjects() throws PCEPDocumentedException, PCEPDeserializerException {
-       // final List<ExplicitRouteSubobject> eroSubobjects = new ArrayList<ExplicitRouteSubobject>();
-       // eroSubobjects.add(new EROIPPrefixSubobject<IPv4Prefix>(new IPv4Prefix(new IPv4Address(new byte[] { (byte) 192,
-       // (byte) 168, 1, 8 }), 16), false));
-       // eroSubobjects.add(new EROIPPrefixSubobject<IPv6Prefix>(new IPv6Prefix(new IPv6Address(new byte[] { (byte) 192,
-       // (byte) 168, 2, 1,
-       // (byte) 192, (byte) 168, 2, 1, (byte) 192, (byte) 168, 2, 1, (byte) 192, (byte) 168, 2, 1 }), 64), false));
-       //
-       // serDeserTestWithoutBin(new PCEPSecondaryExplicitRouteObject(eroSubobjects, true, false));
-       // }
-       //
-       // @Test
-       // public void testSRRObject() throws PCEPDocumentedException, PCEPDeserializerException {
-       // final List<ReportedRouteSubobject> rroSubobjects = new ArrayList<ReportedRouteSubobject>();
-       // rroSubobjects.add(new RROIPAddressSubobject<IPv4Prefix>(new IPv4Prefix(this.ipv4addr, 16), true, false));
-       // rroSubobjects.add(new RROIPAddressSubobject<IPv6Prefix>(new IPv6Prefix(this.ipv6addr, 64), false, true));
-       //
-       // serDeserTestWithoutBin(new PCEPSecondaryRecordRouteObject(rroSubobjects, true, false));
-       // }
-       //
-       // @Test
-       // public void testP2MPEndpointsObjects() throws PCEPDeserializerException, PCEPDocumentedException {
-       // serDeserTestWithoutBin(new PCEPP2MPEndPointsObject<IPv4Address>(2, this.ipv4addr, Arrays.asList(this.ipv4addr,
-       // this.ipv4addr,
-       // this.ipv4addr), true, false));
-       // serDeserTestWithoutBin(new PCEPP2MPEndPointsObject<IPv4Address>(1, this.ipv4addr, Arrays.asList(this.ipv4addr),
-       // true, false));
-       // serDeserTestWithoutBin(new PCEPP2MPEndPointsObject<IPv6Address>(2, this.ipv6addr, Arrays.asList(this.ipv6addr,
-       // this.ipv6addr,
-       // this.ipv6addr), true, false));
-       // serDeserTestWithoutBin(new PCEPP2MPEndPointsObject<IPv6Address>(1, this.ipv6addr, Arrays.asList(this.ipv6addr),
-       // true, false));
-       // }
-       //
-       // @Test
-       // public void testUnreachedDestinationObjects() throws PCEPDeserializerException, PCEPDocumentedException {
-       // serDeserTestWithoutBin(new PCEPUnreachedDestinationObject<IPv4Address>(Arrays.asList(this.ipv4addr,
-       // this.ipv4addr, this.ipv4addr), true, false));
-       // serDeserTestWithoutBin(new PCEPUnreachedDestinationObject<IPv4Address>(Arrays.asList(this.ipv4addr), true,
-       // false));
-       // serDeserTestWithoutBin(new PCEPUnreachedDestinationObject<IPv6Address>(Arrays.asList(this.ipv6addr,
-       // this.ipv6addr, this.ipv6addr), true, false));
-       // serDeserTestWithoutBin(new PCEPUnreachedDestinationObject<IPv6Address>(Arrays.asList(this.ipv6addr), true,
-       // false));
-       // }
+       @Test
+       public void testClassTypeObject() throws PCEPDeserializerException {
+               final PCEPClassTypeObjectParser parser = new PCEPClassTypeObjectParser(this.tlvRegistry);
+               final byte[] result = new byte[] { 0, 0, 0, (byte) 0x04 };
+
+               final ClassTypeBuilder builder = new ClassTypeBuilder();
+               builder.setProcessingRule(true);
+               builder.setIgnore(false);
+               builder.setClassType(new ClassType((short) 4));
+
+               assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, false), result));
+               assertArrayEquals(result, parser.serializeObject(builder.build()));
+       }
+
+       @Test
+       public void testExcludeRouteObject() throws Exception {
+               final PCEPExcludeRouteObjectParser parser = new PCEPExcludeRouteObjectParser(ServiceLoaderPCEPExtensionProviderContext.create().getXROSubobjectHandlerRegistry());
+               final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPExcludeRouteObject.1.bin");
+
+               final XroBuilder builder = new XroBuilder();
+               builder.setProcessingRule(false);
+               builder.setIgnore(false);
+               builder.setFlags(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.exclude.route.object.Xro.Flags(true));
+               final List<Subobjects> subs = Lists.newArrayList();
+               subs.add(new SubobjectsBuilder().setMandatory(true).setSubobjectType(
+                               new IpPrefixBuilder().setIpPrefix(new IpPrefix(new Ipv4Prefix("192.168.0.0/16"))).build()).setAttribute(Attribute.Node).build());
+               subs.add(new SubobjectsBuilder().setMandatory(false).setSubobjectType(
+                               new AsNumberBuilder().setAsNumber(new AsNumber(0x1234L)).build()).build());
+               builder.setSubobjects(subs);
+
+               assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false), result));
+               assertArrayEquals(result, parser.serializeObject(builder.build()));
+       }
+
+       @Test
+       public void testPathKeyObject() throws Exception {
+               final PCEPPathKeyObjectParser parser = new PCEPPathKeyObjectParser(ServiceLoaderPCEPExtensionProviderContext.create().getEROSubobjectHandlerRegistry());
+               final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPPathKeyObject.bin");
+
+               final PathKeyBuilder builder = new PathKeyBuilder();
+               builder.setProcessingRule(true);
+               builder.setIgnore(false);
+               final List<PathKeys> list = Lists.newArrayList();
+               list.add(new PathKeysBuilder().setLoose(true).setPathKey(new PathKey(0x1234)).setPceId(
+                               new PceId(new byte[] { (byte) 0x12, (byte) 0x34, (byte) 0x50, (byte) 0x00 })).build());
+               builder.setPathKeys(list);
+
+               assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, false), result));
+               assertArrayEquals(result, parser.serializeObject(builder.build()));
+       }
+
+       @Test
+       public void testSrpObject() throws IOException, PCEPDeserializerException {
+               final PCEPSrpObjectParser parser = new PCEPSrpObjectParser(this.tlvRegistry);
+               final byte[] result = new byte[] { 0, 0, 0, 0, 0, 0, 0, (byte) 0x01 };
+
+               final SrpBuilder builder = new SrpBuilder();
+               builder.setProcessingRule(false);
+               builder.setIgnore(false);
+               builder.setOperationId(new SrpIdNumber(1L));
+
+               assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false), result));
+               assertArrayEquals(result, parser.serializeObject(builder.build()));
+       }
+
+       @Test
+       public void testObjectiveFunctionObject() throws IOException, PCEPDeserializerException {
+               final PCEPObjectiveFunctionObjectParser parser = new PCEPObjectiveFunctionObjectParser(this.tlvRegistry);
+               final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPObjectiveFunctionObject.1.bin");
+
+               final OfBuilder builder = new OfBuilder();
+               builder.setProcessingRule(true);
+               builder.setIgnore(false);
+               builder.setCode(new OfId(4));
+
+               assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, false), result));
+               assertArrayEquals(result, parser.serializeObject(builder.build()));
+       }
+
+       @Test
+       public void testGlobalConstraintsObject() throws IOException, PCEPDeserializerException {
+               final PCEPGlobalConstraintsObjectParser parser = new PCEPGlobalConstraintsObjectParser(this.tlvRegistry);
+               final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPGlobalConstraintsObject.1.bin");
+
+               final GcBuilder builder = new GcBuilder();
+               builder.setProcessingRule(true);
+               builder.setIgnore(false);
+               builder.setMaxHop((short) 1);
+               builder.setMaxUtilization((short) 0);
+               builder.setMinUtilization((short) 100);
+               builder.setOverBookingFactor((short) 99);
+
+               assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, false), result));
+               assertArrayEquals(result, parser.serializeObject(builder.build()));
+       }
 }