Further migration of test code from legacy setters
[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         p2pBuilder.setEndpointsObj(this.endpoints);
478         p2pBuilder.setMetrics(Lists.newArrayList(this.metrics));
479         p2pBuilder.setIro(this.iro);
480         rBuilder1.setSegmentComputation(new SegmentComputationBuilder().setP2p(p2pBuilder.build()).build());
481         reqs2.add(rBuilder1.build());
482         builder.setRequests(reqs2);
483         builder.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         epBuilder.setIgnore(false);
503         epBuilder.setProcessingRule(true);
504         epBuilder.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);
569         builder.setSvec(null);
570
571         assertEquals(new PcreqBuilder().setPcreqMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
572                 result.readableBytes() - 4), Collections.emptyList()));
573         buf = Unpooled.buffer(result.readableBytes());
574         parser.serializeMessage(new PcreqBuilder().setPcreqMessage(builder.build()).build(), buf);
575         assertArrayEquals(result.array(), buf.array());
576
577         try {
578             parser.serializeMessage(new PcreqBuilder().setPcreqMessage(new PcreqMessageBuilder().build()).build(),
579                 null);
580             fail();
581         } catch (final IllegalArgumentException e) {
582             assertEquals("Requests cannot be null or empty.", e.getMessage());
583         }
584         try {
585             parser.serializeMessage(new PcreqBuilder().setPcreqMessage(new PcreqMessageBuilder()
586                 .setRequests(Collections.emptyList()).build()).build(), null);
587             fail();
588         } catch (final IllegalArgumentException e) {
589             assertEquals("Requests cannot be null or empty.", e.getMessage());
590         }
591     }
592
593     @Test
594     public void testReplyMsg() throws IOException, PCEPDeserializerException {
595         // only RP
596
597         final PCEPReplyMessageParser parser = new PCEPReplyMessageParser(this.objectRegistry);
598
599         final PcrepMessageBuilder builder = new PcrepMessageBuilder();
600         RepliesBuilder repliesBuilder = new RepliesBuilder();
601
602         final List<Replies> replies1 = new ArrayList<>();
603         repliesBuilder.setRp(this.rpTrue);
604         replies1.add(repliesBuilder.build());
605         builder.setReplies(replies1);
606
607         ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRep.1.bin"));
608         assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
609             result.readableBytes() - 4), Collections.emptyList()));
610         ByteBuf buf = Unpooled.buffer(result.readableBytes());
611         parser.serializeMessage(new PcrepBuilder().setPcrepMessage(builder.build()).build(), buf);
612         assertArrayEquals(result.array(), buf.array());
613
614         // simple Failure
615         result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRep.2.bin"));
616         final List<Replies> replies2 = new ArrayList<>();
617         repliesBuilder = new RepliesBuilder();
618         repliesBuilder.setRp(this.rpTrue);
619         replies2.add(repliesBuilder.build());
620         final RepliesBuilder repliesBuilder2 = new RepliesBuilder();
621         repliesBuilder2.setRp(this.rpTrue);
622         repliesBuilder2.setResult(new FailureCaseBuilder().setNoPath(this.noPath).build());
623         replies2.add(repliesBuilder2.build());
624         builder.setReplies(replies2);
625
626         assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
627             result.readableBytes() - 4), Collections.emptyList()));
628         buf = Unpooled.buffer(result.readableBytes());
629         parser.serializeMessage(new PcrepBuilder().setPcrepMessage(builder.build()).build(), buf);
630         assertArrayEquals(result.array(), buf.array());
631
632         // Failure with attributes
633         result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRep.3.bin"));
634         final List<Replies> replies3 = new ArrayList<>();
635         repliesBuilder = new RepliesBuilder();
636         repliesBuilder.setRp(this.rpTrue);
637         repliesBuilder.setResult(new FailureCaseBuilder().setNoPath(this.noPath).setLspa(this.lspa)
638             .setMetrics(Lists.newArrayList(this.metrics)).setIro(this.iro).build());
639         replies3.add(repliesBuilder.build());
640         builder.setReplies(replies3);
641
642         assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
643             result.readableBytes() - 4), Collections.emptyList()));
644         buf = Unpooled.buffer(result.readableBytes());
645         parser.serializeMessage(new PcrepBuilder().setPcrepMessage(builder.build()).build(), buf);
646         assertArrayEquals(result.array(), buf.array());
647
648         // Success
649         result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRep.5.bin"));
650         final List<Replies> replies4 = new ArrayList<>();
651         repliesBuilder = new RepliesBuilder();
652         repliesBuilder.setRp(this.rpTrue);
653         final List<Paths> paths = new ArrayList<>();
654         final PathsBuilder paBuilder = new PathsBuilder();
655         paBuilder.setEro(this.ero);
656         paBuilder.setLspa(this.lspa);
657         paBuilder.setMetrics(Lists.newArrayList(this.metrics));
658         paBuilder.setIro(this.iro);
659         paBuilder.setOf(this.of);
660         paths.add(paBuilder.build());
661         repliesBuilder.setResult(new SuccessCaseBuilder()
662             .setSuccess(new SuccessBuilder().setPaths(paths).build()).build()).build();
663         replies4.add(repliesBuilder.build());
664         builder.setReplies(replies4);
665
666         assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
667             result.readableBytes() - 4), Collections.emptyList()));
668         buf = Unpooled.buffer(result.readableBytes());
669         parser.serializeMessage(new PcrepBuilder().setPcrepMessage(builder.build()).build(), buf);
670         assertArrayEquals(result.array(), buf.array());
671
672         try {
673             parser.serializeMessage(new PcrepBuilder().setPcrepMessage(new PcrepMessageBuilder().build()).build(),
674                 null);
675             fail();
676         } catch (final IllegalArgumentException e) {
677             assertEquals("Replies cannot be null or empty.", e.getMessage());
678         }
679         try {
680             parser.serializeMessage(new PcrepBuilder().setPcrepMessage(new PcrepMessageBuilder()
681                 .setReplies(Collections.emptyList()).build()).build(), null);
682             fail();
683         } catch (final IllegalArgumentException e) {
684             assertEquals("Replies cannot be null or empty.", e.getMessage());
685         }
686     }
687
688     @Test
689     public void testNotificationMsg() throws IOException, PCEPDeserializerException {
690         final CNotification cn1 = new CNotificationBuilder().setIgnore(false).setProcessingRule(false)
691             .setType(Uint8.ONE).setValue(Uint8.ONE).build();
692
693         final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcntf
694             .message.pcntf.message.notifications.Notifications> innerNot = new ArrayList<>();
695         innerNot.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcntf
696             .message.pcntf.message.notifications.NotificationsBuilder().setCNotification(cn1).build());
697         final List<Rps> rps = new ArrayList<>();
698         rps.add(new RpsBuilder().setRp(this.rpFalse).build());
699
700         final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCNtf.5.bin"));
701
702         final PCEPNotificationMessageParser parser = new PCEPNotificationMessageParser(this.objectRegistry);
703         final PcntfMessageBuilder builder = new PcntfMessageBuilder();
704
705         final List<Notifications> nots = new ArrayList<>();
706         final NotificationsBuilder b = new NotificationsBuilder();
707         b.setNotifications(innerNot);
708         b.setRps(rps);
709         nots.add(b.build());
710
711         final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcntf
712             .message.pcntf.message.notifications.Notifications> innerNot1 = new ArrayList<>();
713         innerNot1.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcntf
714             .message.pcntf.message.notifications.NotificationsBuilder().setCNotification(cn1).build());
715         innerNot1.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcntf
716             .message.pcntf.message.notifications.NotificationsBuilder().setCNotification(cn1).build());
717         final List<Rps> rps1 = new ArrayList<>();
718         rps1.add(new RpsBuilder().setRp(this.rpFalse).build());
719         rps1.add(new RpsBuilder().setRp(this.rpFalse).build());
720
721         b.setNotifications(innerNot1);
722         b.setRps(rps1);
723         nots.add(b.build());
724         builder.setNotifications(nots);
725
726         assertEquals(new PcntfBuilder().setPcntfMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
727             result.readableBytes() - 4), Collections.emptyList()));
728         final ByteBuf buf = Unpooled.buffer(result.readableBytes());
729         parser.serializeMessage(new PcntfBuilder().setPcntfMessage(builder.build()).build(), buf);
730         assertArrayEquals(result.array(), buf.array());
731     }
732
733     @Test
734     public void testErrorMsg() throws IOException, PCEPDeserializerException {
735
736         ErrorObject error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false)
737                 .setType(Uint8.valueOf(3)).setValue(Uint8.ONE).build();
738
739         final PCEPErrorMessageParser parser = new PCEPErrorMessageParser(this.ctx.getObjectHandlerRegistry());
740
741         List<Errors> innerErr = new ArrayList<>();
742
743         final PcerrMessageBuilder builder = new PcerrMessageBuilder();
744
745         final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message
746             .pcerr.message.error.type.request._case.request.Rps> rps = new ArrayList<>();
747         rps.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message
748             .pcerr.message.error.type.request._case.request.RpsBuilder().setRp(this.rpFalse).build());
749
750         innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
751
752         builder.setErrors(innerErr);
753         builder.setErrorType(new RequestCaseBuilder().setRequest(new RequestBuilder().setRps(rps).build()).build());
754
755         ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.5.bin"));
756         assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
757             result.readableBytes() - 4), Collections.emptyList()));
758         ByteBuf buf = Unpooled.buffer(result.readableBytes());
759         parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf);
760         assertArrayEquals(result.array(), buf.array());
761
762         result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.3.bin"));
763
764         error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false).setType(Uint8.valueOf(3))
765             .setValue(Uint8.ONE).build();
766
767         innerErr = new ArrayList<>();
768         innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
769
770         builder.setErrors(innerErr);
771         builder.setErrorType(
772             new SessionCaseBuilder().setSession(new SessionBuilder().setOpen(this.open).build()).build());
773
774         assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
775             result.readableBytes() - 4), Collections.emptyList()));
776         buf = Unpooled.buffer(result.readableBytes());
777         parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf);
778         assertArrayEquals(result.array(), buf.array());
779
780         try {
781             parser.serializeMessage(new PcerrBuilder()
782                 .setPcerrMessage(new PcerrMessageBuilder().build()).build(), null);
783             fail();
784         } catch (final IllegalArgumentException e) {
785             assertEquals("Errors should not be empty.", e.getMessage());
786         }
787         try {
788             parser.serializeMessage(new PcerrBuilder().setPcerrMessage(new PcerrMessageBuilder()
789                 .setErrors(Collections.emptyList()).build()).build(), null);
790             fail();
791         } catch (final IllegalArgumentException e) {
792             assertEquals("Errors should not be empty.", e.getMessage());
793         }
794     }
795
796     @Test
797     public void testReqMsgWithVendorInfoObjects() throws IOException, PCEPDeserializerException {
798         final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCReq.7.bin"));
799         final PCEPRequestMessageParser parser = new PCEPRequestMessageParser(this.objectRegistry);
800
801         final PcreqMessageBuilder builder = new PcreqMessageBuilder();
802         final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message
803             .pcreq.message.Requests> reqs1 = new ArrayList<>();
804         final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message.pcreq
805             .message.RequestsBuilder rBuilder =
806                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message
807                     .pcreq.message.RequestsBuilder();
808         rBuilder.setRp(this.rpTrue);
809         rBuilder.setVendorInformationObject(this.viObjects);
810         final SegmentComputationBuilder sBuilder = new SegmentComputationBuilder();
811         sBuilder.setP2p(
812             new P2pBuilder().setEndpointsObj(this.endpoints).setVendorInformationObject(this.viObjects).build());
813         rBuilder.setSegmentComputation(sBuilder.build());
814         reqs1.add(rBuilder.build());
815         builder.setSvec(Lists.newArrayList(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep
816             .types.rev181109.pcreq.message.pcreq.message.SvecBuilder().setSvec(this.svec)
817             .setVendorInformationObject(this.viObjects).build()));
818         builder.setRequests(reqs1);
819
820         assertEquals(new PcreqBuilder().setPcreqMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
821             result.readableBytes() - 4), Collections.emptyList()));
822         final ByteBuf buf = Unpooled.buffer(result.readableBytes());
823         parser.serializeMessage(new PcreqBuilder().setPcreqMessage(builder.build()).build(), buf);
824
825         assertArrayEquals(result.array(), buf.array());
826     }
827
828     @Test
829     public void testRepMsgWithVendorInforObjects() throws IOException, PCEPDeserializerException {
830         final PCEPReplyMessageParser parser = new PCEPReplyMessageParser(this.objectRegistry);
831
832         final PcrepMessageBuilder builder = new PcrepMessageBuilder();
833         RepliesBuilder repliesBuilder = new RepliesBuilder();
834         final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRep.6.bin"));
835         final List<Replies> replies = new ArrayList<>();
836         repliesBuilder = new RepliesBuilder();
837         repliesBuilder.setRp(this.rpTrue);
838         repliesBuilder.setVendorInformationObject(this.viObjects);
839         final List<Paths> paths = new ArrayList<>();
840         final PathsBuilder paBuilder = new PathsBuilder();
841         paBuilder.setEro(this.ero);
842         paths.add(paBuilder.build());
843         repliesBuilder.setResult(new SuccessCaseBuilder().setSuccess(new SuccessBuilder().setPaths(paths)
844             .setVendorInformationObject(this.viObjects).build()).build()).build();
845         replies.add(repliesBuilder.build());
846         builder.setReplies(replies);
847
848         assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
849             result.readableBytes() - 4), Collections.emptyList()));
850         final ByteBuf buf = Unpooled.buffer(result.readableBytes());
851         parser.serializeMessage(new PcrepBuilder().setPcrepMessage(builder.build()).build(), buf);
852         assertArrayEquals(result.array(), buf.array());
853     }
854
855     @Test
856     public void testMonRepMsg() throws PCEPDeserializerException, IOException {
857         final PCEPMonitoringReplyMessageParser parser = new PCEPMonitoringReplyMessageParser(this.objectRegistry);
858         final PcmonrepMessageBuilder builder = new PcmonrepMessageBuilder();
859         builder.setMonitoring(this.monitoring);
860         builder.setMonitoringMetricsList(new GeneralMetricsListBuilder()
861             .setMetricPce(Lists.newArrayList(new MetricPceBuilder().setPceId(this.pceId).build())).build());
862
863         final byte[] msgBytes = {
864             0x20, 0x09, 0x00, 0x18,
865             /* monitoring object */
866             0x13, 0x10, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64,
867             /* pce-id object */
868             0x19, 0x10, 0x00, 0x08, 0x7f, 0x00, 0x00, 0x02
869         };
870
871         ByteBuf result = Unpooled.wrappedBuffer(msgBytes);
872         assertEquals(
873             new PcmonrepBuilder().setPcmonrepMessage(builder.build()).build(),
874             parser.parseMessage(result.slice(4, result.readableBytes() - 4), Collections.emptyList()));
875         ByteBuf buf = Unpooled.buffer(result.readableBytes());
876         parser.serializeMessage(new PcmonrepBuilder().setPcmonrepMessage(builder.build()).build(), buf);
877         assertArrayEquals(result.array(), buf.array());
878
879         builder.setMonitoring(this.monitoring);
880         builder.setPccIdReq(this.pccIdReq);
881         final SpecificMetricsBuilder smBuilder = new SpecificMetricsBuilder();
882         smBuilder.setRp(this.rpTrue);
883         final List<MetricPce> metricPces = new ArrayList<>();
884         metricPces.add(new MetricPceBuilder().setOverload(this.overload).setPceId(this.pceId)
885             .setProcTime(this.procTime).build());
886         metricPces.add(new MetricPceBuilder().setPceId(this.pceId).setProcTime(this.procTime).build());
887         smBuilder.setMetricPce(metricPces);
888         final SpecificMetricsBuilder smBuilder2 = new SpecificMetricsBuilder();
889         final List<MetricPce> metricPces2 = new ArrayList<>();
890         smBuilder2.setRp(this.rpTrue);
891         metricPces2.add(new MetricPceBuilder().setOverload(this.overload).setPceId(this.pceId).build());
892         smBuilder2.setMetricPce(metricPces2);
893         builder.setMonitoringMetricsList(new SpecificMetricsListBuilder()
894             .setSpecificMetrics(Lists.newArrayList(smBuilder.build(), smBuilder2.build())).build());
895
896         result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCMonRep.bin"));
897         assertEquals(
898             new PcmonrepBuilder().setPcmonrepMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
899                 result.readableBytes() - 4), Collections.emptyList()));
900         buf = Unpooled.buffer(result.readableBytes());
901         parser.serializeMessage(new PcmonrepBuilder().setPcmonrepMessage(builder.build()).build(), buf);
902         assertArrayEquals(result.array(), buf.array());
903     }
904
905     @Test
906     public void testRepWithMonitoring() throws IOException, PCEPDeserializerException {
907         final PCEPReplyMessageParser parser = new PCEPReplyMessageParser(this.objectRegistry);
908
909         final PcrepMessageBuilder builder = new PcrepMessageBuilder();
910         RepliesBuilder repliesBuilder = new RepliesBuilder();
911
912         final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRepMon.5.bin"));
913         final List<Replies> replies4 = new ArrayList<>();
914         repliesBuilder = new RepliesBuilder();
915         repliesBuilder.setRp(this.rpTrue);
916         repliesBuilder.setMonitoring(this.monitoring);
917         repliesBuilder.setPccIdReq(this.pccIdReq);
918         repliesBuilder.setMetricPce(Lists.newArrayList(new MetricPceBuilder().setPceId(this.pceId).build()));
919         final List<Paths> paths = new ArrayList<>();
920         final PathsBuilder paBuilder = new PathsBuilder();
921         paBuilder.setEro(this.ero);
922         paBuilder.setLspa(this.lspa);
923         paBuilder.setMetrics(Lists.newArrayList(this.metrics));
924         paBuilder.setIro(this.iro);
925         paBuilder.setOf(this.of);
926         paths.add(paBuilder.build());
927         repliesBuilder.setResult(new SuccessCaseBuilder().setSuccess(new SuccessBuilder().setPaths(paths).build())
928             .build()).build();
929         replies4.add(repliesBuilder.build());
930         builder.setReplies(replies4);
931
932         assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
933             result.readableBytes() - 4), Collections.emptyList()));
934         final ByteBuf buf = Unpooled.buffer(result.readableBytes());
935         parser.serializeMessage(new PcrepBuilder().setPcrepMessage(builder.build()).build(), buf);
936         assertArrayEquals(result.array(), buf.array());
937     }
938
939     @Test
940     public void testReqWithMonitoring() throws IOException, PCEPDeserializerException {
941         final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCReq.8.bin"));
942
943         final PCEPRequestMessageParser parser = new PCEPRequestMessageParser(this.objectRegistry);
944
945         final PcreqMessageBuilder builder = new PcreqMessageBuilder();
946         final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message
947             .pcreq.message.Requests> reqs1 = new ArrayList<>();
948         final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message.pcreq
949             .message.RequestsBuilder rBuilder =
950                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message
951                     .pcreq.message.RequestsBuilder();
952         rBuilder.setRp(this.rpTrue);
953         rBuilder.setSegmentComputation(new SegmentComputationBuilder().setP2p(new P2pBuilder()
954             .setEndpointsObj(this.endpoints).build()).build());
955         reqs1.add(rBuilder.build());
956         final MonitoringRequestBuilder monReqBuilder = new MonitoringRequestBuilder();
957         monReqBuilder.setMonitoring(this.monitoring);
958         monReqBuilder.setPccIdReq(this.pccIdReq);
959         monReqBuilder.setPceIdList(Lists.newArrayList(new PceIdListBuilder().setPceId(this.pceId).build()));
960         builder.setMonitoringRequest(monReqBuilder.build());
961         builder.setRequests(reqs1);
962
963         assertEquals(new PcreqBuilder().setPcreqMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
964                 result.readableBytes() - 4), Collections.emptyList()));
965         final ByteBuf buf = Unpooled.buffer(result.readableBytes());
966         parser.serializeMessage(new PcreqBuilder().setPcreqMessage(builder.build()).build(), buf);
967
968         assertArrayEquals(result.array(), buf.array());
969     }
970
971     @Test
972     public void testMonReqMsg() throws PCEPDeserializerException, IOException {
973         final PCEPMonitoringRequestMessageParser parser = new PCEPMonitoringRequestMessageParser(this.objectRegistry);
974
975         final PcreqMessageBuilder builder = new PcreqMessageBuilder();
976         final MonitoringRequestBuilder monReqBuilder = new MonitoringRequestBuilder();
977         monReqBuilder.setMonitoring(this.monitoring);
978         monReqBuilder.setPceIdList(Lists.newArrayList(new PceIdListBuilder().setPceId(this.pceId).build()));
979         builder.setMonitoringRequest(monReqBuilder.build());
980         final byte[] msgBytes = {
981             0x20, 0x08, 0x00, 0x18,
982             /* monitoring object */
983             0x13, 0x10, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64,
984             /* pce-id object */
985             0x19, 0x10, 0x00, 0x08, 0x7f, 0x00, 0x00, 0x02
986         };
987         ByteBuf result = Unpooled.wrappedBuffer(msgBytes);
988         assertEquals(new PcmonreqBuilder().setPcreqMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
989                 result.readableBytes() - 4), Collections.emptyList()));
990         ByteBuf buf = Unpooled.buffer(result.readableBytes());
991         parser.serializeMessage(new PcmonreqBuilder().setPcreqMessage(builder.build()).build(), buf);
992         assertArrayEquals(result.array(), buf.array());
993
994         result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCMonReq.bin"));
995         final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message
996             .pcreq.message.Requests> reqs2 = new ArrayList<>();
997         final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message.pcreq
998             .message.RequestsBuilder rBuilder1 =
999                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message
1000                     .pcreq.message.RequestsBuilder();
1001         rBuilder1.setRp(this.rpTrue);
1002         final P2pBuilder p2pBuilder = new P2pBuilder();
1003         p2pBuilder.setEndpointsObj(this.endpoints);
1004         p2pBuilder.setMetrics(Lists.newArrayList(this.metrics));
1005         p2pBuilder.setIro(this.iro);
1006         rBuilder1.setSegmentComputation(new SegmentComputationBuilder().setP2p(p2pBuilder.build()).build());
1007         reqs2.add(rBuilder1.build());
1008         builder.setRequests(reqs2);
1009         builder.setSvec(Lists.newArrayList(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep
1010             .types.rev181109.pcreq.message.pcreq.message.SvecBuilder().setSvec(this.svec).build()));
1011         monReqBuilder.setMonitoring(this.monitoring);
1012         monReqBuilder.setPccIdReq(this.pccIdReq);
1013         final PceIdList pceIdList = new PceIdListBuilder().setPceId(this.pceId).build();
1014         monReqBuilder.setPceIdList(Lists.newArrayList(pceIdList, pceIdList));
1015         builder.setMonitoringRequest(monReqBuilder.build());
1016
1017         assertEquals(new PcmonreqBuilder().setPcreqMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
1018             result.readableBytes() - 4), Collections.emptyList()));
1019         buf = Unpooled.buffer(result.readableBytes());
1020         parser.serializeMessage(new PcmonreqBuilder().setPcreqMessage(builder.build()).build(), buf);
1021         assertArrayEquals(result.array(), buf.array());
1022     }
1023
1024     @Test
1025     public void testReplyMsgWithTwoEros() throws IOException, PCEPDeserializerException {
1026         // Success Reply with two EROs: the first one is followed by Bandwidth Object and one Metric Object
1027
1028         final PCEPReplyMessageParser parser = new PCEPReplyMessageParser(this.objectRegistry);
1029
1030         final PcrepMessageBuilder builder = new PcrepMessageBuilder();
1031
1032         final List<Replies> replies = new ArrayList<>();
1033
1034         final BandwidthBuilder bwBuilder = new BandwidthBuilder();
1035         bwBuilder.setIgnore(false);
1036         bwBuilder.setProcessingRule(false);
1037         bwBuilder.setBandwidth(new Bandwidth(new byte[] { (byte) 0x47, (byte) 0x74, (byte) 0x24, (byte) 0x00 }));
1038
1039         RepliesBuilder repliesBuilder = new RepliesBuilder();
1040         repliesBuilder = new RepliesBuilder();
1041         repliesBuilder.setRp(this.rpTrue);
1042         final List<Paths> paths = new ArrayList<>();
1043         final PathsBuilder paBuilder1 = new PathsBuilder();
1044         paBuilder1.setEro(this.ero);
1045         paBuilder1.setBandwidth(bwBuilder.build());
1046         paBuilder1.setMetrics(Lists.newArrayList(this.metrics));
1047         paths.add(paBuilder1.build());
1048         final PathsBuilder paBuilder2 = new PathsBuilder();
1049         paBuilder2.setEro(this.ero);
1050         paths.add(paBuilder2.build());
1051         repliesBuilder.setResult(new SuccessCaseBuilder().setSuccess(new SuccessBuilder().setPaths(paths).build())
1052             .build()).build();
1053         replies.add(repliesBuilder.build());
1054         builder.setReplies(replies);
1055
1056         ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRep.7.bin"));
1057         assertEquals(new PcrepBuilder().setPcrepMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
1058             result.readableBytes() - 4), Collections.emptyList()));
1059         ByteBuf buf = Unpooled.buffer(result.readableBytes());
1060         parser.serializeMessage(new PcrepBuilder().setPcrepMessage(builder.build()).build(), buf);
1061         assertArrayEquals(result.array(), buf.array());
1062     }
1063 }