Promote MessageRegistry to pcep-api
[bgpcep.git] / pcep / impl / src / test / java / org / opendaylight / protocol / pcep / impl / PCEPValidatorTest.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.protocol.pcep.impl;
9
10 import static org.junit.Assert.assertArrayEquals;
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.fail;
13
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;
20 import java.util.Set;
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;
160
161 public class PCEPValidatorTest {
162
163     private ObjectRegistry objectRegistry;
164
165     private Open open;
166     private Rp rpTrue;
167     private Rp rpFalse;
168     private NoPath noPath;
169     private Lspa lspa;
170     private Metrics metrics;
171     private Iro iro;
172     private Ero ero;
173     private Of of;
174     private EndpointsObj endpoints;
175     private Svec svec;
176     private List<VendorInformationObject> viObjects;
177     private Monitoring monitoring;
178     private PccIdReq pccIdReq;
179     private PceId pceId;
180     private ProcTime procTime;
181     private Overload overload;
182
183     private AsNumberCase eroASSubobject;
184
185     private SimplePCEPExtensionProviderContext ctx;
186     private BaseParserExtensionActivator act;
187     private TestVendorInformationActivator viObjAct;
188
189     @Before
190     public void setUp() {
191         ctx = new SimplePCEPExtensionProviderContext();
192         act = new BaseParserExtensionActivator();
193         viObjAct = new TestVendorInformationActivator();
194         act.start(ctx);
195         viObjAct.start(ctx);
196         objectRegistry = ctx.getObjectHandlerRegistry();
197         final RpBuilder rpBuilder = new RpBuilder()
198                 .setProcessingRule(true)
199                 .setIgnore(false)
200                 .setReoptimization(false)
201                 .setBiDirectional(false)
202                 .setLoose(true)
203                 .setMakeBeforeBreak(false)
204                 .setOrder(false)
205                 .setPathKey(false)
206                 .setSupplyOf(false)
207                 .setFragmentation(false)
208                 .setP2mp(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)
220                 .setIgnore(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();
229
230         noPath = new NoPathBuilder()
231                 .setProcessingRule(false)
232                 .setIgnore(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())
237                 .build();
238
239         lspa = new LspaBuilder()
240                 .setProcessingRule(false)
241                 .setIgnore(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())
250                 .build();
251
252         metrics = new MetricsBuilder()
253                 .setMetric(new MetricBuilder()
254                     .setIgnore(false)
255                     .setProcessingRule(false)
256                     .setComputed(false)
257                     .setBound(false)
258                     .setMetricType(Uint8.ONE)
259                     .setValue(new Float32(new byte[4]))
260                     .build())
261                 .build();
262
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)))
267                     .build())
268                 .build();
269
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();
277
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();
287
288         of = new OfBuilder()
289                 .setIgnore(false)
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())
294                 .build();
295
296         endpoints = new EndpointsObjBuilder()
297                 .setIgnore(false)
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"))
303                         .build())
304                     .build())
305                 .build();
306
307         svec = new SvecBuilder()
308                 .setIgnore(false)
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)))
316                 .build();
317
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)
323                 .build();
324         viObjects.add(viObj);
325
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")))
333                 .build();
334         pceId = new PceIdBuilder()
335                 .setIpAddress(new IpAddressNoZone(new Ipv4AddressNoZone("127.0.0.2")))
336                 .build();
337
338         procTime = new ProcTimeBuilder()
339                 .setEstimated(false)
340                 .setCurrentProcTime(Uint32.ONE)
341                 .setMinProcTime(Uint32.TWO)
342                 .setMaxProcTime(Uint32.valueOf(3))
343                 .setAverageProcTime(Uint32.valueOf(4))
344                 .setVarianceProcTime(Uint32.valueOf(5))
345                 .build();
346         overload = new OverloadBuilder().setDuration(Uint16.valueOf(120)).build();
347     }
348
349     @Test
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();
354
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)
359                 .setIgnore(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());
367
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());
373
374         try {
375             parser.serializeMessage(new OpenBuilder().setOpenMessage(new OpenMessageBuilder().build()).build(), null);
376             fail();
377         } catch (final IllegalArgumentException e) {
378             assertEquals("Open Object must be present in Open Message.", e.getMessage());
379         }
380     }
381
382     @Test
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());
388
389         assertEquals(
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());
394     }
395
396     @Test
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());
401
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());
406     }
407
408     @Test
409     public void testCloseMsg() throws IOException, PCEPDeserializerException {
410         final ByteBuf result =
411             Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCEPCloseMessage1.bin"));
412
413         final PCEPCloseMessageParser parser = new PCEPCloseMessageParser(objectRegistry);
414         final CloseBuilder builder = new CloseBuilder().setCCloseMessage(new CCloseMessageBuilder()
415             .setCClose(new CCloseBuilder()
416                 .setIgnore(false)
417                 .setProcessingRule(false)
418                 .setReason(Uint8.valueOf(5))
419                 .setTlvs(new TlvsBuilder().build())
420                 .build())
421             .build());
422
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());
427
428         try {
429             parser.serializeMessage(new CloseBuilder()
430                 .setCCloseMessage(new CCloseMessageBuilder().build())
431                 .build(), null);
432             fail();
433         } catch (final IllegalArgumentException e) {
434             assertEquals("Close Object must be present in Close Message.", e.getMessage());
435         }
436     }
437
438     @Test
439     public void testRequestMsg() throws IOException, PCEPDeserializerException {
440
441         final PCEPRequestMessageParser parser = new PCEPRequestMessageParser(objectRegistry);
442
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);
455
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);
461
462         assertArrayEquals(result.array(), buf.array());
463
464         result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCReq.3.bin"));
465
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))
476                 .setIro(iro);
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()));
482
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());
488
489         result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCReq.9.bin"));
490
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()
499                 .setIgnore(false)
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")))
507                         .build()).build());
508
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()
516                         .setIgnore(false)
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")))
525                                             .build())
526                                         .build())
527                                 .build()))
528                         .build())
529                     .build())
530                 .build(),
531                 new RrosBuilder()
532                 .setRouteObject(new SecondaryReportedRouteObjectCaseBuilder()
533                     .setSrro(new SrroBuilder()
534                         .setIgnore(false)
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")))
543                                     .build())
544                                 .build())
545                             .build()))
546                         .build())
547                     .build())
548                 .build()))
549             .build()));
550         p2mpBuilder.setIroBncChoice(new BncCaseBuilder()
551             .setBranchNodeType(new BranchNodeCaseBuilder()
552                 .setBranchNodeList(new BranchNodeListBuilder()
553                     .setIgnore(false)
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()
557                         .setLoose(false)
558                         .setIpPrefix(new IpPrefix(new Ipv4Prefix("255.255.255.252/32")))
559                         .build()))
560                     .build())
561                 .build())
562             .build());
563         rBuilder2.setSegmentComputation(new SegmentComputationBuilder().setP2mp(p2mpBuilder.build()).build());
564         reqs3.add(rBuilder2.build());
565         builder.setRequests(reqs3).setSvec(null);
566
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());
572
573         try {
574             parser.serializeMessage(new PcreqBuilder().setPcreqMessage(new PcreqMessageBuilder().build()).build(),
575                 null);
576             fail();
577         } catch (final IllegalArgumentException e) {
578             assertEquals("Requests cannot be null or empty.", e.getMessage());
579         }
580         try {
581             parser.serializeMessage(new PcreqBuilder().setPcreqMessage(new PcreqMessageBuilder()
582                 .setRequests(List.of()).build()).build(), null);
583             fail();
584         } catch (final IllegalArgumentException e) {
585             assertEquals("Requests cannot be null or empty.", e.getMessage());
586         }
587     }
588
589     @Test
590     public void testReplyMsg() throws IOException, PCEPDeserializerException {
591         // only RP
592
593         final PCEPReplyMessageParser parser = new PCEPReplyMessageParser(objectRegistry);
594
595         final PcrepMessageBuilder builder = new PcrepMessageBuilder();
596         RepliesBuilder repliesBuilder = new RepliesBuilder();
597
598         final List<Replies> replies1 = new ArrayList<>();
599         repliesBuilder.setRp(rpTrue);
600         replies1.add(repliesBuilder.build());
601         builder.setReplies(replies1);
602
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());
609
610         // simple Failure
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);
621
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());
627
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);
637
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());
643
644         // Success
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()
651                 .setEro(ero)
652                 .setLspa(lspa)
653                 .setMetrics(List.of(metrics))
654                 .setIro(iro)
655                 .setOf(of);
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);
661
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());
667
668         try {
669             parser.serializeMessage(new PcrepBuilder().setPcrepMessage(new PcrepMessageBuilder().build()).build(),
670                 null);
671             fail();
672         } catch (final IllegalArgumentException e) {
673             assertEquals("Replies cannot be null or empty.", e.getMessage());
674         }
675         try {
676             parser.serializeMessage(new PcrepBuilder().setPcrepMessage(new PcrepMessageBuilder()
677                 .setReplies(List.of()).build()).build(), null);
678             fail();
679         } catch (final IllegalArgumentException e) {
680             assertEquals("Replies cannot be null or empty.", e.getMessage());
681         }
682     }
683
684     @Test
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();
688
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());
695
696         final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCNtf.5.bin"));
697
698         final PCEPNotificationMessageParser parser = new PCEPNotificationMessageParser(objectRegistry);
699         final PcntfMessageBuilder builder = new PcntfMessageBuilder();
700
701         final List<Notifications> nots = new ArrayList<>();
702         final NotificationsBuilder b = new NotificationsBuilder();
703         b.setNotifications(innerNot);
704         b.setRps(rps);
705         nots.add(b.build());
706
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());
716
717         b.setNotifications(innerNot1);
718         b.setRps(rps1);
719         nots.add(b.build());
720         builder.setNotifications(nots);
721
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());
727     }
728
729     @Test
730     public void testErrorMsg() throws IOException, PCEPDeserializerException {
731
732         ErrorObject error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false)
733                 .setType(Uint8.valueOf(3)).setValue(Uint8.ONE).build();
734
735         final PCEPErrorMessageParser parser = new PCEPErrorMessageParser(ctx.getObjectHandlerRegistry());
736
737         List<Errors> innerErr = new ArrayList<>();
738
739         final PcerrMessageBuilder builder = new PcerrMessageBuilder();
740
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());
745
746         innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
747
748         builder.setErrors(innerErr);
749         builder.setErrorType(new RequestCaseBuilder().setRequest(new RequestBuilder().setRps(rps).build()).build());
750
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());
757
758         result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.3.bin"));
759
760         error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false).setType(Uint8.valueOf(3))
761             .setValue(Uint8.ONE).build();
762
763         innerErr = new ArrayList<>();
764         innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
765
766         builder.setErrors(innerErr);
767         builder.setErrorType(
768             new SessionCaseBuilder().setSession(new SessionBuilder().setOpen(open).build()).build());
769
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());
775
776         try {
777             parser.serializeMessage(new PcerrBuilder()
778                 .setPcerrMessage(new PcerrMessageBuilder().build()).build(), null);
779             fail();
780         } catch (final IllegalArgumentException e) {
781             assertEquals("Errors should not be empty.", e.getMessage());
782         }
783         try {
784             parser.serializeMessage(new PcerrBuilder().setPcerrMessage(new PcerrMessageBuilder()
785                 .setErrors(List.of()).build()).build(), null);
786             fail();
787         } catch (final IllegalArgumentException e) {
788             assertEquals("Errors should not be empty.", e.getMessage());
789         }
790     }
791
792     @Test
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);
796
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();
807         sBuilder.setP2p(
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);
815
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);
820
821         assertArrayEquals(result.array(), buf.array());
822     }
823
824     @Test
825     public void testRepMsgWithVendorInforObjects() throws IOException, PCEPDeserializerException {
826         final PCEPReplyMessageParser parser = new PCEPReplyMessageParser(objectRegistry);
827
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()
833                 .setRp(rpTrue)
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);
843
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());
849     }
850
851     @Test
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());
858
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,
863             /* pce-id object */
864             0x19, 0x10, 0x00, 0x08, 0x7f, 0x00, 0x00, 0x02
865         };
866
867         ByteBuf result = Unpooled.wrappedBuffer(msgBytes);
868         assertEquals(
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());
874
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());
891
892         result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCMonRep.bin"));
893         assertEquals(
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());
899     }
900
901     @Test
902     public void testRepWithMonitoring() throws IOException, PCEPDeserializerException {
903         final PCEPReplyMessageParser parser = new PCEPReplyMessageParser(objectRegistry);
904
905         final PcrepMessageBuilder builder = new PcrepMessageBuilder();
906         RepliesBuilder repliesBuilder = new RepliesBuilder();
907
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()
911                 .setRp(rpTrue)
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()
917                 .setEro(ero)
918                 .setLspa(lspa)
919                 .setMetrics(List.of(metrics))
920                 .setIro(iro)
921                 .setOf(of);
922         paths.add(paBuilder.build());
923         repliesBuilder.setResult(new SuccessCaseBuilder().setSuccess(new SuccessBuilder().setPaths(paths).build())
924             .build()).build();
925         replies4.add(repliesBuilder.build());
926         builder.setReplies(replies4);
927
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());
933     }
934
935     @Test
936     public void testReqWithMonitoring() throws IOException, PCEPDeserializerException {
937         final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCReq.8.bin"));
938
939         final PCEPRequestMessageParser parser = new PCEPRequestMessageParser(objectRegistry);
940
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);
957
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);
962
963         assertArrayEquals(result.array(), buf.array());
964     }
965
966     @Test
967     public void testMonReqMsg() throws PCEPDeserializerException, IOException {
968         final PCEPMonitoringRequestMessageParser parser = new PCEPMonitoringRequestMessageParser(objectRegistry);
969
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,
979             /* pce-id object */
980             0x19, 0x10, 0x00, 0x08, 0x7f, 0x00, 0x00, 0x02
981         };
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());
988
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))
1000                 .setIro(iro);
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());
1010
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());
1016     }
1017
1018     @Test
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
1021
1022         final PCEPReplyMessageParser parser = new PCEPReplyMessageParser(objectRegistry);
1023
1024         final PcrepMessageBuilder builder = new PcrepMessageBuilder();
1025
1026         final List<Replies> replies = new ArrayList<>();
1027
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 }));
1032
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()
1038                 .setEro(ero)
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())
1046             .build()).build();
1047         replies.add(repliesBuilder.build());
1048         builder.setReplies(replies);
1049
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());
1056     }
1057 }