2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.protocol.pcep.impl;
10 import static org.junit.Assert.assertArrayEquals;
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.fail;
14 import com.google.common.collect.ImmutableSet;
15 import io.netty.buffer.ByteBuf;
16 import io.netty.buffer.Unpooled;
17 import java.io.IOException;
18 import java.util.ArrayList;
19 import java.util.List;
21 import org.junit.Before;
22 import org.junit.Test;
23 import org.opendaylight.protocol.pcep.PCEPDeserializerException;
24 import org.opendaylight.protocol.pcep.impl.TestVendorInformationTlvParser.TestEnterpriseSpecificInformation;
25 import org.opendaylight.protocol.pcep.parser.BaseParserExtensionActivator;
26 import org.opendaylight.protocol.pcep.parser.message.PCEPCloseMessageParser;
27 import org.opendaylight.protocol.pcep.parser.message.PCEPErrorMessageParser;
28 import org.opendaylight.protocol.pcep.parser.message.PCEPKeepAliveMessageParser;
29 import org.opendaylight.protocol.pcep.parser.message.PCEPMonitoringReplyMessageParser;
30 import org.opendaylight.protocol.pcep.parser.message.PCEPMonitoringRequestMessageParser;
31 import org.opendaylight.protocol.pcep.parser.message.PCEPNotificationMessageParser;
32 import org.opendaylight.protocol.pcep.parser.message.PCEPOpenMessageParser;
33 import org.opendaylight.protocol.pcep.parser.message.PCEPReplyMessageParser;
34 import org.opendaylight.protocol.pcep.parser.message.PCEPRequestMessageParser;
35 import org.opendaylight.protocol.pcep.parser.message.PCEPStartTLSMessageParser;
36 import org.opendaylight.protocol.pcep.spi.ObjectRegistry;
37 import org.opendaylight.protocol.pcep.spi.pojo.SimplePCEPExtensionProviderContext;
38 import org.opendaylight.protocol.util.ByteArray;
39 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddressNoZone;
40 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
41 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone;
42 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.iana.rev130816.EnterpriseNumber;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ieee754.rev130819.Float32;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.network.concepts.rev131125.Bandwidth;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev181109.CloseBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev181109.KeepaliveBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev181109.OpenBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev181109.PcerrBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev181109.PcmonrepBuilder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev181109.PcmonreqBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev181109.PcntfBuilder;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev181109.PcrepBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev181109.PcreqBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev181109.StarttlsBuilder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.OfId;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.P2mpLeaves;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.ProtocolVersion;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.RequestId;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.bandwidth.object.BandwidthBuilder;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.bnc.object.branch.node.type.BranchNodeCaseBuilder;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.branch.node.object.BranchNodeListBuilder;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.close.message.CCloseMessageBuilder;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.close.object.CCloseBuilder;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.close.object.c.close.TlvsBuilder;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.endpoints.address.family.Ipv4CaseBuilder;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.endpoints.address.family.P2mpIpv4CaseBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.endpoints.address.family.ipv4._case.Ipv4Builder;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.endpoints.address.family.p2mp.ipv4._case.P2mpIpv4Builder;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.endpoints.object.EndpointsObj;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.endpoints.object.EndpointsObjBuilder;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.explicit.route.object.Ero;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.explicit.route.object.EroBuilder;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.include.route.object.Iro;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.include.route.object.IroBuilder;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.include.route.object.iro.Subobject;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.include.route.object.iro.SubobjectBuilder;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.keepalive.message.KeepaliveMessageBuilder;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.lsp.attributes.Metrics;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.lsp.attributes.MetricsBuilder;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.lspa.object.Lspa;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.lspa.object.LspaBuilder;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.metric.object.MetricBuilder;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.monitoring.metrics.MetricPce;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.monitoring.metrics.MetricPceBuilder;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.monitoring.object.Monitoring;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.monitoring.object.Monitoring.Flags;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.monitoring.object.MonitoringBuilder;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.monitoring.response.monitoring.metrics.list.GeneralMetricsListBuilder;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.monitoring.response.monitoring.metrics.list.SpecificMetricsListBuilder;
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.monitoring.response.monitoring.metrics.list.specific.metrics.list.SpecificMetricsBuilder;
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.notification.object.CNotification;
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.notification.object.CNotificationBuilder;
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.of.object.Of;
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.of.object.OfBuilder;
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.message.OpenMessageBuilder;
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.object.Open;
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.overload.object.Overload;
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.overload.object.OverloadBuilder;
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcc.id.req.object.PccIdReq;
101 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcc.id.req.object.PccIdReqBuilder;
102 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pce.id.object.PceId;
103 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pce.id.object.PceIdBuilder;
104 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcep.error.object.ErrorObject;
105 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcep.error.object.ErrorObjectBuilder;
106 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.PcerrMessageBuilder;
107 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.pcerr.message.Errors;
108 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.pcerr.message.ErrorsBuilder;
109 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.pcerr.message.error.type.RequestCaseBuilder;
110 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.pcerr.message.error.type.SessionCaseBuilder;
111 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.pcerr.message.error.type.request._case.RequestBuilder;
112 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.pcerr.message.error.type.session._case.SessionBuilder;
113 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcmonrep.message.PcmonrepMessageBuilder;
114 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcntf.message.PcntfMessageBuilder;
115 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcntf.message.pcntf.message.Notifications;
116 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcntf.message.pcntf.message.NotificationsBuilder;
117 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcntf.message.pcntf.message.notifications.Rps;
118 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcntf.message.pcntf.message.notifications.RpsBuilder;
119 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcrep.message.PcrepMessageBuilder;
120 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcrep.message.pcrep.message.Replies;
121 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcrep.message.pcrep.message.RepliesBuilder;
122 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcrep.message.pcrep.message.replies.result.FailureCaseBuilder;
123 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcrep.message.pcrep.message.replies.result.SuccessCaseBuilder;
124 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcrep.message.pcrep.message.replies.result.failure._case.NoPath;
125 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcrep.message.pcrep.message.replies.result.failure._case.NoPathBuilder;
126 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcrep.message.pcrep.message.replies.result.success._case.SuccessBuilder;
127 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcrep.message.pcrep.message.replies.result.success._case.success.Paths;
128 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcrep.message.pcrep.message.replies.result.success._case.success.PathsBuilder;
129 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message.PcreqMessageBuilder;
130 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message.pcreq.message.MonitoringRequestBuilder;
131 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message.pcreq.message.monitoring.request.PceIdList;
132 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message.pcreq.message.monitoring.request.PceIdListBuilder;
133 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message.pcreq.message.requests.SegmentComputationBuilder;
134 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message.pcreq.message.requests.segment.computation.P2mpBuilder;
135 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message.pcreq.message.requests.segment.computation.P2pBuilder;
136 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message.pcreq.message.requests.segment.computation.p2mp.EndpointRroPairBuilder;
137 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message.pcreq.message.requests.segment.computation.p2mp.endpoint.rro.pair.RrosBuilder;
138 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message.pcreq.message.requests.segment.computation.p2mp.endpoint.rro.pair.rros.route.object.ReportedRouteObjectCaseBuilder;
139 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message.pcreq.message.requests.segment.computation.p2mp.endpoint.rro.pair.rros.route.object.SecondaryReportedRouteObjectCaseBuilder;
140 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message.pcreq.message.requests.segment.computation.p2mp.iro.bnc.choice.BncCaseBuilder;
141 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.proc.time.object.ProcTime;
142 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.proc.time.object.ProcTimeBuilder;
143 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.rp.object.Rp;
144 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.rp.object.RpBuilder;
145 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.secondary.reported.route.object.SrroBuilder;
146 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.start.tls.message.StartTlsMessageBuilder;
147 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.svec.object.Svec;
148 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.svec.object.SvecBuilder;
149 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.vendor.information.objects.VendorInformationObject;
150 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.vendor.information.objects.VendorInformationObjectBuilder;
151 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.AttributeFilter;
152 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820._record.route.subobjects.subobject.type.IpPrefixCaseBuilder;
153 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820._record.route.subobjects.subobject.type.ip.prefix._case.IpPrefixBuilder;
154 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.AsNumberCase;
155 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.AsNumberCaseBuilder;
156 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.as.number._case.AsNumberBuilder;
157 import org.opendaylight.yangtools.yang.common.Uint16;
158 import org.opendaylight.yangtools.yang.common.Uint32;
159 import org.opendaylight.yangtools.yang.common.Uint8;
161 public class PCEPValidatorTest {
163 private ObjectRegistry objectRegistry;
168 private NoPath noPath;
170 private Metrics metrics;
174 private EndpointsObj endpoints;
176 private List<VendorInformationObject> viObjects;
177 private Monitoring monitoring;
178 private PccIdReq pccIdReq;
180 private ProcTime procTime;
181 private Overload overload;
183 private AsNumberCase eroASSubobject;
185 private SimplePCEPExtensionProviderContext ctx;
186 private BaseParserExtensionActivator act;
187 private TestVendorInformationActivator viObjAct;
190 public void setUp() {
191 ctx = new SimplePCEPExtensionProviderContext();
192 act = new BaseParserExtensionActivator();
193 viObjAct = new TestVendorInformationActivator();
196 objectRegistry = ctx.getObjectHandlerRegistry();
197 final RpBuilder rpBuilder = new RpBuilder()
198 .setProcessingRule(true)
200 .setReoptimization(false)
201 .setBiDirectional(false)
203 .setMakeBeforeBreak(false)
207 .setFragmentation(false)
209 .setEroCompression(false)
210 .setPriority(Uint8.ONE)
211 .setRequestId(new RequestId(Uint32.TEN))
212 .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.rp
213 .object.rp.TlvsBuilder().build());
214 rpTrue = rpBuilder.build();
215 rpFalse = rpBuilder.setProcessingRule(false).build();
216 final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.object
217 .OpenBuilder openBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types
218 .rev181109.open.object.OpenBuilder()
219 .setProcessingRule(false)
221 .setDeadTimer(Uint8.ONE)
222 .setKeepalive(Uint8.ONE)
223 .setSessionId(Uint8.ZERO)
224 .setVersion(new ProtocolVersion(Uint8.ONE))
225 .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109
226 .open.object.open.TlvsBuilder().build());
227 // TODO get rid of previous superfluous openBuilder
228 open = openBuilder.build();
230 noPath = new NoPathBuilder()
231 .setProcessingRule(false)
233 .setNatureOfIssue(Uint8.ZERO)
234 .setUnsatisfiedConstraints(false)
235 .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109
236 .pcrep.message.pcrep.message.replies.result.failure._case.no.path.TlvsBuilder().build())
239 lspa = new LspaBuilder()
240 .setProcessingRule(false)
242 .setLocalProtectionDesired(false)
243 .setHoldPriority(Uint8.ZERO)
244 .setSetupPriority(Uint8.ZERO)
245 .setExcludeAny(new AttributeFilter(Uint32.ZERO))
246 .setIncludeAll(new AttributeFilter(Uint32.ZERO))
247 .setIncludeAny(new AttributeFilter(Uint32.ZERO))
248 .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109
249 .lspa.object.lspa.TlvsBuilder().build())
252 metrics = new MetricsBuilder()
253 .setMetric(new MetricBuilder()
255 .setProcessingRule(false)
258 .setMetricType(Uint8.ONE)
259 .setValue(new Float32(new byte[4]))
263 eroASSubobject = new AsNumberCaseBuilder()
264 .setAsNumber(new AsNumberBuilder()
265 .setAsNumber(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715
266 .AsNumber(Uint32.valueOf(0xFFFF)))
270 final IroBuilder iroBuilder = new IroBuilder();
271 iroBuilder.setIgnore(false);
272 iroBuilder.setProcessingRule(false);
273 final List<Subobject> iroSubs = new ArrayList<>();
274 iroSubs.add(new SubobjectBuilder().setSubobjectType(eroASSubobject).setLoose(false).build());
275 iroBuilder.setSubobject(iroSubs);
276 iro = iroBuilder.build();
278 final EroBuilder eroBuilder = new EroBuilder();
279 eroBuilder.setIgnore(false);
280 eroBuilder.setProcessingRule(false);
281 final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.explicit.route
282 .object.ero.Subobject> eroSubs = new ArrayList<>();
283 eroSubs.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.explicit
284 .route.object.ero.SubobjectBuilder().setSubobjectType(eroASSubobject).setLoose(false).build());
285 eroBuilder.setSubobject(eroSubs);
286 ero = eroBuilder.build();
290 .setProcessingRule(false)
291 .setCode(new OfId(Uint16.ZERO))
292 .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.of
293 .object.of.TlvsBuilder().build())
296 endpoints = new EndpointsObjBuilder()
298 .setProcessingRule(true)
299 .setAddressFamily(new Ipv4CaseBuilder()
300 .setIpv4(new Ipv4Builder()
301 .setSourceIpv4Address(new Ipv4AddressNoZone("255.255.255.255"))
302 .setDestinationIpv4Address(new Ipv4AddressNoZone("255.255.255.255"))
307 svec = new SvecBuilder()
309 .setProcessingRule(false)
310 .setLinkDiverse(false)
311 .setNodeDiverse(false)
312 .setSrlgDiverse(false)
313 .setLinkDirectionDiverse(false)
314 .setPartialPathDiverse(false)
315 .setRequestsIds(Set.of(new RequestId(Uint32.ONE)))
318 viObjects = new ArrayList<>();
319 final TestEnterpriseSpecificInformation esInfo = new TestEnterpriseSpecificInformation(5);
320 final VendorInformationObject viObj = new VendorInformationObjectBuilder()
321 .setEnterpriseNumber(new EnterpriseNumber(Uint32.ZERO))
322 .setEnterpriseSpecificInformation(esInfo)
324 viObjects.add(viObj);
326 monitoring = new MonitoringBuilder()
327 .setMonitoringId(Uint32.valueOf(100))
328 .setFlags(new Flags(false, false, false, false, false))
329 .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109
330 .monitoring.object.monitoring.TlvsBuilder().build()).build();
331 pccIdReq = new PccIdReqBuilder()
332 .setIpAddress(new IpAddressNoZone(new Ipv4AddressNoZone("127.0.0.1")))
334 pceId = new PceIdBuilder()
335 .setIpAddress(new IpAddressNoZone(new Ipv4AddressNoZone("127.0.0.2")))
338 procTime = new ProcTimeBuilder()
340 .setCurrentProcTime(Uint32.ONE)
341 .setMinProcTime(Uint32.TWO)
342 .setMaxProcTime(Uint32.valueOf(3))
343 .setAverageProcTime(Uint32.valueOf(4))
344 .setVarianceProcTime(Uint32.valueOf(5))
346 overload = new OverloadBuilder().setDuration(Uint16.valueOf(120)).build();
350 public void testOpenMsg() throws IOException, PCEPDeserializerException {
351 final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCEPOpenMessage1.bin"));
352 final PCEPOpenMessageParser parser = new PCEPOpenMessageParser(ctx.getObjectHandlerRegistry());
353 final OpenMessageBuilder builder = new OpenMessageBuilder();
355 final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.object
356 .OpenBuilder b = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109
357 .open.object.OpenBuilder()
358 .setProcessingRule(false)
360 .setVersion(new ProtocolVersion(Uint8.ONE))
361 .setKeepalive(Uint8.valueOf(30))
362 .setDeadTimer(Uint8.valueOf(120))
363 .setSessionId(Uint8.ONE)
364 .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109
365 .open.object.open.TlvsBuilder().build());
366 builder.setOpen(b.build());
368 assertEquals(new OpenBuilder().setOpenMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
369 result.readableBytes() - 4), List.of()));
370 final ByteBuf buf = Unpooled.buffer(result.readableBytes());
371 parser.serializeMessage(new OpenBuilder().setOpenMessage(builder.build()).build(), buf);
372 assertArrayEquals(result.array(), buf.array());
375 parser.serializeMessage(new OpenBuilder().setOpenMessage(new OpenMessageBuilder().build()).build(), null);
377 } catch (final IllegalArgumentException e) {
378 assertEquals("Open Object must be present in Open Message.", e.getMessage());
383 public void testKeepAliveMsg() throws PCEPDeserializerException {
384 final ByteBuf result = Unpooled.wrappedBuffer(new byte[] { 32, 2, 0, 4 });
385 final PCEPKeepAliveMessageParser parser = new PCEPKeepAliveMessageParser(objectRegistry);
386 final KeepaliveBuilder builder = new KeepaliveBuilder()
387 .setKeepaliveMessage(new KeepaliveMessageBuilder().build());
390 builder.build(), parser.parseMessage(result.slice(4, result.readableBytes() - 4), List.of()));
391 final ByteBuf buf = Unpooled.buffer(result.readableBytes());
392 parser.serializeMessage(builder.build(), buf);
393 assertArrayEquals(result.array(), buf.array());
397 public void testStartTLSMsg() throws Exception {
398 final ByteBuf result = Unpooled.wrappedBuffer(new byte[] { 32, 20, 0, 4 });
399 final PCEPStartTLSMessageParser parser = new PCEPStartTLSMessageParser(objectRegistry);
400 final StarttlsBuilder builder = new StarttlsBuilder().setStartTlsMessage(new StartTlsMessageBuilder().build());
402 assertEquals(builder.build(), parser.parseMessage(result.slice(4, result.readableBytes() - 4), List.of()));
403 final ByteBuf buf = Unpooled.buffer(result.readableBytes());
404 parser.serializeMessage(builder.build(), buf);
405 assertArrayEquals(result.array(), buf.array());
409 public void testCloseMsg() throws IOException, PCEPDeserializerException {
410 final ByteBuf result =
411 Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCEPCloseMessage1.bin"));
413 final PCEPCloseMessageParser parser = new PCEPCloseMessageParser(objectRegistry);
414 final CloseBuilder builder = new CloseBuilder().setCCloseMessage(new CCloseMessageBuilder()
415 .setCClose(new CCloseBuilder()
417 .setProcessingRule(false)
418 .setReason(Uint8.valueOf(5))
419 .setTlvs(new TlvsBuilder().build())
423 assertEquals(builder.build(), parser.parseMessage(result.slice(4, result.readableBytes() - 4), List.of()));
424 final ByteBuf buf = Unpooled.buffer(result.readableBytes());
425 parser.serializeMessage(builder.build(), buf);
426 assertArrayEquals(result.array(), buf.array());
429 parser.serializeMessage(new CloseBuilder()
430 .setCCloseMessage(new CCloseMessageBuilder().build())
433 } catch (final IllegalArgumentException e) {
434 assertEquals("Close Object must be present in Close Message.", e.getMessage());
439 public void testRequestMsg() throws IOException, PCEPDeserializerException {
441 final PCEPRequestMessageParser parser = new PCEPRequestMessageParser(objectRegistry);
443 final PcreqMessageBuilder builder = new PcreqMessageBuilder();
444 final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message
445 .pcreq.message.Requests> reqs1 = new ArrayList<>();
446 final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message
447 .pcreq.message.RequestsBuilder rBuilder =
448 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message
449 .pcreq.message.RequestsBuilder();
450 rBuilder.setRp(rpTrue);
451 rBuilder.setSegmentComputation(new SegmentComputationBuilder().setP2p(new P2pBuilder()
452 .setEndpointsObj(endpoints).build()).build());
453 reqs1.add(rBuilder.build());
454 builder.setRequests(reqs1);
456 ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCEPRequestMessage1.bin"));
457 assertEquals(new PcreqBuilder().setPcreqMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
458 result.readableBytes() - 4), List.of()));
459 ByteBuf buf = Unpooled.buffer(result.readableBytes());
460 parser.serializeMessage(new PcreqBuilder().setPcreqMessage(builder.build()).build(), buf);
462 assertArrayEquals(result.array(), buf.array());
464 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCReq.3.bin"));
466 final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message
467 .pcreq.message.Requests> reqs2 = new ArrayList<>();
468 final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message
469 .pcreq.message.RequestsBuilder rBuilder1 =
470 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message
471 .pcreq.message.RequestsBuilder();
472 rBuilder1.setRp(rpTrue);
473 final P2pBuilder p2pBuilder = new P2pBuilder()
474 .setEndpointsObj(endpoints)
475 .setMetrics(List.of(metrics))
477 rBuilder1.setSegmentComputation(new SegmentComputationBuilder().setP2p(p2pBuilder.build()).build());
478 reqs2.add(rBuilder1.build());
479 builder.setRequests(reqs2)
480 .setSvec(List.of(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep
481 .types.rev181109.pcreq.message.pcreq.message.SvecBuilder().setSvec(svec).build()));
483 assertEquals(new PcreqBuilder().setPcreqMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
484 result.readableBytes() - 4), List.of()));
485 buf = Unpooled.buffer(result.readableBytes());
486 parser.serializeMessage(new PcreqBuilder().setPcreqMessage(builder.build()).build(), buf);
487 assertArrayEquals(result.array(), buf.array());
489 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCReq.9.bin"));
491 final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message
492 .pcreq.message.Requests> reqs3 = new ArrayList<>();
493 final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message
494 .pcreq.message.RequestsBuilder rBuilder2 =
495 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message
496 .pcreq.message.RequestsBuilder();
497 rBuilder2.setRp(new RpBuilder(rpTrue).setP2mp(true).build());
498 final EndpointsObjBuilder epBuilder = new EndpointsObjBuilder()
500 .setProcessingRule(true)
501 .setAddressFamily(new P2mpIpv4CaseBuilder()
502 .setP2mpIpv4(new P2mpIpv4Builder()
503 .setP2mpLeaves(P2mpLeaves.NewLeavesToAdd)
504 .setSourceIpv4Address(new Ipv4AddressNoZone("255.255.255.255"))
505 .setDestinationIpv4Address(ImmutableSet.of(new Ipv4AddressNoZone("255.255.255.254"),
506 new Ipv4AddressNoZone("255.255.255.253")))
509 final P2mpBuilder p2mpBuilder = new P2mpBuilder();
510 p2mpBuilder.setEndpointRroPair(List.of(new EndpointRroPairBuilder()
511 .setEndpointsObj(epBuilder.build())
512 .setRros(List.of(new RrosBuilder()
513 .setRouteObject(new ReportedRouteObjectCaseBuilder()
514 .setRro(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109
515 .reported.route.object.RroBuilder()
517 .setProcessingRule(true)
518 .setSubobject(List.of(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns
519 .yang.pcep.types.rev181109.reported.route.object.rro.SubobjectBuilder()
520 .setProtectionAvailable(false)
521 .setProtectionInUse(false)
522 .setSubobjectType(new IpPrefixCaseBuilder()
523 .setIpPrefix(new IpPrefixBuilder()
524 .setIpPrefix(new IpPrefix(new Ipv4Prefix("255.255.255.252/32")))
532 .setRouteObject(new SecondaryReportedRouteObjectCaseBuilder()
533 .setSrro(new SrroBuilder()
535 .setProcessingRule(true)
536 .setSubobject(List.of(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns
537 .yang.pcep.types.rev181109.secondary.reported.route.object.srro.SubobjectBuilder()
538 .setProtectionInUse(false)
539 .setProtectionAvailable(false)
540 .setSubobjectType(new IpPrefixCaseBuilder()
541 .setIpPrefix(new IpPrefixBuilder()
542 .setIpPrefix(new IpPrefix(new Ipv4Prefix("255.255.255.251/32")))
550 p2mpBuilder.setIroBncChoice(new BncCaseBuilder()
551 .setBranchNodeType(new BranchNodeCaseBuilder()
552 .setBranchNodeList(new BranchNodeListBuilder()
554 .setProcessingRule(true)
555 .setSubobject(List.of(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang
556 .pcep.types.rev181109.bnc.SubobjectBuilder()
558 .setIpPrefix(new IpPrefix(new Ipv4Prefix("255.255.255.252/32")))
563 rBuilder2.setSegmentComputation(new SegmentComputationBuilder().setP2mp(p2mpBuilder.build()).build());
564 reqs3.add(rBuilder2.build());
565 builder.setRequests(reqs3).setSvec(null);
567 assertEquals(new PcreqBuilder().setPcreqMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
568 result.readableBytes() - 4), List.of()));
569 buf = Unpooled.buffer(result.readableBytes());
570 parser.serializeMessage(new PcreqBuilder().setPcreqMessage(builder.build()).build(), buf);
571 assertArrayEquals(result.array(), buf.array());
574 parser.serializeMessage(new PcreqBuilder().setPcreqMessage(new PcreqMessageBuilder().build()).build(),
577 } catch (final IllegalArgumentException e) {
578 assertEquals("Requests cannot be null or empty.", e.getMessage());
581 parser.serializeMessage(new PcreqBuilder().setPcreqMessage(new PcreqMessageBuilder()
582 .setRequests(List.of()).build()).build(), null);
584 } catch (final IllegalArgumentException e) {
585 assertEquals("Requests cannot be null or empty.", e.getMessage());
590 public void testReplyMsg() throws IOException, PCEPDeserializerException {
593 final PCEPReplyMessageParser parser = new PCEPReplyMessageParser(objectRegistry);
595 final PcrepMessageBuilder builder = new PcrepMessageBuilder();
596 RepliesBuilder repliesBuilder = new RepliesBuilder();
598 final List<Replies> replies1 = new ArrayList<>();
599 repliesBuilder.setRp(rpTrue);
600 replies1.add(repliesBuilder.build());
601 builder.setReplies(replies1);
603 ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRep.1.bin"));
604 assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
605 result.readableBytes() - 4), List.of()));
606 ByteBuf buf = Unpooled.buffer(result.readableBytes());
607 parser.serializeMessage(new PcrepBuilder().setPcrepMessage(builder.build()).build(), buf);
608 assertArrayEquals(result.array(), buf.array());
611 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRep.2.bin"));
612 final List<Replies> replies2 = new ArrayList<>();
613 repliesBuilder = new RepliesBuilder();
614 repliesBuilder.setRp(rpTrue);
615 replies2.add(repliesBuilder.build());
616 final RepliesBuilder repliesBuilder2 = new RepliesBuilder();
617 repliesBuilder2.setRp(rpTrue);
618 repliesBuilder2.setResult(new FailureCaseBuilder().setNoPath(noPath).build());
619 replies2.add(repliesBuilder2.build());
620 builder.setReplies(replies2);
622 assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
623 result.readableBytes() - 4), List.of()));
624 buf = Unpooled.buffer(result.readableBytes());
625 parser.serializeMessage(new PcrepBuilder().setPcrepMessage(builder.build()).build(), buf);
626 assertArrayEquals(result.array(), buf.array());
628 // Failure with attributes
629 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRep.3.bin"));
630 final List<Replies> replies3 = new ArrayList<>();
631 repliesBuilder = new RepliesBuilder();
632 repliesBuilder.setRp(rpTrue);
633 repliesBuilder.setResult(new FailureCaseBuilder().setNoPath(noPath).setLspa(lspa)
634 .setMetrics(List.of(metrics)).setIro(iro).build());
635 replies3.add(repliesBuilder.build());
636 builder.setReplies(replies3);
638 assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
639 result.readableBytes() - 4), List.of()));
640 buf = Unpooled.buffer(result.readableBytes());
641 parser.serializeMessage(new PcrepBuilder().setPcrepMessage(builder.build()).build(), buf);
642 assertArrayEquals(result.array(), buf.array());
645 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRep.5.bin"));
646 final List<Replies> replies4 = new ArrayList<>();
647 repliesBuilder = new RepliesBuilder();
648 repliesBuilder.setRp(rpTrue);
649 final List<Paths> paths = new ArrayList<>();
650 final PathsBuilder paBuilder = new PathsBuilder()
653 .setMetrics(List.of(metrics))
656 paths.add(paBuilder.build());
657 repliesBuilder.setResult(new SuccessCaseBuilder()
658 .setSuccess(new SuccessBuilder().setPaths(paths).build()).build()).build();
659 replies4.add(repliesBuilder.build());
660 builder.setReplies(replies4);
662 assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
663 result.readableBytes() - 4), List.of()));
664 buf = Unpooled.buffer(result.readableBytes());
665 parser.serializeMessage(new PcrepBuilder().setPcrepMessage(builder.build()).build(), buf);
666 assertArrayEquals(result.array(), buf.array());
669 parser.serializeMessage(new PcrepBuilder().setPcrepMessage(new PcrepMessageBuilder().build()).build(),
672 } catch (final IllegalArgumentException e) {
673 assertEquals("Replies cannot be null or empty.", e.getMessage());
676 parser.serializeMessage(new PcrepBuilder().setPcrepMessage(new PcrepMessageBuilder()
677 .setReplies(List.of()).build()).build(), null);
679 } catch (final IllegalArgumentException e) {
680 assertEquals("Replies cannot be null or empty.", e.getMessage());
685 public void testNotificationMsg() throws IOException, PCEPDeserializerException {
686 final CNotification cn1 = new CNotificationBuilder().setIgnore(false).setProcessingRule(false)
687 .setType(Uint8.ONE).setValue(Uint8.ONE).build();
689 final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcntf
690 .message.pcntf.message.notifications.Notifications> innerNot = new ArrayList<>();
691 innerNot.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcntf
692 .message.pcntf.message.notifications.NotificationsBuilder().setCNotification(cn1).build());
693 final List<Rps> rps = new ArrayList<>();
694 rps.add(new RpsBuilder().setRp(rpFalse).build());
696 final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCNtf.5.bin"));
698 final PCEPNotificationMessageParser parser = new PCEPNotificationMessageParser(objectRegistry);
699 final PcntfMessageBuilder builder = new PcntfMessageBuilder();
701 final List<Notifications> nots = new ArrayList<>();
702 final NotificationsBuilder b = new NotificationsBuilder();
703 b.setNotifications(innerNot);
707 final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcntf
708 .message.pcntf.message.notifications.Notifications> innerNot1 = new ArrayList<>();
709 innerNot1.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcntf
710 .message.pcntf.message.notifications.NotificationsBuilder().setCNotification(cn1).build());
711 innerNot1.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcntf
712 .message.pcntf.message.notifications.NotificationsBuilder().setCNotification(cn1).build());
713 final List<Rps> rps1 = new ArrayList<>();
714 rps1.add(new RpsBuilder().setRp(rpFalse).build());
715 rps1.add(new RpsBuilder().setRp(rpFalse).build());
717 b.setNotifications(innerNot1);
720 builder.setNotifications(nots);
722 assertEquals(new PcntfBuilder().setPcntfMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
723 result.readableBytes() - 4), List.of()));
724 final ByteBuf buf = Unpooled.buffer(result.readableBytes());
725 parser.serializeMessage(new PcntfBuilder().setPcntfMessage(builder.build()).build(), buf);
726 assertArrayEquals(result.array(), buf.array());
730 public void testErrorMsg() throws IOException, PCEPDeserializerException {
732 ErrorObject error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false)
733 .setType(Uint8.valueOf(3)).setValue(Uint8.ONE).build();
735 final PCEPErrorMessageParser parser = new PCEPErrorMessageParser(ctx.getObjectHandlerRegistry());
737 List<Errors> innerErr = new ArrayList<>();
739 final PcerrMessageBuilder builder = new PcerrMessageBuilder();
741 final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message
742 .pcerr.message.error.type.request._case.request.Rps> rps = new ArrayList<>();
743 rps.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message
744 .pcerr.message.error.type.request._case.request.RpsBuilder().setRp(rpFalse).build());
746 innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
748 builder.setErrors(innerErr);
749 builder.setErrorType(new RequestCaseBuilder().setRequest(new RequestBuilder().setRps(rps).build()).build());
751 ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.5.bin"));
752 assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
753 result.readableBytes() - 4), List.of()));
754 ByteBuf buf = Unpooled.buffer(result.readableBytes());
755 parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf);
756 assertArrayEquals(result.array(), buf.array());
758 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.3.bin"));
760 error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false).setType(Uint8.valueOf(3))
761 .setValue(Uint8.ONE).build();
763 innerErr = new ArrayList<>();
764 innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
766 builder.setErrors(innerErr);
767 builder.setErrorType(
768 new SessionCaseBuilder().setSession(new SessionBuilder().setOpen(open).build()).build());
770 assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
771 result.readableBytes() - 4), List.of()));
772 buf = Unpooled.buffer(result.readableBytes());
773 parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf);
774 assertArrayEquals(result.array(), buf.array());
777 parser.serializeMessage(new PcerrBuilder()
778 .setPcerrMessage(new PcerrMessageBuilder().build()).build(), null);
780 } catch (final IllegalArgumentException e) {
781 assertEquals("Errors should not be empty.", e.getMessage());
784 parser.serializeMessage(new PcerrBuilder().setPcerrMessage(new PcerrMessageBuilder()
785 .setErrors(List.of()).build()).build(), null);
787 } catch (final IllegalArgumentException e) {
788 assertEquals("Errors should not be empty.", e.getMessage());
793 public void testReqMsgWithVendorInfoObjects() throws IOException, PCEPDeserializerException {
794 final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCReq.7.bin"));
795 final PCEPRequestMessageParser parser = new PCEPRequestMessageParser(objectRegistry);
797 final PcreqMessageBuilder builder = new PcreqMessageBuilder();
798 final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message
799 .pcreq.message.Requests> reqs1 = new ArrayList<>();
800 final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message.pcreq
801 .message.RequestsBuilder rBuilder =
802 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message
803 .pcreq.message.RequestsBuilder();
804 rBuilder.setRp(rpTrue);
805 rBuilder.setVendorInformationObject(viObjects);
806 final SegmentComputationBuilder sBuilder = new SegmentComputationBuilder();
808 new P2pBuilder().setEndpointsObj(endpoints).setVendorInformationObject(viObjects).build());
809 rBuilder.setSegmentComputation(sBuilder.build());
810 reqs1.add(rBuilder.build());
811 builder.setSvec(List.of(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep
812 .types.rev181109.pcreq.message.pcreq.message.SvecBuilder().setSvec(svec)
813 .setVendorInformationObject(viObjects).build()));
814 builder.setRequests(reqs1);
816 assertEquals(new PcreqBuilder().setPcreqMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
817 result.readableBytes() - 4), List.of()));
818 final ByteBuf buf = Unpooled.buffer(result.readableBytes());
819 parser.serializeMessage(new PcreqBuilder().setPcreqMessage(builder.build()).build(), buf);
821 assertArrayEquals(result.array(), buf.array());
825 public void testRepMsgWithVendorInforObjects() throws IOException, PCEPDeserializerException {
826 final PCEPReplyMessageParser parser = new PCEPReplyMessageParser(objectRegistry);
828 final PcrepMessageBuilder builder = new PcrepMessageBuilder();
829 RepliesBuilder repliesBuilder = new RepliesBuilder();
830 final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRep.6.bin"));
831 final List<Replies> replies = new ArrayList<>();
832 repliesBuilder = new RepliesBuilder()
834 .setVendorInformationObject(viObjects);
835 final List<Paths> paths = new ArrayList<>();
836 final PathsBuilder paBuilder = new PathsBuilder();
837 paBuilder.setEro(ero);
838 paths.add(paBuilder.build());
839 repliesBuilder.setResult(new SuccessCaseBuilder().setSuccess(new SuccessBuilder().setPaths(paths)
840 .setVendorInformationObject(viObjects).build()).build()).build();
841 replies.add(repliesBuilder.build());
842 builder.setReplies(replies);
844 assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
845 result.readableBytes() - 4), List.of()));
846 final ByteBuf buf = Unpooled.buffer(result.readableBytes());
847 parser.serializeMessage(new PcrepBuilder().setPcrepMessage(builder.build()).build(), buf);
848 assertArrayEquals(result.array(), buf.array());
852 public void testMonRepMsg() throws PCEPDeserializerException, IOException {
853 final PCEPMonitoringReplyMessageParser parser = new PCEPMonitoringReplyMessageParser(objectRegistry);
854 final PcmonrepMessageBuilder builder = new PcmonrepMessageBuilder();
855 builder.setMonitoring(monitoring)
856 .setMonitoringMetricsList(new GeneralMetricsListBuilder()
857 .setMetricPce(List.of(new MetricPceBuilder().setPceId(pceId).build())).build());
859 final byte[] msgBytes = {
860 0x20, 0x09, 0x00, 0x18,
861 /* monitoring object */
862 0x13, 0x10, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64,
864 0x19, 0x10, 0x00, 0x08, 0x7f, 0x00, 0x00, 0x02
867 ByteBuf result = Unpooled.wrappedBuffer(msgBytes);
869 new PcmonrepBuilder().setPcmonrepMessage(builder.build()).build(),
870 parser.parseMessage(result.slice(4, result.readableBytes() - 4), List.of()));
871 ByteBuf buf = Unpooled.buffer(result.readableBytes());
872 parser.serializeMessage(new PcmonrepBuilder().setPcmonrepMessage(builder.build()).build(), buf);
873 assertArrayEquals(result.array(), buf.array());
875 builder.setMonitoring(monitoring);
876 builder.setPccIdReq(pccIdReq);
877 final SpecificMetricsBuilder smBuilder = new SpecificMetricsBuilder();
878 smBuilder.setRp(rpTrue);
879 final List<MetricPce> metricPces = new ArrayList<>();
880 metricPces.add(new MetricPceBuilder().setOverload(overload).setPceId(pceId)
881 .setProcTime(procTime).build());
882 metricPces.add(new MetricPceBuilder().setPceId(pceId).setProcTime(procTime).build());
883 smBuilder.setMetricPce(metricPces);
884 final SpecificMetricsBuilder smBuilder2 = new SpecificMetricsBuilder();
885 final List<MetricPce> metricPces2 = new ArrayList<>();
886 smBuilder2.setRp(rpTrue);
887 metricPces2.add(new MetricPceBuilder().setOverload(overload).setPceId(pceId).build());
888 smBuilder2.setMetricPce(metricPces2);
889 builder.setMonitoringMetricsList(new SpecificMetricsListBuilder()
890 .setSpecificMetrics(List.of(smBuilder.build(), smBuilder2.build())).build());
892 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCMonRep.bin"));
894 new PcmonrepBuilder().setPcmonrepMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
895 result.readableBytes() - 4), List.of()));
896 buf = Unpooled.buffer(result.readableBytes());
897 parser.serializeMessage(new PcmonrepBuilder().setPcmonrepMessage(builder.build()).build(), buf);
898 assertArrayEquals(result.array(), buf.array());
902 public void testRepWithMonitoring() throws IOException, PCEPDeserializerException {
903 final PCEPReplyMessageParser parser = new PCEPReplyMessageParser(objectRegistry);
905 final PcrepMessageBuilder builder = new PcrepMessageBuilder();
906 RepliesBuilder repliesBuilder = new RepliesBuilder();
908 final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRepMon.5.bin"));
909 final List<Replies> replies4 = new ArrayList<>();
910 repliesBuilder = new RepliesBuilder()
912 .setMonitoring(monitoring)
913 .setPccIdReq(pccIdReq)
914 .setMetricPce(List.of(new MetricPceBuilder().setPceId(pceId).build()));
915 final List<Paths> paths = new ArrayList<>();
916 final PathsBuilder paBuilder = new PathsBuilder()
919 .setMetrics(List.of(metrics))
922 paths.add(paBuilder.build());
923 repliesBuilder.setResult(new SuccessCaseBuilder().setSuccess(new SuccessBuilder().setPaths(paths).build())
925 replies4.add(repliesBuilder.build());
926 builder.setReplies(replies4);
928 assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
929 result.readableBytes() - 4), List.of()));
930 final ByteBuf buf = Unpooled.buffer(result.readableBytes());
931 parser.serializeMessage(new PcrepBuilder().setPcrepMessage(builder.build()).build(), buf);
932 assertArrayEquals(result.array(), buf.array());
936 public void testReqWithMonitoring() throws IOException, PCEPDeserializerException {
937 final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCReq.8.bin"));
939 final PCEPRequestMessageParser parser = new PCEPRequestMessageParser(objectRegistry);
941 final PcreqMessageBuilder builder = new PcreqMessageBuilder();
942 final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message
943 .pcreq.message.Requests> reqs1 = new ArrayList<>();
944 final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message.pcreq
945 .message.RequestsBuilder rBuilder =
946 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message
947 .pcreq.message.RequestsBuilder();
948 rBuilder.setRp(rpTrue)
949 .setSegmentComputation(new SegmentComputationBuilder().setP2p(new P2pBuilder()
950 .setEndpointsObj(endpoints).build()).build());
951 reqs1.add(rBuilder.build());
952 final MonitoringRequestBuilder monReqBuilder = new MonitoringRequestBuilder()
953 .setMonitoring(monitoring)
954 .setPccIdReq(pccIdReq)
955 .setPceIdList(List.of(new PceIdListBuilder().setPceId(pceId).build()));
956 builder.setMonitoringRequest(monReqBuilder.build()).setRequests(reqs1);
958 assertEquals(new PcreqBuilder().setPcreqMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
959 result.readableBytes() - 4), List.of()));
960 final ByteBuf buf = Unpooled.buffer(result.readableBytes());
961 parser.serializeMessage(new PcreqBuilder().setPcreqMessage(builder.build()).build(), buf);
963 assertArrayEquals(result.array(), buf.array());
967 public void testMonReqMsg() throws PCEPDeserializerException, IOException {
968 final PCEPMonitoringRequestMessageParser parser = new PCEPMonitoringRequestMessageParser(objectRegistry);
970 final PcreqMessageBuilder builder = new PcreqMessageBuilder();
971 final MonitoringRequestBuilder monReqBuilder = new MonitoringRequestBuilder()
972 .setMonitoring(monitoring)
973 .setPceIdList(List.of(new PceIdListBuilder().setPceId(pceId).build()));
974 builder.setMonitoringRequest(monReqBuilder.build());
975 final byte[] msgBytes = {
976 0x20, 0x08, 0x00, 0x18,
977 /* monitoring object */
978 0x13, 0x10, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64,
980 0x19, 0x10, 0x00, 0x08, 0x7f, 0x00, 0x00, 0x02
982 ByteBuf result = Unpooled.wrappedBuffer(msgBytes);
983 assertEquals(new PcmonreqBuilder().setPcreqMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
984 result.readableBytes() - 4), List.of()));
985 ByteBuf buf = Unpooled.buffer(result.readableBytes());
986 parser.serializeMessage(new PcmonreqBuilder().setPcreqMessage(builder.build()).build(), buf);
987 assertArrayEquals(result.array(), buf.array());
989 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCMonReq.bin"));
990 final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message
991 .pcreq.message.Requests> reqs2 = new ArrayList<>();
992 final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message.pcreq
993 .message.RequestsBuilder rBuilder1 =
994 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message
995 .pcreq.message.RequestsBuilder();
996 rBuilder1.setRp(rpTrue);
997 final P2pBuilder p2pBuilder = new P2pBuilder()
998 .setEndpointsObj(endpoints)
999 .setMetrics(List.of(metrics))
1001 rBuilder1.setSegmentComputation(new SegmentComputationBuilder().setP2p(p2pBuilder.build()).build());
1002 reqs2.add(rBuilder1.build());
1003 builder.setRequests(reqs2)
1004 .setSvec(List.of(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep
1005 .types.rev181109.pcreq.message.pcreq.message.SvecBuilder().setSvec(svec).build()));
1006 monReqBuilder.setMonitoring(monitoring).setPccIdReq(pccIdReq);
1007 final PceIdList pceIdList = new PceIdListBuilder().setPceId(pceId).build();
1008 monReqBuilder.setPceIdList(List.of(pceIdList, pceIdList));
1009 builder.setMonitoringRequest(monReqBuilder.build());
1011 assertEquals(new PcmonreqBuilder().setPcreqMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
1012 result.readableBytes() - 4), List.of()));
1013 buf = Unpooled.buffer(result.readableBytes());
1014 parser.serializeMessage(new PcmonreqBuilder().setPcreqMessage(builder.build()).build(), buf);
1015 assertArrayEquals(result.array(), buf.array());
1019 public void testReplyMsgWithTwoEros() throws IOException, PCEPDeserializerException {
1020 // Success Reply with two EROs: the first one is followed by Bandwidth Object and one Metric Object
1022 final PCEPReplyMessageParser parser = new PCEPReplyMessageParser(objectRegistry);
1024 final PcrepMessageBuilder builder = new PcrepMessageBuilder();
1026 final List<Replies> replies = new ArrayList<>();
1028 final BandwidthBuilder bwBuilder = new BandwidthBuilder();
1029 bwBuilder.setIgnore(false);
1030 bwBuilder.setProcessingRule(false);
1031 bwBuilder.setBandwidth(new Bandwidth(new byte[] { (byte) 0x47, (byte) 0x74, (byte) 0x24, (byte) 0x00 }));
1033 RepliesBuilder repliesBuilder = new RepliesBuilder();
1034 repliesBuilder = new RepliesBuilder();
1035 repliesBuilder.setRp(rpTrue);
1036 final List<Paths> paths = new ArrayList<>();
1037 final PathsBuilder paBuilder1 = new PathsBuilder()
1039 .setBandwidth(bwBuilder.build())
1040 .setMetrics(List.of(metrics));
1041 paths.add(paBuilder1.build());
1042 final PathsBuilder paBuilder2 = new PathsBuilder();
1043 paBuilder2.setEro(ero);
1044 paths.add(paBuilder2.build());
1045 repliesBuilder.setResult(new SuccessCaseBuilder().setSuccess(new SuccessBuilder().setPaths(paths).build())
1047 replies.add(repliesBuilder.build());
1048 builder.setReplies(replies);
1050 ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRep.7.bin"));
1051 assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
1052 result.readableBytes() - 4), List.of()));
1053 ByteBuf buf = Unpooled.buffer(result.readableBytes());
1054 parser.serializeMessage(new PcrepBuilder().setPcrepMessage(builder.build()).build(), buf);
1055 assertArrayEquals(result.array(), buf.array());