X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=pcep%2Fimpl%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fprotocol%2Fpcep%2Fimpl%2FPCEPValidatorTest.java;h=752ca6b1330526f38abbb3c38c2cc473e0fbd6cf;hb=d7652fb4ef69e193b271e39e864228b033bba8bc;hp=fcd1334091e8c40210352b0bbbcd4f5489caf322;hpb=66705d090de0d1fe8eb242c21a1e983f16826c51;p=bgpcep.git diff --git a/pcep/impl/src/test/java/org/opendaylight/protocol/pcep/impl/PCEPValidatorTest.java b/pcep/impl/src/test/java/org/opendaylight/protocol/pcep/impl/PCEPValidatorTest.java index fcd1334091..752ca6b133 100644 --- a/pcep/impl/src/test/java/org/opendaylight/protocol/pcep/impl/PCEPValidatorTest.java +++ b/pcep/impl/src/test/java/org/opendaylight/protocol/pcep/impl/PCEPValidatorTest.java @@ -7,743 +7,813 @@ */ package org.opendaylight.protocol.pcep.impl; -import static java.util.Arrays.asList; +import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; import java.io.IOException; -import java.util.ArrayList; +import java.math.BigInteger; +import java.util.Collections; import java.util.List; +import org.junit.Before; import org.junit.Test; -import org.opendaylight.protocol.concepts.ASNumber; -import org.opendaylight.protocol.concepts.Bandwidth; -import org.opendaylight.protocol.concepts.IGPMetric; -import org.opendaylight.protocol.concepts.IPv4; -import org.opendaylight.protocol.concepts.IPv4Address; -import org.opendaylight.protocol.concepts.TEMetric; -import org.opendaylight.protocol.framework.DeserializerException; -import org.opendaylight.protocol.framework.DocumentedException; import org.opendaylight.protocol.pcep.PCEPDeserializerException; import org.opendaylight.protocol.pcep.PCEPDocumentedException; -import org.opendaylight.protocol.pcep.PCEPErrors; -import org.opendaylight.protocol.pcep.PCEPMessage; -import org.opendaylight.protocol.pcep.PCEPOFCodes; -import org.opendaylight.protocol.pcep.PCEPObject; -import org.opendaylight.protocol.pcep.PCEPTlv; -import org.opendaylight.protocol.pcep.concepts.LSPSymbolicName; -import org.opendaylight.protocol.pcep.concepts.UnnumberedInterfaceIdentifier; -import org.opendaylight.protocol.pcep.impl.message.PCEPRawMessage; -import org.opendaylight.protocol.pcep.impl.object.UnknownObject; -import org.opendaylight.protocol.pcep.message.PCCreateMessage; -import org.opendaylight.protocol.pcep.message.PCEPCloseMessage; -import org.opendaylight.protocol.pcep.message.PCEPErrorMessage; -import org.opendaylight.protocol.pcep.message.PCEPKeepAliveMessage; -import org.opendaylight.protocol.pcep.message.PCEPNotificationMessage; -import org.opendaylight.protocol.pcep.message.PCEPOpenMessage; -import org.opendaylight.protocol.pcep.message.PCEPReplyMessage; -import org.opendaylight.protocol.pcep.message.PCEPReportMessage; -import org.opendaylight.protocol.pcep.message.PCEPRequestMessage; -import org.opendaylight.protocol.pcep.message.PCEPUpdateRequestMessage; -import org.opendaylight.protocol.pcep.object.CompositeErrorObject; -import org.opendaylight.protocol.pcep.object.CompositeInstantiationObject; -import org.opendaylight.protocol.pcep.object.CompositeNotifyObject; -import org.opendaylight.protocol.pcep.object.CompositePathObject; -import org.opendaylight.protocol.pcep.object.CompositeReplySvecObject; -import org.opendaylight.protocol.pcep.object.CompositeRequestObject; -import org.opendaylight.protocol.pcep.object.CompositeRequestSvecObject; -import org.opendaylight.protocol.pcep.object.CompositeResponseObject; -import org.opendaylight.protocol.pcep.object.CompositeRptPathObject; -import org.opendaylight.protocol.pcep.object.CompositeStateReportObject; -import org.opendaylight.protocol.pcep.object.CompositeUpdPathObject; -import org.opendaylight.protocol.pcep.object.CompositeUpdateRequestObject; -import org.opendaylight.protocol.pcep.object.PCEPCloseObject; -import org.opendaylight.protocol.pcep.object.PCEPCloseObject.Reason; -import org.opendaylight.protocol.pcep.object.PCEPEndPointsObject; -import org.opendaylight.protocol.pcep.object.PCEPErrorObject; -import org.opendaylight.protocol.pcep.object.PCEPExcludeRouteObject; -import org.opendaylight.protocol.pcep.object.PCEPExistingPathBandwidthObject; -import org.opendaylight.protocol.pcep.object.PCEPExplicitRouteObject; -import org.opendaylight.protocol.pcep.object.PCEPGlobalConstraintsObject; -import org.opendaylight.protocol.pcep.object.PCEPIncludeRouteObject; -import org.opendaylight.protocol.pcep.object.PCEPLoadBalancingObject; -import org.opendaylight.protocol.pcep.object.PCEPLspObject; -import org.opendaylight.protocol.pcep.object.PCEPLspaObject; -import org.opendaylight.protocol.pcep.object.PCEPMetricObject; -import org.opendaylight.protocol.pcep.object.PCEPNoPathObject; -import org.opendaylight.protocol.pcep.object.PCEPNotificationObject; -import org.opendaylight.protocol.pcep.object.PCEPObjectiveFunctionObject; -import org.opendaylight.protocol.pcep.object.PCEPOpenObject; -import org.opendaylight.protocol.pcep.object.PCEPReportedRouteObject; -import org.opendaylight.protocol.pcep.object.PCEPRequestParameterObject; -import org.opendaylight.protocol.pcep.object.PCEPRequestedPathBandwidthObject; -import org.opendaylight.protocol.pcep.object.PCEPSvecObject; -import org.opendaylight.protocol.pcep.subobject.EROAsNumberSubobject; -import org.opendaylight.protocol.pcep.subobject.EROUnnumberedInterfaceSubobject; -import org.opendaylight.protocol.pcep.subobject.ExcludeRouteSubobject; -import org.opendaylight.protocol.pcep.subobject.ExplicitRouteSubobject; -import org.opendaylight.protocol.pcep.subobject.RROUnnumberedInterfaceSubobject; -import org.opendaylight.protocol.pcep.subobject.ReportedRouteSubobject; -import org.opendaylight.protocol.pcep.subobject.XROAsNumberSubobject; -import org.opendaylight.protocol.pcep.tlv.LSPStateDBVersionTlv; -import org.opendaylight.protocol.pcep.tlv.LSPSymbolicNameTlv; -import org.opendaylight.protocol.pcep.tlv.PCEStatefulCapabilityTlv; +import org.opendaylight.protocol.pcep.impl.message.PCEPCloseMessageParser; +import org.opendaylight.protocol.pcep.impl.message.PCEPErrorMessageParser; +import org.opendaylight.protocol.pcep.impl.message.PCEPKeepAliveMessageParser; +import org.opendaylight.protocol.pcep.impl.message.PCEPNotificationMessageParser; +import org.opendaylight.protocol.pcep.impl.message.PCEPOpenMessageParser; +import org.opendaylight.protocol.pcep.impl.message.PCEPReplyMessageParser; +import org.opendaylight.protocol.pcep.impl.message.PCEPReportMessageParser; +import org.opendaylight.protocol.pcep.impl.message.PCEPUpdateRequestMessageParser; +import org.opendaylight.protocol.pcep.impl.message.PcinitiateMessageParser; +import org.opendaylight.protocol.pcep.spi.ObjectHandlerRegistry; +import org.opendaylight.protocol.pcep.spi.pojo.ServiceLoaderPCEPExtensionProviderContext; import org.opendaylight.protocol.util.ByteArray; +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.pcep.message.rev131007.CloseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.KeepaliveBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.OpenBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.PcerrBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.PcinitiateBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.PcntfBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.PcrepBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.PcrptBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.PcupdBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message; +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.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.SrpIdNumber; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.bandwidth.object.Bandwidth; +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.close.message.CCloseMessageBuilder; +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.explicit.route.object.Ero; +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.include.route.object.Iro; +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.include.route.object.iro.Subobjects; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.include.route.object.iro.SubobjectsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.keepalive.message.KeepaliveMessageBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.attributes.Metrics; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.attributes.MetricsBuilder; +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.object.Lsp; +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.Lspa; +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.CNotification; +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.Of; +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.message.OpenMessageBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.Open; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcep.error.object.ErrorObject; +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.pcerr.message.PcerrMessageBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.Errors; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.ErrorsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.error.type.RequestBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.error.type.SessionBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcinitiate.message.PcinitiateMessageBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcinitiate.message.pcinitiate.message.Requests; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcinitiate.message.pcinitiate.message.RequestsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcntf.message.PcntfMessageBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcntf.message.pcntf.message.Notifications; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcntf.message.pcntf.message.NotificationsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcntf.message.pcntf.message.notifications.Rps; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcntf.message.pcntf.message.notifications.RpsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.PcrepMessageBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.Replies; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.RepliesBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.replies.result.FailureBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.replies.result.SuccessBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.replies.result.failure.NoPath; +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.success.Paths; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.replies.result.success.PathsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrpt.message.PcrptMessageBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrpt.message.pcrpt.message.Reports; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrpt.message.pcrpt.message.ReportsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrpt.message.pcrpt.message.reports.PathBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcupd.message.PcupdMessageBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcupd.message.pcupd.message.Updates; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcupd.message.pcupd.message.UpdatesBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reported.route.object.Rro; +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.rp.object.Rp; +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.Srp; +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.Stateful.Flags; +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.rsvp.rev130820.AttributeFilter; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.basic.explicit.route.subobjects.subobject.type.AsNumber; +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.record.route.subobjects.subobject.type.Unnumbered; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.record.route.subobjects.subobject.type.UnnumberedBuilder; + +import com.google.common.collect.Lists; public class PCEPValidatorTest { - private static final PCEPLspaObject lspa = new PCEPLspaObject(0L, 0L, 0L, (short) 0, (short) 0, false, false, false, false); - - private final List eroSubobjects = asList( - new EROAsNumberSubobject(new ASNumber(0xFFFFL), false), - new EROUnnumberedInterfaceSubobject(new IPv4Address(new byte[] { (byte) 0x00, (byte) 0x11, (byte) 0x22, (byte) 0x33 }), new UnnumberedInterfaceIdentifier(0x00FF00FF), false)); - - private final List rroSubobjects = asList((ReportedRouteSubobject) new RROUnnumberedInterfaceSubobject(new IPv4Address(new byte[] { - (byte) 0x00, (byte) 0x11, (byte) 0x22, (byte) 0x33 }), new UnnumberedInterfaceIdentifier(0x00FF00FF))); - - private final List requestIds = asList(0x000001L); - - private final IPv4Address ip4addr = new IPv4Address(new byte[] { (byte) 0xFF, 0x00, 0x00, 0x01 }); - - private final PCEPSvecObject svecObj = new PCEPSvecObject(true, true, true, false, false, PCEPValidatorTest.this.requestIds, true); - - private final PCEPRequestParameterObject requestParameter = new PCEPRequestParameterObject(true, false, false, false, false, false, false, false, (short) 3, 1, true, false); - - // private final PCEPEndPointsObject endPoints = new - // PCEPEndPointsObject(this.ip4addr, this.ip4addr); - - private final PCEPEndPointsObject endPoints = new PCEPEndPointsObject(this.ip4addr, this.ip4addr); - - private static final RawPCEPMessageFactory msgFactory = new RawPCEPMessageFactory(); - - // private final PCEPClassTypeObject classType = new - // PCEPClassTypeObject((short) 7); - // private final PCEPClassTypeObjectProvider classTypeProvider = new - // PCEPClassTypeObjectProvider((short) 7, true); - - private static List deserMsg(final String srcFile) throws IOException, DeserializerException, DocumentedException, - PCEPDeserializerException { - final byte[] bytesFromFile = ByteArray.fileToBytes(srcFile); - final PCEPRawMessage rawMessage = (PCEPRawMessage) msgFactory.parse(bytesFromFile).get(0); - - return PCEPMessageValidator.getValidator(rawMessage.getMsgType()).validate(rawMessage.getAllObjects()); + private ObjectHandlerRegistry objectRegistry; + + private Rp rp; + private Open open; + private NoPath noPath; + private Lspa lspa; + private Bandwidth bandwidth; + private Metrics metrics; + private Iro iro; + private Ero ero; + private Rro rro; + private Of of; + private Srp srp; + private Lsp lsp; + + private AsNumber eroASSubobject; + private Unnumbered rroUnnumberedSub; + + @Before + public void setUp() throws Exception { + this.objectRegistry = ServiceLoaderPCEPExtensionProviderContext.create().getObjectHandlerRegistry(); + final RpBuilder rpBuilder = new RpBuilder(); + rpBuilder.setProcessingRule(false); + rpBuilder.setIgnore(false); + rpBuilder.setReoptimization(false); + rpBuilder.setBiDirectional(false); + rpBuilder.setLoose(true); + rpBuilder.setMakeBeforeBreak(false); + rpBuilder.setOrder(false); + rpBuilder.setSupplyOf(false); + rpBuilder.setFragmentation(false); + rpBuilder.setP2mp(false); + rpBuilder.setEroCompression(false); + rpBuilder.setPriority((short) 1); + rpBuilder.setRequestId(new RequestId(10L)); + this.rp = rpBuilder.build(); + + final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.OpenBuilder openBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.OpenBuilder(); + openBuilder.setProcessingRule(false); + openBuilder.setIgnore(false); + openBuilder.setDeadTimer((short) 1); + openBuilder.setKeepalive((short) 1); + openBuilder.setSessionId((short) 0); + openBuilder.setVersion(new ProtocolVersion((short) 1)); + openBuilder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.TlvsBuilder().build()); + this.open = openBuilder.build(); + + final NoPathBuilder npbuilder = new NoPathBuilder(); + npbuilder.setProcessingRule(false); + npbuilder.setIgnore(false); + npbuilder.setNatureOfIssue((short) 0); + npbuilder.setUnsatisfiedConstraints(false); + this.noPath = npbuilder.build(); + + final LspaBuilder lspaBuilder = new LspaBuilder(); + lspaBuilder.setProcessingRule(false); + lspaBuilder.setIgnore(false); + lspaBuilder.setLocalProtectionDesired(false); + lspaBuilder.setHoldPriority((short) 0); + lspaBuilder.setSetupPriority((short) 0); + lspaBuilder.setExcludeAny(new AttributeFilter(0L)); + lspaBuilder.setIncludeAll(new AttributeFilter(0L)); + lspaBuilder.setIncludeAny(new AttributeFilter(0L)); + this.lspa = lspaBuilder.build(); + + final BandwidthBuilder bBuilder = new BandwidthBuilder(); + bBuilder.setIgnore(false); + bBuilder.setProcessingRule(false); + bBuilder.setBandwidth(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nps.concepts.rev130930.Bandwidth(new Float32(new byte[4]))); + this.bandwidth = bBuilder.build(); + + final MetricBuilder mBuilder = new MetricBuilder(); + mBuilder.setIgnore(false); + mBuilder.setProcessingRule(false); + mBuilder.setComputed(false); + mBuilder.setBound(false); + mBuilder.setMetricType((short) 1); + mBuilder.setValue(new Float32(new byte[4])); + this.metrics = new MetricsBuilder().setMetric(mBuilder.build()).build(); + + this.eroASSubobject = new AsNumberBuilder().setAsNumber( + new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.AsNumber(0xFFFFL)).build(); + + this.rroUnnumberedSub = new UnnumberedBuilder().setRouterId(0x00112233L).setInterfaceId(0x00ff00ffL).build(); + + final IroBuilder iroBuilder = new IroBuilder(); + iroBuilder.setIgnore(false); + iroBuilder.setProcessingRule(false); + final List iroSubs = Lists.newArrayList(); + iroSubs.add(new SubobjectsBuilder().setSubobjectType(this.eroASSubobject).build()); + iroBuilder.setSubobjects(iroSubs); + this.iro = iroBuilder.build(); + + final EroBuilder eroBuilder = new EroBuilder(); + eroBuilder.setIgnore(false); + eroBuilder.setProcessingRule(false); + final List eroSubs = Lists.newArrayList(); + eroSubs.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.ero.SubobjectsBuilder().setSubobjectType( + this.eroASSubobject).setLoose(false).build()); + eroBuilder.setSubobjects(eroSubs); + this.ero = eroBuilder.build(); + + final RroBuilder rroBuilder = new RroBuilder(); + rroBuilder.setIgnore(false); + rroBuilder.setProcessingRule(false); + final List rroSubs = Lists.newArrayList(); + rroSubs.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reported.route.object.rro.SubobjectsBuilder().setSubobjectType( + this.rroUnnumberedSub).setProtectionAvailable(false).setProtectionInUse(false).build()); + rroBuilder.setSubobjects(rroSubs); + this.rro = rroBuilder.build(); + + final OfBuilder ofBuilder = new OfBuilder(); + ofBuilder.setIgnore(false); + ofBuilder.setProcessingRule(false); + ofBuilder.setCode(new OfId(0)); + this.of = ofBuilder.build(); + + final SrpBuilder srpBuilder = new SrpBuilder(); + srpBuilder.setIgnore(false); + srpBuilder.setProcessingRule(false); + srpBuilder.setOperationId(new SrpIdNumber(1L)); + this.srp = srpBuilder.build(); + + final LspBuilder lspBuilder = new LspBuilder(); + lspBuilder.setIgnore(false); + lspBuilder.setProcessingRule(false); + lspBuilder.setAdministrative(false); + lspBuilder.setDelegate(false); + lspBuilder.setPlspId(new PlspId(0L)); + lspBuilder.setOperational(OperationalStatus.Down); + lspBuilder.setSync(false); + lspBuilder.setRemove(false); + lspBuilder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.object.lsp.TlvsBuilder().build()); + this.lsp = lspBuilder.build(); } @Test - public void testOpenMessageValidationFromBin() throws IOException, DeserializerException, DocumentedException, - PCEPDeserializerException { - assertEquals( - deserMsg("src/test/resources/PCEPOpenMessage1.bin"), - asList(new PCEPOpenMessage(new PCEPOpenObject(30, 120, 1, asList(new PCEStatefulCapabilityTlv(false, true, true), - new LSPStateDBVersionTlv(0x80)))))); - - assertEquals(deserMsg("src/test/resources/Open.1.bin"), asList(new PCEPOpenMessage(new PCEPOpenObject(1, 4, 1)))); - - assertEquals( - deserMsg("src/test/resources/Open.3.bin"), - asList(new PCEPOpenMessage(new PCEPOpenObject(1, 4, 1, asList(new PCEStatefulCapabilityTlv(false, true, true), - new LSPStateDBVersionTlv(53)))))); + public void testOpenMsg() throws IOException, PCEPDeserializerException, PCEPDocumentedException { + final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPOpenMessage1.bin"); + final PCEPOpenMessageParser parser = new PCEPOpenMessageParser(this.objectRegistry); + final OpenMessageBuilder builder = new OpenMessageBuilder(); + + final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.OpenBuilder b = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.OpenBuilder(); + b.setProcessingRule(false); + b.setIgnore(false); + b.setVersion(new ProtocolVersion((short) 1)); + b.setKeepalive((short) 30); + b.setDeadTimer((short) 120); + b.setSessionId((short) 1); + final Stateful tlv1 = new StatefulBuilder().setFlags(new Flags(true, false, true)).build(); + final LspDbVersion tlv2 = new LspDbVersionBuilder().setVersion(BigInteger.valueOf(0x80L)).build(); + b.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.TlvsBuilder().setStateful( + tlv1).setLspDbVersion(tlv2).build()); + builder.setOpen(b.build()); + + assertEquals(new OpenBuilder().setOpenMessage(builder.build()).build(), parser.parseMessage(result, Collections.emptyList())); + final ByteBuf buf = Unpooled.buffer(result.length); + parser.serializeMessage(new OpenBuilder().setOpenMessage(builder.build()).build(), buf); + assertArrayEquals(result, buf.array()); } @Test - public void testKeepAliveMessageValidationFromBin() throws IOException, PCEPDeserializerException, PCEPDocumentedException, - DeserializerException, DocumentedException { - assertEquals(deserMsg("src/test/resources/PCEPKeepAliveMessage1.bin"), asList(new PCEPKeepAliveMessage())); - assertEquals(deserMsg("src/test/resources/Keepalive.1.bin"), asList(new PCEPKeepAliveMessage())); + public void testKeepAliveMsg() throws IOException, PCEPDeserializerException, PCEPDocumentedException { + final byte[] result = new byte[] { }; + final PCEPKeepAliveMessageParser parser = new PCEPKeepAliveMessageParser(this.objectRegistry); + final KeepaliveBuilder builder = new KeepaliveBuilder().setKeepaliveMessage(new KeepaliveMessageBuilder().build()); + + assertEquals(builder.build(), parser.parseMessage(result, Collections.emptyList())); + final ByteBuf buf = Unpooled.buffer(result.length); + parser.serializeMessage(builder.build(), buf); + assertArrayEquals(result, buf.array()); } @Test - public void testCloseMsg() throws PCEPDeserializerException, IOException, PCEPDocumentedException, DeserializerException, - DocumentedException { - assertEquals(deserMsg("src/test/resources/PCEPCloseMessage1.bin"), - asList(new PCEPCloseMessage(new PCEPCloseObject(Reason.TOO_MANY_UNKNOWN_MSG)))); - assertEquals(deserMsg("src/test/resources/Close.1.bin"), asList(new PCEPCloseMessage(new PCEPCloseObject(Reason.UNKNOWN)))); - } + public void testCloseMsg() throws IOException, PCEPDeserializerException, PCEPDocumentedException { + final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPCloseMessage1.bin"); - @Test - public void testRequestMessageValidationFromBin() throws IOException, PCEPDeserializerException, PCEPDocumentedException, - DeserializerException, DocumentedException { - List requests = new ArrayList(); - final byte[] ipAdress = { (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF }; - requests.add(new CompositeRequestObject(new PCEPRequestParameterObject(true, false, false, false, false, false, false, false, (short) 5, 0xDEADBEEFL, true, false), new PCEPEndPointsObject(new IPv4Address(ipAdress), new IPv4Address(ipAdress)))); - PCEPRequestMessage specMessage = new PCEPRequestMessage(requests); - List deserMsgs = deserMsg("src/test/resources/PCEPRequestMessage1.bin"); - final List specMessages = new ArrayList(); - specMessages.add(specMessage); - - assertEquals(deserMsgs, specMessages); - - requests = new ArrayList(); - final byte[] ipAdress2 = { (byte) 0x7F, (byte) 0x00, (byte) 0x00, (byte) 0x01 }; - requests.add(new CompositeRequestObject(this.requestParameter, new PCEPEndPointsObject(new IPv4Address(ipAdress2), new IPv4Address(ipAdress2)))); - specMessage = new PCEPRequestMessage(requests); - deserMsgs = deserMsg("src/test/resources/PCReq.1.bin"); - specMessages.clear(); - specMessages.add(specMessage); - assertEquals(deserMsgs, specMessages); - - requests = new ArrayList(); - requests.add(new CompositeRequestObject(this.requestParameter, new PCEPEndPointsObject(new IPv4Address(ipAdress2), new IPv4Address(ipAdress2)), null, null, null, null, null, null, null, null, new PCEPLoadBalancingObject(3, new Bandwidth(1024.75f), false))); - specMessage = new PCEPRequestMessage(requests); - deserMsgs = deserMsg("src/test/resources/PCReq.2.bin"); - specMessages.clear(); - specMessages.add(specMessage); - assertEquals(deserMsgs, specMessages); - - requests = new ArrayList(); - requests.add(new CompositeRequestObject(this.requestParameter, new PCEPEndPointsObject(new IPv4Address(ipAdress2), new IPv4Address(ipAdress2)), null, new PCEPLspObject(1, false, false, true, false), PCEPValidatorTest.lspa, new PCEPRequestedPathBandwidthObject(new Bandwidth(1000), false, false), new ArrayList() { - private static final long serialVersionUID = 1L; - - { - this.add(new PCEPMetricObject(true, true, new IGPMetric(53L), false, false)); - } - }, new PCEPReportedRouteObject(this.rroSubobjects, false), new PCEPExistingPathBandwidthObject(new Bandwidth(5353), false, false), new PCEPIncludeRouteObject(this.eroSubobjects, false, false), new PCEPLoadBalancingObject(5, new Bandwidth(3f), false))); - - List svecList = new ArrayList(); - svecList.add(new CompositeRequestSvecObject(new PCEPSvecObject(true, false, false, false, false, this.requestIds, false))); - - specMessage = new PCEPRequestMessage(svecList, requests); - deserMsgs = deserMsg("src/test/resources/PCReq.3.bin"); - specMessages.clear(); - specMessages.add(specMessage); - assertEquals(deserMsgs, specMessages); - - specMessages.clear(); - requests = new ArrayList(); - requests.add(new CompositeRequestObject(this.requestParameter, new PCEPEndPointsObject(new IPv4Address(ipAdress2), new IPv4Address(ipAdress2)), null, null, null, null, null, null, null, null, null)); - specMessages.add(new PCEPRequestMessage(requests)); - - final byte[] ipAdress3 = { (byte) 0x7F, (byte) 0x00, (byte) 0x30, (byte) 0x01 }; - requests = new ArrayList(); - requests.add(new CompositeRequestObject(new PCEPRequestParameterObject(false, false, false, false, false, false, false, false, (short) 4, 1, true, false), new PCEPEndPointsObject(new IPv4Address(ipAdress3), new IPv4Address(ipAdress2)), null, null, null, null, null, null, null, null, null)); - specMessages.add(new PCEPRequestMessage(requests)); - - final byte[] ipAdress4 = { (byte) 0x7F, (byte) 0x30, (byte) 0x00, (byte) 0x01 }; - requests = new ArrayList(); - requests.add(new CompositeRequestObject(this.requestParameter, new PCEPEndPointsObject(new IPv4Address(ipAdress2), new IPv4Address(ipAdress4)), null, null, null, null, null, null, null, null, null)); - specMessages.add(new PCEPRequestMessage(requests)); - - final byte[] ipAdress5 = { (byte) 0x7F, (byte) 0xd0, (byte) 0x00, (byte) 0x01 }; - requests = new ArrayList(); - requests.add(new CompositeRequestObject(new PCEPRequestParameterObject(true, false, false, false, false, false, false, false, (short) 1, 1, true, false), new PCEPEndPointsObject(new IPv4Address(ipAdress5), new IPv4Address(ipAdress5)), null, null, null, null, null, null, null, null, null)); - - specMessages.add(new PCEPRequestMessage(requests)); - deserMsgs = deserMsg("src/test/resources/PCReq.4.bin"); - assertEquals(deserMsgs, specMessages); - - specMessages.clear(); - svecList = new ArrayList(); - svecList.add(new CompositeRequestSvecObject(new PCEPSvecObject(true, false, false, false, false, this.requestIds, false))); - svecList.add(new CompositeRequestSvecObject(new PCEPSvecObject(false, true, true, false, false, this.requestIds, false), new PCEPObjectiveFunctionObject(PCEPOFCodes.MCC, true, false), new PCEPGlobalConstraintsObject((short) 0x55, (short) 1, (short) 100, (short) 0x26, true, false), new PCEPExcludeRouteObject(new ArrayList() { - private static final long serialVersionUID = 1L; - - { - this.add(new XROAsNumberSubobject(new ASNumber(0x12), true)); - } - }, true, true, false), new ArrayList() { - private static final long serialVersionUID = 1L; - - { - this.add(new PCEPMetricObject(true, true, new TEMetric(123456L), true, false)); - } - })); - - requests = new ArrayList(); - requests.add(new CompositeRequestObject(this.requestParameter, new PCEPEndPointsObject(new IPv4Address(ipAdress2), new IPv4Address(ipAdress2)), null, null, PCEPValidatorTest.lspa, new PCEPRequestedPathBandwidthObject(new Bandwidth(1000), false, false), new ArrayList() { - private static final long serialVersionUID = 1L; - - { - this.add(new PCEPMetricObject(true, true, new IGPMetric(53L), false, false)); - this.add(new PCEPMetricObject(true, true, new IGPMetric(5335L), false, false)); - this.add(new PCEPMetricObject(true, true, new IGPMetric(128256), false, false)); - } - }, new PCEPReportedRouteObject(this.rroSubobjects, false), new PCEPExistingPathBandwidthObject(new Bandwidth(5353), false, false), new PCEPIncludeRouteObject(this.eroSubobjects, false, false), new PCEPLoadBalancingObject(5, new Bandwidth(3f), false))); - - final byte[] ipAdress6 = { (byte) 0x7F, (byte) 0xF0, (byte) 0x00, (byte) 0x01 }; - specMessages.add(new PCEPRequestMessage(svecList, requests)); - - requests = new ArrayList(); - requests.add(new CompositeRequestObject(this.requestParameter, new PCEPEndPointsObject(new IPv4Address(ipAdress6), new IPv4Address(ipAdress6)), null, null, PCEPValidatorTest.lspa, new PCEPRequestedPathBandwidthObject(new Bandwidth(1000), false, false), new ArrayList() { - private static final long serialVersionUID = 1L; - - { - this.add(new PCEPMetricObject(true, true, new IGPMetric(53L), false, false)); - } - }, new PCEPReportedRouteObject(this.rroSubobjects, false), new PCEPExistingPathBandwidthObject(new Bandwidth(5353), false, false), new PCEPIncludeRouteObject(this.eroSubobjects, false, false), new PCEPLoadBalancingObject(5, new Bandwidth(3f), false))); - deserMsgs = deserMsg("src/test/resources/PCReq.5.bin"); - specMessages.add(new PCEPRequestMessage(svecList, requests)); - assertEquals(deserMsgs, specMessages); - - // FIXME: need construct with invalid processed parameter - // assertEquals(deserMsg("src/test/resources/PCReq.6.invalid.bin"), - // asList( - // new PCEPErrorMessage(new CompositeErrorObject(new - // PCEPRequestParameterObject(true, false, false, false, false, false, - // false, false, (short) 3, - // 1L, false, false), new PCEPErrorObject(PCEPErrors.P_FLAG_NOT_SET))), - // new PCEPRequestMessage(asList(new - // CompositeRequestObject(this.requestParameter, new - // PCEPEndPointsObject(IPv4Address - // .getNetworkAddressFactory().getNetworkAddressForBytes(new byte[] { - // 127, 0, 0, 1 }), IPv4Address.getNetworkAddressFactory() - // .getNetworkAddressForBytes(new byte[] { 127, 0, 0, 1 })), null, null, - // null, null, null, null, null, null, new PCEPLoadBalancingObject( - // 3, new Bandwidth(1024.75), false)))))); + final PCEPCloseMessageParser parser = new PCEPCloseMessageParser(this.objectRegistry); + final CloseBuilder builder = new CloseBuilder().setCCloseMessage(new CCloseMessageBuilder().setCClose( + new CCloseBuilder().setIgnore(false).setProcessingRule(false).setReason((short) 5).build()).build()); + assertEquals(builder.build(), parser.parseMessage(result, Collections.emptyList())); + final ByteBuf buf = Unpooled.buffer(result.length); + parser.serializeMessage(builder.build(), buf); + assertArrayEquals(result, buf.array()); } - @Test - public void testRequestMessageValidationFromRawMsg() throws PCEPDeserializerException { - List objs = new ArrayList(); - List msgs; - PCEPRequestParameterObject tmpRP; - - // test unrecognized object in svec list - objs.add(this.svecObj); - objs.add(new UnknownObject(true, false, PCEPErrors.UNRECOGNIZED_OBJ_CLASS)); - objs.add(new PCEPSvecObject(true, true, true, false, false, PCEPValidatorTest.this.requestIds, true)); - - msgs = PCEPMessageValidator.getValidator(PCEPMessageType.REQUEST).validate(objs); - - assertEquals(msgs.get(0), new PCEPErrorMessage(new ArrayList() { - private static final long serialVersionUID = 1L; - - { - this.add(new PCEPErrorObject(PCEPErrors.UNRECOGNIZED_OBJ_CLASS)); - } - })); - - // test with request p flag not set and ignoracion of more than one - // end-points objects - objs = new ArrayList(); - objs.add(this.svecObj); - objs.add(this.svecObj); - tmpRP = new PCEPRequestParameterObject(true, false, false, false, false, false, false, false, (short) 3, 1, false, false); - objs.add(tmpRP); - objs.add(this.endPoints); - - objs.add(this.requestParameter); - objs.add(this.endPoints); - objs.add(this.endPoints); - // FIXME:mv use object constructor with set processed flag - // objs.add(this.classTypeProvider); - // objs.add(this.requestParameter); - // objs.add(this.endPointsProvider); - // objs.add(new PCEPClassTypeObjectProvider((short) 7, false)); - - msgs = PCEPMessageValidator.getValidator(PCEPMessageType.REQUEST).validate(objs); - // FIXME:mv use object constructor with set processed flag - // assertEquals(msgs.get(0), new PCEPErrorMessage(new - // CompositeErrorObject(tmpRP, new - // PCEPErrorObject(PCEPErrors.P_FLAG_NOT_SET)))); - // assertEquals( - // msgs.get(1), - // new PCEPRequestMessage(asList(new - // CompositeRequestSvecObject(this.svecObj), new - // CompositeRequestSvecObject(this.svecObj)), Util - // .asList(new CompositeRequestObject(this.requestParameter, - // this.endPoints, this.classType, null, null, null, null, null, null, - // null, - // null)))); - // assertEquals(msgs.get(2), new PCEPErrorMessage(new - // CompositeErrorObject(tmpRP, new - // PCEPErrorObject(PCEPErrors.P_FLAG_NOT_SET)))); - } + // @Test + // public void testRequestMessageValidationFromBin() throws IOException, PCEPDeserializerException, + // PCEPDocumentedException, + // DeserializerException, DocumentedException { + // List requests = new ArrayList(); + // final byte[] ipAdress = { (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF }; + // requests.add(new CompositeRequestObject(new PCEPRequestParameterObject(true, false, false, false, false, false, + // false, false, (short) 5, 0xDEADBEEFL, true, false), new PCEPEndPointsObject(new + // IPv4Address(ipAdress), new IPv4Address(ipAdress)))); + // PCEPRequestMessage specMessage = new PCEPRequestMessage(requests); + // List deserMsgs = deserMsg("src/test/resources/PCEPRequestMessage1.bin"); + // final List specMessages = Lists.newArrayList(); + // specMessages.add(specMessage); + // + // assertEquals(deserMsgs.toString(), specMessages.toString()); + // + // requests = new ArrayList(); + // final byte[] ipAdress2 = { (byte) 0x7F, (byte) 0x00, (byte) 0x00, (byte) 0x01 }; + // requests.add(new CompositeRequestObject(this.requestParameter, new PCEPEndPointsObject(new + // IPv4Address(ipAdress2), new IPv4Address(ipAdress2)))); + // specMessage = new PCEPRequestMessage(requests); + // deserMsgs = deserMsg("src/test/resources/PCReq.1.bin"); + // specMessages.clear(); + // specMessages.add(specMessage); + // assertEquals(deserMsgs.toString(), specMessages.toString()); + // + // requests = new ArrayList(); + // requests.add(new CompositeRequestObject(this.requestParameter, new PCEPEndPointsObject(new + // IPv4Address(ipAdress2), new IPv4Address(ipAdress2)), null, null, null, null, null, null, null, null, new + // PCEPLoadBalancingObject(3, new Bandwidth(ByteArray.floatToBytes((float) 1024.75)), false))); + // specMessage = new PCEPRequestMessage(requests); + // deserMsgs = deserMsg("src/test/resources/PCReq.2.bin"); + // specMessages.clear(); + // specMessages.add(specMessage); + // assertEquals(deserMsgs.toString(), specMessages.toString()); + // + // requests = new ArrayList(); + // requests.add(new CompositeRequestObject(this.requestParameter, new PCEPEndPointsObject(new + // IPv4Address(ipAdress2), new IPv4Address(ipAdress2)), null, new PCEPLspObject(1, false, false, true, false), + // PCEPValidatorTest.lspa, new PCEPRequestedPathBandwidthObject(new Bandwidth(ByteArray.floatToBytes(1000)), false, + // false), new ArrayList() { + // private static final long serialVersionUID = 1L; + // + // { + // this.add(new PCEPMetricObject(true, true, new IGPMetric(53L), false, false)); + // } + // }, new PCEPReportedRouteObject(this.rroSubobjects, false), new PCEPExistingPathBandwidthObject(new + // Bandwidth(ByteArray.floatToBytes(5353)), false, false), new PCEPIncludeRouteObject(this.eroSubobjects, false, + // false), new PCEPLoadBalancingObject(5, new Bandwidth(ByteArray.floatToBytes(3)), false))); + // + // List svecList = new ArrayList(); + // svecList.add(new CompositeRequestSvecObject(new PCEPSvecObject(true, false, false, false, false, this.requestIds, + // false))); + // + // specMessage = new PCEPRequestMessage(svecList, requests); + // deserMsgs = deserMsg("src/test/resources/PCReq.3.bin"); + // specMessages.clear(); + // specMessages.add(specMessage); + // // FIXME BUG-89 + // // assertEquals(deserMsgs, specMessages); + // + // specMessages.clear(); + // requests = new ArrayList(); + // requests.add(new CompositeRequestObject(this.requestParameter, new PCEPEndPointsObject(new + // IPv4Address(ipAdress2), new IPv4Address(ipAdress2)), null, null, null, null, null, null, null, null, null)); + // specMessages.add(new PCEPRequestMessage(requests)); + // + // final byte[] ipAdress3 = { (byte) 0x7F, (byte) 0x00, (byte) 0x30, (byte) 0x01 }; + // requests = new ArrayList(); + // requests.add(new CompositeRequestObject(new PCEPRequestParameterObject(false, false, false, false, false, false, + // false, false, (short) 4, 1, true, false), new PCEPEndPointsObject(new IPv4Address(ipAdress3), new + // IPv4Address(ipAdress2)), null, null, null, null, null, null, null, null, null)); + // specMessages.add(new PCEPRequestMessage(requests)); + // + // final byte[] ipAdress4 = { (byte) 0x7F, (byte) 0x30, (byte) 0x00, (byte) 0x01 }; + // requests = new ArrayList(); + // requests.add(new CompositeRequestObject(this.requestParameter, new PCEPEndPointsObject(new + // IPv4Address(ipAdress2), new IPv4Address(ipAdress4)), null, null, null, null, null, null, null, null, null)); + // specMessages.add(new PCEPRequestMessage(requests)); + // + // final byte[] ipAdress5 = { (byte) 0x7F, (byte) 0xd0, (byte) 0x00, (byte) 0x01 }; + // requests = new ArrayList(); + // requests.add(new CompositeRequestObject(new PCEPRequestParameterObject(true, false, false, false, false, false, + // false, false, (short) 1, 1, true, false), new PCEPEndPointsObject(new IPv4Address(ipAdress5), new + // IPv4Address(ipAdress5)), null, null, null, null, null, null, null, null, null)); + // + // specMessages.add(new PCEPRequestMessage(requests)); + // deserMsgs = deserMsg("src/test/resources/PCReq.4.bin"); + // assertEquals(deserMsgs.toString(), specMessages.toString()); + // + // specMessages.clear(); + // svecList = new ArrayList(); + // svecList.add(new CompositeRequestSvecObject(new PCEPSvecObject(true, false, false, false, false, this.requestIds, + // false))); + // svecList.add(new CompositeRequestSvecObject(new PCEPSvecObject(false, true, true, false, false, this.requestIds, + // false), new PCEPObjectiveFunctionObject(PCEPOFCodes.MCC, true, false), new PCEPGlobalConstraintsObject((short) + // 0x55, (short) 1, (short) 100, (short) 0x26, true, false), new PCEPExcludeRouteObject(new + // ArrayList() { + // private static final long serialVersionUID = 1L; + // + // { + // this.add(new XROAsNumberSubobject(new AsNumber((long) 0x12), true)); + // } + // }, true, true, false), new ArrayList() { + // private static final long serialVersionUID = 1L; + // + // { + // this.add(new PCEPMetricObject(true, true, new TEMetric(123456L), true, false)); + // } + // })); + // + // requests = new ArrayList(); + // requests.add(new CompositeRequestObject(this.requestParameter, new PCEPEndPointsObject(new + // IPv4Address(ipAdress2), new IPv4Address(ipAdress2)), null, null, PCEPValidatorTest.lspa, new + // PCEPRequestedPathBandwidthObject(new Bandwidth(ByteArray.floatToBytes(1000)), false, false), new + // ArrayList() { + // private static final long serialVersionUID = 1L; + // + // { + // this.add(new PCEPMetricObject(true, true, new IGPMetric(53L), false, false)); + // this.add(new PCEPMetricObject(true, true, new IGPMetric(5335L), false, false)); + // this.add(new PCEPMetricObject(true, true, new IGPMetric(128256), false, false)); + // } + // }, new PCEPReportedRouteObject(this.rroSubobjects, false), new PCEPExistingPathBandwidthObject(new + // Bandwidth(ByteArray.floatToBytes(5353)), false, false), new PCEPIncludeRouteObject(this.eroSubobjects, false, + // false), new PCEPLoadBalancingObject(5, new Bandwidth(ByteArray.floatToBytes(3)), false))); + // + // final byte[] ipAdress6 = { (byte) 0x7F, (byte) 0xF0, (byte) 0x00, (byte) 0x01 }; + // specMessages.add(new PCEPRequestMessage(svecList, requests)); + // + // requests = new ArrayList(); + // requests.add(new CompositeRequestObject(this.requestParameter, new PCEPEndPointsObject(new + // IPv4Address(ipAdress6), new IPv4Address(ipAdress6)), null, null, PCEPValidatorTest.lspa, new + // PCEPRequestedPathBandwidthObject(new Bandwidth(ByteArray.floatToBytes(1000)), false, false), new + // ArrayList() { + // private static final long serialVersionUID = 1L; + // + // { + // this.add(new PCEPMetricObject(true, true, new IGPMetric(53L), false, false)); + // } + // }, new PCEPReportedRouteObject(this.rroSubobjects, false), new PCEPExistingPathBandwidthObject(new + // Bandwidth(ByteArray.floatToBytes(5353)), false, false), new PCEPIncludeRouteObject(this.eroSubobjects, false, + // false), new PCEPLoadBalancingObject(5, new Bandwidth(ByteArray.floatToBytes(3f)), false))); + // deserMsgs = deserMsg("src/test/resources/PCReq.5.bin"); + // specMessages.add(new PCEPRequestMessage(svecList, requests)); + // // FIXME + // // assertEquals(deserMsgs, specMessages); + // + // // FIXME: need construct with invalid processed parameter + // // assertEquals(deserMsg("src/test/resources/PCReq.6.invalid.bin"), + // // asList( + // // new PCEPErrorMessage(new CompositeErrorObject(new + // // PCEPRequestParameterObject(true, false, false, false, false, false, + // // false, false, (short) 3, + // // 1L, false, false), new PCEPErrorObject(PCEPErrors.P_FLAG_NOT_SET))), + // // new PCEPRequestMessage(asList(new + // // CompositeRequestObject(this.requestParameter, new + // // PCEPEndPointsObject(IPv4Address + // // .getNetworkAddressFactory().getNetworkAddressForBytes(new byte[] { + // // 127, 0, 0, 1 }), IPv4Address.getNetworkAddressFactory() + // // .getNetworkAddressForBytes(new byte[] { 127, 0, 0, 1 })), null, null, + // // null, null, null, null, null, null, new PCEPLoadBalancingObject( + // // 3, new Bandwidth(1024.75), false)))))); + // + // } + // + // @Test + // public void testRequestMessageValidationFromRawMsg() throws PCEPDeserializerException { + // List objs = new ArrayList(); + // List msgs; + // PCEPRequestParameterObject tmpRP; + // + // // test unrecognized object in svec list + // objs.add(this.svecObj); + // objs.add(new UnknownObject(true, false, PCEPErrors.UNRECOGNIZED_OBJ_CLASS)); + // objs.add(new PCEPSvecObject(true, true, true, false, false, PCEPValidatorTest.this.requestIds, true)); + // + // msgs = PCEPMessageValidator.getValidator(PCEPMessageType.REQUEST).validate(objs); + // + // assertEquals(msgs.get(0).toString(), new PCEPErrorMessage(new ArrayList() { + // private static final long serialVersionUID = 1L; + // + // { + // this.add(new PCEPErrorObject(PCEPErrors.UNRECOGNIZED_OBJ_CLASS)); + // } + // }).toString()); + // + // // test with request p flag not set and ignoracion of more than one + // // end-points objects + // objs = new ArrayList(); + // objs.add(this.svecObj); + // objs.add(this.svecObj); + // tmpRP = new PCEPRequestParameterObject(true, false, false, false, false, false, false, false, (short) 3, 1, + // false, false); + // objs.add(tmpRP); + // objs.add(this.endPoints); + // + // objs.add(this.requestParameter); + // objs.add(this.endPoints); + // objs.add(this.endPoints); + // // FIXME:mv use object constructor with set processed flag + // // objs.add(this.classTypeProvider); + // // objs.add(this.requestParameter); + // // objs.add(this.endPointsProvider); + // // objs.add(new PCEPClassTypeObjectProvider((short) 7, false)); + // + // msgs = PCEPMessageValidator.getValidator(PCEPMessageType.REQUEST).validate(objs); + // // FIXME:mv use object constructor with set processed flag + // // assertEquals(msgs.get(0), new PCEPErrorMessage(new + // // CompositeErrorObject(tmpRP, new + // // PCEPErrorObject(PCEPErrors.P_FLAG_NOT_SET)))); + // // assertEquals( + // // msgs.get(1), + // // new PCEPRequestMessage(asList(new + // // CompositeRequestSvecObject(this.svecObj), new + // // CompositeRequestSvecObject(this.svecObj)), Util + // // .asList(new CompositeRequestObject(this.requestParameter, + // // this.endPoints, this.classType, null, null, null, null, null, null, + // // null, + // // null)))); + // // assertEquals(msgs.get(2), new PCEPErrorMessage(new + // // CompositeErrorObject(tmpRP, new + // // PCEPErrorObject(PCEPErrors.P_FLAG_NOT_SET)))); + // } + // @Test - public void testReplyMessageValidatorFromBin() throws IOException, PCEPDeserializerException, PCEPDocumentedException, - DeserializerException, DocumentedException { - - List specMessages = new ArrayList(); - specMessages.add(new PCEPReplyMessage(asList(new CompositeResponseObject(new PCEPRequestParameterObject(true, false, false, false, false, false, false, false, (short) 5, 0xDEADBEEFL, true, true))))); - specMessages.add(new PCEPReplyMessage(asList(new CompositeResponseObject(new PCEPRequestParameterObject(true, true, true, false, false, false, false, false, (short) 7, 0x12345678L, false, false))))); - assertEquals(deserMsg("src/test/resources/PCEPReplyMessage1.bin"), specMessages); - - specMessages = new ArrayList(); - specMessages.add(new PCEPReplyMessage(asList(new CompositeResponseObject(new PCEPRequestParameterObject(true, false, false, false, false, false, false, false, (short) 3, 1, false, false))))); - assertEquals(deserMsg("src/test/resources/PCRep.1.bin"), specMessages); - - specMessages = new ArrayList(); - specMessages.add(new PCEPReplyMessage(asList(new CompositeResponseObject(new PCEPRequestParameterObject(true, false, false, false, false, false, false, false, (short) 3, 1, false, false))))); - specMessages.add(new PCEPReplyMessage(asList(new CompositeResponseObject(new PCEPRequestParameterObject(false, false, false, false, false, false, false, false, (short) 5, 2, false, false), new PCEPNoPathObject((short) 0, false, false), null, null, null, null, null, null)))); - assertEquals(deserMsg("src/test/resources/PCRep.2.bin"), specMessages); - - specMessages = new ArrayList(); - specMessages.add(new PCEPReplyMessage(asList(new CompositeResponseObject(new PCEPRequestParameterObject(true, false, false, false, false, false, false, false, (short) 3, 1, false, false), new PCEPNoPathObject((short) 1, true, false), new PCEPLspObject(1, true, true, false, true), PCEPValidatorTest.lspa, new PCEPRequestedPathBandwidthObject(new Bandwidth(500f), false, false), new ArrayList() { - private static final long serialVersionUID = 1L; - - { - this.add(new PCEPMetricObject(true, true, new IGPMetric(234), false, false)); - } - }, new PCEPIncludeRouteObject(this.eroSubobjects, false, false), new ArrayList() { - private static final long serialVersionUID = 1L; - - { - this.add(new CompositePathObject(new PCEPExplicitRouteObject(PCEPValidatorTest.this.eroSubobjects, false), lspa, new PCEPRequestedPathBandwidthObject(new Bandwidth(500f), false, false), new ArrayList() { - private static final long serialVersionUID = 1L; - - { - this.add(new PCEPMetricObject(true, true, new IGPMetric(234L), false, false)); - } - }, new PCEPIncludeRouteObject(PCEPValidatorTest.this.eroSubobjects, false, false))); - } - })))); - assertEquals(deserMsg("src/test/resources/PCRep.3.bin"), specMessages); - - specMessages = new ArrayList(); - specMessages.add(new PCEPReplyMessage(asList(new CompositeResponseObject(new PCEPRequestParameterObject(true, false, false, false, false, false, false, false, (short) 7, 1, false, false))))); - specMessages.add(new PCEPReplyMessage(asList(new CompositeResponseObject(new PCEPRequestParameterObject(true, false, false, false, false, false, false, false, (short) 1, 2, false, false))))); - specMessages.add(new PCEPReplyMessage(asList(new CompositeResponseObject(new PCEPRequestParameterObject(true, false, false, false, false, false, false, false, (short) 2, 4, false, false))))); - specMessages.add(new PCEPReplyMessage(asList(new CompositeResponseObject(new PCEPRequestParameterObject(false, false, false, false, false, false, false, false, (short) 3, 4, false, false))))); - specMessages.add(new PCEPReplyMessage(asList(new CompositeResponseObject(new PCEPRequestParameterObject(false, false, false, false, false, false, false, false, (short) 6, 5, false, false))))); - assertEquals(deserMsg("src/test/resources/PCRep.4.bin"), specMessages); - - specMessages = new ArrayList(); - final List requestIDs = new ArrayList(); - requestIDs.add(0x25069045L); - - final List metrics = new ArrayList(); - metrics.add(new PCEPMetricObject(true, true, new IGPMetric(234L), true, false)); - - final List svecList = new ArrayList(); - svecList.add(new CompositeReplySvecObject(new PCEPSvecObject(true, true, true, false, false, requestIDs, true), new PCEPObjectiveFunctionObject(PCEPOFCodes.MCC, true, false), metrics)); - - specMessages.add(new PCEPReplyMessage(asList(new CompositeResponseObject(new PCEPRequestParameterObject(true, false, false, false, false, false, false, false, (short) 3, 1, false, false), new PCEPNoPathObject((short) 1, true, false), null, PCEPValidatorTest.lspa, new PCEPRequestedPathBandwidthObject(new Bandwidth(500f), false, false), new ArrayList() { - private static final long serialVersionUID = 1L; - - { - this.add(new PCEPMetricObject(true, true, new IGPMetric(234), false, false)); - } - }, new PCEPIncludeRouteObject(this.eroSubobjects, false, false), new ArrayList() { - private static final long serialVersionUID = 1L; - - { - this.add(new CompositePathObject(new PCEPExplicitRouteObject(PCEPValidatorTest.this.eroSubobjects, false), lspa, new PCEPRequestedPathBandwidthObject(new Bandwidth(500f), false, false), new ArrayList() { - private static final long serialVersionUID = 1L; - - { - this.add(new PCEPMetricObject(true, true, new IGPMetric(234L), false, false)); - this.add(new PCEPMetricObject(true, true, new IGPMetric(5355L), false, false)); - this.add(new PCEPMetricObject(true, true, new IGPMetric(5353L), false, false)); - } - }, new PCEPIncludeRouteObject(PCEPValidatorTest.this.eroSubobjects, false, false))); - } - })), svecList)); - specMessages.add(new PCEPReplyMessage(asList(new CompositeResponseObject(new PCEPRequestParameterObject(true, false, false, false, false, false, false, false, (short) 3, 1, false, false), new PCEPNoPathObject((short) 1, true, false), null, PCEPValidatorTest.lspa, new PCEPRequestedPathBandwidthObject(new Bandwidth(500f), false, false), new ArrayList() { - private static final long serialVersionUID = 1L; - - { - this.add(new PCEPMetricObject(true, true, new IGPMetric(234), false, false)); - } - }, new PCEPIncludeRouteObject(this.eroSubobjects, false, false), new ArrayList() { - private static final long serialVersionUID = 1L; - - { - this.add(new CompositePathObject(new PCEPExplicitRouteObject(PCEPValidatorTest.this.eroSubobjects, false), lspa, new PCEPRequestedPathBandwidthObject(new Bandwidth(500f), false, false), new ArrayList() { - private static final long serialVersionUID = 1L; - - { - this.add(new PCEPMetricObject(true, true, new IGPMetric(234L), false, false)); - } - }, new PCEPIncludeRouteObject(PCEPValidatorTest.this.eroSubobjects, false, false))); - this.add(new CompositePathObject(new PCEPExplicitRouteObject(PCEPValidatorTest.this.eroSubobjects, false), lspa, new PCEPRequestedPathBandwidthObject(new Bandwidth(500f), false, false), new ArrayList() { - private static final long serialVersionUID = 1L; - - { - this.add(new PCEPMetricObject(true, true, new IGPMetric(234L), false, false)); - } - }, new PCEPIncludeRouteObject(PCEPValidatorTest.this.eroSubobjects, false, false))); - } - })), svecList)); - assertEquals(deserMsg("src/test/resources/PCRep.5.bin"), specMessages); + public void testReplyMsg() throws IOException, PCEPDeserializerException, PCEPDocumentedException { + // only RP + byte[] result = ByteArray.fileToBytes("src/test/resources/PCRep.1.bin"); + + final PCEPReplyMessageParser parser = new PCEPReplyMessageParser(this.objectRegistry); + + final PcrepMessageBuilder builder = new PcrepMessageBuilder(); + RepliesBuilder rBuilder = new RepliesBuilder(); + + final List replies1 = Lists.newArrayList(); + rBuilder.setRp(this.rp); + replies1.add(rBuilder.build()); + builder.setReplies(replies1); + + assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(), parser.parseMessage(result, Collections.emptyList())); + ByteBuf buf = Unpooled.buffer(result.length); + parser.serializeMessage(new PcrepBuilder().setPcrepMessage(builder.build()).build(), buf); + assertArrayEquals(result, buf.array()); + + // simple Failure + result = ByteArray.fileToBytes("src/test/resources/PCRep.2.bin"); + final List replies2 = Lists.newArrayList(); + rBuilder = new RepliesBuilder(); + rBuilder.setRp(this.rp); + replies2.add(rBuilder.build()); + final RepliesBuilder rBuilder2 = new RepliesBuilder(); + rBuilder2.setRp(this.rp); + rBuilder2.setResult(new FailureBuilder().setNoPath(this.noPath).build()); + replies2.add(rBuilder2.build()); + builder.setReplies(replies2); + + assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(), parser.parseMessage(result, Collections.emptyList())); + buf = Unpooled.buffer(result.length); + parser.serializeMessage(new PcrepBuilder().setPcrepMessage(builder.build()).build(), buf); + assertArrayEquals(result, buf.array()); + + // Failure with attributes + result = ByteArray.fileToBytes("src/test/resources/PCRep.3.bin"); + final List replies3 = Lists.newArrayList(); + rBuilder = new RepliesBuilder(); + rBuilder.setRp(this.rp); + rBuilder.setResult(new FailureBuilder().setNoPath(this.noPath).setLspa(this.lspa).setMetrics(Lists.newArrayList(this.metrics)).setIro( + this.iro).build()); + replies3.add(rBuilder.build()); + builder.setReplies(replies3); + + assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(), parser.parseMessage(result, Collections.emptyList())); + buf = Unpooled.buffer(result.length); + parser.serializeMessage(new PcrepBuilder().setPcrepMessage(builder.build()).build(), buf); + assertArrayEquals(result, buf.array()); + + // Success + result = ByteArray.fileToBytes("src/test/resources/PCRep.5.bin"); + final List replies4 = Lists.newArrayList(); + rBuilder = new RepliesBuilder(); + rBuilder.setRp(this.rp); + final List paths = Lists.newArrayList(); + final PathsBuilder paBuilder = new PathsBuilder(); + paBuilder.setEro(this.ero); + paBuilder.setLspa(this.lspa); + paBuilder.setMetrics(Lists.newArrayList(this.metrics)); + paBuilder.setIro(this.iro); + paBuilder.setOf(this.of); + paths.add(paBuilder.build()); + rBuilder.setResult(new SuccessBuilder().setPaths(paths).build()).build(); + replies4.add(rBuilder.build()); + builder.setReplies(replies4); + + assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(), parser.parseMessage(result, Collections.emptyList())); + buf = Unpooled.buffer(result.length); + parser.serializeMessage(new PcrepBuilder().setPcrepMessage(builder.build()).build(), buf); + assertArrayEquals(result, buf.array()); } @Test - public void testUpdMessageValidatorFromBin() throws IOException, PCEPDeserializerException, PCEPDocumentedException, - DeserializerException, DocumentedException { - List specMessages = new ArrayList(); - - List requests = new ArrayList(); - requests.add(new CompositeUpdateRequestObject(new PCEPLspObject(1, true, false, true, true))); - - specMessages.add(new PCEPUpdateRequestMessage(requests)); - assertEquals(deserMsg("src/test/resources/PCUpd.1.bin"), specMessages); - - specMessages = new ArrayList(); - List paths = new ArrayList(); - paths.add(new CompositeUpdPathObject(new PCEPExplicitRouteObject(this.eroSubobjects, false), PCEPValidatorTest.lspa, null, null)); - requests = new ArrayList(); - requests.add(new CompositeUpdateRequestObject(new PCEPLspObject(1, true, false, true, true), paths)); - specMessages.add(new PCEPUpdateRequestMessage(requests)); - assertEquals(deserMsg("src/test/resources/PCUpd.2.bin"), specMessages); - - specMessages = new ArrayList(); - paths = new ArrayList(); - paths.add(new CompositeUpdPathObject(new PCEPExplicitRouteObject(this.eroSubobjects, false), PCEPValidatorTest.lspa, new PCEPRequestedPathBandwidthObject(new Bandwidth(5353), false, false), new ArrayList() { - private static final long serialVersionUID = 1L; - - { - this.add(new PCEPMetricObject(true, false, new IGPMetric(4L), false, false)); - } - })); - requests = new ArrayList(); - requests.add(new CompositeUpdateRequestObject(new PCEPLspObject(1, true, false, true, true), paths)); - specMessages.add(new PCEPUpdateRequestMessage(requests)); - assertEquals(deserMsg("src/test/resources/PCUpd.3.bin"), specMessages); - - specMessages = new ArrayList(); - requests = new ArrayList(); - requests.add(new CompositeUpdateRequestObject(new PCEPLspObject(1, true, false, true, true))); - requests.add(new CompositeUpdateRequestObject(new PCEPLspObject(1, true, false, true, true))); - specMessages.add(new PCEPUpdateRequestMessage(requests)); - assertEquals(deserMsg("src/test/resources/PCUpd.4.bin"), specMessages); - - specMessages = new ArrayList(); - requests = new ArrayList(); - requests.add(new CompositeUpdateRequestObject(new PCEPLspObject(1, true, false, true, true))); - paths = new ArrayList(); - paths.add(new CompositeUpdPathObject(new PCEPExplicitRouteObject(this.eroSubobjects, false), PCEPValidatorTest.lspa, new PCEPRequestedPathBandwidthObject(new Bandwidth(5353), false, false), new ArrayList() { - private static final long serialVersionUID = 1L; - - { - this.add(new PCEPMetricObject(true, false, new IGPMetric(4L), false, false)); - } - })); - requests.add(new CompositeUpdateRequestObject(new PCEPLspObject(1, true, false, true, true), paths)); - paths = new ArrayList(); - paths.add(new CompositeUpdPathObject(new PCEPExplicitRouteObject(this.eroSubobjects, false), PCEPValidatorTest.lspa, new PCEPRequestedPathBandwidthObject(new Bandwidth(5353), false, false), new ArrayList() { - private static final long serialVersionUID = 1L; - - { - this.add(new PCEPMetricObject(true, false, new IGPMetric(4L), false, false)); - } - })); - paths.add(new CompositeUpdPathObject(new PCEPExplicitRouteObject(this.eroSubobjects, false), PCEPValidatorTest.lspa, new PCEPRequestedPathBandwidthObject(new Bandwidth(5353), false, false), new ArrayList() { - private static final long serialVersionUID = 1L; - - { - this.add(new PCEPMetricObject(true, false, new IGPMetric(4L), false, false)); - } - })); - paths.add(new CompositeUpdPathObject(new PCEPExplicitRouteObject(this.eroSubobjects, false), PCEPValidatorTest.lspa, new PCEPRequestedPathBandwidthObject(new Bandwidth(5353), false, false), new ArrayList() { - private static final long serialVersionUID = 1L; - - { - this.add(new PCEPMetricObject(true, false, new IGPMetric(4L), false, false)); - this.add(new PCEPMetricObject(true, false, new IGPMetric(4L), false, false)); - } - })); - requests.add(new CompositeUpdateRequestObject(new PCEPLspObject(1, true, false, true, true), paths)); - specMessages.add(new PCEPUpdateRequestMessage(requests)); - assertEquals(deserMsg("src/test/resources/PCUpd.5.bin"), specMessages); + public void testUpdMsg() throws IOException, PCEPDeserializerException, PCEPDocumentedException { + byte[] result = ByteArray.fileToBytes("src/test/resources/PCUpd.2.bin"); + + final PCEPUpdateRequestMessageParser parser = new PCEPUpdateRequestMessageParser(this.objectRegistry); + + final PcupdMessageBuilder builder = new PcupdMessageBuilder(); + + final List updates = Lists.newArrayList(); + final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcupd.message.pcupd.message.updates.PathBuilder pBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcupd.message.pcupd.message.updates.PathBuilder(); + pBuilder.setEro(this.ero); + pBuilder.setLspa(this.lspa); + updates.add(new UpdatesBuilder().setSrp(this.srp).setLsp(this.lsp).setPath(pBuilder.build()).build()); + builder.setUpdates(updates); + + assertEquals(new PcupdBuilder().setPcupdMessage(builder.build()).build(), parser.parseMessage(result, Collections.emptyList())); + ByteBuf buf = Unpooled.buffer(result.length); + parser.serializeMessage(new PcupdBuilder().setPcupdMessage(builder.build()).build(), buf); + assertArrayEquals(result, buf.array()); + + result = ByteArray.fileToBytes("src/test/resources/PCUpd.5.bin"); + + final List updates1 = Lists.newArrayList(); + final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcupd.message.pcupd.message.updates.PathBuilder pBuilder1 = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcupd.message.pcupd.message.updates.PathBuilder(); + pBuilder1.setEro(this.ero); + pBuilder1.setLspa(this.lspa); + updates1.add(new UpdatesBuilder().setSrp(this.srp).setLsp(this.lsp).setPath(pBuilder.build()).build()); + updates1.add(new UpdatesBuilder().setSrp(this.srp).setLsp(this.lsp).setPath(pBuilder1.build()).build()); + builder.setUpdates(updates1); + + assertEquals(new PcupdBuilder().setPcupdMessage(builder.build()).build(), parser.parseMessage(result, Collections.emptyList())); + buf = Unpooled.buffer(result.length); + parser.serializeMessage(new PcupdBuilder().setPcupdMessage(builder.build()).build(), buf); + assertArrayEquals(result, buf.array()); } @Test - public void testRptMessageValidatorFromBin() throws IOException, PCEPDeserializerException, PCEPDocumentedException, - DeserializerException, DocumentedException { - List specMessages = new ArrayList(); - List reports = new ArrayList(); - reports.add(new CompositeStateReportObject(new PCEPLspObject(1, true, false, true, true))); - specMessages.add(new PCEPReportMessage(reports)); - assertEquals(deserMsg("src/test/resources/PCRpt.1.bin"), specMessages); - - specMessages = new ArrayList(); - List paths = new ArrayList(); - paths.add(new CompositeRptPathObject(new PCEPExplicitRouteObject(this.eroSubobjects, false), PCEPValidatorTest.lspa, null, null, null)); - reports = new ArrayList(); - reports.add(new CompositeStateReportObject(new PCEPLspObject(1, true, false, true, true), paths)); - specMessages.add(new PCEPReportMessage(reports)); - assertEquals(deserMsg("src/test/resources/PCRpt.2.bin"), specMessages); - - specMessages = new ArrayList(); - paths = new ArrayList(); - paths.add(new CompositeRptPathObject(new PCEPExplicitRouteObject(this.eroSubobjects, false), PCEPValidatorTest.lspa, new PCEPExistingPathBandwidthObject(new Bandwidth(5353), false, false), new PCEPReportedRouteObject(this.rroSubobjects, false), new ArrayList() { - private static final long serialVersionUID = 1L; - - { - this.add(new PCEPMetricObject(true, false, new IGPMetric(4L), false, false)); - } - })); - - reports = new ArrayList(); - reports.add(new CompositeStateReportObject(new PCEPLspObject(1, true, false, true, true), paths)); - specMessages.add(new PCEPReportMessage(reports)); - // FIXME: - // assertEquals(deserMsg("src/test/resources/PCRpt.3.bin"), specMessages); - - specMessages = new ArrayList(); - reports = new ArrayList(); - reports.add(new CompositeStateReportObject(new PCEPLspObject(1, true, false, true, true))); - reports.add(new CompositeStateReportObject(new PCEPLspObject(1, true, false, true, true))); - reports.add(new CompositeStateReportObject(new PCEPLspObject(1, true, false, true, true))); - specMessages.add(new PCEPReportMessage(reports)); - assertEquals(deserMsg("src/test/resources/PCRpt.4.bin"), specMessages); - - specMessages = new ArrayList(); - reports = new ArrayList(); - paths = new ArrayList(); - paths.add(new CompositeRptPathObject(new PCEPExplicitRouteObject(this.eroSubobjects, false), PCEPValidatorTest.lspa, new PCEPExistingPathBandwidthObject(new Bandwidth(5353), false, false), new PCEPReportedRouteObject(this.rroSubobjects, false), new ArrayList() { - private static final long serialVersionUID = 1L; - - { - this.add(new PCEPMetricObject(true, false, new IGPMetric(4L), false, false)); - } - })); - reports.add(new CompositeStateReportObject(new PCEPLspObject(1, true, false, true, true), paths)); - paths = new ArrayList(); - paths.add(new CompositeRptPathObject(new PCEPExplicitRouteObject(this.eroSubobjects, false), PCEPValidatorTest.lspa, new PCEPExistingPathBandwidthObject(new Bandwidth(5353), false, false), new PCEPReportedRouteObject(this.rroSubobjects, false), new ArrayList() { - private static final long serialVersionUID = 1L; - - { - this.add(new PCEPMetricObject(true, false, new IGPMetric(4L), false, false)); - this.add(new PCEPMetricObject(true, false, new IGPMetric(4L), false, false)); - this.add(new PCEPMetricObject(true, false, new IGPMetric(4L), false, false)); - } - })); - paths.add(new CompositeRptPathObject(new PCEPExplicitRouteObject(this.eroSubobjects, false), PCEPValidatorTest.lspa, new PCEPExistingPathBandwidthObject(new Bandwidth(5353), false, false), new PCEPReportedRouteObject(this.rroSubobjects, false), new ArrayList() { - private static final long serialVersionUID = 1L; - - { - this.add(new PCEPMetricObject(true, false, new IGPMetric(4L), false, false)); - } - })); - reports.add(new CompositeStateReportObject(new PCEPLspObject(1, true, false, true, true), paths)); - specMessages.add(new PCEPReportMessage(reports)); - // FIXME - // assertEquals(deserMsg("src/test/resources/PCRpt.5.bin"), specMessages); + public void testRptMsg() throws IOException, PCEPDeserializerException, PCEPDocumentedException { + byte[] result = ByteArray.fileToBytes("src/test/resources/PCRpt.1.bin"); + + final PCEPReportMessageParser parser = new PCEPReportMessageParser(this.objectRegistry); + + final PcrptMessageBuilder builder = new PcrptMessageBuilder(); + + final List reports = Lists.newArrayList(); + reports.add(new ReportsBuilder().setLsp(this.lsp).build()); + builder.setReports(reports); + + assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parser.parseMessage(result, Collections.emptyList())); + ByteBuf buf = Unpooled.buffer(result.length); + parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf); + assertArrayEquals(result, buf.array()); + + result = ByteArray.fileToBytes("src/test/resources/PCRpt.2.bin"); + + final List reports1 = Lists.newArrayList(); + reports1.add(new ReportsBuilder().setLsp(this.lsp).setPath(new PathBuilder().setEro(this.ero).setLspa(this.lspa).build()).build()); + builder.setReports(reports1); + + assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parser.parseMessage(result, Collections.emptyList())); + buf = Unpooled.buffer(result.length); + parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf); + assertArrayEquals(result, buf.array()); + + result = ByteArray.fileToBytes("src/test/resources/PCRpt.3.bin"); + + final List reports2 = Lists.newArrayList(); + final PathBuilder pBuilder = new PathBuilder(); + pBuilder.setEro(this.ero); + pBuilder.setLspa(this.lspa); + pBuilder.setMetrics(Lists.newArrayList(this.metrics, this.metrics)); + pBuilder.setRro(this.rro); + reports2.add(new ReportsBuilder().setSrp(this.srp).setLsp(this.lsp).setPath(pBuilder.build()).build()); + builder.setReports(reports2); + + assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parser.parseMessage(result, Collections.emptyList())); + buf = Unpooled.buffer(result.length); + parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf); + assertArrayEquals(result, buf.array()); + + result = ByteArray.fileToBytes("src/test/resources/PCRpt.5.bin"); + + final List reports3 = Lists.newArrayList(); + final PathBuilder pBuilder1 = new PathBuilder(); + pBuilder1.setEro(this.ero); + pBuilder1.setLspa(this.lspa); + pBuilder1.setMetrics(Lists.newArrayList(this.metrics, this.metrics)); + pBuilder1.setRro(this.rro); + reports3.add(new ReportsBuilder().setSrp(this.srp).setLsp(this.lsp).setPath(pBuilder.build()).build()); + reports3.add(new ReportsBuilder().setSrp(this.srp).setLsp(this.lsp).setPath(pBuilder1.build()).build()); + builder.setReports(reports3); + + assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parser.parseMessage(result, Collections.emptyList())); + buf = Unpooled.buffer(result.length); + parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf); + assertArrayEquals(result, buf.array()); } @Test - public void testPCCreateMessage() throws DeserializerException, DocumentedException, PCEPDeserializerException { - final List insts = new ArrayList(); - final List subs = new ArrayList(); - subs.add(new EROAsNumberSubobject(new ASNumber(10), false)); - final List tlvs = new ArrayList(); - final LSPSymbolicNameTlv tlv = new LSPSymbolicNameTlv(new LSPSymbolicName(new byte[] { 5, 4 })); - tlvs.add(tlv); - insts.add(new CompositeInstantiationObject(new PCEPEndPointsObject(IPv4.FAMILY.addressForString("127.0.0.2"), IPv4.FAMILY.addressForString("127.0.0.1")), PCEPValidatorTest.lspa, new PCEPExplicitRouteObject(subs, true), null, new ArrayList() { - private static final long serialVersionUID = 1L; - - { - this.add(new PCEPMetricObject(true, false, new IGPMetric(4L), false, false)); - this.add(new PCEPMetricObject(true, false, new IGPMetric(4L), false, false)); - this.add(new PCEPMetricObject(true, false, new IGPMetric(4L), false, false)); - } - })); - final PCCreateMessage msg = new PCCreateMessage(insts); - - final byte[] bytes = msgFactory.put(msg); - - // FIXME: need construct with invalid processed parameter - final PCEPRawMessage rawMessage = (PCEPRawMessage) msgFactory.parse(bytes).get(0); - - assertEquals(PCEPMessageValidator.getValidator(rawMessage.getMsgType()).validate(rawMessage.getAllObjects()), - asList((PCEPMessage) msg)); + public void testPcinitMsg() throws IOException, PCEPDeserializerException, PCEPDocumentedException { + final byte[] result = ByteArray.fileToBytes("src/test/resources/Pcinit.bin"); + + final PcinitiateMessageParser parser = new PcinitiateMessageParser(this.objectRegistry); + + final PcinitiateMessageBuilder builder = new PcinitiateMessageBuilder(); + final RequestsBuilder rBuilder = new RequestsBuilder(); + + final List reqs = Lists.newArrayList(); + rBuilder.setSrp(this.srp); + rBuilder.setLsp(this.lsp); + rBuilder.setEro(this.ero); + rBuilder.setLspa(this.lspa); + rBuilder.setMetrics(Lists.newArrayList(this.metrics)); + rBuilder.setIro(this.iro); + reqs.add(rBuilder.build()); + builder.setRequests(reqs); + + assertEquals(new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build(), parser.parseMessage(result, Collections.emptyList())); + final ByteBuf buf = Unpooled.buffer(result.length); + parser.serializeMessage(new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build(), buf); + assertArrayEquals(result, buf.array()); } @Test - public void testNotificationValidatorFromBin() throws IOException, PCEPDeserializerException, PCEPDocumentedException, - DeserializerException, DocumentedException { - List notifications = new ArrayList(); - List notificationsList = new ArrayList(); - notificationsList.add(new PCEPNotificationObject((short) 1, (short) 1)); - notifications.add(new CompositeNotifyObject(notificationsList)); - PCEPNotificationMessage specMessage = new PCEPNotificationMessage(notifications); - assertEquals(deserMsg("src/test/resources/PCNtf.1.bin"), asList((PCEPMessage) specMessage)); - - notifications = new ArrayList(); - notificationsList = new ArrayList(); - notificationsList.add(new PCEPNotificationObject((short) 1, (short) 1)); - List requestsList = new ArrayList(); - requestsList.add(new PCEPRequestParameterObject(true, false, false, false, false, false, false, false, (short) 3, 1, false, false)); - notifications.add(new CompositeNotifyObject(requestsList, notificationsList)); - specMessage = new PCEPNotificationMessage(notifications); - assertEquals(deserMsg("src/test/resources/PCNtf.2.bin"), asList((PCEPMessage) specMessage)); - - notifications = new ArrayList(); - notificationsList = new ArrayList(); - notificationsList.add(new PCEPNotificationObject((short) 1, (short) 1)); - requestsList = new ArrayList(); - requestsList.add(new PCEPRequestParameterObject(true, false, false, false, false, false, false, false, (short) 1, 10, false, false)); - notifications.add(new CompositeNotifyObject(requestsList, notificationsList)); - specMessage = new PCEPNotificationMessage(notifications); - assertEquals(deserMsg("src/test/resources/PCNtf.3.bin"), asList((PCEPMessage) specMessage)); - - notifications = new ArrayList(); - notificationsList = new ArrayList(); - notificationsList.add(new PCEPNotificationObject((short) 1, (short) 1)); - notificationsList.add(new PCEPNotificationObject((short) 1, (short) 2)); - notificationsList.add(new PCEPNotificationObject((short) 2, (short) 1)); - notificationsList.add(new PCEPNotificationObject((short) 2, (short) 2)); - notifications.add(new CompositeNotifyObject(notificationsList)); - specMessage = new PCEPNotificationMessage(notifications); - assertEquals(deserMsg("src/test/resources/PCNtf.4.bin"), asList((PCEPMessage) specMessage)); - - notifications = new ArrayList(); - notificationsList = new ArrayList(); - notificationsList.add(new PCEPNotificationObject((short) 1, (short) 1)); - requestsList = new ArrayList(); - requestsList.add(new PCEPRequestParameterObject(true, false, false, false, false, false, false, false, (short) 1, 10, false, false)); - notifications.add(new CompositeNotifyObject(requestsList, notificationsList)); - notificationsList = new ArrayList(); - notificationsList.add(new PCEPNotificationObject((short) 1, (short) 1)); - notificationsList.add(new PCEPNotificationObject((short) 1, (short) 1)); - requestsList = new ArrayList(); - requestsList.add(new PCEPRequestParameterObject(true, false, false, false, false, false, false, false, (short) 1, 10, false, false)); - requestsList.add(new PCEPRequestParameterObject(true, false, false, false, false, false, false, false, (short) 1, 10, false, false)); - notifications.add(new CompositeNotifyObject(requestsList, notificationsList)); - specMessage = new PCEPNotificationMessage(notifications); - assertEquals(deserMsg("src/test/resources/PCNtf.5.bin"), asList((PCEPMessage) specMessage)); + public void testNotificationMsg() throws IOException, PCEPDeserializerException, PCEPDocumentedException { + final CNotification cn1 = new CNotificationBuilder().setIgnore(false).setProcessingRule(false).setType((short) 1).setValue( + (short) 1).build(); + + final List innerNot = Lists.newArrayList(); + innerNot.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcntf.message.pcntf.message.notifications.NotificationsBuilder().setCNotification( + cn1).build()); + final List rps = Lists.newArrayList(); + rps.add(new RpsBuilder().setRp(this.rp).build()); + + final byte[] result = ByteArray.fileToBytes("src/test/resources/PCNtf.5.bin"); + + final PCEPNotificationMessageParser parser = new PCEPNotificationMessageParser(this.objectRegistry); + final PcntfMessageBuilder builder = new PcntfMessageBuilder(); + + final List nots = Lists.newArrayList(); + final NotificationsBuilder b = new NotificationsBuilder(); + b.setNotifications(innerNot); + b.setRps(rps); + nots.add(b.build()); + + final List innerNot1 = Lists.newArrayList(); + innerNot1.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcntf.message.pcntf.message.notifications.NotificationsBuilder().setCNotification( + cn1).build()); + innerNot1.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcntf.message.pcntf.message.notifications.NotificationsBuilder().setCNotification( + cn1).build()); + final List rps1 = Lists.newArrayList(); + rps1.add(new RpsBuilder().setRp(this.rp).build()); + rps1.add(new RpsBuilder().setRp(this.rp).build()); + + b.setNotifications(innerNot1); + b.setRps(rps1); + nots.add(b.build()); + builder.setNotifications(nots); + + assertEquals(new PcntfBuilder().setPcntfMessage(builder.build()).build(), parser.parseMessage(result, Collections.emptyList())); + final ByteBuf buf = Unpooled.buffer(result.length); + parser.serializeMessage(new PcntfBuilder().setPcntfMessage(builder.build()).build(), buf); + assertArrayEquals(result, buf.array()); } @Test - public void testErrorMessageValidatoinFromBin() throws IOException, PCEPDeserializerException, PCEPDocumentedException, - DeserializerException, DocumentedException { - List errorsList = new ArrayList(); - errorsList.add(new PCEPErrorObject(PCEPErrors.UNRECOGNIZED_OBJ_CLASS)); - - PCEPErrorMessage specMessage = new PCEPErrorMessage(errorsList); - assertEquals(deserMsg("src/test/resources/PCErr.1.bin"), asList((PCEPMessage) specMessage)); - - List requests = new ArrayList(); - requests.add(new PCEPRequestParameterObject(true, false, false, false, false, false, false, false, (short) 3, 1, false, false)); - - List errors = new ArrayList(); - errors.add(new CompositeErrorObject(requests, errorsList)); - - specMessage = new PCEPErrorMessage(errors); - assertEquals(deserMsg("src/test/resources/PCErr.2.bin"), asList((PCEPMessage) specMessage)); + public void testErrorMsg() throws IOException, PCEPDeserializerException, PCEPDocumentedException { + byte[] result = ByteArray.fileToBytes("src/test/resources/PCErr.3.bin"); - specMessage = new PCEPErrorMessage(new PCEPOpenObject(0, 0, 0), errorsList, null); - assertEquals(deserMsg("src/test/resources/PCErr.3.bin"), asList((PCEPMessage) specMessage)); + final ErrorObject error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false).setType((short) 3).setValue((short) 1).build(); - requests = new ArrayList(); - requests.add(new PCEPRequestParameterObject(true, false, false, false, false, false, false, false, (short) 1, 53, false, false)); + final PCEPErrorMessageParser parser = new PCEPErrorMessageParser(this.objectRegistry); - errors = new ArrayList(); - errors.add(new CompositeErrorObject(requests, errorsList)); + List innerErr = Lists.newArrayList(); + innerErr.add(new ErrorsBuilder().setErrorObject(error1).build()); - specMessage = new PCEPErrorMessage(errors); - assertEquals(deserMsg("src/test/resources/PCErr.3b.bin"), asList((PCEPMessage) specMessage)); + final PcerrMessageBuilder builder = new PcerrMessageBuilder(); + builder.setErrors(innerErr); + builder.setErrorType(new SessionBuilder().setOpen(this.open).build()); - errorsList = new ArrayList(); - errorsList.add(new PCEPErrorObject(PCEPErrors.UNRECOGNIZED_OBJ_CLASS)); - errorsList.add(new PCEPErrorObject(PCEPErrors.UNRECOGNIZED_OBJ_CLASS)); - errorsList.add(new PCEPErrorObject(PCEPErrors.UNRECOGNIZED_OBJ_CLASS)); + assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), parser.parseMessage(result, Collections.emptyList())); + ByteBuf buf = Unpooled.buffer(result.length); + parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf); + assertArrayEquals(result, buf.array()); - specMessage = new PCEPErrorMessage(null, errorsList, null); - assertEquals(deserMsg("src/test/resources/PCErr.4.bin"), asList((PCEPMessage) specMessage)); + result = ByteArray.fileToBytes("src/test/resources/PCErr.5.bin"); - requests = new ArrayList(); - requests.add(new PCEPRequestParameterObject(true, false, false, false, false, false, false, false, (short) 1, 53, false, false)); + final List rps = Lists.newArrayList(); + rps.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.error.type.request.RpsBuilder().setRp( + this.rp).build()); - errorsList = new ArrayList(); - errorsList.add(new PCEPErrorObject(PCEPErrors.UNRECOGNIZED_OBJ_CLASS)); + innerErr = Lists.newArrayList(); + innerErr.add(new ErrorsBuilder().setErrorObject(error1).build()); - errors = new ArrayList(); - errors.add(new CompositeErrorObject(requests, errorsList)); - errors.add(new CompositeErrorObject(requests, errorsList)); + builder.setErrors(innerErr); + builder.setErrorType(new RequestBuilder().setRps(rps).build()); - specMessage = new PCEPErrorMessage(errors); - assertEquals(deserMsg("src/test/resources/PCErr.5.bin"), asList((PCEPMessage) specMessage)); + assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), parser.parseMessage(result, Collections.emptyList())); + buf = Unpooled.buffer(result.length); + parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf); + assertArrayEquals(result, buf.array()); } }