X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=pcep%2Fietf-stateful07%2Fsrc%2Ftest%2Fjava%2Forg%2Fopendaylight%2Fprotocol%2Fpcep%2Fietf%2FPCEPValidatorTest.java;h=5c7ba9ad113faeb5f168870f916b8b94dbb48ec8;hb=eee2e6c12ec171c7e7c3a7f938c66b75ae461cc4;hp=61ea60a9221244a6699e9c9d9fbb681e880c3e60;hpb=76ccbfa224b04fad4b4eefc505ead610ddce1f7c;p=bgpcep.git diff --git a/pcep/ietf-stateful07/src/test/java/org/opendaylight/protocol/pcep/ietf/PCEPValidatorTest.java b/pcep/ietf-stateful07/src/test/java/org/opendaylight/protocol/pcep/ietf/PCEPValidatorTest.java index 61ea60a922..5c7ba9ad11 100644 --- a/pcep/ietf-stateful07/src/test/java/org/opendaylight/protocol/pcep/ietf/PCEPValidatorTest.java +++ b/pcep/ietf-stateful07/src/test/java/org/opendaylight/protocol/pcep/ietf/PCEPValidatorTest.java @@ -9,100 +9,86 @@ package org.opendaylight.protocol.pcep.ietf; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; + +import com.google.common.collect.Lists; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; - import java.io.IOException; +import java.util.ArrayList; import java.util.Collections; import java.util.List; - import org.junit.Before; import org.junit.Test; import org.opendaylight.protocol.pcep.ietf.initiated00.CInitiated00PCInitiateMessageParser; import org.opendaylight.protocol.pcep.ietf.initiated00.CrabbeInitiatedActivator; +import org.opendaylight.protocol.pcep.ietf.stateful07.Stateful07ErrorMessageParser; import org.opendaylight.protocol.pcep.ietf.stateful07.Stateful07PCReportMessageParser; import org.opendaylight.protocol.pcep.ietf.stateful07.Stateful07PCUpdateRequestMessageParser; import org.opendaylight.protocol.pcep.ietf.stateful07.StatefulActivator; -import org.opendaylight.protocol.pcep.impl.Activator; -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.PCEPRequestMessageParser; -import org.opendaylight.protocol.pcep.spi.ObjectHandlerRegistry; +import org.opendaylight.protocol.pcep.parser.BaseParserExtensionActivator; +import org.opendaylight.protocol.pcep.parser.message.PCEPOpenMessageParser; import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException; import org.opendaylight.protocol.pcep.spi.pojo.SimplePCEPExtensionProviderContext; +import org.opendaylight.protocol.pcep.sync.optimizations.SyncOptimizationsActivator; import org.opendaylight.protocol.util.ByteArray; -import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address; +import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone; 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.crabbe.initiated.rev131126.Lsp1; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Lsp1Builder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.PcinitiateBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Srp1; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Srp1Builder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.pcinitiate.message.PcinitiateMessageBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.pcinitiate.message.pcinitiate.message.Requests; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.pcinitiate.message.pcinitiate.message.RequestsBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.OperationalStatus; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.PcrptBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.PcupdBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.PlspId; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.SrpIdNumber; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Tlvs1; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Tlvs1Builder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.Lsp; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.LspBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.lsp.TlvsBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcrpt.message.PcrptMessageBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcrpt.message.pcrpt.message.Reports; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcrpt.message.pcrpt.message.ReportsBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcupd.message.PcupdMessageBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcupd.message.pcupd.message.Updates; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcupd.message.pcupd.message.UpdatesBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcupd.message.pcupd.message.updates.PathBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.srp.object.Srp; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.srp.object.SrpBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.stateful.capability.tlv.Stateful; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.stateful.capability.tlv.StatefulBuilder; -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.network.concepts.rev131125.Bandwidth; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev171025.Lsp1; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev171025.Lsp1Builder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev171025.PcinitiateBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev171025.Srp1; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev171025.Srp1Builder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev171025.pcinitiate.message.PcinitiateMessageBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev171025.pcinitiate.message.pcinitiate.message.Requests; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev171025.pcinitiate.message.pcinitiate.message.RequestsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.OperationalStatus; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.PcrptBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.PcupdBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.PlspId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.SrpIdNumber; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.Tlvs1; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.Tlvs1Builder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.lsp.identifiers.tlv.LspIdentifiers; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.lsp.identifiers.tlv.LspIdentifiersBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.lsp.identifiers.tlv.lsp.identifiers.AddressFamily; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.lsp.identifiers.tlv.lsp.identifiers.address.family.Ipv4CaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.lsp.object.Lsp; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.lsp.object.LspBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.lsp.object.lsp.TlvsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcerr.pcerr.message.error.type.StatefulCaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcerr.pcerr.message.error.type.stateful._case.stateful.Srps; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcerr.pcerr.message.error.type.stateful._case.stateful.SrpsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcrpt.message.PcrptMessageBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcrpt.message.pcrpt.message.Reports; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcrpt.message.pcrpt.message.ReportsBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcupd.message.PcupdMessageBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcupd.message.pcupd.message.Updates; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcupd.message.pcupd.message.UpdatesBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcupd.message.pcupd.message.updates.PathBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.srp.object.Srp; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.srp.object.SrpBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.stateful.capability.tlv.Stateful; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.stateful.capability.tlv.StatefulBuilder; 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.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.PcreqBuilder; 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.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.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.endpoints.address.family.Ipv4CaseBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.address.family.ipv4._case.Ipv4Builder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.object.EndpointsObj; -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.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.Subobject; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.include.route.object.iro.SubobjectBuilder; -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.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; @@ -112,615 +98,567 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.typ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.error.type.SessionCaseBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.error.type.request._case.RequestBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.error.type.session._case.SessionBuilder; -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.FailureCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.replies.result.SuccessCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.replies.result.failure._case.NoPath; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.replies.result.failure._case.NoPathBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.replies.result.success._case.SuccessBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.replies.result.success._case.success.Paths; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.replies.result.success._case.success.PathsBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.PcreqMessageBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.requests.SegmentComputationBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.requests.segment.computation.P2pBuilder; 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.svec.object.Svec; -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.rsvp.rev130820.AttributeFilter; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.basic.explicit.route.subobjects.subobject.type.AsNumberCase; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.basic.explicit.route.subobjects.subobject.type.AsNumberCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.basic.explicit.route.subobjects.subobject.type.as.number._case.AsNumberBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.record.route.subobjects.subobject.type.UnnumberedCase; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.record.route.subobjects.subobject.type.UnnumberedCaseBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.record.route.subobjects.subobject.type.unnumbered._case.UnnumberedBuilder; - -import com.google.common.collect.Lists; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.AttributeFilter; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.Ipv4ExtendedTunnelId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.LspId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.TunnelId; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.AsNumberCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.AsNumberCaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.as.number._case.AsNumberBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.record.route.subobjects.subobject.type.UnnumberedCase; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.record.route.subobjects.subobject.type.UnnumberedCaseBuilder; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.record.route.subobjects.subobject.type.unnumbered._case.UnnumberedBuilder; public class PCEPValidatorTest { - private ObjectHandlerRegistry objectRegistry; - - private Rp rpTrue; - private Rp rpFalse; - 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 EndpointsObj endpoints; - private Svec svec; - - private AsNumberCase eroASSubobject; - private UnnumberedCase rroUnnumberedSub; - - private SimplePCEPExtensionProviderContext ctx; - private Activator act; - - @Before - public void setUp() throws Exception { - this.ctx = new SimplePCEPExtensionProviderContext(); - this.act = new Activator(); - this.act.start(this.ctx); - this.objectRegistry = this.ctx.getObjectHandlerRegistry(); - final RpBuilder rpBuilder = new RpBuilder(); - rpBuilder.setProcessingRule(true); - rpBuilder.setIgnore(false); - rpBuilder.setReoptimization(false); - rpBuilder.setBiDirectional(false); - rpBuilder.setLoose(true); - rpBuilder.setMakeBeforeBreak(false); - rpBuilder.setOrder(false); - rpBuilder.setPathKey(false); - rpBuilder.setSupplyOf(false); - rpBuilder.setFragmentation(false); - rpBuilder.setP2mp(false); - rpBuilder.setEroCompression(false); - rpBuilder.setPriority((short) 1); - rpBuilder.setRequestId(new RequestId(10L)); - this.rpTrue = rpBuilder.build(); - rpBuilder.setProcessingRule(false); - this.rpFalse = 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)); - lspaBuilder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lspa.object.lspa.TlvsBuilder().build()); - 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.network.concepts.rev131125.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 AsNumberCaseBuilder().setAsNumber( - new AsNumberBuilder().setAsNumber( - new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.AsNumber(0xFFFFL)).build()).build(); - - this.rroUnnumberedSub = new UnnumberedCaseBuilder().setUnnumbered( - new UnnumberedBuilder().setRouterId(0x00112233L).setInterfaceId(0x00ff00ffL).build()).build(); - - final IroBuilder iroBuilder = new IroBuilder(); - iroBuilder.setIgnore(false); - iroBuilder.setProcessingRule(false); - final List iroSubs = Lists.newArrayList(); - iroSubs.add(new SubobjectBuilder().setSubobjectType(this.eroASSubobject).build()); - iroBuilder.setSubobject(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.SubobjectBuilder().setSubobjectType( - this.eroASSubobject).setLoose(false).build()); - eroBuilder.setSubobject(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.SubobjectBuilder().setSubobjectType( - this.rroUnnumberedSub).setProtectionAvailable(false).setProtectionInUse(false).build()); - rroBuilder.setSubobject(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)); - srpBuilder.addAugmentation(Srp1.class, new Srp1Builder().setRemove(false).build()); - 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 TlvsBuilder().build()); - lspBuilder.addAugmentation(Lsp1.class, new Lsp1Builder().setCreate(false).build()); - this.lsp = lspBuilder.build(); - - final Ipv4Builder afi = new Ipv4Builder(); - afi.setSourceIpv4Address(new Ipv4Address("255.255.255.255")); - afi.setDestinationIpv4Address(new Ipv4Address("255.255.255.255")); - - final EndpointsObjBuilder epBuilder = new EndpointsObjBuilder(); - epBuilder.setIgnore(false); - epBuilder.setProcessingRule(true); - epBuilder.setAddressFamily(new Ipv4CaseBuilder().setIpv4(afi.build()).build()); - this.endpoints = epBuilder.build(); - - final SvecBuilder sBuilder = new SvecBuilder(); - sBuilder.setIgnore(false); - sBuilder.setProcessingRule(false); - sBuilder.setLinkDiverse(false); - sBuilder.setNodeDiverse(false); - sBuilder.setSrlgDiverse(false); - sBuilder.setRequestsIds(Lists.newArrayList(new RequestId(1L))); - this.svec = sBuilder.build(); - } - - @Test - public void testOpenMsg() throws IOException, PCEPDeserializerException { - try (StatefulActivator a = new StatefulActivator()) { - a.start(this.ctx); - final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPOpenMessage1.bin"); - final PCEPOpenMessageParser parser = new PCEPOpenMessageParser(this.ctx.getObjectHandlerRegistry()); - 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().setLspUpdateCapability(Boolean.TRUE).build(); - b.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.TlvsBuilder().addAugmentation( - Tlvs1.class, new Tlvs1Builder().setStateful(tlv1).build()).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 testKeepAliveMsg() throws IOException, PCEPDeserializerException { - 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 IOException, PCEPDeserializerException { - final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPCloseMessage1.bin"); - - 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 testRequestMsg() throws IOException, PCEPDeserializerException { - byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPRequestMessage1.bin"); - - final PCEPRequestMessageParser parser = new PCEPRequestMessageParser(this.objectRegistry); - - final PcreqMessageBuilder builder = new PcreqMessageBuilder(); - final List reqs1 = Lists.newArrayList(); - final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.RequestsBuilder rBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.RequestsBuilder(); - rBuilder.setRp(this.rpTrue); - rBuilder.setSegmentComputation(new SegmentComputationBuilder().setP2p(new P2pBuilder().setEndpointsObj(this.endpoints).build()).build()); - reqs1.add(rBuilder.build()); - builder.setRequests(reqs1); - - assertEquals(new PcreqBuilder().setPcreqMessage(builder.build()).build(), - parser.parseMessage(result, Collections. emptyList())); - ByteBuf buf = Unpooled.buffer(result.length); - parser.serializeMessage(new PcreqBuilder().setPcreqMessage(builder.build()).build(), buf); - - assertArrayEquals(result, buf.array()); - - result = ByteArray.fileToBytes("src/test/resources/PCReq.3.bin"); - - final List reqs2 = Lists.newArrayList(); - final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.RequestsBuilder rBuilder1 = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.RequestsBuilder(); - rBuilder1.setRp(this.rpTrue); - final P2pBuilder p2pBuilder = new P2pBuilder(); - p2pBuilder.setEndpointsObj(this.endpoints); - p2pBuilder.setMetrics(Lists.newArrayList(this.metrics)); - p2pBuilder.setIro(this.iro); - rBuilder1.setSegmentComputation(new SegmentComputationBuilder().setP2p(p2pBuilder.build()).build()); - reqs2.add(rBuilder1.build()); - builder.setRequests(reqs2); - builder.setSvec(Lists.newArrayList(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.SvecBuilder().setSvec( - this.svec).build())); - - assertEquals(new PcreqBuilder().setPcreqMessage(builder.build()).build(), - parser.parseMessage(result, Collections. emptyList())); - buf = Unpooled.buffer(result.length); - parser.serializeMessage(new PcreqBuilder().setPcreqMessage(builder.build()).build(), buf); - assertArrayEquals(result, buf.array()); - } - - @Test - public void testReplyMsg() throws IOException, PCEPDeserializerException { - // 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.rpTrue); - 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.rpTrue); - replies2.add(rBuilder.build()); - final RepliesBuilder rBuilder2 = new RepliesBuilder(); - rBuilder2.setRp(this.rpTrue); - rBuilder2.setResult(new FailureCaseBuilder().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.rpTrue); - rBuilder.setResult(new FailureCaseBuilder().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.rpTrue); - 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 SuccessCaseBuilder().setSuccess(new SuccessBuilder().setPaths(paths).build()).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 testUpdMsg() throws IOException, PCEPDeserializerException { - try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator()) { - a.start(this.ctx); - byte[] result = ByteArray.fileToBytes("src/test/resources/PCUpd.2.bin"); - - final Stateful07PCUpdateRequestMessageParser parser = new Stateful07PCUpdateRequestMessageParser(this.ctx.getObjectHandlerRegistry()); - - final PcupdMessageBuilder builder = new PcupdMessageBuilder(); - - final List updates = Lists.newArrayList(); - final PathBuilder pBuilder = new 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 PathBuilder pBuilder1 = new 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 testRptMsg() throws IOException, PCEPDeserializerException { - try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator()) { - a.start(this.ctx); - byte[] result = ByteArray.fileToBytes("src/test/resources/PCRpt.1.bin"); - - final Stateful07PCReportMessageParser parser = new Stateful07PCReportMessageParser(this.ctx.getObjectHandlerRegistry()); - - 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 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcrpt.message.pcrpt.message.reports.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 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcrpt.message.pcrpt.message.reports.PathBuilder pBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcrpt.message.pcrpt.message.reports.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 org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcrpt.message.pcrpt.message.reports.PathBuilder pBuilder1 = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcrpt.message.pcrpt.message.reports.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 testPcinitMsg() throws IOException, PCEPDeserializerException { - try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator()) { - a.start(this.ctx); - final byte[] result = ByteArray.fileToBytes("src/test/resources/Pcinit.bin"); - - final CInitiated00PCInitiateMessageParser parser = new CInitiated00PCInitiateMessageParser(this.ctx.getObjectHandlerRegistry()); - - 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 testNotificationMsg() throws IOException, PCEPDeserializerException { - 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.rpFalse).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.rpFalse).build()); - rps1.add(new RpsBuilder().setRp(this.rpFalse).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 testErrorMsg() throws IOException, PCEPDeserializerException { - try (StatefulActivator a = new StatefulActivator()) { - a.start(this.ctx); - byte[] result = ByteArray.fileToBytes("src/test/resources/PCErr.3.bin"); - - final ErrorObject error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false).setType((short) 3).setValue( - (short) 1).build(); - - final PCEPErrorMessageParser parser = new PCEPErrorMessageParser(this.ctx.getObjectHandlerRegistry()); - - List innerErr = Lists.newArrayList(); - innerErr.add(new ErrorsBuilder().setErrorObject(error1).build()); - - final PcerrMessageBuilder builder = new PcerrMessageBuilder(); - builder.setErrors(innerErr); - builder.setErrorType(new SessionCaseBuilder().setSession(new SessionBuilder().setOpen(this.open).build()).build()); - - 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()); - - result = ByteArray.fileToBytes("src/test/resources/PCErr.5.bin"); - - 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._case.request.RpsBuilder().setRp( - this.rpFalse).build()); - - innerErr = Lists.newArrayList(); - innerErr.add(new ErrorsBuilder().setErrorObject(error1).build()); - - builder.setErrors(innerErr); - builder.setErrorType(new RequestCaseBuilder().setRequest(new RequestBuilder().setRps(rps).build()).build()); - - 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()); - } - } + private Lspa lspa; + private Metrics metrics; + private Iro iro; + private Ero ero; + private Rro rro; + private Srp srp; + private Lsp lsp; + private Lsp lspSrp; + private org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.bandwidth.object.Bandwidth bandwidth; + private org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reoptimization.bandwidth.object.ReoptimizationBandwidth reoptimizationBandwidth; + + private AsNumberCase eroASSubobject; + private UnnumberedCase rroUnnumberedSub; + + private SimplePCEPExtensionProviderContext ctx; + private BaseParserExtensionActivator act; + + private static final byte[] PCRT1 = { + (byte) 0x20, (byte) 0x0A, (byte) 0x00, (byte) 0x20, + + (byte) 0x20, (byte) 0x10, (byte) 0x00, (byte) 0x1C, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, //Skip + (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x10, //TLV Type + TLV Length + (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x01, //TLV 127.0.1.1 + (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x01, //TLV LSP Id + Tunnel id + (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x02, //TLV Ipv4ExtendedTunnelId 127.0.1.2 + (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x03, //TLV TunnelEndpointAddress 127.0.1.3 + }; + + private static final byte[] PCRT2 = { + (byte) 0x20, (byte) 0x0A, (byte) 0x00, (byte) 0x3C, + + (byte) 0x20, (byte) 0x10, (byte) 0x00, (byte) 0x1C, //(byte) 0x39, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, //Skip + (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x10, //TLV Type + TLV Length + (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x01, //TLV 127.0.1.1 + (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x01, //TLV LSP Id + Tunnel id + (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x02, //TLV Ipv4ExtendedTunnelId 127.0.1.2 + (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x03, //TLV TunnelEndpointAddress 127.0.1.3 + + (byte) 0x07, (byte) 0x10, (byte) 0x00, (byte) 0x08, + (byte) 0x20, (byte) 0x04, (byte) 0xFF, (byte) 0xFF, + (byte) 0x09, (byte) 0x10, (byte) 0x00, (byte) 0x14, + (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, (byte) 0x00, (byte) 0x00, (byte) 0x00 + }; + + private static final byte[] PCRT3 = { + (byte) 0x20, (byte) 0x0A, (byte) 0x00, (byte) 0x4C, + + (byte) 0x20, (byte) 0x10, (byte) 0x00, (byte) 0x1C, //(byte) 0x39, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, //Skip + (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x10, //TLV Type + TLV Length + (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x01, //TLV 127.0.1.1 + (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x01, //TLV LSP Id + Tunnel id + (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x02, //TLV Ipv4ExtendedTunnelId 127.0.1.2 + (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x03, //TLV TunnelEndpointAddress 127.0.1.3 + + (byte) 0x07, (byte) 0x10, (byte) 0x00, (byte) 0x08, + (byte) 0x20, (byte) 0x04, (byte) 0xFF, (byte) 0xFF, + (byte) 0x09, (byte) 0x10, (byte) 0x00, (byte) 0x14, + (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, (byte) 0x00, (byte) 0x00, (byte) 0x00, + + (byte) 0x05, (byte) 0x10, (byte) 0x00, (byte) 0x08, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x05, (byte) 0x20, (byte) 0x00, (byte) 0x08, + (byte) 0x47, (byte) 0x74, (byte) 0x24, (byte) 0x00 + }; + + @Before + public void setUp() throws Exception { + this.ctx = new SimplePCEPExtensionProviderContext(); + this.act = new BaseParserExtensionActivator(); + this.act.start(this.ctx); + + 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)); + lspaBuilder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lspa.object.lspa.TlvsBuilder().build()); + this.lspa = lspaBuilder.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 AsNumberCaseBuilder().setAsNumber( + new AsNumberBuilder().setAsNumber( + new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.AsNumber(0xFFFFL)).build()).build(); + + this.rroUnnumberedSub = new UnnumberedCaseBuilder().setUnnumbered( + new UnnumberedBuilder().setRouterId(0x00112233L).setInterfaceId(0x00ff00ffL).build()).build(); + + final IroBuilder iroBuilder = new IroBuilder(); + iroBuilder.setIgnore(false); + iroBuilder.setProcessingRule(false); + final List iroSubs = Lists.newArrayList(); + iroSubs.add(new SubobjectBuilder().setSubobjectType(this.eroASSubobject).setLoose(false).build()); + iroBuilder.setSubobject(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.SubobjectBuilder().setSubobjectType( + this.eroASSubobject).setLoose(false).build()); + eroBuilder.setSubobject(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.SubobjectBuilder().setSubobjectType( + this.rroUnnumberedSub).setProtectionAvailable(false).setProtectionInUse(false).build()); + rroBuilder.setSubobject(rroSubs); + this.rro = rroBuilder.build(); + + final SrpBuilder srpBuilder = new SrpBuilder(); + srpBuilder.setIgnore(false); + srpBuilder.setProcessingRule(false); + srpBuilder.setOperationId(new SrpIdNumber(1L)); + srpBuilder.addAugmentation(Srp1.class, new Srp1Builder().setRemove(false).build()); + srpBuilder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.srp.object.srp.TlvsBuilder().build()); + 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 TlvsBuilder().build()); + lspBuilder.addAugmentation(Lsp1.class, new Lsp1Builder().setCreate(false).build()); + + final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.lsp.identifiers.tlv.lsp.identifiers.address.family.ipv4._case.Ipv4Builder builder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.lsp.identifiers.tlv.lsp.identifiers.address.family.ipv4._case.Ipv4Builder(); + builder.setIpv4TunnelSenderAddress(new Ipv4AddressNoZone("127.0.1.1")); + final LspId lspId = new LspId(1L); + final TunnelId tunnelId = new TunnelId(1); + builder.setIpv4ExtendedTunnelId(new Ipv4ExtendedTunnelId(new Ipv4AddressNoZone("127.0.1.2"))); + builder.setIpv4TunnelEndpointAddress(new Ipv4AddressNoZone("127.0.1.3")); + final AddressFamily afiLsp = new Ipv4CaseBuilder().setIpv4(builder.build()).build(); + final LspIdentifiers identifier = new LspIdentifiersBuilder().setAddressFamily(afiLsp).setLspId(lspId).setTunnelId(tunnelId).build(); + this.lspSrp = lspBuilder.build(); + this.lsp = lspBuilder.setTlvs(new TlvsBuilder().setLspIdentifiers(identifier).build()).build(); + + final Ipv4Builder afi = new Ipv4Builder(); + afi.setSourceIpv4Address(new Ipv4AddressNoZone("255.255.255.255")); + afi.setDestinationIpv4Address(new Ipv4AddressNoZone("255.255.255.255")); + + final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.bandwidth.object.BandwidthBuilder bandwidthBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.bandwidth.object.BandwidthBuilder(); + bandwidthBuilder.setIgnore(false); + bandwidthBuilder.setProcessingRule(false); + bandwidthBuilder.setBandwidth(new Bandwidth(new byte[] { (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 })); + this.bandwidth = bandwidthBuilder.build(); + + final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reoptimization.bandwidth.object.ReoptimizationBandwidthBuilder reoptimizationBandwidthBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reoptimization.bandwidth.object.ReoptimizationBandwidthBuilder(); + reoptimizationBandwidthBuilder.setIgnore(false); + reoptimizationBandwidthBuilder.setProcessingRule(false); + reoptimizationBandwidthBuilder.setBandwidth(new Bandwidth(new byte[] { (byte) 0x47, (byte) 0x74, (byte) 0x24, (byte) 0x00 })); + this.reoptimizationBandwidth = reoptimizationBandwidthBuilder.build(); + } + + @Test + public void testOpenMsg() throws IOException, PCEPDeserializerException { + try (StatefulActivator a = new StatefulActivator()) { + a.start(this.ctx); + final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCEPOpenMessage1.bin")); + final PCEPOpenMessageParser parser = new PCEPOpenMessageParser(this.ctx.getObjectHandlerRegistry()); + 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().setLspUpdateCapability(Boolean.TRUE).build(); + b.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.TlvsBuilder().addAugmentation( + Tlvs1.class, new Tlvs1Builder().setStateful(tlv1).build()).build()); + builder.setOpen(b.build()); + + assertEquals(new OpenBuilder().setOpenMessage(builder.build()).build(), parser.parseMessage(result.slice(4, + result.readableBytes() - 4), Collections.emptyList())); + final ByteBuf buf = Unpooled.buffer(result.readableBytes()); + parser.serializeMessage(new OpenBuilder().setOpenMessage(builder.build()).build(), buf); + assertArrayEquals(result.array(), buf.array()); + } + } + + @Test + public void testSyncOptActivator() { + try (SyncOptimizationsActivator a = new SyncOptimizationsActivator()) { + a.start(this.ctx); + a.close(); + } + } + + @Test + public void testUpdMsg() throws IOException, PCEPDeserializerException { + try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator()) { + a.start(this.ctx); + ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCUpd.2.bin")); + + final Stateful07PCUpdateRequestMessageParser parser = new Stateful07PCUpdateRequestMessageParser(this.ctx.getObjectHandlerRegistry()); + + final PcupdMessageBuilder builder = new PcupdMessageBuilder(); + + final List updates = Lists.newArrayList(); + final PathBuilder pBuilder = new PathBuilder(); + pBuilder.setEro(this.ero); + pBuilder.setLspa(this.lspa); + updates.add(new UpdatesBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build()); + builder.setUpdates(updates); + + assertEquals(new PcupdBuilder().setPcupdMessage(builder.build()).build(), parser.parseMessage(result.slice(4, + result.readableBytes() - 4), Collections.emptyList())); + ByteBuf buf = Unpooled.buffer(result.readableBytes()); + parser.serializeMessage(new PcupdBuilder().setPcupdMessage(builder.build()).build(), buf); + assertArrayEquals(result.array(), buf.array()); + + result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCUpd.5.bin")); + + final List updates1 = Lists.newArrayList(); + final PathBuilder pBuilder1 = new PathBuilder(); + pBuilder1.setEro(this.ero); + pBuilder1.setLspa(this.lspa); + updates1.add(new UpdatesBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build()); + updates1.add(new UpdatesBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder1.build()).build()); + builder.setUpdates(updates1); + + assertEquals(new PcupdBuilder().setPcupdMessage(builder.build()).build(), parser.parseMessage(result.slice(4, + result.readableBytes() - 4), Collections.emptyList())); + buf = Unpooled.buffer(result.readableBytes()); + parser.serializeMessage(new PcupdBuilder().setPcupdMessage(builder.build()).build(), buf); + assertArrayEquals(result.array(), buf.array()); + } + } + + @Test + public void testRptMsg() throws IOException, PCEPDeserializerException { + try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator(); StatefulActivator b = new StatefulActivator()) { + a.start(this.ctx); + b.start(this.ctx); + ByteBuf result = Unpooled.wrappedBuffer(PCRT1); + + final Stateful07PCReportMessageParser parser = new Stateful07PCReportMessageParser(this.ctx.getObjectHandlerRegistry()); + + final PcrptMessageBuilder builder = new PcrptMessageBuilder(); + + final List reports = Lists.newArrayList(); + reports.add(new ReportsBuilder().setLsp(this.lsp).build()); + builder.setReports(reports); + final Message parseResult = parser.parseMessage(result.slice(4, result.readableBytes() - 4), Collections.emptyList()); + assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parseResult); + ByteBuf buf = Unpooled.buffer(result.readableBytes()); + parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf); + assertArrayEquals(result.array(), buf.array()); + + result = Unpooled.wrappedBuffer(PCRT2); + + final List reports1 = Lists.newArrayList(); + reports1.add(new ReportsBuilder().setLsp(this.lsp).setPath( + new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcrpt.message.pcrpt.message.reports.PathBuilder().setEro( + this.ero).setLspa(this.lspa).build()).build()); + builder.setReports(reports1); + + final ByteBuf input = result.slice(4, result.readableBytes() - 4); + assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parser.parseMessage(input, Collections.emptyList())); + buf = Unpooled.buffer(result.readableBytes()); + parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf); + assertArrayEquals(result.array(), buf.array()); + + result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRpt.3.bin")); + + final List reports2 = Lists.newArrayList(); + final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcrpt.message.pcrpt.message.reports.PathBuilder pBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcrpt.message.pcrpt.message.reports.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.lspSrp).setPath(pBuilder.build()).build()); + builder.setReports(reports2); + + assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parser.parseMessage(result.slice(4, + result.readableBytes() - 4), Collections.emptyList())); + buf = Unpooled.buffer(result.readableBytes()); + parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf); + assertArrayEquals(result.array(), buf.array()); + + result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRpt.5.bin")); + + final List reports3 = Lists.newArrayList(); + final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcrpt.message.pcrpt.message.reports.PathBuilder pBuilder1 = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcrpt.message.pcrpt.message.reports.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.lspSrp).setPath(pBuilder.build()).build()); + reports3.add(new ReportsBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder1.build()).build()); + builder.setReports(reports3); + + assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parser.parseMessage(result.slice(4, + result.readableBytes() - 4), Collections.emptyList())); + buf = Unpooled.buffer(result.readableBytes()); + parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf); + assertArrayEquals(result.array(), buf.array()); + + result = Unpooled.wrappedBuffer(PCRT3); + + final List reports4 = Lists.newArrayList(); + reports4.add(new ReportsBuilder().setLsp(this.lsp).setPath( + new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcrpt.message.pcrpt.message.reports.PathBuilder().setEro( + this.ero).setLspa(this.lspa).setBandwidth(this.bandwidth).setReoptimizationBandwidth(this.reoptimizationBandwidth).build()).build()); + builder.setReports(reports4); + + final ByteBuf input2 = result.slice(4, result.readableBytes() - 4); + assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parser.parseMessage(input2, Collections.emptyList())); + buf = Unpooled.buffer(result.readableBytes()); + parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf); + assertArrayEquals(result.array(), buf.array()); + } + } + + @Test + public void testPcinitMsg() throws IOException, PCEPDeserializerException { + try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator()) { + a.start(this.ctx); + final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/Pcinit.bin")); + + final CInitiated00PCInitiateMessageParser parser = new CInitiated00PCInitiateMessageParser(this.ctx.getObjectHandlerRegistry()); + + final PcinitiateMessageBuilder builder = new PcinitiateMessageBuilder(); + final RequestsBuilder rBuilder = new RequestsBuilder(); + + final List reqs = Lists.newArrayList(); + rBuilder.setSrp(this.srp); + rBuilder.setLsp(this.lspSrp); + 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.slice(4, + result.readableBytes() - 4), Collections.emptyList())); + final ByteBuf buf = Unpooled.buffer(result.readableBytes()); + parser.serializeMessage(new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build(), buf); + assertArrayEquals(result.array(), buf.array()); + } + } + + @Test + public void testErrorMsg() throws IOException, PCEPDeserializerException { + try (StatefulActivator a = new StatefulActivator()) { + a.start(this.ctx); + final Stateful07ErrorMessageParser parser = new Stateful07ErrorMessageParser(this.ctx.getObjectHandlerRegistry()); + + ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.1.bin")); + ErrorObject error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false).setType((short) 19).setValue( + (short) 1).build(); + + List innerErr = new ArrayList<>(); + innerErr.add(new ErrorsBuilder().setErrorObject(error1).build()); + + PcerrMessageBuilder builder = new PcerrMessageBuilder(); + builder.setErrors(innerErr); + final List srps = new ArrayList<>(); + srps.add(new SrpsBuilder().setSrp(new SrpBuilder().setOperationId(new SrpIdNumber(3L)).setIgnore(false).setProcessingRule(false).setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.srp.object.srp.TlvsBuilder().build()).build()).build()); + builder.setErrorType(new StatefulCaseBuilder().setStateful(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcerr.pcerr.message.error.type.stateful._case.StatefulBuilder().setSrps(srps).build()).build()); + + assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), parser.parseMessage(result.slice(4, + result.readableBytes() - 4), Collections.emptyList())); + ByteBuf buf = Unpooled.buffer(result.readableBytes()); + parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf); + assertArrayEquals(result.array(), buf.array()); + + result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.5.bin")); + error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false).setType((short) 3).setValue((short) 1).build(); + + innerErr = new ArrayList<>(); + builder = new PcerrMessageBuilder(); + + final RpBuilder rpBuilder = new RpBuilder(); + rpBuilder.setProcessingRule(true); + rpBuilder.setIgnore(false); + rpBuilder.setReoptimization(false); + rpBuilder.setBiDirectional(false); + rpBuilder.setLoose(true); + rpBuilder.setMakeBeforeBreak(false); + rpBuilder.setOrder(false); + rpBuilder.setPathKey(false); + rpBuilder.setSupplyOf(false); + rpBuilder.setFragmentation(false); + rpBuilder.setP2mp(false); + rpBuilder.setEroCompression(false); + rpBuilder.setPriority((short) 1); + rpBuilder.setRequestId(new RequestId(10L)); + rpBuilder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rp.object.rp.TlvsBuilder().build()); + rpBuilder.setProcessingRule(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._case.request.RpsBuilder().setRp( + rpBuilder.build()).build()); + + innerErr.add(new ErrorsBuilder().setErrorObject(error1).build()); + + builder.setErrors(innerErr); + builder.setErrorType(new RequestCaseBuilder().setRequest(new RequestBuilder().setRps(rps).build()).build()); + + assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), parser.parseMessage(result.slice(4, + result.readableBytes() - 4), Collections.emptyList())); + buf = Unpooled.buffer(result.readableBytes()); + parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf); + assertArrayEquals(result.array(), buf.array()); + + result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.3.bin")); + + builder = new PcerrMessageBuilder(); + error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false).setType((short) 3).setValue((short) 1).build(); + + innerErr = new ArrayList<>(); + innerErr.add(new ErrorsBuilder().setErrorObject(error1).build()); + + builder.setErrors(innerErr); + builder.setErrorType(new SessionCaseBuilder().setSession(new SessionBuilder().setOpen( + new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.OpenBuilder() + .setDeadTimer((short) 1) + .setKeepalive((short) 1) + .setVersion(new ProtocolVersion((short) 1)) + .setSessionId((short) 0) + .setIgnore(false) + .setProcessingRule(false) + .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.TlvsBuilder().build()) + .build()).build()).build()); + + assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), parser.parseMessage(result.slice(4, + result.readableBytes() - 4), Collections.emptyList())); + buf = Unpooled.buffer(result.readableBytes()); + parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf); + assertArrayEquals(result.array(), buf.array()); + } + } + + @Test + public void testMissingLspObjectErrorInPcRptMsg() throws PCEPDeserializerException { + final byte[] statefulMsg= { + (byte) 0x20, (byte) 0x0B, (byte) 0x00, (byte) 0x1C, + /* srp-object */ + (byte) 0x21, (byte) 0x10, (byte) 0x00, (byte) 0x0C, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x001, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, + /* lsp-object is missing*/ + /* sr-ero-object */ + (byte) 0x07, (byte) 0x10, (byte) 0x00, (byte) 0x0C, + /* ipv4 prefix subobject */ + (byte) 0x81, (byte) 0x08, (byte) 0xFF, (byte) 0xFF, + (byte) 0xFF, (byte) 0xFF, (byte) 0x16, (byte) 0x00 + }; + + try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator(); + StatefulActivator b = new StatefulActivator()) { + a.start(this.ctx); + b.start(this.ctx); + final Stateful07PCReportMessageParser parser = new Stateful07PCReportMessageParser( + this.ctx.getObjectHandlerRegistry()); + + final PcerrMessageBuilder errMsgBuilder = new PcerrMessageBuilder(); + errMsgBuilder.setErrors(Lists.newArrayList(new ErrorsBuilder() + .setErrorObject(new ErrorObjectBuilder().setType((short) 6).setValue((short) 8).build()).build())); + final PcerrBuilder builder = new PcerrBuilder(); + builder.setPcerrMessage(errMsgBuilder.build()); + + final ByteBuf buf = Unpooled.wrappedBuffer(statefulMsg); + final List errors = Lists.newArrayList(); + parser.parseMessage(buf.slice(4, buf.readableBytes() - 4), errors); + assertFalse(errors.isEmpty()); + assertEquals(builder.build(), errors.get(0)); + } + } + + @Test + public void testUnexpectedRroObjectInPcUpdMsg() throws PCEPDeserializerException { + final byte[] badUpdateMsg = { + (byte) 0x20, (byte) 0x0b, (byte) 0x00, (byte) 0x50, + /* SRP, LSP and ERO objects */ + (byte) 0x21, (byte) 0x12, (byte) 0x00, (byte) 0x0c, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01, + (byte) 0x20, (byte) 0x10, (byte) 0x00, (byte) 0x08, + (byte) 0x00, (byte) 0x00, (byte) 0x10, (byte) 0x09, + (byte) 0x07, (byte) 0x10, (byte) 0x00, (byte) 0x14, + (byte) 0x01, (byte) 0x08, (byte) 0x05, (byte) 0x05, + (byte) 0x05, (byte) 0x03, (byte) 0x18, (byte) 0x00, + (byte) 0x01, (byte) 0x08, (byte) 0x08, (byte) 0x08, + (byte) 0x08, (byte) 0x04, (byte) 0x18, (byte) 0x00, + /* RRO object */ + (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x24, + (byte) 0x01, (byte) 0x08, (byte) 0x0a, (byte) 0x00, + (byte) 0x00, (byte) 0x83, (byte) 0x20, (byte) 0x20, + (byte) 0x03, (byte) 0x08, (byte) 0x01, (byte) 0x01, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, + (byte) 0x01, (byte) 0x08, (byte) 0x0a, (byte) 0x00, + (byte) 0x09, (byte) 0xde, (byte) 0x20, (byte) 0x00, + (byte) 0x03, (byte) 0x08, (byte) 0x01, (byte) 0x01, + (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 + }; + + try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator()) { + a.start(this.ctx); + + final Stateful07PCUpdateRequestMessageParser parser = new Stateful07PCUpdateRequestMessageParser( + this.ctx.getObjectHandlerRegistry()); + + final PcerrMessageBuilder errMsgBuilder = new PcerrMessageBuilder(); + errMsgBuilder.setErrors(Lists.newArrayList(new ErrorsBuilder() + .setErrorObject(new ErrorObjectBuilder().setType((short) 6).setValue((short) 10).build()).build())); + final PcerrBuilder builder = new PcerrBuilder(); + builder.setPcerrMessage(errMsgBuilder.build()); + + final ByteBuf buf = Unpooled.wrappedBuffer(badUpdateMsg); + final List errors = Lists.newArrayList(); + parser.parseMessage(buf.slice(4, buf.readableBytes() - 4), errors); + assertFalse(errors.isEmpty()); + assertEquals(builder.build(), errors.get(0)); + } + } }