2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.protocol.pcep.ietf;
10 import static org.junit.Assert.assertArrayEquals;
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertFalse;
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.Collections;
20 import java.util.List;
21 import org.junit.Before;
22 import org.junit.Test;
23 import org.opendaylight.protocol.pcep.PCEPDeserializerException;
24 import org.opendaylight.protocol.pcep.ietf.initiated.InitiatedActivator;
25 import org.opendaylight.protocol.pcep.ietf.initiated.InitiatedPCInitiateMessageParser;
26 import org.opendaylight.protocol.pcep.ietf.stateful.StatefulActivator;
27 import org.opendaylight.protocol.pcep.ietf.stateful.StatefulErrorMessageParser;
28 import org.opendaylight.protocol.pcep.ietf.stateful.StatefulPCReportMessageParser;
29 import org.opendaylight.protocol.pcep.ietf.stateful.StatefulPCRequestMessageParser;
30 import org.opendaylight.protocol.pcep.ietf.stateful.StatefulPCUpdateRequestMessageParser;
31 import org.opendaylight.protocol.pcep.parser.BaseParserExtensionActivator;
32 import org.opendaylight.protocol.pcep.parser.message.PCEPOpenMessageParser;
33 import org.opendaylight.protocol.pcep.spi.pojo.SimplePCEPExtensionProviderContext;
34 import org.opendaylight.protocol.pcep.sync.optimizations.SyncOptimizationsActivator;
35 import org.opendaylight.protocol.util.ByteArray;
36 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ieee754.rev130819.Float32;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.network.concepts.rev131125.Bandwidth;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.initiated.rev200720.Lsp1Builder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.initiated.rev200720.PcinitiateBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.initiated.rev200720.Srp1Builder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.initiated.rev200720.pcinitiate.message.PcinitiateMessageBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.initiated.rev200720.pcinitiate.message.pcinitiate.message.RequestsBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.OperationalStatus;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.P2p1Builder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.PcrptBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.PcupdBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.PlspId;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.SrpIdNumber;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.Tlvs1Builder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.lsp.identifiers.tlv.LspIdentifiersBuilder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.lsp.identifiers.tlv.lsp.identifiers.address.family.Ipv4CaseBuilder;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.lsp.object.Lsp;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.lsp.object.LspBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.lsp.object.lsp.TlvsBuilder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.pcerr.pcerr.message.error.type.StatefulCaseBuilder;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.pcerr.pcerr.message.error.type.stateful._case.stateful.Srps;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.pcerr.pcerr.message.error.type.stateful._case.stateful.SrpsBuilder;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.pcrpt.message.PcrptMessageBuilder;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.pcrpt.message.pcrpt.message.Reports;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.pcrpt.message.pcrpt.message.ReportsBuilder;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.pcupd.message.PcupdMessageBuilder;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.pcupd.message.pcupd.message.UpdatesBuilder;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.pcupd.message.pcupd.message.updates.PathBuilder;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.srp.object.Srp;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.srp.object.SrpBuilder;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720.stateful.capability.tlv.StatefulBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev181109.OpenBuilder;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev181109.PcerrBuilder;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev181109.Pcreq;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev181109.PcreqBuilder;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.Message;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.ProtocolVersion;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.RequestId;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.endpoints.address.family.ipv4._case.Ipv4Builder;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.explicit.route.object.Ero;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.explicit.route.object.EroBuilder;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.include.route.object.Iro;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.include.route.object.IroBuilder;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.include.route.object.iro.Subobject;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.include.route.object.iro.SubobjectBuilder;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.lsp.attributes.Metrics;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.lsp.attributes.MetricsBuilder;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.lspa.object.Lspa;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.lspa.object.LspaBuilder;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.metric.object.MetricBuilder;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.message.OpenMessageBuilder;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcep.error.object.ErrorObject;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcep.error.object.ErrorObjectBuilder;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.PcerrMessageBuilder;
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.pcerr.message.Errors;
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.pcerr.message.ErrorsBuilder;
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.pcerr.message.error.type.RequestCaseBuilder;
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.pcerr.message.error.type.SessionCaseBuilder;
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.pcerr.message.error.type.request._case.RequestBuilder;
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.pcerr.message.error.type.session._case.SessionBuilder;
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message.PcreqMessageBuilder;
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message.pcreq.message.requests.SegmentComputationBuilder;
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcreq.message.pcreq.message.requests.segment.computation.P2pBuilder;
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.reported.route.object.Rro;
101 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.reported.route.object.RroBuilder;
102 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.rp.object.Rp;
103 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.rp.object.RpBuilder;
104 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.AttributeFilter;
105 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.Ipv4ExtendedTunnelId;
106 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.LspId;
107 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.TunnelId;
108 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820._record.route.subobjects.subobject.type.UnnumberedCase;
109 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820._record.route.subobjects.subobject.type.UnnumberedCaseBuilder;
110 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820._record.route.subobjects.subobject.type.unnumbered._case.UnnumberedBuilder;
111 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.AsNumberCase;
112 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.AsNumberCaseBuilder;
113 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.as.number._case.AsNumberBuilder;
114 import org.opendaylight.yangtools.yang.common.Uint16;
115 import org.opendaylight.yangtools.yang.common.Uint32;
116 import org.opendaylight.yangtools.yang.common.Uint8;
118 public class PCEPValidatorTest {
121 private Metrics metrics;
128 private org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.bandwidth.object
129 .Bandwidth bandwidth;
130 private org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.reoptimization
131 .bandwidth.object.ReoptimizationBandwidth reoptimizationBandwidth;
133 private AsNumberCase eroASSubobject;
134 private UnnumberedCase rroUnnumberedSub;
136 private SimplePCEPExtensionProviderContext ctx;
137 private BaseParserExtensionActivator act;
139 private static final byte[] PCRT1 = {
140 (byte) 0x20, (byte) 0x0A, (byte) 0x00, (byte) 0x20,
142 (byte) 0x20, (byte) 0x10, (byte) 0x00, (byte) 0x1C,
143 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, //Skip
144 (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x10, //TLV Type + TLV Length
145 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x01, //TLV 127.0.1.1
146 (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x01, //TLV LSP Id + Tunnel id
147 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x02, //TLV Ipv4ExtendedTunnelId 127.0.1.2
148 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x03, //TLV TunnelEndpointAddress 127.0.1.3
151 private static final byte[] PCRT2 = {
152 (byte) 0x20, (byte) 0x0A, (byte) 0x00, (byte) 0x3C,
154 (byte) 0x20, (byte) 0x10, (byte) 0x00, (byte) 0x1C, //(byte) 0x39,
155 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, //Skip
156 (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x10, //TLV Type + TLV Length
157 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x01, //TLV 127.0.1.1
158 (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x01, //TLV LSP Id + Tunnel id
159 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x02, //TLV Ipv4ExtendedTunnelId 127.0.1.2
160 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x03, //TLV TunnelEndpointAddress 127.0.1.3
162 (byte) 0x07, (byte) 0x10, (byte) 0x00, (byte) 0x08,
163 (byte) 0x20, (byte) 0x04, (byte) 0xFF, (byte) 0xFF,
164 (byte) 0x09, (byte) 0x10, (byte) 0x00, (byte) 0x14,
165 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
166 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
167 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
168 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00
171 private static final byte[] PCRT3 = {
172 (byte) 0x20, (byte) 0x0A, (byte) 0x00, (byte) 0x4C,
174 (byte) 0x20, (byte) 0x10, (byte) 0x00, (byte) 0x1C, //(byte) 0x39,
175 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, //Skip
176 (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x10, //TLV Type + TLV Length
177 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x01, //TLV 127.0.1.1
178 (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x01, //TLV LSP Id + Tunnel id
179 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x02, //TLV Ipv4ExtendedTunnelId 127.0.1.2
180 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x03, //TLV TunnelEndpointAddress 127.0.1.3
182 (byte) 0x07, (byte) 0x10, (byte) 0x00, (byte) 0x08,
183 (byte) 0x20, (byte) 0x04, (byte) 0xFF, (byte) 0xFF,
184 (byte) 0x09, (byte) 0x10, (byte) 0x00, (byte) 0x14,
185 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
186 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
187 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
188 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
190 (byte) 0x05, (byte) 0x10, (byte) 0x00, (byte) 0x08,
191 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
192 (byte) 0x05, (byte) 0x20, (byte) 0x00, (byte) 0x08,
193 (byte) 0x47, (byte) 0x74, (byte) 0x24, (byte) 0x00
197 public void setUp() {
198 ctx = new SimplePCEPExtensionProviderContext();
199 act = new BaseParserExtensionActivator();
202 lspa = new LspaBuilder()
203 .setProcessingRule(false)
205 .setLocalProtectionDesired(false)
206 .setHoldPriority(Uint8.ZERO)
207 .setSetupPriority(Uint8.ZERO)
208 .setExcludeAny(new AttributeFilter(Uint32.ZERO))
209 .setIncludeAll(new AttributeFilter(Uint32.ZERO))
210 .setIncludeAny(new AttributeFilter(Uint32.ZERO))
211 .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109
212 .lspa.object.lspa.TlvsBuilder().build())
215 metrics = new MetricsBuilder()
216 .setMetric(new MetricBuilder()
218 .setProcessingRule(false)
221 .setMetricType(Uint8.ONE)
222 .setValue(new Float32(new byte[4])).build())
225 eroASSubobject = new AsNumberCaseBuilder().setAsNumber(new AsNumberBuilder().setAsNumber(
226 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.AsNumber(
227 Uint32.valueOf(0xFFFF)))
230 rroUnnumberedSub = new UnnumberedCaseBuilder()
231 .setUnnumbered(new UnnumberedBuilder()
232 .setRouterId(Uint32.valueOf(0x00112233L))
233 .setInterfaceId(Uint32.valueOf(0x00ff00ffL))
237 final IroBuilder iroBuilder = new IroBuilder()
239 .setProcessingRule(false);
240 final List<Subobject> iroSubs = new ArrayList<>();
241 iroSubs.add(new SubobjectBuilder().setSubobjectType(eroASSubobject).setLoose(false).build());
242 iroBuilder.setSubobject(iroSubs);
243 iro = iroBuilder.build();
245 final EroBuilder eroBuilder = new EroBuilder();
246 eroBuilder.setIgnore(false);
247 eroBuilder.setProcessingRule(false);
248 final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.explicit.route
249 .object.ero.Subobject> eroSubs = new ArrayList<>();
250 eroSubs.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.explicit
251 .route.object.ero.SubobjectBuilder().setSubobjectType(eroASSubobject).setLoose(false).build());
252 eroBuilder.setSubobject(eroSubs);
253 ero = eroBuilder.build();
255 final RroBuilder rroBuilder = new RroBuilder();
256 rroBuilder.setIgnore(false);
257 rroBuilder.setProcessingRule(false);
258 final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.reported.route
259 .object.rro.Subobject> rroSubs = new ArrayList<>();
260 rroSubs.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.reported
261 .route.object.rro.SubobjectBuilder().setSubobjectType(rroUnnumberedSub).setProtectionAvailable(false)
262 .setProtectionInUse(false).build());
263 rroBuilder.setSubobject(rroSubs);
264 rro = rroBuilder.build();
266 srp = new SrpBuilder()
268 .setProcessingRule(false)
269 .setOperationId(new SrpIdNumber(Uint32.ONE))
270 .addAugmentation(new Srp1Builder().setRemove(false).build())
271 .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful
272 .rev200720.srp.object.srp.TlvsBuilder().build())
275 final LspBuilder lspBuilder = new LspBuilder()
277 .setProcessingRule(false)
278 .setAdministrative(false)
280 .setPlspId(new PlspId(Uint32.ZERO))
281 .setOperational(OperationalStatus.Down)
284 .setTlvs(new TlvsBuilder().build())
285 .addAugmentation(new Lsp1Builder().setCreate(false).build());
287 lspSrp = lspBuilder.build();
288 lsp = lspBuilder.setTlvs(new TlvsBuilder()
289 .setLspIdentifiers(new LspIdentifiersBuilder()
290 .setAddressFamily(new Ipv4CaseBuilder()
291 .setIpv4(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful
292 .rev200720.lsp.identifiers.tlv.lsp.identifiers.address.family.ipv4._case.Ipv4Builder()
293 .setIpv4TunnelSenderAddress(new Ipv4AddressNoZone("127.0.1.1"))
294 .setIpv4ExtendedTunnelId(new Ipv4ExtendedTunnelId(new Ipv4AddressNoZone("127.0.1.2")))
295 .setIpv4TunnelEndpointAddress(new Ipv4AddressNoZone("127.0.1.3"))
298 .setLspId(new LspId(Uint32.ONE))
299 .setTunnelId(new TunnelId(Uint16.ONE))
304 final Ipv4Builder afi = new Ipv4Builder()
305 .setSourceIpv4Address(new Ipv4AddressNoZone("255.255.255.255"))
306 .setDestinationIpv4Address(new Ipv4AddressNoZone("255.255.255.255"));
308 bandwidth = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109
309 .bandwidth.object.BandwidthBuilder()
311 .setProcessingRule(false)
312 .setBandwidth(new Bandwidth(new byte[] { (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 }))
315 reoptimizationBandwidth = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types
316 .rev181109.reoptimization.bandwidth.object.ReoptimizationBandwidthBuilder()
318 .setProcessingRule(false)
319 .setBandwidth(new Bandwidth(new byte[] { (byte) 0x47, (byte) 0x74, (byte) 0x24, (byte) 0x00 }))
324 public void testOpenMsg() throws IOException, PCEPDeserializerException {
325 new StatefulActivator().start(ctx);
327 final ByteBuf result = Unpooled.wrappedBuffer(
328 ByteArray.fileToBytes("src/test/resources/PCEPOpenMessage1.bin"));
329 final PCEPOpenMessageParser parser = new PCEPOpenMessageParser(ctx.getObjectHandlerRegistry());
330 final OpenMessageBuilder builder = new OpenMessageBuilder()
331 .setOpen(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open
332 .object.OpenBuilder()
333 .setProcessingRule(false)
335 .setVersion(new ProtocolVersion(Uint8.ONE))
336 .setKeepalive(Uint8.valueOf(30))
337 .setDeadTimer(Uint8.valueOf(120))
338 .setSessionId(Uint8.ONE)
339 .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109
340 .open.object.open.TlvsBuilder()
341 .addAugmentation(new Tlvs1Builder()
342 .setStateful(new StatefulBuilder().setLspUpdateCapability(Boolean.TRUE).build())
347 assertEquals(new OpenBuilder().setOpenMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
348 result.readableBytes() - 4), List.of()));
349 final ByteBuf buf = Unpooled.buffer(result.readableBytes());
350 parser.serializeMessage(new OpenBuilder().setOpenMessage(builder.build()).build(), buf);
351 assertArrayEquals(result.array(), buf.array());
355 public void testSyncOptActivator() {
356 new SyncOptimizationsActivator().start(ctx);
360 public void testReqMesgWithLSP() throws IOException, PCEPDeserializerException {
361 // Test PcRequest message with an LSP Object as per RFC8231
362 new StatefulActivator().start(ctx);
364 final Rp rp = new RpBuilder()
365 .setProcessingRule(true)
367 .setReoptimization(false)
368 .setBiDirectional(false)
370 .setMakeBeforeBreak(false)
374 .setFragmentation(false)
376 .setEroCompression(false)
377 .setPriority(Uint8.ONE)
378 .setRequestId(new RequestId(Uint32.TEN))
379 .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109
380 .rp.object.rp.TlvsBuilder().build())
383 final Lsp lspReq = new LspBuilder()
385 .setProcessingRule(false)
386 .setAdministrative(false)
388 .setPlspId(new PlspId(Uint32.ZERO))
389 .setOperational(OperationalStatus.Down)
392 .setTlvs(new TlvsBuilder().build())
395 final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109
396 .endpoints.object.EndpointsObjBuilder epBuilder =
397 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109
398 .endpoints.object.EndpointsObjBuilder()
400 .setProcessingRule(true)
402 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109
403 .endpoints.address.family.Ipv4CaseBuilder()
405 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109
406 .endpoints.address.family.ipv4._case.Ipv4Builder()
407 .setSourceIpv4Address(new Ipv4AddressNoZone("255.255.255.255"))
408 .setDestinationIpv4Address(new Ipv4AddressNoZone("255.255.255.255"))
412 final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109
413 .pcreq.message.pcreq.message.RequestsBuilder rBuilder =
414 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109
415 .pcreq.message.pcreq.message.RequestsBuilder()
417 .setSegmentComputation(new SegmentComputationBuilder().setP2p(new P2pBuilder()
418 .setEndpointsObj(epBuilder.build()).addAugmentation(new P2p1Builder().setLsp(lspReq).build())
421 final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109
422 .pcreq.message.pcreq.message.Requests> reqs = new ArrayList<>();
423 reqs.add(rBuilder.build());
425 final Pcreq pcReq = new PcreqBuilder()
426 .setPcreqMessage(new PcreqMessageBuilder().setRequests(reqs).build())
429 final StatefulPCRequestMessageParser parser = new StatefulPCRequestMessageParser(
430 ctx.getObjectHandlerRegistry());
431 ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCReq.1.bin"));
432 assertEquals(pcReq, parser.parseMessage(result.slice(4, result.readableBytes() - 4), Collections.emptyList()));
434 ByteBuf buf = Unpooled.buffer(result.readableBytes());
435 parser.serializeMessage(pcReq, buf);
436 assertArrayEquals(result.array(), buf.array());
440 public void testUpdMsg() throws IOException, PCEPDeserializerException {
441 new InitiatedActivator().start(ctx);
442 final StatefulPCUpdateRequestMessageParser parser = new StatefulPCUpdateRequestMessageParser(
443 ctx.getObjectHandlerRegistry());
445 final PathBuilder pBuilder = new PathBuilder()
448 final PcupdMessageBuilder builder = new PcupdMessageBuilder()
450 new UpdatesBuilder().setSrp(srp).setLsp(lspSrp).setPath(pBuilder.build()).build()));
452 ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCUpd.2.bin"));
453 assertEquals(new PcupdBuilder().setPcupdMessage(builder.build()).build(),
454 parser.parseMessage(result.slice(4, result.readableBytes() - 4), List.of()));
455 ByteBuf buf = Unpooled.buffer(result.readableBytes());
456 parser.serializeMessage(new PcupdBuilder().setPcupdMessage(builder.build()).build(), buf);
457 assertArrayEquals(result.array(), buf.array());
459 builder.setUpdates(List.of(
460 new UpdatesBuilder().setSrp(srp).setLsp(lspSrp).setPath(pBuilder.build()).build(),
461 new UpdatesBuilder().setSrp(srp).setLsp(lspSrp).setPath(new PathBuilder()
467 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCUpd.5.bin"));
468 assertEquals(new PcupdBuilder().setPcupdMessage(builder.build()).build(),
469 parser.parseMessage(result.slice(4, result.readableBytes() - 4), List.of()));
470 buf = Unpooled.buffer(result.readableBytes());
471 parser.serializeMessage(new PcupdBuilder().setPcupdMessage(builder.build()).build(), buf);
472 assertArrayEquals(result.array(), buf.array());
476 public void testRptMsg() throws IOException, PCEPDeserializerException {
477 new InitiatedActivator().start(ctx);
478 new StatefulActivator().start(ctx);
479 ByteBuf result = Unpooled.wrappedBuffer(PCRT1);
481 final StatefulPCReportMessageParser parser = new StatefulPCReportMessageParser(
482 ctx.getObjectHandlerRegistry());
484 final PcrptMessageBuilder builder = new PcrptMessageBuilder();
486 final List<Reports> reports = new ArrayList<>();
487 reports.add(new ReportsBuilder().setLsp(lsp).build());
488 builder.setReports(reports);
489 final Message parseResult = parser.parseMessage(result.slice(4, result.readableBytes() - 4),
491 assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parseResult);
492 ByteBuf buf = Unpooled.buffer(result.readableBytes());
493 parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
494 assertArrayEquals(result.array(), buf.array());
496 result = Unpooled.wrappedBuffer(PCRT2);
498 builder.setReports(List.of(new ReportsBuilder()
500 .setPath(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev200720
501 .pcrpt.message.pcrpt.message.reports.PathBuilder()
507 final ByteBuf input = result.slice(4, result.readableBytes() - 4);
508 assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(),
509 parser.parseMessage(input, List.of()));
510 buf = Unpooled.buffer(result.readableBytes());
511 parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
512 assertArrayEquals(result.array(), buf.array());
514 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRpt.3.bin"));
516 final List<Reports> reports2 = new ArrayList<>();
517 final var pBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful
518 .rev200720.pcrpt.message.pcrpt.message.reports.PathBuilder();
519 pBuilder.setEro(ero);
520 pBuilder.setLspa(lspa);
521 pBuilder.setMetrics(Lists.newArrayList(metrics, metrics));
522 pBuilder.setRro(rro);
523 reports2.add(new ReportsBuilder().setSrp(srp).setLsp(lspSrp).setPath(pBuilder.build()).build());
524 builder.setReports(reports2);
526 assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(),
527 parser.parseMessage(result.slice(4, result.readableBytes() - 4), List.of()));
528 buf = Unpooled.buffer(result.readableBytes());
529 parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
530 assertArrayEquals(result.array(), buf.array());
532 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRpt.4.bin"));
534 assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(),
535 parser.parseMessage(result.slice(4, result.readableBytes() - 4), List.of()));
537 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRpt.5.bin"));
539 final List<Reports> reports3 = new ArrayList<>();
540 final var pBuilder1 = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful
541 .rev200720.pcrpt.message.pcrpt.message.reports.PathBuilder();
542 pBuilder1.setEro(ero);
543 pBuilder1.setLspa(lspa);
544 pBuilder1.setMetrics(Lists.newArrayList(metrics, metrics));
545 pBuilder1.setRro(rro);
546 reports3.add(new ReportsBuilder().setSrp(srp).setLsp(lspSrp).setPath(pBuilder.build()).build());
547 reports3.add(new ReportsBuilder().setSrp(srp).setLsp(lspSrp).setPath(pBuilder1.build()).build());
548 builder.setReports(reports3);
550 assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(),
551 parser.parseMessage(result.slice(4, result.readableBytes() - 4), List.of()));
552 buf = Unpooled.buffer(result.readableBytes());
553 parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
554 assertArrayEquals(result.array(), buf.array());
556 result = Unpooled.wrappedBuffer(PCRT3);
558 final List<Reports> reports4 = new ArrayList<>();
559 reports4.add(new ReportsBuilder().setLsp(lsp).setPath(new org.opendaylight.yang.gen.v1.urn.opendaylight
560 .params.xml.ns.yang.pcep.ietf.stateful.rev200720.pcrpt.message.pcrpt.message.reports.PathBuilder()
561 .setEro(ero).setLspa(lspa).setBandwidth(bandwidth)
562 .setReoptimizationBandwidth(reoptimizationBandwidth).build()).build());
563 builder.setReports(reports4);
565 final ByteBuf input2 = result.slice(4, result.readableBytes() - 4);
566 assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(),
567 parser.parseMessage(input2, List.of()));
568 buf = Unpooled.buffer(result.readableBytes());
569 parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
570 assertArrayEquals(result.array(), buf.array());
574 public void testPcinitMsg() throws IOException, PCEPDeserializerException {
575 new InitiatedActivator().start(ctx);
577 final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/Pcinit.bin"));
579 final InitiatedPCInitiateMessageParser parser = new InitiatedPCInitiateMessageParser(
580 ctx.getObjectHandlerRegistry());
582 final PcinitiateMessageBuilder builder = new PcinitiateMessageBuilder()
583 .setRequests(List.of(new RequestsBuilder()
588 .setMetrics(List.of(metrics))
592 assertEquals(new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build(),
593 parser.parseMessage(result.slice(4,result.readableBytes() - 4), List.of()));
594 final ByteBuf buf = Unpooled.buffer(result.readableBytes());
595 parser.serializeMessage(new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build(), buf);
596 assertArrayEquals(result.array(), buf.array());
600 public void testErrorMsg() throws IOException, PCEPDeserializerException {
601 new StatefulActivator().start(ctx);
603 final StatefulErrorMessageParser parser = new StatefulErrorMessageParser(
604 ctx.getObjectHandlerRegistry());
606 ErrorObject error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false)
607 .setType(Uint8.valueOf(19)).setValue(Uint8.ONE).build();
609 List<Errors> innerErr = new ArrayList<>();
610 innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
612 PcerrMessageBuilder builder = new PcerrMessageBuilder();
613 builder.setErrors(innerErr);
614 final List<Srps> srps = new ArrayList<>();
615 srps.add(new SrpsBuilder()
616 .setSrp(new SrpBuilder()
617 .setOperationId(new SrpIdNumber(Uint32.valueOf(3)))
619 .setProcessingRule(false)
620 .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful
621 .rev200720.srp.object.srp.TlvsBuilder().build())
624 builder.setErrorType(new StatefulCaseBuilder().setStateful(new org.opendaylight.yang.gen.v1.urn.opendaylight
625 .params.xml.ns.yang.pcep.ietf.stateful.rev200720.pcerr.pcerr.message.error.type.stateful._case
626 .StatefulBuilder().setSrps(srps).build()).build());
628 ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.1.bin"));
629 assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(),
630 parser.parseMessage(result.slice(4, result.readableBytes() - 4), List.of()));
631 ByteBuf buf = Unpooled.buffer(result.readableBytes());
632 parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf);
633 assertArrayEquals(result.array(), buf.array());
635 error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false).setType(Uint8.valueOf(3))
636 .setValue(Uint8.ONE).build();
638 innerErr = new ArrayList<>();
639 builder = new PcerrMessageBuilder();
641 final RpBuilder rpBuilder = new RpBuilder()
642 .setProcessingRule(true)
644 .setReoptimization(false)
645 .setBiDirectional(false)
647 .setMakeBeforeBreak(false)
651 .setFragmentation(false)
653 .setEroCompression(false)
654 .setPriority(Uint8.ONE)
655 .setRequestId(new RequestId(Uint32.TEN))
656 .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109
657 .rp.object.rp.TlvsBuilder().build())
658 .setProcessingRule(false);
659 final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message
660 .pcerr.message.error.type.request._case.request.Rps> rps = new ArrayList<>();
661 rps.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message
662 .pcerr.message.error.type.request._case.request.RpsBuilder().setRp(rpBuilder.build()).build());
664 innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
666 builder.setErrors(innerErr);
667 builder.setErrorType(new RequestCaseBuilder().setRequest(new RequestBuilder().setRps(rps).build()).build());
669 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.5.bin"));
670 assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(),
671 parser.parseMessage(result.slice(4, result.readableBytes() - 4), List.of()));
672 buf = Unpooled.buffer(result.readableBytes());
673 parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf);
674 assertArrayEquals(result.array(), buf.array());
676 builder = new PcerrMessageBuilder();
677 error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false).setType(Uint8.valueOf(3))
678 .setValue(Uint8.ONE).build();
680 innerErr = new ArrayList<>();
681 innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
683 builder.setErrors(innerErr);
684 builder.setErrorType(new SessionCaseBuilder().setSession(new SessionBuilder()
685 .setOpen(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open
686 .object.OpenBuilder()
687 .setDeadTimer(Uint8.ONE)
688 .setKeepalive(Uint8.ONE)
689 .setVersion(new ProtocolVersion(Uint8.ONE))
690 .setSessionId(Uint8.ZERO)
692 .setProcessingRule(false)
693 .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types
694 .rev181109.open.object.open.TlvsBuilder().build())
695 .build()).build()).build());
697 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.3.bin"));
698 assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(),
699 parser.parseMessage(result.slice(4,result.readableBytes() - 4), List.of()));
700 buf = Unpooled.buffer(result.readableBytes());
701 parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf);
702 assertArrayEquals(result.array(), buf.array());
706 public void testMissingLspObjectErrorInPcRptMsg() throws PCEPDeserializerException {
707 final byte[] statefulMsg = {
708 (byte) 0x20, (byte) 0x0B, (byte) 0x00, (byte) 0x1C,
710 (byte) 0x21, (byte) 0x10, (byte) 0x00, (byte) 0x0C,
711 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x001,
712 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01,
713 /* lsp-object is missing*/
715 (byte) 0x07, (byte) 0x10, (byte) 0x00, (byte) 0x0C,
716 /* ipv4 prefix subobject */
717 (byte) 0x81, (byte) 0x08, (byte) 0xFF, (byte) 0xFF,
718 (byte) 0xFF, (byte) 0xFF, (byte) 0x16, (byte) 0x00
721 new InitiatedActivator().start(ctx);
722 new StatefulActivator().start(ctx);
724 final StatefulPCReportMessageParser parser = new StatefulPCReportMessageParser(
725 ctx.getObjectHandlerRegistry());
727 final ByteBuf buf = Unpooled.wrappedBuffer(statefulMsg);
728 final List<Message> errors = new ArrayList<>();
729 parser.parseMessage(buf.slice(4, buf.readableBytes() - 4), errors);
730 assertFalse(errors.isEmpty());
731 assertEquals(new PcerrBuilder()
732 .setPcerrMessage(new PcerrMessageBuilder()
733 .setErrors(List.of(new ErrorsBuilder()
734 .setErrorObject(new ErrorObjectBuilder()
735 .setType(Uint8.valueOf(6))
736 .setValue(Uint8.valueOf(8))
740 .build(), errors.get(0));
744 public void testUnexpectedRroObjectInPcUpdMsg() throws PCEPDeserializerException {
745 final byte[] badUpdateMsg = {
746 (byte) 0x20, (byte) 0x0b, (byte) 0x00, (byte) 0x50,
747 /* SRP, LSP and ERO objects */
748 (byte) 0x21, (byte) 0x12, (byte) 0x00, (byte) 0x0c,
749 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
750 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01,
751 (byte) 0x20, (byte) 0x10, (byte) 0x00, (byte) 0x08,
752 (byte) 0x00, (byte) 0x00, (byte) 0x10, (byte) 0x09,
753 (byte) 0x07, (byte) 0x10, (byte) 0x00, (byte) 0x14,
754 (byte) 0x01, (byte) 0x08, (byte) 0x05, (byte) 0x05,
755 (byte) 0x05, (byte) 0x03, (byte) 0x18, (byte) 0x00,
756 (byte) 0x01, (byte) 0x08, (byte) 0x08, (byte) 0x08,
757 (byte) 0x08, (byte) 0x04, (byte) 0x18, (byte) 0x00,
759 (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x24,
760 (byte) 0x01, (byte) 0x08, (byte) 0x0a, (byte) 0x00,
761 (byte) 0x00, (byte) 0x83, (byte) 0x20, (byte) 0x20,
762 (byte) 0x03, (byte) 0x08, (byte) 0x01, (byte) 0x01,
763 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
764 (byte) 0x01, (byte) 0x08, (byte) 0x0a, (byte) 0x00,
765 (byte) 0x09, (byte) 0xde, (byte) 0x20, (byte) 0x00,
766 (byte) 0x03, (byte) 0x08, (byte) 0x01, (byte) 0x01,
767 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00
770 new InitiatedActivator().start(ctx);
772 final StatefulPCUpdateRequestMessageParser parser = new StatefulPCUpdateRequestMessageParser(
773 ctx.getObjectHandlerRegistry());
775 final ByteBuf buf = Unpooled.wrappedBuffer(badUpdateMsg);
776 final List<Message> errors = new ArrayList<>();
777 parser.parseMessage(buf.slice(4, buf.readableBytes() - 4), errors);
778 assertFalse(errors.isEmpty());
779 assertEquals(new PcerrBuilder()
780 .setPcerrMessage(new PcerrMessageBuilder()
781 .setErrors(List.of(new ErrorsBuilder()
782 .setErrorObject(new ErrorObjectBuilder()
783 .setType(Uint8.valueOf(6))
784 .setValue(Uint8.valueOf(10))
788 .build(), errors.get(0));