Merge "Updated serializer for Pcreq message."
authorRobert Varga <rovarga@cisco.com>
Mon, 25 Nov 2013 10:52:11 +0000 (10:52 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Mon, 25 Nov 2013 10:52:11 +0000 (10:52 +0000)
pcep/impl/src/main/java/org/opendaylight/protocol/pcep/impl/message/PCEPRequestMessageParser.java
pcep/impl/src/test/java/org/opendaylight/protocol/pcep/impl/PCEPValidatorTest.java
pcep/impl/src/test/resources/PCReq.3.bin

index 02ef0159efa12a00c7509fca8f906b2b80d749a5..37b2d19f16f51d536150e25c985846a8a7c432ce 100644 (file)
@@ -33,6 +33,7 @@ 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.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.PcreqMessage;
 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;
@@ -41,7 +42,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.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.P2p;
 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.ReportedRoute;
 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;
@@ -65,7 +68,88 @@ public class PCEPRequestMessageParser extends AbstractMessageParser {
                        throw new IllegalArgumentException("Wrong instance of PCEPMessage. Passed instance of " + message.getClass()
                                        + ". Needed PcrepMessage.");
                }
+               final PcreqMessage msg = ((Pcreq) message).getPcreqMessage();
+               if (msg.getRequests() == null || msg.getRequests().isEmpty()) {
+                       throw new IllegalArgumentException("Requests cannot be null or empty.");
+               }
+               for (final Requests req : msg.getRequests()) {
+                       buffer.writeBytes(serializeObject(req.getRp()));
+                       if (req.getPathKeyExpansion() != null) {
+                               buffer.writeBytes(serializeObject(req.getPathKeyExpansion().getPathKey()));
+                       }
+                       if (req.getSegmentComputation() != null) {
+                               final SegmentComputation sc = req.getSegmentComputation();
+                               if (sc.getP2p() != null) {
+                                       serializeP2P(buffer, sc.getP2p());
+                               }
+                       }
+               }
+               if (msg.getSvec() != null) {
+                       for (final Svec s : msg.getSvec()) {
+                               buffer.writeBytes(serializeObject(s.getSvec()));
+                               if (s.getOf() != null) {
+                                       buffer.writeBytes(serializeObject(s.getOf()));
+                               }
+                               if (s.getGc() != null) {
+                                       buffer.writeBytes(serializeObject(s.getGc()));
+                               }
+                               if (s.getXro() != null) {
+                                       buffer.writeBytes(serializeObject(s.getXro()));
+                               }
+                               if (s.getMetric() != null) {
+                                       for (final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.svec.Metric m : s.getMetric()) {
+                                               buffer.writeBytes(serializeObject(m.getMetric()));
+                                       }
+                               }
+                       }
+               }
+       }
 
+       private void serializeP2P(final ByteBuf buffer, final P2p p2p) {
+               if (p2p.getEndpointsObj() != null) {
+                       buffer.writeBytes(serializeObject(p2p.getEndpointsObj()));
+               }
+               if (p2p.getReportedRoute() != null) {
+                       final ReportedRoute rr = p2p.getReportedRoute();
+                       if (rr.getRro() != null) {
+                               buffer.writeBytes(serializeObject(rr.getRro()));
+                       }
+                       if (rr.getBandwidth() != null) {
+                               buffer.writeBytes(serializeObject(rr.getBandwidth()));
+                       }
+               }
+               if (p2p.getLoadBalancing() != null) {
+                       buffer.writeBytes(serializeObject(p2p.getLoadBalancing()));
+               }
+               if (p2p.getLspa() != null) {
+                       buffer.writeBytes(serializeObject(p2p.getLspa()));
+               }
+               if (p2p.getBandwidth() != null) {
+                       buffer.writeBytes(serializeObject(p2p.getBandwidth()));
+               }
+               if (p2p.getMetrics() != null) {
+                       for (final Metrics m : p2p.getMetrics()) {
+                               buffer.writeBytes(serializeObject(m.getMetric()));
+                       }
+               }
+               if (p2p.getIro() != null) {
+                       buffer.writeBytes(serializeObject(p2p.getIro()));
+               }
+               if (p2p.getRro() != null) {
+                       buffer.writeBytes(serializeObject(p2p.getRro()));
+               }
+               if (p2p.getXro() != null) {
+                       buffer.writeBytes(serializeObject(p2p.getXro()));
+               }
+               if (p2p.getOf() != null) {
+                       buffer.writeBytes(serializeObject(p2p.getOf()));
+               }
+               if (p2p.getClassType() != null) {
+                       buffer.writeBytes(serializeObject(p2p.getClassType()));
+               }
+               if (p2p.getLsp() != null) {
+                       buffer.writeBytes(serializeObject(p2p.getLsp()));
+               }
        }
 
        @Override
@@ -132,6 +216,7 @@ public class PCEPRequestMessageParser extends AbstractMessageParser {
                                }
                                svecList.add(svecComp);
                        }
+                       requests.add(rBuilder.build());
                }
 
                final PcreqMessageBuilder mBuilder = new PcreqMessageBuilder();
@@ -301,7 +386,6 @@ public class PCEPRequestMessageParser extends AbstractMessageParser {
                                if (obj instanceof Metric) {
                                        metrics.add(new MetricsBuilder().setMetric((Metric) obj).build());
                                        state = SvecState.XroIn;
-
                                        break;
                                }
                        case MetricIn:
index 0658d64688b591934b87a32827023cc0b584f202..d06be3e24e0813da9eaabc230102b0495e7ebfe0 100644 (file)
@@ -360,13 +360,15 @@ public class PCEPValidatorTest {
                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.<Message> emptyList()));
                ByteBuf buf = Unpooled.buffer(result.length);
                parser.serializeMessage(new PcreqBuilder().setPcreqMessage(builder.build()).build(), buf);
-               // assertArrayEquals(result, buf.array());
+
+               assertArrayEquals(result, buf.array());
 
                result = ByteArray.fileToBytes("src/test/resources/PCReq.3.bin");
 
@@ -379,6 +381,7 @@ public class PCEPValidatorTest {
                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()));
@@ -387,7 +390,7 @@ public class PCEPValidatorTest {
                                parser.parseMessage(result, Collections.<Message> emptyList()));
                buf = Unpooled.buffer(result.length);
                parser.serializeMessage(new PcreqBuilder().setPcreqMessage(builder.build()).build(), buf);
-               // assertArrayEquals(result, buf.array());
+               assertArrayEquals(result, buf.array());
 
                // specMessages.clear();
                // requests = new ArrayList<CompositeRequestObject>();
index 8b73bbffbd163c81b132e338442e357ad5eb34eb..e10e19d5c2db2b168faa45c9e641a60afa5ccfe5 100644 (file)
Binary files a/pcep/impl/src/test/resources/PCReq.3.bin and b/pcep/impl/src/test/resources/PCReq.3.bin differ