clean pcep/impl
[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.Lists;
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.Arrays;
20 import java.util.Collections;
21 import java.util.List;
22 import org.junit.Before;
23 import org.junit.Test;
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.PCEPDeserializerException;
38 import org.opendaylight.protocol.pcep.spi.pojo.SimplePCEPExtensionProviderContext;
39 import org.opendaylight.protocol.util.ByteArray;
40 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddressNoZone;
41 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpPrefix;
42 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone;
43 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Prefix;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.iana.rev130816.EnterpriseNumber;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ieee754.rev130819.Float32;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.network.concepts.rev131125.Bandwidth;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev181109.CloseBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev181109.KeepaliveBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev181109.OpenBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev181109.PcerrBuilder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev181109.PcmonrepBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev181109.PcmonreqBuilder;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev181109.PcntfBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev181109.PcrepBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev181109.PcreqBuilder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev181109.StarttlsBuilder;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.OfId;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.P2mpLeaves;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.ProtocolVersion;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.RequestId;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.bandwidth.object.BandwidthBuilder;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.bnc.object.branch.node.type.BranchNodeCaseBuilder;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.branch.node.object.BranchNodeListBuilder;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.close.message.CCloseMessageBuilder;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.close.object.CCloseBuilder;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.close.object.c.close.TlvsBuilder;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.endpoints.address.family.Ipv4CaseBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.endpoints.address.family.P2mpIpv4CaseBuilder;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.endpoints.address.family.ipv4._case.Ipv4Builder;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.endpoints.address.family.p2mp.ipv4._case.P2mpIpv4Builder;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.endpoints.object.EndpointsObj;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.endpoints.object.EndpointsObjBuilder;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.explicit.route.object.Ero;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.explicit.route.object.EroBuilder;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.include.route.object.Iro;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.include.route.object.IroBuilder;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.include.route.object.iro.Subobject;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.include.route.object.iro.SubobjectBuilder;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.keepalive.message.KeepaliveMessageBuilder;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.lsp.attributes.Metrics;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.lsp.attributes.MetricsBuilder;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.lspa.object.Lspa;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.lspa.object.LspaBuilder;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.metric.object.MetricBuilder;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.monitoring.metrics.MetricPce;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.monitoring.metrics.MetricPceBuilder;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.monitoring.object.Monitoring;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.monitoring.object.Monitoring.Flags;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.monitoring.object.MonitoringBuilder;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.monitoring.response.monitoring.metrics.list.GeneralMetricsListBuilder;
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.monitoring.response.monitoring.metrics.list.SpecificMetricsListBuilder;
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.monitoring.response.monitoring.metrics.list.specific.metrics.list.SpecificMetricsBuilder;
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.notification.object.CNotification;
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.notification.object.CNotificationBuilder;
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.of.object.Of;
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.of.object.OfBuilder;
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.message.OpenMessageBuilder;
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.object.Open;
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.overload.object.Overload;
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.overload.object.OverloadBuilder;
101 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcc.id.req.object.PccIdReq;
102 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcc.id.req.object.PccIdReqBuilder;
103 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pce.id.object.PceId;
104 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pce.id.object.PceIdBuilder;
105 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcep.error.object.ErrorObject;
106 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcep.error.object.ErrorObjectBuilder;
107 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.PcerrMessageBuilder;
108 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.pcerr.message.Errors;
109 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.pcerr.message.ErrorsBuilder;
110 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.pcerr.message.error.type.RequestCaseBuilder;
111 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.pcerr.message.error.type.SessionCaseBuilder;
112 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.pcerr.message.error.type.request._case.RequestBuilder;
113 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.pcerr.message.error.type.session._case.SessionBuilder;
114 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcmonrep.message.PcmonrepMessageBuilder;
115 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcntf.message.PcntfMessageBuilder;
116 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcntf.message.pcntf.message.Notifications;
117 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcntf.message.pcntf.message.NotificationsBuilder;
118 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcntf.message.pcntf.message.notifications.Rps;
119 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcntf.message.pcntf.message.notifications.RpsBuilder;
120 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcrep.message.PcrepMessageBuilder;
121 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcrep.message.pcrep.message.Replies;
122 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcrep.message.pcrep.message.RepliesBuilder;
123 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcrep.message.pcrep.message.replies.result.FailureCaseBuilder;
124 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcrep.message.pcrep.message.replies.result.SuccessCaseBuilder;
125 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcrep.message.pcrep.message.replies.result.failure._case.NoPath;
126 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcrep.message.pcrep.message.replies.result.failure._case.NoPathBuilder;
127 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcrep.message.pcrep.message.replies.result.success._case.SuccessBuilder;
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.Paths;
129 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;
130 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message.PcreqMessageBuilder;
131 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message.pcreq.message.MonitoringRequestBuilder;
132 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message.pcreq.message.monitoring.request.PceIdList;
133 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message.pcreq.message.monitoring.request.PceIdListBuilder;
134 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message.pcreq.message.requests.SegmentComputationBuilder;
135 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message.pcreq.message.requests.segment.computation.P2mpBuilder;
136 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message.pcreq.message.requests.segment.computation.P2pBuilder;
137 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message.pcreq.message.requests.segment.computation.p2mp.EndpointRroPairBuilder;
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.RrosBuilder;
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.ReportedRouteObjectCaseBuilder;
140 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;
141 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;
142 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.proc.time.object.ProcTime;
143 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.proc.time.object.ProcTimeBuilder;
144 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.rp.object.Rp;
145 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.rp.object.RpBuilder;
146 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.secondary.reported.route.object.SrroBuilder;
147 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.start.tls.message.StartTlsMessageBuilder;
148 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.svec.object.Svec;
149 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.svec.object.SvecBuilder;
150 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.vendor.information.objects.VendorInformationObject;
151 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.vendor.information.objects.VendorInformationObjectBuilder;
152 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.AttributeFilter;
153 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.AsNumberCase;
154 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.AsNumberCaseBuilder;
155 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.as.number._case.AsNumberBuilder;
156 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.record.route.subobjects.subobject.type.IpPrefixCaseBuilder;
157 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.record.route.subobjects.subobject.type.ip.prefix._case.IpPrefixBuilder;
158 import org.opendaylight.yangtools.yang.common.Uint16;
159 import org.opendaylight.yangtools.yang.common.Uint32;
160 import org.opendaylight.yangtools.yang.common.Uint8;
161
162 public class PCEPValidatorTest {
163
164     private ObjectRegistry objectRegistry;
165
166     private Open open;
167     private Rp rpTrue;
168     private Rp rpFalse;
169     private NoPath noPath;
170     private Lspa lspa;
171     private Metrics metrics;
172     private Iro iro;
173     private Ero ero;
174     private Of of;
175     private EndpointsObj endpoints;
176     private Svec svec;
177     private List<VendorInformationObject> viObjects;
178     private Monitoring monitoring;
179     private PccIdReq pccIdReq;
180     private PceId pceId;
181     private ProcTime procTime;
182     private Overload overload;
183
184     private AsNumberCase eroASSubobject;
185
186     private SimplePCEPExtensionProviderContext ctx;
187     private BaseParserExtensionActivator act;
188     private TestVendorInformationActivator viObjAct;
189
190     @Before
191     public void setUp() {
192         this.ctx = new SimplePCEPExtensionProviderContext();
193         this.act = new BaseParserExtensionActivator();
194         this.viObjAct = new TestVendorInformationActivator();
195         this.act.start(this.ctx);
196         this.viObjAct.start(this.ctx);
197         this.objectRegistry = this.ctx.getObjectHandlerRegistry();
198         final RpBuilder rpBuilder = new RpBuilder()
199                 .setProcessingRule(true)
200                 .setIgnore(false)
201                 .setReoptimization(false)
202                 .setBiDirectional(false)
203                 .setLoose(true)
204                 .setMakeBeforeBreak(false)
205                 .setOrder(false)
206                 .setPathKey(false)
207                 .setSupplyOf(false)
208                 .setFragmentation(false)
209                 .setP2mp(false)
210                 .setEroCompression(false)
211                 .setPriority(Uint8.ONE)
212                 .setRequestId(new RequestId(Uint32.valueOf(10)))
213                 .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.rp
214                     .object.rp.TlvsBuilder().build());
215         this.rpTrue = rpBuilder.build();
216         this.rpFalse = rpBuilder.setProcessingRule(false).build();
217         final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.object
218             .OpenBuilder openBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types
219                 .rev181109.open.object.OpenBuilder()
220                 .setProcessingRule(false)
221                 .setIgnore(false)
222                 .setDeadTimer(Uint8.ONE)
223                 .setKeepalive(Uint8.ONE)
224                 .setSessionId(Uint8.ZERO)
225                 .setVersion(new ProtocolVersion(Uint8.ONE))
226                 .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109
227                     .open.object.open.TlvsBuilder().build());
228         // TODO get rid of previous superfluous openBuilder
229         this.open = openBuilder.build();
230
231         this.noPath = new NoPathBuilder()
232                 .setProcessingRule(false)
233                 .setIgnore(false)
234                 .setNatureOfIssue(Uint8.ZERO)
235                 .setUnsatisfiedConstraints(false)
236                 .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109
237                     .pcrep.message.pcrep.message.replies.result.failure._case.no.path.TlvsBuilder().build())
238                 .build();
239
240         this.lspa = new LspaBuilder()
241                 .setProcessingRule(false)
242                 .setIgnore(false)
243                 .setLocalProtectionDesired(false)
244                 .setHoldPriority(Uint8.ZERO)
245                 .setSetupPriority(Uint8.ZERO)
246                 .setExcludeAny(new AttributeFilter(Uint32.ZERO))
247                 .setIncludeAll(new AttributeFilter(Uint32.ZERO))
248                 .setIncludeAny(new AttributeFilter(Uint32.ZERO))
249                 .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109
250                     .lspa.object.lspa.TlvsBuilder().build())
251                 .build();
252
253         this.metrics = new MetricsBuilder()
254                 .setMetric(new MetricBuilder()
255                     .setIgnore(false)
256                     .setProcessingRule(false)
257                     .setComputed(false)
258                     .setBound(false)
259                     .setMetricType(Uint8.ONE)
260                     .setValue(new Float32(new byte[4]))
261                     .build())
262                 .build();
263
264         this.eroASSubobject = new AsNumberCaseBuilder()
265                 .setAsNumber(new AsNumberBuilder()
266                     .setAsNumber(new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715
267                         .AsNumber(Uint32.valueOf(0xFFFF)))
268                     .build())
269                 .build();
270
271         final IroBuilder iroBuilder = new IroBuilder();
272         iroBuilder.setIgnore(false);
273         iroBuilder.setProcessingRule(false);
274         final List<Subobject> iroSubs = new ArrayList<>();
275         iroSubs.add(new SubobjectBuilder().setSubobjectType(this.eroASSubobject).setLoose(false).build());
276         iroBuilder.setSubobject(iroSubs);
277         this.iro = iroBuilder.build();
278
279         final EroBuilder eroBuilder = new EroBuilder();
280         eroBuilder.setIgnore(false);
281         eroBuilder.setProcessingRule(false);
282         final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.explicit.route
283             .object.ero.Subobject> eroSubs = new ArrayList<>();
284         eroSubs.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.explicit
285             .route.object.ero.SubobjectBuilder().setSubobjectType(this.eroASSubobject).setLoose(false).build());
286         eroBuilder.setSubobject(eroSubs);
287         this.ero = eroBuilder.build();
288
289         this.of = new OfBuilder()
290                 .setIgnore(false)
291                 .setProcessingRule(false)
292                 .setCode(new OfId(Uint16.ZERO))
293                 .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.of
294                     .object.of.TlvsBuilder().build())
295                 .build();
296
297         this.endpoints = new EndpointsObjBuilder()
298                 .setIgnore(false)
299                 .setProcessingRule(true)
300                 .setAddressFamily(new Ipv4CaseBuilder()
301                     .setIpv4(new Ipv4Builder()
302                         .setSourceIpv4Address(new Ipv4AddressNoZone("255.255.255.255"))
303                         .setDestinationIpv4Address(new Ipv4AddressNoZone("255.255.255.255"))
304                         .build())
305                     .build())
306                 .build();
307
308         this.svec = new SvecBuilder()
309                 .setIgnore(false)
310                 .setProcessingRule(false)
311                 .setLinkDiverse(false)
312                 .setNodeDiverse(false)
313                 .setSrlgDiverse(false)
314                 .setLinkDirectionDiverse(false)
315                 .setPartialPathDiverse(false)
316                 .setRequestsIds(Lists.newArrayList(new RequestId(Uint32.ONE)))
317                 .build();
318
319         this.viObjects = new ArrayList<>();
320         final TestEnterpriseSpecificInformation esInfo = new TestEnterpriseSpecificInformation(5);
321         final VendorInformationObject viObj = new VendorInformationObjectBuilder()
322                 .setEnterpriseNumber(new EnterpriseNumber(Uint32.ZERO))
323                 .setEnterpriseSpecificInformation(esInfo)
324                 .build();
325         this.viObjects.add(viObj);
326
327         this.monitoring = new MonitoringBuilder()
328                 .setMonitoringId(Uint32.valueOf(100))
329                 .setFlags(new Flags(false, false, false, false, false))
330                 .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109
331                     .monitoring.object.monitoring.TlvsBuilder().build()).build();
332         this.pccIdReq = new PccIdReqBuilder()
333                 .setIpAddress(new IpAddressNoZone(new Ipv4AddressNoZone("127.0.0.1")))
334                 .build();
335         this.pceId = new PceIdBuilder()
336                 .setIpAddress(new IpAddressNoZone(new Ipv4AddressNoZone("127.0.0.2")))
337                 .build();
338
339         this.procTime = new ProcTimeBuilder()
340                 .setEstimated(false)
341                 .setCurrentProcTime(Uint32.ONE)
342                 .setMinProcTime(Uint32.valueOf(2))
343                 .setMaxProcTime(Uint32.valueOf(3))
344                 .setAverageProcTime(Uint32.valueOf(4))
345                 .setVarianceProcTime(Uint32.valueOf(5))
346                 .build();
347         this.overload = new OverloadBuilder().setDuration(Uint16.valueOf(120)).build();
348     }
349
350     @Test
351     public void testOpenMsg() throws IOException, PCEPDeserializerException {
352         final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCEPOpenMessage1.bin"));
353         final PCEPOpenMessageParser parser = new PCEPOpenMessageParser(this.ctx.getObjectHandlerRegistry());
354         final OpenMessageBuilder builder = new OpenMessageBuilder();
355
356         final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.object
357             .OpenBuilder b = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109
358                 .open.object.OpenBuilder()
359                 .setProcessingRule(false)
360                 .setIgnore(false)
361                 .setVersion(new ProtocolVersion(Uint8.ONE))
362                 .setKeepalive(Uint8.valueOf(30))
363                 .setDeadTimer(Uint8.valueOf(120))
364                 .setSessionId(Uint8.ONE)
365                 .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109
366                     .open.object.open.TlvsBuilder().build());
367         builder.setOpen(b.build());
368
369         assertEquals(new OpenBuilder().setOpenMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
370             result.readableBytes() - 4), Collections.emptyList()));
371         final ByteBuf buf = Unpooled.buffer(result.readableBytes());
372         parser.serializeMessage(new OpenBuilder().setOpenMessage(builder.build()).build(), buf);
373         assertArrayEquals(result.array(), buf.array());
374
375         try {
376             parser.serializeMessage(new OpenBuilder().setOpenMessage(new OpenMessageBuilder().build()).build(), null);
377             fail();
378         } catch (final IllegalArgumentException e) {
379             assertEquals("Open Object must be present in Open Message.", e.getMessage());
380         }
381     }
382
383     @Test
384     public void testKeepAliveMsg() throws PCEPDeserializerException {
385         final ByteBuf result = Unpooled.wrappedBuffer(new byte[] { 32, 2, 0, 4 });
386         final PCEPKeepAliveMessageParser parser = new PCEPKeepAliveMessageParser(this.objectRegistry);
387         final KeepaliveBuilder builder = new KeepaliveBuilder()
388                 .setKeepaliveMessage(new KeepaliveMessageBuilder().build());
389
390         assertEquals(
391             builder.build(), parser.parseMessage(result.slice(4, result.readableBytes() - 4), Collections.emptyList()));
392         final ByteBuf buf = Unpooled.buffer(result.readableBytes());
393         parser.serializeMessage(builder.build(), buf);
394         assertArrayEquals(result.array(), buf.array());
395     }
396
397     @Test
398     public void testStartTLSMsg() throws Exception {
399         final ByteBuf result = Unpooled.wrappedBuffer(new byte[] { 32, 20, 0, 4 });
400         final PCEPStartTLSMessageParser parser = new PCEPStartTLSMessageParser(this.objectRegistry);
401         final StarttlsBuilder builder = new StarttlsBuilder().setStartTlsMessage(new StartTlsMessageBuilder().build());
402
403         assertEquals(builder.build(), parser.parseMessage(result.slice(4, result.readableBytes() - 4),
404             Collections.emptyList()));
405         final ByteBuf buf = Unpooled.buffer(result.readableBytes());
406         parser.serializeMessage(builder.build(), buf);
407         assertArrayEquals(result.array(), buf.array());
408     }
409
410     @Test
411     public void testCloseMsg() throws IOException, PCEPDeserializerException {
412         final ByteBuf result =
413             Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCEPCloseMessage1.bin"));
414
415         final PCEPCloseMessageParser parser = new PCEPCloseMessageParser(this.objectRegistry);
416         final CloseBuilder builder = new CloseBuilder().setCCloseMessage(new CCloseMessageBuilder()
417             .setCClose(new CCloseBuilder()
418                 .setIgnore(false)
419                 .setProcessingRule(false)
420                 .setReason(Uint8.valueOf(5))
421                 .setTlvs(new TlvsBuilder().build())
422                 .build())
423             .build());
424
425         assertEquals(builder.build(), parser.parseMessage(result.slice(4, result.readableBytes() - 4),
426             Collections.emptyList()));
427         final ByteBuf buf = Unpooled.buffer(result.readableBytes());
428         parser.serializeMessage(builder.build(), buf);
429         assertArrayEquals(result.array(), buf.array());
430
431         try {
432             parser.serializeMessage(new CloseBuilder()
433                 .setCCloseMessage(new CCloseMessageBuilder().build())
434                 .build(), null);
435             fail();
436         } catch (final IllegalArgumentException e) {
437             assertEquals("Close Object must be present in Close Message.", e.getMessage());
438         }
439     }
440
441     @Test
442     public void testRequestMsg() throws IOException, PCEPDeserializerException {
443
444         final PCEPRequestMessageParser parser = new PCEPRequestMessageParser(this.objectRegistry);
445
446         final PcreqMessageBuilder builder = new PcreqMessageBuilder();
447         final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message
448             .pcreq.message.Requests> reqs1 = new ArrayList<>();
449         final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message
450             .pcreq.message.RequestsBuilder rBuilder =
451                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message
452                     .pcreq.message.RequestsBuilder();
453         rBuilder.setRp(this.rpTrue);
454         rBuilder.setSegmentComputation(new SegmentComputationBuilder().setP2p(new P2pBuilder()
455             .setEndpointsObj(this.endpoints).build()).build());
456         reqs1.add(rBuilder.build());
457         builder.setRequests(reqs1);
458
459         ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCEPRequestMessage1.bin"));
460         assertEquals(new PcreqBuilder().setPcreqMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
461             result.readableBytes() - 4), Collections.emptyList()));
462         ByteBuf buf = Unpooled.buffer(result.readableBytes());
463         parser.serializeMessage(new PcreqBuilder().setPcreqMessage(builder.build()).build(), buf);
464
465         assertArrayEquals(result.array(), buf.array());
466
467         result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCReq.3.bin"));
468
469         final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message
470             .pcreq.message.Requests> reqs2 = new ArrayList<>();
471         final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message
472             .pcreq.message.RequestsBuilder rBuilder1 =
473                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message
474                     .pcreq.message.RequestsBuilder();
475         rBuilder1.setRp(this.rpTrue);
476         final P2pBuilder p2pBuilder = new P2pBuilder()
477                 .setEndpointsObj(this.endpoints)
478                 .setMetrics(Lists.newArrayList(this.metrics))
479                 .setIro(this.iro);
480         rBuilder1.setSegmentComputation(new SegmentComputationBuilder().setP2p(p2pBuilder.build()).build());
481         reqs2.add(rBuilder1.build());
482         builder.setRequests(reqs2)
483             .setSvec(Lists.newArrayList(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep
484                 .types.rev181109.pcreq.message.pcreq.message.SvecBuilder().setSvec(this.svec).build()));
485
486         assertEquals(new PcreqBuilder().setPcreqMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
487             result.readableBytes() - 4), Collections.emptyList()));
488         buf = Unpooled.buffer(result.readableBytes());
489         parser.serializeMessage(new PcreqBuilder().setPcreqMessage(builder.build()).build(), buf);
490         assertArrayEquals(result.array(), buf.array());
491
492         result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCReq.9.bin"));
493
494         final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message
495             .pcreq.message.Requests> reqs3 = new ArrayList<>();
496         final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message
497             .pcreq.message.RequestsBuilder rBuilder2 =
498                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message
499                     .pcreq.message.RequestsBuilder();
500         rBuilder2.setRp(new RpBuilder(this.rpTrue).setP2mp(true).build());
501         final EndpointsObjBuilder epBuilder = new EndpointsObjBuilder()
502                 .setIgnore(false)
503                 .setProcessingRule(true)
504                 .setAddressFamily(new P2mpIpv4CaseBuilder()
505                 .setP2mpIpv4(new P2mpIpv4Builder()
506                         .setP2mpLeaves(P2mpLeaves.NewLeavesToAdd)
507                         .setSourceIpv4Address(new Ipv4AddressNoZone("255.255.255.255"))
508                         .setDestinationIpv4Address(Arrays.asList(new Ipv4AddressNoZone("255.255.255.254"),
509                                 new Ipv4AddressNoZone("255.255.255.253")))
510                         .build()).build());
511
512         final P2mpBuilder p2mpBuilder = new P2mpBuilder();
513         p2mpBuilder.setEndpointRroPair(Collections.singletonList(new EndpointRroPairBuilder()
514             .setEndpointsObj(epBuilder.build())
515             .setRros(Arrays.asList(new RrosBuilder()
516                 .setRouteObject(new ReportedRouteObjectCaseBuilder()
517                     .setRro(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109
518                         .reported.route.object.RroBuilder()
519                         .setIgnore(false)
520                             .setProcessingRule(true)
521                             .setSubobject(Arrays.asList(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns
522                                 .yang.pcep.types.rev181109.reported.route.object.rro.SubobjectBuilder()
523                                 .setProtectionAvailable(false)
524                                 .setProtectionInUse(false)
525                                 .setSubobjectType(new IpPrefixCaseBuilder()
526                                     .setIpPrefix(new IpPrefixBuilder()
527                                             .setIpPrefix(new IpPrefix(new Ipv4Prefix("255.255.255.252/32")))
528                                             .build())
529                                         .build())
530                                 .build()))
531                         .build())
532                     .build())
533                .build(),
534             new RrosBuilder()
535                 .setRouteObject(new SecondaryReportedRouteObjectCaseBuilder()
536                     .setSrro(new SrroBuilder()
537                         .setIgnore(false)
538                         .setProcessingRule(true)
539                         .setSubobject(Arrays.asList(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns
540                             .yang.pcep.types.rev181109.secondary.reported.route.object.srro.SubobjectBuilder()
541                             .setProtectionInUse(false)
542                             .setProtectionAvailable(false)
543                             .setSubobjectType(new IpPrefixCaseBuilder()
544                                 .setIpPrefix(new IpPrefixBuilder()
545                                     .setIpPrefix(new IpPrefix(new Ipv4Prefix("255.255.255.251/32")))
546                                     .build())
547                                 .build())
548                             .build()))
549                         .build())
550                     .build())
551                 .build()))
552             .build()));
553         p2mpBuilder.setIroBncChoice(new BncCaseBuilder()
554             .setBranchNodeType(new BranchNodeCaseBuilder()
555                 .setBranchNodeList(new BranchNodeListBuilder()
556                     .setIgnore(false)
557                     .setProcessingRule(true)
558                     .setSubobject(Arrays.asList(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang
559                         .pcep.types.rev181109.bnc.SubobjectBuilder()
560                         .setLoose(false)
561                         .setIpPrefix(new IpPrefix(new Ipv4Prefix("255.255.255.252/32")))
562                         .build()))
563                     .build())
564                 .build())
565             .build());
566         rBuilder2.setSegmentComputation(new SegmentComputationBuilder().setP2mp(p2mpBuilder.build()).build());
567         reqs3.add(rBuilder2.build());
568         builder.setRequests(reqs3).setSvec(null);
569
570         assertEquals(new PcreqBuilder().setPcreqMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
571                 result.readableBytes() - 4), Collections.emptyList()));
572         buf = Unpooled.buffer(result.readableBytes());
573         parser.serializeMessage(new PcreqBuilder().setPcreqMessage(builder.build()).build(), buf);
574         assertArrayEquals(result.array(), buf.array());
575
576         try {
577             parser.serializeMessage(new PcreqBuilder().setPcreqMessage(new PcreqMessageBuilder().build()).build(),
578                 null);
579             fail();
580         } catch (final IllegalArgumentException e) {
581             assertEquals("Requests cannot be null or empty.", e.getMessage());
582         }
583         try {
584             parser.serializeMessage(new PcreqBuilder().setPcreqMessage(new PcreqMessageBuilder()
585                 .setRequests(Collections.emptyList()).build()).build(), null);
586             fail();
587         } catch (final IllegalArgumentException e) {
588             assertEquals("Requests cannot be null or empty.", e.getMessage());
589         }
590     }
591
592     @Test
593     public void testReplyMsg() throws IOException, PCEPDeserializerException {
594         // only RP
595
596         final PCEPReplyMessageParser parser = new PCEPReplyMessageParser(this.objectRegistry);
597
598         final PcrepMessageBuilder builder = new PcrepMessageBuilder();
599         RepliesBuilder repliesBuilder = new RepliesBuilder();
600
601         final List<Replies> replies1 = new ArrayList<>();
602         repliesBuilder.setRp(this.rpTrue);
603         replies1.add(repliesBuilder.build());
604         builder.setReplies(replies1);
605
606         ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRep.1.bin"));
607         assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
608             result.readableBytes() - 4), Collections.emptyList()));
609         ByteBuf buf = Unpooled.buffer(result.readableBytes());
610         parser.serializeMessage(new PcrepBuilder().setPcrepMessage(builder.build()).build(), buf);
611         assertArrayEquals(result.array(), buf.array());
612
613         // simple Failure
614         result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRep.2.bin"));
615         final List<Replies> replies2 = new ArrayList<>();
616         repliesBuilder = new RepliesBuilder();
617         repliesBuilder.setRp(this.rpTrue);
618         replies2.add(repliesBuilder.build());
619         final RepliesBuilder repliesBuilder2 = new RepliesBuilder();
620         repliesBuilder2.setRp(this.rpTrue);
621         repliesBuilder2.setResult(new FailureCaseBuilder().setNoPath(this.noPath).build());
622         replies2.add(repliesBuilder2.build());
623         builder.setReplies(replies2);
624
625         assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
626             result.readableBytes() - 4), Collections.emptyList()));
627         buf = Unpooled.buffer(result.readableBytes());
628         parser.serializeMessage(new PcrepBuilder().setPcrepMessage(builder.build()).build(), buf);
629         assertArrayEquals(result.array(), buf.array());
630
631         // Failure with attributes
632         result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRep.3.bin"));
633         final List<Replies> replies3 = new ArrayList<>();
634         repliesBuilder = new RepliesBuilder();
635         repliesBuilder.setRp(this.rpTrue);
636         repliesBuilder.setResult(new FailureCaseBuilder().setNoPath(this.noPath).setLspa(this.lspa)
637             .setMetrics(Lists.newArrayList(this.metrics)).setIro(this.iro).build());
638         replies3.add(repliesBuilder.build());
639         builder.setReplies(replies3);
640
641         assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
642             result.readableBytes() - 4), Collections.emptyList()));
643         buf = Unpooled.buffer(result.readableBytes());
644         parser.serializeMessage(new PcrepBuilder().setPcrepMessage(builder.build()).build(), buf);
645         assertArrayEquals(result.array(), buf.array());
646
647         // Success
648         result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRep.5.bin"));
649         final List<Replies> replies4 = new ArrayList<>();
650         repliesBuilder = new RepliesBuilder();
651         repliesBuilder.setRp(this.rpTrue);
652         final List<Paths> paths = new ArrayList<>();
653         final PathsBuilder paBuilder = new PathsBuilder()
654                 .setEro(this.ero)
655                 .setLspa(this.lspa)
656                 .setMetrics(Lists.newArrayList(this.metrics))
657                 .setIro(this.iro)
658                 .setOf(this.of);
659         paths.add(paBuilder.build());
660         repliesBuilder.setResult(new SuccessCaseBuilder()
661             .setSuccess(new SuccessBuilder().setPaths(paths).build()).build()).build();
662         replies4.add(repliesBuilder.build());
663         builder.setReplies(replies4);
664
665         assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
666             result.readableBytes() - 4), Collections.emptyList()));
667         buf = Unpooled.buffer(result.readableBytes());
668         parser.serializeMessage(new PcrepBuilder().setPcrepMessage(builder.build()).build(), buf);
669         assertArrayEquals(result.array(), buf.array());
670
671         try {
672             parser.serializeMessage(new PcrepBuilder().setPcrepMessage(new PcrepMessageBuilder().build()).build(),
673                 null);
674             fail();
675         } catch (final IllegalArgumentException e) {
676             assertEquals("Replies cannot be null or empty.", e.getMessage());
677         }
678         try {
679             parser.serializeMessage(new PcrepBuilder().setPcrepMessage(new PcrepMessageBuilder()
680                 .setReplies(Collections.emptyList()).build()).build(), null);
681             fail();
682         } catch (final IllegalArgumentException e) {
683             assertEquals("Replies cannot be null or empty.", e.getMessage());
684         }
685     }
686
687     @Test
688     public void testNotificationMsg() throws IOException, PCEPDeserializerException {
689         final CNotification cn1 = new CNotificationBuilder().setIgnore(false).setProcessingRule(false)
690             .setType(Uint8.ONE).setValue(Uint8.ONE).build();
691
692         final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcntf
693             .message.pcntf.message.notifications.Notifications> innerNot = new ArrayList<>();
694         innerNot.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcntf
695             .message.pcntf.message.notifications.NotificationsBuilder().setCNotification(cn1).build());
696         final List<Rps> rps = new ArrayList<>();
697         rps.add(new RpsBuilder().setRp(this.rpFalse).build());
698
699         final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCNtf.5.bin"));
700
701         final PCEPNotificationMessageParser parser = new PCEPNotificationMessageParser(this.objectRegistry);
702         final PcntfMessageBuilder builder = new PcntfMessageBuilder();
703
704         final List<Notifications> nots = new ArrayList<>();
705         final NotificationsBuilder b = new NotificationsBuilder();
706         b.setNotifications(innerNot);
707         b.setRps(rps);
708         nots.add(b.build());
709
710         final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcntf
711             .message.pcntf.message.notifications.Notifications> innerNot1 = new ArrayList<>();
712         innerNot1.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcntf
713             .message.pcntf.message.notifications.NotificationsBuilder().setCNotification(cn1).build());
714         innerNot1.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcntf
715             .message.pcntf.message.notifications.NotificationsBuilder().setCNotification(cn1).build());
716         final List<Rps> rps1 = new ArrayList<>();
717         rps1.add(new RpsBuilder().setRp(this.rpFalse).build());
718         rps1.add(new RpsBuilder().setRp(this.rpFalse).build());
719
720         b.setNotifications(innerNot1);
721         b.setRps(rps1);
722         nots.add(b.build());
723         builder.setNotifications(nots);
724
725         assertEquals(new PcntfBuilder().setPcntfMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
726             result.readableBytes() - 4), Collections.emptyList()));
727         final ByteBuf buf = Unpooled.buffer(result.readableBytes());
728         parser.serializeMessage(new PcntfBuilder().setPcntfMessage(builder.build()).build(), buf);
729         assertArrayEquals(result.array(), buf.array());
730     }
731
732     @Test
733     public void testErrorMsg() throws IOException, PCEPDeserializerException {
734
735         ErrorObject error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false)
736                 .setType(Uint8.valueOf(3)).setValue(Uint8.ONE).build();
737
738         final PCEPErrorMessageParser parser = new PCEPErrorMessageParser(this.ctx.getObjectHandlerRegistry());
739
740         List<Errors> innerErr = new ArrayList<>();
741
742         final PcerrMessageBuilder builder = new PcerrMessageBuilder();
743
744         final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message
745             .pcerr.message.error.type.request._case.request.Rps> rps = new ArrayList<>();
746         rps.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message
747             .pcerr.message.error.type.request._case.request.RpsBuilder().setRp(this.rpFalse).build());
748
749         innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
750
751         builder.setErrors(innerErr);
752         builder.setErrorType(new RequestCaseBuilder().setRequest(new RequestBuilder().setRps(rps).build()).build());
753
754         ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.5.bin"));
755         assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
756             result.readableBytes() - 4), Collections.emptyList()));
757         ByteBuf buf = Unpooled.buffer(result.readableBytes());
758         parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf);
759         assertArrayEquals(result.array(), buf.array());
760
761         result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.3.bin"));
762
763         error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false).setType(Uint8.valueOf(3))
764             .setValue(Uint8.ONE).build();
765
766         innerErr = new ArrayList<>();
767         innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
768
769         builder.setErrors(innerErr);
770         builder.setErrorType(
771             new SessionCaseBuilder().setSession(new SessionBuilder().setOpen(this.open).build()).build());
772
773         assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
774             result.readableBytes() - 4), Collections.emptyList()));
775         buf = Unpooled.buffer(result.readableBytes());
776         parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf);
777         assertArrayEquals(result.array(), buf.array());
778
779         try {
780             parser.serializeMessage(new PcerrBuilder()
781                 .setPcerrMessage(new PcerrMessageBuilder().build()).build(), null);
782             fail();
783         } catch (final IllegalArgumentException e) {
784             assertEquals("Errors should not be empty.", e.getMessage());
785         }
786         try {
787             parser.serializeMessage(new PcerrBuilder().setPcerrMessage(new PcerrMessageBuilder()
788                 .setErrors(Collections.emptyList()).build()).build(), null);
789             fail();
790         } catch (final IllegalArgumentException e) {
791             assertEquals("Errors should not be empty.", e.getMessage());
792         }
793     }
794
795     @Test
796     public void testReqMsgWithVendorInfoObjects() throws IOException, PCEPDeserializerException {
797         final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCReq.7.bin"));
798         final PCEPRequestMessageParser parser = new PCEPRequestMessageParser(this.objectRegistry);
799
800         final PcreqMessageBuilder builder = new PcreqMessageBuilder();
801         final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message
802             .pcreq.message.Requests> reqs1 = new ArrayList<>();
803         final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message.pcreq
804             .message.RequestsBuilder rBuilder =
805                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message
806                     .pcreq.message.RequestsBuilder();
807         rBuilder.setRp(this.rpTrue);
808         rBuilder.setVendorInformationObject(this.viObjects);
809         final SegmentComputationBuilder sBuilder = new SegmentComputationBuilder();
810         sBuilder.setP2p(
811             new P2pBuilder().setEndpointsObj(this.endpoints).setVendorInformationObject(this.viObjects).build());
812         rBuilder.setSegmentComputation(sBuilder.build());
813         reqs1.add(rBuilder.build());
814         builder.setSvec(Lists.newArrayList(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep
815             .types.rev181109.pcreq.message.pcreq.message.SvecBuilder().setSvec(this.svec)
816             .setVendorInformationObject(this.viObjects).build()));
817         builder.setRequests(reqs1);
818
819         assertEquals(new PcreqBuilder().setPcreqMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
820             result.readableBytes() - 4), Collections.emptyList()));
821         final ByteBuf buf = Unpooled.buffer(result.readableBytes());
822         parser.serializeMessage(new PcreqBuilder().setPcreqMessage(builder.build()).build(), buf);
823
824         assertArrayEquals(result.array(), buf.array());
825     }
826
827     @Test
828     public void testRepMsgWithVendorInforObjects() throws IOException, PCEPDeserializerException {
829         final PCEPReplyMessageParser parser = new PCEPReplyMessageParser(this.objectRegistry);
830
831         final PcrepMessageBuilder builder = new PcrepMessageBuilder();
832         RepliesBuilder repliesBuilder = new RepliesBuilder();
833         final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRep.6.bin"));
834         final List<Replies> replies = new ArrayList<>();
835         repliesBuilder = new RepliesBuilder()
836                 .setRp(this.rpTrue)
837                 .setVendorInformationObject(this.viObjects);
838         final List<Paths> paths = new ArrayList<>();
839         final PathsBuilder paBuilder = new PathsBuilder();
840         paBuilder.setEro(this.ero);
841         paths.add(paBuilder.build());
842         repliesBuilder.setResult(new SuccessCaseBuilder().setSuccess(new SuccessBuilder().setPaths(paths)
843             .setVendorInformationObject(this.viObjects).build()).build()).build();
844         replies.add(repliesBuilder.build());
845         builder.setReplies(replies);
846
847         assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
848             result.readableBytes() - 4), Collections.emptyList()));
849         final ByteBuf buf = Unpooled.buffer(result.readableBytes());
850         parser.serializeMessage(new PcrepBuilder().setPcrepMessage(builder.build()).build(), buf);
851         assertArrayEquals(result.array(), buf.array());
852     }
853
854     @Test
855     public void testMonRepMsg() throws PCEPDeserializerException, IOException {
856         final PCEPMonitoringReplyMessageParser parser = new PCEPMonitoringReplyMessageParser(this.objectRegistry);
857         final PcmonrepMessageBuilder builder = new PcmonrepMessageBuilder();
858         builder.setMonitoring(this.monitoring)
859                 .setMonitoringMetricsList(new GeneralMetricsListBuilder()
860                 .setMetricPce(Lists.newArrayList(new MetricPceBuilder().setPceId(this.pceId).build())).build());
861
862         final byte[] msgBytes = {
863             0x20, 0x09, 0x00, 0x18,
864             /* monitoring object */
865             0x13, 0x10, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64,
866             /* pce-id object */
867             0x19, 0x10, 0x00, 0x08, 0x7f, 0x00, 0x00, 0x02
868         };
869
870         ByteBuf result = Unpooled.wrappedBuffer(msgBytes);
871         assertEquals(
872             new PcmonrepBuilder().setPcmonrepMessage(builder.build()).build(),
873             parser.parseMessage(result.slice(4, result.readableBytes() - 4), Collections.emptyList()));
874         ByteBuf buf = Unpooled.buffer(result.readableBytes());
875         parser.serializeMessage(new PcmonrepBuilder().setPcmonrepMessage(builder.build()).build(), buf);
876         assertArrayEquals(result.array(), buf.array());
877
878         builder.setMonitoring(this.monitoring);
879         builder.setPccIdReq(this.pccIdReq);
880         final SpecificMetricsBuilder smBuilder = new SpecificMetricsBuilder();
881         smBuilder.setRp(this.rpTrue);
882         final List<MetricPce> metricPces = new ArrayList<>();
883         metricPces.add(new MetricPceBuilder().setOverload(this.overload).setPceId(this.pceId)
884             .setProcTime(this.procTime).build());
885         metricPces.add(new MetricPceBuilder().setPceId(this.pceId).setProcTime(this.procTime).build());
886         smBuilder.setMetricPce(metricPces);
887         final SpecificMetricsBuilder smBuilder2 = new SpecificMetricsBuilder();
888         final List<MetricPce> metricPces2 = new ArrayList<>();
889         smBuilder2.setRp(this.rpTrue);
890         metricPces2.add(new MetricPceBuilder().setOverload(this.overload).setPceId(this.pceId).build());
891         smBuilder2.setMetricPce(metricPces2);
892         builder.setMonitoringMetricsList(new SpecificMetricsListBuilder()
893             .setSpecificMetrics(Lists.newArrayList(smBuilder.build(), smBuilder2.build())).build());
894
895         result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCMonRep.bin"));
896         assertEquals(
897             new PcmonrepBuilder().setPcmonrepMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
898                 result.readableBytes() - 4), Collections.emptyList()));
899         buf = Unpooled.buffer(result.readableBytes());
900         parser.serializeMessage(new PcmonrepBuilder().setPcmonrepMessage(builder.build()).build(), buf);
901         assertArrayEquals(result.array(), buf.array());
902     }
903
904     @Test
905     public void testRepWithMonitoring() throws IOException, PCEPDeserializerException {
906         final PCEPReplyMessageParser parser = new PCEPReplyMessageParser(this.objectRegistry);
907
908         final PcrepMessageBuilder builder = new PcrepMessageBuilder();
909         RepliesBuilder repliesBuilder = new RepliesBuilder();
910
911         final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRepMon.5.bin"));
912         final List<Replies> replies4 = new ArrayList<>();
913         repliesBuilder = new RepliesBuilder()
914                 .setRp(this.rpTrue)
915                 .setMonitoring(this.monitoring)
916                 .setPccIdReq(this.pccIdReq)
917                 .setMetricPce(Lists.newArrayList(new MetricPceBuilder().setPceId(this.pceId).build()));
918         final List<Paths> paths = new ArrayList<>();
919         final PathsBuilder paBuilder = new PathsBuilder()
920                 .setEro(this.ero)
921                 .setLspa(this.lspa)
922                 .setMetrics(Lists.newArrayList(this.metrics))
923                 .setIro(this.iro)
924                 .setOf(this.of);
925         paths.add(paBuilder.build());
926         repliesBuilder.setResult(new SuccessCaseBuilder().setSuccess(new SuccessBuilder().setPaths(paths).build())
927             .build()).build();
928         replies4.add(repliesBuilder.build());
929         builder.setReplies(replies4);
930
931         assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
932             result.readableBytes() - 4), Collections.emptyList()));
933         final ByteBuf buf = Unpooled.buffer(result.readableBytes());
934         parser.serializeMessage(new PcrepBuilder().setPcrepMessage(builder.build()).build(), buf);
935         assertArrayEquals(result.array(), buf.array());
936     }
937
938     @Test
939     public void testReqWithMonitoring() throws IOException, PCEPDeserializerException {
940         final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCReq.8.bin"));
941
942         final PCEPRequestMessageParser parser = new PCEPRequestMessageParser(this.objectRegistry);
943
944         final PcreqMessageBuilder builder = new PcreqMessageBuilder();
945         final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message
946             .pcreq.message.Requests> reqs1 = new ArrayList<>();
947         final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message.pcreq
948             .message.RequestsBuilder rBuilder =
949                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message
950                     .pcreq.message.RequestsBuilder();
951         rBuilder.setRp(this.rpTrue)
952                 .setSegmentComputation(new SegmentComputationBuilder().setP2p(new P2pBuilder()
953                 .setEndpointsObj(this.endpoints).build()).build());
954         reqs1.add(rBuilder.build());
955         final MonitoringRequestBuilder monReqBuilder = new MonitoringRequestBuilder()
956                 .setMonitoring(this.monitoring)
957                 .setPccIdReq(this.pccIdReq)
958                 .setPceIdList(Lists.newArrayList(new PceIdListBuilder().setPceId(this.pceId).build()));
959         builder.setMonitoringRequest(monReqBuilder.build()).setRequests(reqs1);
960
961         assertEquals(new PcreqBuilder().setPcreqMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
962                 result.readableBytes() - 4), Collections.emptyList()));
963         final ByteBuf buf = Unpooled.buffer(result.readableBytes());
964         parser.serializeMessage(new PcreqBuilder().setPcreqMessage(builder.build()).build(), buf);
965
966         assertArrayEquals(result.array(), buf.array());
967     }
968
969     @Test
970     public void testMonReqMsg() throws PCEPDeserializerException, IOException {
971         final PCEPMonitoringRequestMessageParser parser = new PCEPMonitoringRequestMessageParser(this.objectRegistry);
972
973         final PcreqMessageBuilder builder = new PcreqMessageBuilder();
974         final MonitoringRequestBuilder monReqBuilder = new MonitoringRequestBuilder()
975                 .setMonitoring(this.monitoring)
976                 .setPceIdList(Lists.newArrayList(new PceIdListBuilder().setPceId(this.pceId).build()));
977         builder.setMonitoringRequest(monReqBuilder.build());
978         final byte[] msgBytes = {
979             0x20, 0x08, 0x00, 0x18,
980             /* monitoring object */
981             0x13, 0x10, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64,
982             /* pce-id object */
983             0x19, 0x10, 0x00, 0x08, 0x7f, 0x00, 0x00, 0x02
984         };
985         ByteBuf result = Unpooled.wrappedBuffer(msgBytes);
986         assertEquals(new PcmonreqBuilder().setPcreqMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
987                 result.readableBytes() - 4), Collections.emptyList()));
988         ByteBuf buf = Unpooled.buffer(result.readableBytes());
989         parser.serializeMessage(new PcmonreqBuilder().setPcreqMessage(builder.build()).build(), buf);
990         assertArrayEquals(result.array(), buf.array());
991
992         result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCMonReq.bin"));
993         final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message
994             .pcreq.message.Requests> reqs2 = new ArrayList<>();
995         final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message.pcreq
996             .message.RequestsBuilder rBuilder1 =
997                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message
998                     .pcreq.message.RequestsBuilder();
999         rBuilder1.setRp(this.rpTrue);
1000         final P2pBuilder p2pBuilder = new P2pBuilder()
1001                 .setEndpointsObj(this.endpoints)
1002                 .setMetrics(Lists.newArrayList(this.metrics))
1003                 .setIro(this.iro);
1004         rBuilder1.setSegmentComputation(new SegmentComputationBuilder().setP2p(p2pBuilder.build()).build());
1005         reqs2.add(rBuilder1.build());
1006         builder.setRequests(reqs2)
1007                 .setSvec(Lists.newArrayList(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep
1008                     .types.rev181109.pcreq.message.pcreq.message.SvecBuilder().setSvec(this.svec).build()));
1009         monReqBuilder.setMonitoring(this.monitoring).setPccIdReq(this.pccIdReq);
1010         final PceIdList pceIdList = new PceIdListBuilder().setPceId(this.pceId).build();
1011         monReqBuilder.setPceIdList(Lists.newArrayList(pceIdList, pceIdList));
1012         builder.setMonitoringRequest(monReqBuilder.build());
1013
1014         assertEquals(new PcmonreqBuilder().setPcreqMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
1015             result.readableBytes() - 4), Collections.emptyList()));
1016         buf = Unpooled.buffer(result.readableBytes());
1017         parser.serializeMessage(new PcmonreqBuilder().setPcreqMessage(builder.build()).build(), buf);
1018         assertArrayEquals(result.array(), buf.array());
1019     }
1020
1021     @Test
1022     public void testReplyMsgWithTwoEros() throws IOException, PCEPDeserializerException {
1023         // Success Reply with two EROs: the first one is followed by Bandwidth Object and one Metric Object
1024
1025         final PCEPReplyMessageParser parser = new PCEPReplyMessageParser(this.objectRegistry);
1026
1027         final PcrepMessageBuilder builder = new PcrepMessageBuilder();
1028
1029         final List<Replies> replies = new ArrayList<>();
1030
1031         final BandwidthBuilder bwBuilder = new BandwidthBuilder();
1032         bwBuilder.setIgnore(false);
1033         bwBuilder.setProcessingRule(false);
1034         bwBuilder.setBandwidth(new Bandwidth(new byte[] { (byte) 0x47, (byte) 0x74, (byte) 0x24, (byte) 0x00 }));
1035
1036         RepliesBuilder repliesBuilder = new RepliesBuilder();
1037         repliesBuilder = new RepliesBuilder();
1038         repliesBuilder.setRp(this.rpTrue);
1039         final List<Paths> paths = new ArrayList<>();
1040         final PathsBuilder paBuilder1 = new PathsBuilder()
1041                 .setEro(this.ero)
1042                 .setBandwidth(bwBuilder.build())
1043                 .setMetrics(Lists.newArrayList(this.metrics));
1044         paths.add(paBuilder1.build());
1045         final PathsBuilder paBuilder2 = new PathsBuilder();
1046         paBuilder2.setEro(this.ero);
1047         paths.add(paBuilder2.build());
1048         repliesBuilder.setResult(new SuccessCaseBuilder().setSuccess(new SuccessBuilder().setPaths(paths).build())
1049             .build()).build();
1050         replies.add(repliesBuilder.build());
1051         builder.setReplies(replies);
1052
1053         ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRep.7.bin"));
1054         assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
1055             result.readableBytes() - 4), Collections.emptyList()));
1056         ByteBuf buf = Unpooled.buffer(result.readableBytes());
1057         parser.serializeMessage(new PcrepBuilder().setPcrepMessage(builder.build()).build(), buf);
1058         assertArrayEquals(result.array(), buf.array());
1059     }
1060 }