BUG-50 : added parser for Pcreq message. 20/3020/1
authorDana Kutenicsova <dkutenic@cisco.com>
Thu, 21 Nov 2013 18:11:11 +0000 (19:11 +0100)
committerDana Kutenicsova <dkutenic@cisco.com>
Fri, 22 Nov 2013 21:11:23 +0000 (22:11 +0100)
Adjusted processing flag handling.

Change-Id: I0038d8fed20c12715b352883fcd4a2b0cb49525e
Signed-off-by: Dana Kutenicsova <dkutenic@cisco.com>
14 files changed:
pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/AbstractMessageParser.java
pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPErrorMessageParser.java
pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPNotificationMessageParser.java
pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPRequestMessageParser.java
pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/object/PCEPEndPointsObjectParser.java
pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/object/PCEPRequestParameterObjectParser.java
pcep/impl/src/test/java/org/opendaylight/protocol/pcep/impl/PCEPObjectParserTest.java
pcep/impl/src/test/java/org/opendaylight/protocol/pcep/impl/PCEPValidatorTest.java
pcep/impl/src/test/resources/PCEPRequestMessage1.bin
pcep/impl/src/test/resources/PCRep.1.bin
pcep/impl/src/test/resources/PCRep.2.bin
pcep/impl/src/test/resources/PCRep.3.bin
pcep/impl/src/test/resources/PCRep.5.bin
pcep/impl/src/test/resources/PCReq.3.bin

index d9a963960f60251fe6b957a05ba276253542473a..f764f06c81370422e976bd4198bca5be40946277 100644 (file)
@@ -17,10 +17,12 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.mes
 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.Object;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.ObjectHeader;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.PcerrMessage;
 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.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.request.RpsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rp.object.Rp;
 
 import com.google.common.base.Preconditions;
 import com.google.common.collect.Lists;
@@ -138,7 +140,7 @@ public abstract class AbstractMessageParser implements MessageParser, MessageSer
                return objs;
        }
 
-       public static PcerrMessage createErrorMsg(final PCEPErrors e) {
+       public static Message createErrorMsg(final PCEPErrors e) {
                final PCEPErrorMapping maping = PCEPErrorMapping.getInstance();
                return new PcerrBuilder().setPcerrMessage(
                                new PcerrMessageBuilder().setErrors(
@@ -147,6 +149,16 @@ public abstract class AbstractMessageParser implements MessageParser, MessageSer
                                                                                maping.getFromErrorsEnum(e).value).build()).build())).build()).build();
        }
 
+       public static Message createErrorMsg(final PCEPErrors e, final Rp rp) {
+               final PCEPErrorMapping maping = PCEPErrorMapping.getInstance();
+               return new PcerrBuilder().setPcerrMessage(
+                               new PcerrMessageBuilder().setErrorType(
+                                               new RequestBuilder().setRps(Lists.newArrayList(new RpsBuilder().setRp(rp).build())).build()).setErrors(
+                                               Arrays.asList(new ErrorsBuilder().setErrorObject(
+                                                               new ErrorObjectBuilder().setType(maping.getFromErrorsEnum(e).type).setValue(
+                                                                               maping.getFromErrorsEnum(e).value).build()).build())).build()).build();
+       }
+
        abstract protected Message validate(final List<Object> objects, final List<Message> errors) throws PCEPDeserializerException;
 
        @Override
index a4b92e7aedaf79b12d6552d24fe8a82f46f14511..831f2c83f49eb48dbebf74d93ec146fb9c3dce0c 100644 (file)
@@ -13,6 +13,7 @@ import java.util.List;
 
 import org.opendaylight.protocol.pcep.spi.ObjectHandlerRegistry;
 import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
+import org.opendaylight.protocol.pcep.spi.PCEPErrors;
 import org.opendaylight.protocol.pcep.spi.UnknownObject;
 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.types.rev131005.Message;
@@ -97,6 +98,10 @@ public class PCEPErrorMessageParser extends AbstractMessageParser {
                        objects.remove(0);
                } else if (obj instanceof Rp) {
                        final Rp o = ((Rp) obj);
+                       if (o.isProcessingRule()) {
+                               errors.add(createErrorMsg(PCEPErrors.P_FLAG_NOT_SET));
+                               return null;
+                       }
                        requestParameters.add(new RpsBuilder().setRp(o).build());
                        state = State.RpIn;
                        objects.remove(0);
index c1dc700caca9ad39550107a454837a6f9d4f4bf1..1cdec11e64bf5008ce02c88e0bcb8070ef5ef303 100644 (file)
@@ -13,6 +13,7 @@ import java.util.List;
 
 import org.opendaylight.protocol.pcep.spi.ObjectHandlerRegistry;
 import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
+import org.opendaylight.protocol.pcep.spi.PCEPErrors;
 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.types.rev131005.Message;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
@@ -67,7 +68,6 @@ public class PCEPNotificationMessageParser extends AbstractMessageParser {
                if (objects == null) {
                        throw new IllegalArgumentException("Passed list can't be null.");
                }
-
                if (objects.isEmpty()) {
                        throw new PCEPDeserializerException("Notification message cannot be empty.");
                }
@@ -76,27 +76,24 @@ public class PCEPNotificationMessageParser extends AbstractMessageParser {
 
                while (!objects.isEmpty()) {
                        org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcntf.message.pcntf.message.Notifications comObj;
-                       comObj = getValidNotificationComposite(objects);
+                       comObj = getValidNotificationComposite(objects, errors);
 
                        if (comObj == null) {
                                break;
                        }
                        compositeNotifications.add(comObj);
                }
-
                if (compositeNotifications.isEmpty()) {
                        throw new PCEPDeserializerException("Atleast one Notifications is mandatory.");
                }
-
                if (!objects.isEmpty()) {
                        throw new PCEPDeserializerException("Unprocessed Objects: " + objects);
                }
-
                return new PcntfBuilder().setPcntfMessage(new PcntfMessageBuilder().setNotifications(compositeNotifications).build()).build();
        }
 
        private static org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcntf.message.pcntf.message.Notifications getValidNotificationComposite(
-                       final List<Object> objects) {
+                       final List<Object> objects, final List<Message> errors) {
                final List<Rps> requestParameters = Lists.newArrayList();
                final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcntf.message.pcntf.message.notifications.Notifications> notifications = Lists.newArrayList();
                Object obj;
@@ -109,6 +106,10 @@ public class PCEPNotificationMessageParser extends AbstractMessageParser {
                                state = State.RpIn;
                                if (obj instanceof Rp) {
                                        final Rp rp = (Rp) obj;
+                                       if (rp.isProcessingRule()) {
+                                               errors.add(createErrorMsg(PCEPErrors.P_FLAG_NOT_SET));
+                                               return null;
+                                       }
                                        requestParameters.add(new RpsBuilder().setRp(rp).build());
                                        state = State.Init;
                                        break;
index 709e911813c6c03b1a79d8ec3c59096fdbd49597..02ef0159efa12a00c7509fca8f906b2b80d749a5 100644 (file)
@@ -13,13 +13,44 @@ import java.util.List;
 
 import org.opendaylight.protocol.pcep.spi.ObjectHandlerRegistry;
 import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
+import org.opendaylight.protocol.pcep.spi.PCEPErrors;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.Pcreq;
+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.PcrepMessage;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
+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.classtype.object.ClassType;
+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.exclude.route.object.Xro;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.gc.object.Gc;
+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.load.balancing.object.LoadBalancing;
+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.object.Lsp;
+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.metric.object.Metric;
+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.path.key.object.PathKey;
+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;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.RequestsBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.Svec;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.SvecBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.requests.PathKeyExpansionBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.requests.SegmentComputation;
+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.pcreq.message.pcreq.message.requests.segment.computation.p2p.ReportedRouteBuilder;
+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.rp.object.Rp;
+
+import com.google.common.collect.Lists;
 
 /**
- * Parser for {@link PcrepMessage}
+ * Parser for {@link Pcreq}
  */
-// FIXME finish
 public class PCEPRequestMessageParser extends AbstractMessageParser {
 
        public static final int TYPE = 3;
@@ -30,260 +61,264 @@ public class PCEPRequestMessageParser extends AbstractMessageParser {
 
        @Override
        public void serializeMessage(final Message message, final ByteBuf buffer) {
-               if (!(message instanceof PcrepMessage)) {
+               if (!(message instanceof Pcreq)) {
                        throw new IllegalArgumentException("Wrong instance of PCEPMessage. Passed instance of " + message.getClass()
                                        + ". Needed PcrepMessage.");
                }
+
        }
 
        @Override
        protected Message validate(
                        final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object> objects,
                        final List<Message> errors) throws PCEPDeserializerException {
-               // if (objects == null)
-               // throw new IllegalArgumentException("Passed list can't be null.");
-               //
-               // final List<Message> msgs = Lists.newArrayList();
-               // final List<CompositeRequestSvecObject> svecList = new ArrayList<CompositeRequestSvecObject>();
-               //
-               // CompositeRequestSvecObject svecComp;
-               // while (!objects.isEmpty()) {
-               // try {
-               // if ((svecComp = getValidSvecComposite(objects)) == null)
-               // break;
-               // } catch (final PCEPDocumentedException e) {
-               // msgs.add(new PCEPErrorMessage(new PCEPErrorObject(e.getError())));
-               // return msgs;
-               // }
-               //
-               // svecList.add(svecComp);
-               // }
-               //
-               // while (!objects.isEmpty()) {
-               // final List<CompositeRequestObject> requests = new ArrayList<CompositeRequestObject>();
-               // PCEPRequestParameterObject rpObj = null;
-               // boolean requestRejected = false;
-               //
-               // if (objects.get(0) instanceof PCEPRequestParameterObject) {
-               // rpObj = (PCEPRequestParameterObject) objects.get(0);
-               // objects.remove(rpObj);
-               // if (!rpObj.isProcessed()) {
-               // msgs.add(new PCEPErrorMessage(new CompositeErrorObject(rpObj, new PCEPErrorObject(PCEPErrors.P_FLAG_NOT_SET))));
-               // requestRejected = true;
-               // }
-               //
-               // } else {
-               // // if RP obj is missing return error only;
-               // msgs.clear();
-               // msgs.add(new PCEPErrorMessage(new PCEPErrorObject(PCEPErrors.RP_MISSING)));
-               // return msgs;
-               // }
-               //
-               // PCEPEndPointsObject<?> endPoints = null;
-               // if (objects.get(0) instanceof PCEPEndPointsObject<?>) {
-               // endPoints = (PCEPEndPointsObject<?>) objects.get(0);
-               // objects.remove(0);
-               // if (!endPoints.isProcessed()) {
-               // msgs.add(new PCEPErrorMessage(new CompositeErrorObject(copyRP(rpObj, false), new
-               // PCEPErrorObject(PCEPErrors.P_FLAG_NOT_SET))));
-               // requestRejected = true;
-               // }
-               // } else {
-               // msgs.add(new PCEPErrorMessage(new CompositeErrorObject(copyRP(rpObj, false), new
-               // PCEPErrorObject(PCEPErrors.END_POINTS_MISSING))));
-               // requestRejected = true;
-               // }
-               //
-               // // ignore all continual end-points objects
-               // while (!objects.isEmpty() && objects.get(0) instanceof PCEPEndPointsObject<?>) {
-               // objects.remove(0);
-               // }
-               //
-               // PCEPClassTypeObject classType = null;
-               // PCEPLspObject lsp = null;
-               // PCEPLspaObject lspa = null;
-               // PCEPRequestedPathBandwidthObject bandwidth = null;
-               // final List<PCEPMetricObject> metrics = new ArrayList<PCEPMetricObject>();
-               // PCEPReportedRouteObject rro = null;
-               // PCEPExistingPathBandwidthObject rroBandwidth = null;
-               // PCEPIncludeRouteObject iro = null;
-               // PCEPLoadBalancingObject loadBalancing = null;
-               //
-               // int state = 1;
-               // while (!objects.isEmpty()) {
-               // final Object obj = objects.get(0);
-               // if (obj instanceof UnknownObject) {
-               // if (((UnknownObject) obj).isProcessingRule()) {
-               // msgs.add(new PCEPErrorMessage(new CompositeErrorObject(copyRP(rpObj, false), new PCEPErrorObject(((UnknownObject)
-               // obj).getError()))));
-               // requestRejected = true;
-               // }
-               //
-               // objects.remove(0);
-               // continue;
-               // }
-               // switch (state) {
-               // case 1:
-               // state = 2;
-               // if (obj instanceof PCEPClassTypeObject) {
-               // classType = (PCEPClassTypeObject) obj;
-               // if (!classType.isProcessed()) {
-               // msgs.add(new PCEPErrorMessage(new CompositeErrorObject(copyRP(rpObj, false), new
-               // PCEPErrorObject(PCEPErrors.P_FLAG_NOT_SET))));
-               // requestRejected = true;
-               // }
-               // break;
-               // }
-               // case 2:
-               // state = 3;
-               // if (obj instanceof PCEPLspObject) {
-               // lsp = (PCEPLspObject) obj;
-               // break;
-               // }
-               // case 3:
-               // state = 4;
-               // if (obj instanceof PCEPLspaObject) {
-               // lspa = (PCEPLspaObject) obj;
-               // break;
-               // }
-               // case 4:
-               // state = 5;
-               // if (obj instanceof PCEPRequestedPathBandwidthObject) {
-               // bandwidth = (PCEPRequestedPathBandwidthObject) obj;
-               // break;
-               // }
-               // case 5:
-               // state = 6;
-               // if (obj instanceof PCEPMetricObject) {
-               // metrics.add((PCEPMetricObject) obj);
-               // state = 5;
-               //
-               // break;
-               // }
-               // case 6:
-               // state = 8;
-               // if (obj instanceof PCEPReportedRouteObject) {
-               // rro = (PCEPReportedRouteObject) obj;
-               // state = 7;
-               // break;
-               // }
-               // case 7:
-               // state = 8;
-               // if (obj instanceof PCEPExistingPathBandwidthObject) {
-               // rroBandwidth = (PCEPExistingPathBandwidthObject) obj;
-               // break;
-               // }
-               // case 8:
-               // state = 9;
-               // if (obj instanceof PCEPIncludeRouteObject) {
-               // iro = (PCEPIncludeRouteObject) obj;
-               // break;
-               // }
-               // case 9:
-               // if (obj instanceof PCEPLoadBalancingObject) {
-               // loadBalancing = (PCEPLoadBalancingObject) obj;
-               // break;
-               // }
-               // state = 10;
-               // }
-               //
-               // if (state == 10) {
-               // break;
-               // }
-               //
-               // objects.remove(obj);
-               // }
-               //
-               // if (rpObj.isReoptimized() && bandwidth != null && bandwidth.getBandwidth() != new Bandwidth(new byte[] { 0 }) &&
-               // rro == null) {
-               // msgs.add(new PCEPErrorMessage(new CompositeErrorObject(copyRP(rpObj, false), new
-               // PCEPErrorObject(PCEPErrors.RRO_MISSING))));
-               // requestRejected = true;
-               // }
-               //
-               // if (!requestRejected) {
-               // requests.add(new CompositeRequestObject(rpObj, endPoints, classType, lsp, lspa, bandwidth, metrics, rro,
-               // rroBandwidth, iro, loadBalancing));
-               // msgs.add(new PCEPRequestMessage(Collections.unmodifiableList(svecList), Collections.unmodifiableList(requests)));
-               // }
-               // }
-               //
-               // return msgs;
-               // }
-               //
-               // private static CompositeRequestSvecObject getValidSvecComposite(final List<Object> objects) throws
-               // PCEPDocumentedException {
-               // if (objects == null || objects.isEmpty()) {
-               // throw new IllegalArgumentException("List cannot be null or empty.");
-               // }
-               //
-               // PCEPSvecObject svec = null;
-               // if (objects.get(0) instanceof PCEPSvecObject) {
-               // svec = (PCEPSvecObject) objects.get(0);
-               // objects.remove(svec);
-               // } else
-               // return null;
-               //
-               // PCEPObjectiveFunctionObject of = null;
-               // PCEPGlobalConstraintsObject gc = null;
-               // PCEPExcludeRouteObject xro = null;
-               // final List<PCEPMetricObject> metrics = new ArrayList<PCEPMetricObject>();
-               //
-               // int state = 1;
-               // while (!objects.isEmpty()) {
-               // final Object obj = objects.get(0);
-               //
-               // if (obj instanceof UnknownObject && ((UnknownObject) obj).isProcessingRule()) {
-               // throw new PCEPDocumentedException("Unknown object in SVEC list.", ((UnknownObject) obj).getError());
-               // }
-               //
-               // switch (state) {
-               // case 1:
-               // state = 2;
-               // if (obj instanceof PCEPObjectiveFunctionObject) {
-               // of = (PCEPObjectiveFunctionObject) obj;
-               // break;
-               // }
-               // case 2:
-               // state = 3;
-               // if (obj instanceof PCEPGlobalConstraintsObject) {
-               // gc = (PCEPGlobalConstraintsObject) obj;
-               // break;
-               // }
-               // case 3:
-               // state = 4;
-               // if (obj instanceof PCEPExcludeRouteObject) {
-               // xro = (PCEPExcludeRouteObject) obj;
-               // break;
-               // }
-               // case 4:
-               // state = 5;
-               // if (obj instanceof PCEPMetricObject) {
-               // metrics.add((PCEPMetricObject) obj);
-               // state = 4;
-               //
-               // break;
-               // }
-               // }
-               //
-               // if (state == 5)
-               // break;
-               //
-               // objects.remove(obj);
-               // }
-               //
-               // return new CompositeRequestSvecObject(svec, of, gc, xro, metrics);
-               // }
-               //
-               // private static PCEPRequestParameterObject copyRP(final PCEPRequestParameterObject origRp, final boolean
-               // processed) {
-               // return new PCEPRequestParameterObject(origRp.isLoose(), origRp.isBidirectional(), origRp.isReoptimized(),
-               // origRp.isMakeBeforeBreak(), origRp.isReportRequestOrder(), origRp.isSuplyOFOnResponse(),
-               // origRp.isFragmentation(), origRp.isP2mp(), origRp.isEroCompression(), origRp.getPriority(),
-               // origRp.getRequestID(), origRp.getTlvs(), processed, origRp.isIgnored());
-               // }
+               if (objects == null) {
+                       throw new IllegalArgumentException("Passed list can't be null.");
+               }
+
+               final List<Requests> requests = Lists.newArrayList();
+               final List<Svec> svecList = Lists.newArrayList();
+               while (!objects.isEmpty()) {
+                       final RequestsBuilder rBuilder = new RequestsBuilder();
+                       Rp rpObj = null;
+                       if (objects.get(0) instanceof Rp) {
+                               rpObj = (Rp) objects.get(0);
+                               objects.remove(0);
+                               if (!rpObj.isProcessingRule()) {
+                                       errors.add(createErrorMsg(PCEPErrors.P_FLAG_NOT_SET));
+                               } else {
+                                       rBuilder.setRp(rpObj);
+                               }
+                       } else {
+                               // if RP obj is missing return error only;
+                               errors.add(createErrorMsg(PCEPErrors.RP_MISSING));
+                               return null;
+                       }
+
+                       // expansion
+                       if (rpObj.isPathKey()) {
+                               if (objects.get(0) instanceof PathKey) {
+                                       rBuilder.setPathKeyExpansion(new PathKeyExpansionBuilder().setPathKey((PathKey) objects.get(0)).build());
+                               }
+                               continue;
+                       }
+
+                       final P2pBuilder p2pBuilder = new P2pBuilder();
+
+                       if (objects.get(0) instanceof EndpointsObj) {
+                               final EndpointsObj ep = (EndpointsObj) objects.get(0);
+                               objects.remove(0);
+                               if (!ep.isProcessingRule()) {
+                                       errors.add(createErrorMsg(PCEPErrors.P_FLAG_NOT_SET, rpObj));
+                               } else {
+                                       p2pBuilder.setEndpointsObj(ep);
+                               }
+                       } else {
+                               errors.add(createErrorMsg(PCEPErrors.END_POINTS_MISSING, rpObj));
+                               return null;
+                       }
+                       // p2p
+                       if (!rpObj.isP2mp()) {
+                               final SegmentComputation segm = getSegmentComputation(p2pBuilder, objects, errors, rpObj);
+                               if (segm != null) {
+                                       rBuilder.setSegmentComputation(segm);
+                               }
+                       }
+                       while (!objects.isEmpty()) {
+                               final SvecBuilder sBuilder = new SvecBuilder();
+                               final Svec svecComp = getValidSvec(sBuilder, objects);
+                               if (svecComp == null) {
+                                       break;
+                               }
+                               svecList.add(svecComp);
+                       }
+               }
+
+               final PcreqMessageBuilder mBuilder = new PcreqMessageBuilder();
+               mBuilder.setRequests(requests);
+               if (!svecList.isEmpty()) {
+                       mBuilder.setSvec(svecList);
+               }
+               return new PcreqBuilder().setPcreqMessage(mBuilder.build()).build();
+       }
+
+       private SegmentComputation getSegmentComputation(final P2pBuilder builder, final List<Object> objects, final List<Message> errors,
+                       final Rp rp) {
+               final List<Metrics> metrics = Lists.newArrayList();
+
+               State state = State.Init;
+               while (!objects.isEmpty() && state != State.End) {
+                       Object obj = objects.get(0);
+
+                       switch (state) {
+                       case Init:
+                               state = State.ReportedIn;
+                               if (obj instanceof Rro) {
+                                       final ReportedRouteBuilder rrBuilder = new ReportedRouteBuilder();
+                                       rrBuilder.setRro((Rro) obj);
+                                       objects.remove(0);
+                                       obj = objects.get(0);
+                                       if (obj instanceof Bandwidth) {
+                                               rrBuilder.setBandwidth((Bandwidth) obj);
+                                       }
+                                       break;
+                               }
+                       case ReportedIn:
+                               state = State.LoadBIn;
+                               if (obj instanceof LoadBalancing) {
+                                       builder.setLoadBalancing((LoadBalancing) obj);
+                                       break;
+                               }
+                       case LoadBIn:
+                               state = State.LspaIn;
+                               if (obj instanceof Lspa) {
+                                       builder.setLspa((Lspa) obj);
+                                       break;
+                               }
+                       case LspaIn:
+                               state = State.BandwidthIn;
+                               if (obj instanceof Bandwidth) {
+                                       builder.setBandwidth((Bandwidth) obj);
+                                       break;
+                               }
+                       case BandwidthIn:
+                               state = State.MetricIn;
+                               if (obj instanceof Metric) {
+                                       metrics.add(new MetricsBuilder().setMetric((Metric) obj).build());
+                                       state = State.BandwidthIn;
+                                       break;
+                               }
+                       case MetricIn:
+                               state = State.IroIn;
+                               if (obj instanceof Iro) {
+                                       builder.setIro((Iro) obj);
+                                       break;
+                               }
+                       case IroIn:
+                               state = State.RroIn;
+                               if (obj instanceof Rro) {
+                                       builder.setRro((Rro) obj);
+                                       break;
+                               }
+                       case RroIn:
+                               state = State.XroIn;
+                               if (obj instanceof Xro) {
+                                       builder.setXro((Xro) obj);
+                                       break;
+                               }
+                       case XroIn:
+                               state = State.OfIn;
+                               if (obj instanceof Of) {
+                                       builder.setOf((Of) obj);
+                                       break;
+                               }
+                       case OfIn:
+                               state = State.CtIn;
+                               if (obj instanceof ClassType) {
+                                       final ClassType classType = (ClassType) obj;
+                                       if (!classType.isProcessingRule()) {
+                                               errors.add(createErrorMsg(PCEPErrors.P_FLAG_NOT_SET, rp));
+                                       } else {
+                                               builder.setClassType(classType);
+                                       }
+                                       break;
+                               }
+                       case CtIn:
+                               state = State.LspIn;
+                               if (obj instanceof Lsp) {
+                                       builder.setLsp((Lsp) obj);
+                                       break;
+                               }
+                       case LspIn:
+                               state = State.End;
+                               break;
+                       case End:
+                               break;
+                       }
+                       if (!state.equals(State.End)) {
+                               objects.remove(0);
+                       }
+               }
+               if (!metrics.isEmpty()) {
+                       builder.setMetrics(metrics);
+               }
+
+               if (rp.isReoptimization()
+                               && builder.getBandwidth() != null
+                               && builder.getReportedRoute().getBandwidth().getBandwidth() != new BandwidthBuilder().setBandwidth(
+                                               new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.nps.concepts.rev130930.Bandwidth(new byte[] { 0 })).build()
+                               && builder.getReportedRoute().getRro() == null) {
+                       errors.add(createErrorMsg(PCEPErrors.RRO_MISSING, rp));
+                       return null;
+               }
+               return new SegmentComputationBuilder().setP2p(builder.build()).build();
+       }
+
+       private enum State {
+               Init, ReportedIn, LoadBIn, LspaIn, BandwidthIn, MetricIn, IroIn, RroIn, XroIn, OfIn, CtIn, LspIn, End
+       }
+
+       private Svec getValidSvec(final SvecBuilder builder, final List<Object> objects) {
+               if (objects == null || objects.isEmpty()) {
+                       throw new IllegalArgumentException("List cannot be null or empty.");
+               }
+
+               if (objects.get(0) instanceof org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.svec.object.Svec) {
+                       builder.setSvec((org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.svec.object.Svec) objects.get(0));
+                       objects.remove(0);
+               } else {
+                       return null;
+               }
+
+               final List<Metrics> metrics = Lists.newArrayList();
+
+               Object obj = null;
+               SvecState state = SvecState.Init;
+               while (!objects.isEmpty() && !state.equals(SvecState.End)) {
+                       obj = objects.get(0);
+
+                       switch (state) {
+                       case Init:
+                               state = SvecState.OfIn;
+                               if (obj instanceof Of) {
+                                       builder.setOf((Of) obj);
+                                       break;
+                               }
+                       case OfIn:
+                               state = SvecState.GcIn;
+                               if (obj instanceof Gc) {
+                                       builder.setGc((Gc) obj);
+                                       break;
+                               }
+                       case GcIn:
+                               state = SvecState.XroIn;
+                               if (obj instanceof Xro) {
+                                       builder.setXro((Xro) obj);
+                                       break;
+                               }
+                       case XroIn:
+                               state = SvecState.MetricIn;
+                               if (obj instanceof Metric) {
+                                       metrics.add(new MetricsBuilder().setMetric((Metric) obj).build());
+                                       state = SvecState.XroIn;
+
+                                       break;
+                               }
+                       case MetricIn:
+                               state = SvecState.End;
+                               break;
+                       case End:
+                               break;
+                       }
+                       if (!state.equals(SvecState.End)) {
+                               objects.remove(0);
+                       }
+               }
+               return builder.build();
+       }
 
-               return null;
+       private enum SvecState {
+               Init, OfIn, GcIn, XroIn, MetricIn, End
        }
 
        @Override
index 170bff9f6f30f7343ff8fbad41e9be05e1b9d982..8754c2e6484caa93daa424db25ef52149461207f 100644 (file)
@@ -10,7 +10,9 @@ package org.opendaylight.protocol.pcep.impl.object;
 import org.opendaylight.protocol.concepts.Ipv4Util;
 import org.opendaylight.protocol.concepts.Ipv6Util;
 import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
+import org.opendaylight.protocol.pcep.spi.PCEPErrors;
 import org.opendaylight.protocol.pcep.spi.TlvHandlerRegistry;
+import org.opendaylight.protocol.pcep.spi.UnknownObject;
 import org.opendaylight.protocol.util.ByteArray;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Object;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.ObjectHeader;
@@ -22,12 +24,16 @@ 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.endpoints.address.family.Ipv6Builder;
 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.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * Parser for IPv4 {@link EndpointsObj}
  */
 public class PCEPEndPointsObjectParser extends AbstractObjectWithTlvsParser<EndpointsObjBuilder> {
 
+       private static final Logger LOG = LoggerFactory.getLogger(PCEPEndPointsObjectParser.class);
+
        public static final int CLASS = 4;
        public static final int TYPE = 1;
 
@@ -54,16 +60,10 @@ public class PCEPEndPointsObjectParser extends AbstractObjectWithTlvsParser<Endp
        }
 
        @Override
-       public EndpointsObj parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException {
+       public Object parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException {
                if (bytes == null) {
                        throw new IllegalArgumentException("Array of bytes is mandatory");
                }
-
-               if (!header.isProcessingRule()) {
-                       //LOG.debug("Processed bit not set on ENDPOINTS OBJECT, ignoring it");
-                       return null;
-               }
-
                final EndpointsObjBuilder builder = new EndpointsObjBuilder();
                builder.setIgnore(header.isIgnore());
                builder.setProcessingRule(header.isProcessingRule());
@@ -81,6 +81,10 @@ public class PCEPEndPointsObjectParser extends AbstractObjectWithTlvsParser<Endp
                } else {
                        throw new PCEPDeserializerException("Wrong length of array of bytes.");
                }
+               if (!builder.isProcessingRule()) {
+                       LOG.debug("Processed bit not set on Endpoints OBJECT, ignoring it.");
+                       return new UnknownObject(PCEPErrors.P_FLAG_NOT_SET, builder.build());
+               }
                return builder.build();
        }
 
index efbf5ee44a9eb767941e24af40076bf084e9d59e..90c92bb2ba185066a411693163702f3b8a3c61cf 100644 (file)
@@ -73,10 +73,13 @@ public class PCEPRequestParameterObjectParser extends AbstractObjectWithTlvsPars
        private static final int M_FLAG_OFFSET = 21;
        private static final int D_FLAG_OFFSET = 22;
 
+       /*
+        * Path-key bit (RFC5520)
+        */
+       private static final int P_FLAG_OFFSET = 23;
        /*
         * OF extension flags offsets inside flags sub.field in bits
         */
-
        private static final int S_FLAG_OFFSET = 24;
        /*
         * RFC6006 flags
@@ -92,7 +95,7 @@ public class PCEPRequestParameterObjectParser extends AbstractObjectWithTlvsPars
        }
 
        @Override
-       public Rp parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException {
+       public Object parseObject(final ObjectHeader header, final byte[] bytes) throws PCEPDeserializerException {
                if (bytes == null || bytes.length == 0) {
                        throw new IllegalArgumentException("Array of bytes is mandatory. Can't be null or empty.");
                }
@@ -106,13 +109,6 @@ public class PCEPRequestParameterObjectParser extends AbstractObjectWithTlvsPars
 
                final RpBuilder builder = new RpBuilder();
                builder.setIgnore(header.isIgnore());
-
-               // FIXME : change binary files
-               // if (!header.isProcessingRule()) {
-               // LOG.debug("Processed bit not set on RP OBJECT, ignoring it");
-               // return null;
-               // }
-
                builder.setProcessingRule(header.isProcessingRule());
 
                builder.setPriority(priority);
@@ -121,6 +117,7 @@ public class PCEPRequestParameterObjectParser extends AbstractObjectWithTlvsPars
                builder.setEroCompression(flags.get(E_FLAG_OFFSET));
                builder.setMakeBeforeBreak(flags.get(M_FLAG_OFFSET));
                builder.setOrder(flags.get(D_FLAG_OFFSET));
+               builder.setPathKey(flags.get(P_FLAG_OFFSET));
                builder.setSupplyOf(flags.get(S_FLAG_OFFSET));
                builder.setLoose(flags.get(O_FLAG_OFFSET));
                builder.setBiDirectional(flags.get(B_FLAG_OFFSET));
@@ -128,6 +125,7 @@ public class PCEPRequestParameterObjectParser extends AbstractObjectWithTlvsPars
 
                builder.setRequestId(new RequestId(ByteArray.bytesToLong(Arrays.copyOfRange(bytes, RID_F_OFFSET, RID_F_OFFSET + RID_F_LENGTH))));
                parseTlvs(builder, ByteArray.cutBytes(bytes, TLVS_OFFSET));
+
                return builder.build();
        }
 
@@ -151,6 +149,7 @@ public class PCEPRequestParameterObjectParser extends AbstractObjectWithTlvsPars
                flags.set(O_FLAG_OFFSET, rPObj.isLoose());
                flags.set(M_FLAG_OFFSET, rPObj.isMakeBeforeBreak());
                flags.set(D_FLAG_OFFSET, rPObj.isOrder());
+               flags.set(P_FLAG_OFFSET, rPObj.isPathKey());
                flags.set(S_FLAG_OFFSET, rPObj.isSupplyOf());
                flags.set(F_FLAG_OFFSET, rPObj.isFragmentation());
                flags.set(N_FLAG_OFFSET, rPObj.isP2mp());
index c06d90ae43931367e5dd278fc5e32d43035856ba..fc846577dcd15ea768a772c3956569f6763a5d04 100644 (file)
@@ -494,6 +494,7 @@ public class PCEPObjectParserTest {
                builder.setLoose(true);
                builder.setMakeBeforeBreak(true);
                builder.setOrder(false);
+               builder.setPathKey(false);
                builder.setSupplyOf(false);
                builder.setFragmentation(false);
                builder.setP2mp(false);
index 92fc41dd9e8a638fc684713ffac58a376eb7609c..0658d64688b591934b87a32827023cc0b584f202 100644 (file)
@@ -26,12 +26,14 @@ 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.PCEPRequestMessageParser;
 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.PCEPDeserializerException;
 import org.opendaylight.protocol.pcep.spi.pojo.ServiceLoaderPCEPExtensionProviderContext;
 import org.opendaylight.protocol.util.ByteArray;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
 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;
@@ -40,6 +42,7 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.mes
 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.PcreqBuilder;
 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;
@@ -53,6 +56,9 @@ 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.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.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;
@@ -99,6 +105,9 @@ 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.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.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.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;
@@ -115,6 +124,8 @@ 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.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.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.AsNumber;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.basic.explicit.route.subobjects.subobject.type.AsNumberBuilder;
@@ -127,7 +138,8 @@ public class PCEPValidatorTest {
 
        private ObjectHandlerRegistry objectRegistry;
 
-       private Rp rp;
+       private Rp rpTrue;
+       private Rp rpFalse;
        private Open open;
        private NoPath noPath;
        private Lspa lspa;
@@ -139,6 +151,8 @@ public class PCEPValidatorTest {
        private Of of;
        private Srp srp;
        private Lsp lsp;
+       private EndpointsObj endpoints;
+       private Svec svec;
 
        private AsNumber eroASSubobject;
        private Unnumbered rroUnnumberedSub;
@@ -147,20 +161,23 @@ public class PCEPValidatorTest {
        public void setUp() throws Exception {
                this.objectRegistry = ServiceLoaderPCEPExtensionProviderContext.create().getObjectHandlerRegistry();
                final RpBuilder rpBuilder = new RpBuilder();
-               rpBuilder.setProcessingRule(false);
+               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.rp = rpBuilder.build();
+               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);
@@ -259,6 +276,25 @@ public class PCEPValidatorTest {
                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();
+
+               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(afi.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
@@ -313,231 +349,216 @@ public class PCEPValidatorTest {
                assertArrayEquals(result, buf.array());
        }
 
-       // @Test
-       // public void testRequestMessageValidationFromBin() throws IOException, PCEPDeserializerException,
-       // PCEPDocumentedException,
-       // DeserializerException, DocumentedException {
-       // List<CompositeRequestObject> requests = new ArrayList<CompositeRequestObject>();
-       // 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<IPv4Address>(new
-       // IPv4Address(ipAdress), new IPv4Address(ipAdress))));
-       // PCEPRequestMessage specMessage = new PCEPRequestMessage(requests);
-       // List<Message> deserMsgs = deserMsg("src/test/resources/PCEPRequestMessage1.bin");
-       // final List<Message> specMessages = Lists.newArrayList();
-       // specMessages.add(specMessage);
-       //
-       // assertEquals(deserMsgs.toString(), specMessages.toString());
-       //
-       // requests = new ArrayList<CompositeRequestObject>();
-       // final byte[] ipAdress2 = { (byte) 0x7F, (byte) 0x00, (byte) 0x00, (byte) 0x01 };
-       // requests.add(new CompositeRequestObject(this.requestParameter, new PCEPEndPointsObject<IPv4Address>(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<CompositeRequestObject>();
-       // requests.add(new CompositeRequestObject(this.requestParameter, new PCEPEndPointsObject<IPv4Address>(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<CompositeRequestObject>();
-       // requests.add(new CompositeRequestObject(this.requestParameter, new PCEPEndPointsObject<IPv4Address>(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<PCEPMetricObject>() {
-       // 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<CompositeRequestSvecObject> svecList = new ArrayList<CompositeRequestSvecObject>();
-       // 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<CompositeRequestObject>();
-       // requests.add(new CompositeRequestObject(this.requestParameter, new PCEPEndPointsObject<IPv4Address>(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<CompositeRequestObject>();
-       // requests.add(new CompositeRequestObject(new PCEPRequestParameterObject(false, false, false, false, false, false,
-       // false, false, (short) 4, 1, true, false), new PCEPEndPointsObject<IPv4Address>(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<CompositeRequestObject>();
-       // requests.add(new CompositeRequestObject(this.requestParameter, new PCEPEndPointsObject<IPv4Address>(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<CompositeRequestObject>();
-       // requests.add(new CompositeRequestObject(new PCEPRequestParameterObject(true, false, false, false, false, false,
-       // false, false, (short) 1, 1, true, false), new PCEPEndPointsObject<IPv4Address>(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<CompositeRequestSvecObject>();
-       // 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<ExcludeRouteSubobject>() {
-       // private static final long serialVersionUID = 1L;
-       //
-       // {
-       // this.add(new XROAsNumberSubobject(new AsNumber((long) 0x12), true));
-       // }
-       // }, true, true, false), new ArrayList<PCEPMetricObject>() {
-       // private static final long serialVersionUID = 1L;
-       //
-       // {
-       // this.add(new PCEPMetricObject(true, true, new TEMetric(123456L), true, false));
-       // }
-       // }));
-       //
-       // requests = new ArrayList<CompositeRequestObject>();
-       // requests.add(new CompositeRequestObject(this.requestParameter, new PCEPEndPointsObject<IPv4Address>(new
-       // IPv4Address(ipAdress2), new IPv4Address(ipAdress2)), null, null, PCEPValidatorTest.lspa, new
-       // PCEPRequestedPathBandwidthObject(new Bandwidth(ByteArray.floatToBytes(1000)), false, false), new
-       // ArrayList<PCEPMetricObject>() {
-       // 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<CompositeRequestObject>();
-       // requests.add(new CompositeRequestObject(this.requestParameter, new PCEPEndPointsObject<IPv4Address>(new
-       // IPv4Address(ipAdress6), new IPv4Address(ipAdress6)), null, null, PCEPValidatorTest.lspa, new
-       // PCEPRequestedPathBandwidthObject(new Bandwidth(ByteArray.floatToBytes(1000)), false, false), new
-       // ArrayList<PCEPMetricObject>() {
-       // 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>(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<PCEPObject> objs = new ArrayList<PCEPObject>();
-       // List<Message> 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<PCEPErrorObject>() {
-       // 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<PCEPObject>();
-       // 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 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<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.Requests> 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());
+               builder.setRequests(reqs1);
+
+               assertEquals(new PcreqBuilder().setPcreqMessage(builder.build()).build(),
+                               parser.parseMessage(result, Collections.<Message> 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<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.Requests> 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.setLsp(this.lsp);
+               p2pBuilder.setMetrics(Lists.newArrayList(this.metrics));
+               p2pBuilder.setIro(this.iro);
+               rBuilder1.setSegmentComputation(new SegmentComputationBuilder().setP2p(p2pBuilder.build()).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.<Message> emptyList()));
+               buf = Unpooled.buffer(result.length);
+               parser.serializeMessage(new PcreqBuilder().setPcreqMessage(builder.build()).build(), buf);
+               // assertArrayEquals(result, buf.array());
+
+               // specMessages.clear();
+               // requests = new ArrayList<CompositeRequestObject>();
+               // requests.add(new CompositeRequestObject(this.requestParameter, new PCEPEndPointsObject<IPv4Address>(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<CompositeRequestObject>();
+               // requests.add(new CompositeRequestObject(new PCEPRequestParameterObject(false, false, false, false, false,
+               // false,
+               // false, false, (short) 4, 1, true, false), new PCEPEndPointsObject<IPv4Address>(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<CompositeRequestObject>();
+               // requests.add(new CompositeRequestObject(this.requestParameter, new PCEPEndPointsObject<IPv4Address>(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<CompositeRequestObject>();
+               // requests.add(new CompositeRequestObject(new PCEPRequestParameterObject(true, false, false, false, false,
+               // false,
+               // false, false, (short) 1, 1, true, false), new PCEPEndPointsObject<IPv4Address>(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<CompositeRequestSvecObject>();
+               // 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<ExcludeRouteSubobject>() {
+               // private static final long serialVersionUID = 1L;
+               //
+               // {
+               // this.add(new XROAsNumberSubobject(new AsNumber((long) 0x12), true));
+               // }
+               // }, true, true, false), new ArrayList<PCEPMetricObject>() {
+               // private static final long serialVersionUID = 1L;
+               //
+               // {
+               // this.add(new PCEPMetricObject(true, true, new TEMetric(123456L), true, false));
+               // }
+               // }));
+               //
+               // requests = new ArrayList<CompositeRequestObject>();
+               // requests.add(new CompositeRequestObject(this.requestParameter, new PCEPEndPointsObject<IPv4Address>(new
+               // IPv4Address(ipAdress2), new IPv4Address(ipAdress2)), null, null, PCEPValidatorTest.lspa, new
+               // PCEPRequestedPathBandwidthObject(new Bandwidth(ByteArray.floatToBytes(1000)), false, false), new
+               // ArrayList<PCEPMetricObject>() {
+               // 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<CompositeRequestObject>();
+               // requests.add(new CompositeRequestObject(this.requestParameter, new PCEPEndPointsObject<IPv4Address>(new
+               // IPv4Address(ipAdress6), new IPv4Address(ipAdress6)), null, null, PCEPValidatorTest.lspa, new
+               // PCEPRequestedPathBandwidthObject(new Bandwidth(ByteArray.floatToBytes(1000)), false, false), new
+               // ArrayList<PCEPMetricObject>() {
+               // 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>(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<PCEPObject> objs = new ArrayList<PCEPObject>();
+               // List<Message> 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<PCEPErrorObject>() {
+               // 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<PCEPObject>();
+               // 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 testReplyMsg() throws IOException, PCEPDeserializerException {
@@ -550,7 +571,7 @@ public class PCEPValidatorTest {
                RepliesBuilder rBuilder = new RepliesBuilder();
 
                final List<Replies> replies1 = Lists.newArrayList();
-               rBuilder.setRp(this.rp);
+               rBuilder.setRp(this.rpTrue);
                replies1.add(rBuilder.build());
                builder.setReplies(replies1);
 
@@ -564,10 +585,10 @@ public class PCEPValidatorTest {
                result = ByteArray.fileToBytes("src/test/resources/PCRep.2.bin");
                final List<Replies> replies2 = Lists.newArrayList();
                rBuilder = new RepliesBuilder();
-               rBuilder.setRp(this.rp);
+               rBuilder.setRp(this.rpTrue);
                replies2.add(rBuilder.build());
                final RepliesBuilder rBuilder2 = new RepliesBuilder();
-               rBuilder2.setRp(this.rp);
+               rBuilder2.setRp(this.rpTrue);
                rBuilder2.setResult(new FailureBuilder().setNoPath(this.noPath).build());
                replies2.add(rBuilder2.build());
                builder.setReplies(replies2);
@@ -582,7 +603,7 @@ public class PCEPValidatorTest {
                result = ByteArray.fileToBytes("src/test/resources/PCRep.3.bin");
                final List<Replies> replies3 = Lists.newArrayList();
                rBuilder = new RepliesBuilder();
-               rBuilder.setRp(this.rp);
+               rBuilder.setRp(this.rpTrue);
                rBuilder.setResult(new FailureBuilder().setNoPath(this.noPath).setLspa(this.lspa).setMetrics(Lists.newArrayList(this.metrics)).setIro(
                                this.iro).build());
                replies3.add(rBuilder.build());
@@ -598,7 +619,7 @@ public class PCEPValidatorTest {
                result = ByteArray.fileToBytes("src/test/resources/PCRep.5.bin");
                final List<Replies> replies4 = Lists.newArrayList();
                rBuilder = new RepliesBuilder();
-               rBuilder.setRp(this.rp);
+               rBuilder.setRp(this.rpTrue);
                final List<Paths> paths = Lists.newArrayList();
                final PathsBuilder paBuilder = new PathsBuilder();
                paBuilder.setEro(this.ero);
@@ -757,7 +778,7 @@ public class PCEPValidatorTest {
                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> rps = Lists.newArrayList();
-               rps.add(new RpsBuilder().setRp(this.rp).build());
+               rps.add(new RpsBuilder().setRp(this.rpFalse).build());
 
                final byte[] result = ByteArray.fileToBytes("src/test/resources/PCNtf.5.bin");
 
@@ -776,8 +797,8 @@ public class PCEPValidatorTest {
                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<Rps> rps1 = Lists.newArrayList();
-               rps1.add(new RpsBuilder().setRp(this.rp).build());
-               rps1.add(new RpsBuilder().setRp(this.rp).build());
+               rps1.add(new RpsBuilder().setRp(this.rpFalse).build());
+               rps1.add(new RpsBuilder().setRp(this.rpFalse).build());
 
                b.setNotifications(innerNot1);
                b.setRps(rps1);
@@ -816,7 +837,7 @@ public class PCEPValidatorTest {
 
                final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.error.type.request.Rps> 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());
+                               this.rpFalse).build());
 
                innerErr = Lists.newArrayList();
                innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
index 1d3555fbfeeba56dd9c580d191c98bd34dc3478d..0f62209f80a366037f638e9263157f8332009fad 100644 (file)
Binary files a/pcep/impl/src/test/resources/PCEPRequestMessage1.bin and b/pcep/impl/src/test/resources/PCEPRequestMessage1.bin differ
index 5140c6c0f3bdbe9e73ec51babbe97cec6ba0b34e..c1e2d5e676074dfa9c96b565bbdbc84d0445a47b 100644 (file)
Binary files a/pcep/impl/src/test/resources/PCRep.1.bin and b/pcep/impl/src/test/resources/PCRep.1.bin differ
index 085ce75578e947b15ab962afe9ef1c2a9d071d99..848b6b1b6121f1b8e294b4e771b0f4b9bc48c777 100644 (file)
Binary files a/pcep/impl/src/test/resources/PCRep.2.bin and b/pcep/impl/src/test/resources/PCRep.2.bin differ
index ac80c48072e22d716b8577014c9d869c26c20956..dbf28ee4d5ab83d16e44d3b058c294ee432135b0 100644 (file)
Binary files a/pcep/impl/src/test/resources/PCRep.3.bin and b/pcep/impl/src/test/resources/PCRep.3.bin differ
index 029052974c612573a9908a3b46f71dfb1bedb4a7..42d6e04fa41cee0121a383d68f7f5fcc05147b3e 100644 (file)
Binary files a/pcep/impl/src/test/resources/PCRep.5.bin and b/pcep/impl/src/test/resources/PCRep.5.bin differ
index cec3f19c16be75275051f8b2f2b7acef8b5a0926..8b73bbffbd163c81b132e338442e357ad5eb34eb 100644 (file)
Binary files a/pcep/impl/src/test/resources/PCReq.3.bin and b/pcep/impl/src/test/resources/PCReq.3.bin differ