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.ietf.initiated00.CInitiated00PCInitiateMessageParser;
24 import org.opendaylight.protocol.pcep.ietf.initiated00.CrabbeInitiatedActivator;
25 import org.opendaylight.protocol.pcep.ietf.stateful07.Stateful07ErrorMessageParser;
26 import org.opendaylight.protocol.pcep.ietf.stateful07.Stateful07PCReportMessageParser;
27 import org.opendaylight.protocol.pcep.ietf.stateful07.Stateful07PCUpdateRequestMessageParser;
28 import org.opendaylight.protocol.pcep.ietf.stateful07.StatefulActivator;
29 import org.opendaylight.protocol.pcep.parser.BaseParserExtensionActivator;
30 import org.opendaylight.protocol.pcep.parser.message.PCEPOpenMessageParser;
31 import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
32 import org.opendaylight.protocol.pcep.spi.pojo.SimplePCEPExtensionProviderContext;
33 import org.opendaylight.protocol.pcep.sync.optimizations.SyncOptimizationsActivator;
34 import org.opendaylight.protocol.util.ByteArray;
35 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4AddressNoZone;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ieee754.rev130819.Float32;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.network.concepts.rev131125.Bandwidth;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev181109.Lsp1;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev181109.Lsp1Builder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev181109.PcinitiateBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev181109.Srp1;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev181109.Srp1Builder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev181109.pcinitiate.message.PcinitiateMessageBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev181109.pcinitiate.message.pcinitiate.message.Requests;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev181109.pcinitiate.message.pcinitiate.message.RequestsBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.OperationalStatus;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.PcrptBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.PcupdBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.PlspId;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.SrpIdNumber;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.Tlvs1;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.Tlvs1Builder;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.lsp.identifiers.tlv.LspIdentifiers;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.lsp.identifiers.tlv.LspIdentifiersBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.lsp.identifiers.tlv.lsp.identifiers.AddressFamily;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.lsp.identifiers.tlv.lsp.identifiers.address.family.Ipv4CaseBuilder;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.lsp.object.Lsp;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.lsp.object.LspBuilder;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.lsp.object.lsp.TlvsBuilder;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcerr.pcerr.message.error.type.StatefulCaseBuilder;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcerr.pcerr.message.error.type.stateful._case.stateful.Srps;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcerr.pcerr.message.error.type.stateful._case.stateful.SrpsBuilder;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcrpt.message.PcrptMessageBuilder;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcrpt.message.pcrpt.message.Reports;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcrpt.message.pcrpt.message.ReportsBuilder;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcupd.message.PcupdMessageBuilder;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcupd.message.pcupd.message.Updates;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcupd.message.pcupd.message.UpdatesBuilder;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcupd.message.pcupd.message.updates.PathBuilder;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.srp.object.Srp;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.srp.object.SrpBuilder;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.stateful.capability.tlv.StatefulBuilder;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev181109.OpenBuilder;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev181109.PcerrBuilder;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.Message;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.ProtocolVersion;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.RequestId;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.endpoints.address.family.ipv4._case.Ipv4Builder;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.explicit.route.object.Ero;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.explicit.route.object.EroBuilder;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.include.route.object.Iro;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.include.route.object.IroBuilder;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.include.route.object.iro.Subobject;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.include.route.object.iro.SubobjectBuilder;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.lsp.attributes.Metrics;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.lsp.attributes.MetricsBuilder;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.lspa.object.Lspa;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.lspa.object.LspaBuilder;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.metric.object.MetricBuilder;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.message.OpenMessageBuilder;
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcep.error.object.ErrorObject;
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcep.error.object.ErrorObjectBuilder;
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.PcerrMessageBuilder;
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.pcerr.message.Errors;
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.pcerr.message.ErrorsBuilder;
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.pcerr.message.error.type.RequestCaseBuilder;
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.pcerr.message.error.type.SessionCaseBuilder;
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.pcerr.message.error.type.request._case.RequestBuilder;
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr.message.pcerr.message.error.type.session._case.SessionBuilder;
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.RpBuilder;
103 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.AttributeFilter;
104 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.Ipv4ExtendedTunnelId;
105 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.LspId;
106 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.TunnelId;
107 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.AsNumberCase;
108 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.AsNumberCaseBuilder;
109 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.as.number._case.AsNumberBuilder;
110 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.record.route.subobjects.subobject.type.UnnumberedCase;
111 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.record.route.subobjects.subobject.type.UnnumberedCaseBuilder;
112 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.record.route.subobjects.subobject.type.unnumbered._case.UnnumberedBuilder;
114 public class PCEPValidatorTest {
117 private Metrics metrics;
124 private org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.bandwidth.object
125 .Bandwidth bandwidth;
126 private org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.reoptimization
127 .bandwidth.object.ReoptimizationBandwidth reoptimizationBandwidth;
129 private AsNumberCase eroASSubobject;
130 private UnnumberedCase rroUnnumberedSub;
132 private SimplePCEPExtensionProviderContext ctx;
133 private BaseParserExtensionActivator act;
135 private static final byte[] PCRT1 = {
136 (byte) 0x20, (byte) 0x0A, (byte) 0x00, (byte) 0x20,
138 (byte) 0x20, (byte) 0x10, (byte) 0x00, (byte) 0x1C,
139 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, //Skip
140 (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x10, //TLV Type + TLV Length
141 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x01, //TLV 127.0.1.1
142 (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x01, //TLV LSP Id + Tunnel id
143 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x02, //TLV Ipv4ExtendedTunnelId 127.0.1.2
144 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x03, //TLV TunnelEndpointAddress 127.0.1.3
147 private static final byte[] PCRT2 = {
148 (byte) 0x20, (byte) 0x0A, (byte) 0x00, (byte) 0x3C,
150 (byte) 0x20, (byte) 0x10, (byte) 0x00, (byte) 0x1C, //(byte) 0x39,
151 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, //Skip
152 (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x10, //TLV Type + TLV Length
153 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x01, //TLV 127.0.1.1
154 (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x01, //TLV LSP Id + Tunnel id
155 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x02, //TLV Ipv4ExtendedTunnelId 127.0.1.2
156 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x03, //TLV TunnelEndpointAddress 127.0.1.3
158 (byte) 0x07, (byte) 0x10, (byte) 0x00, (byte) 0x08,
159 (byte) 0x20, (byte) 0x04, (byte) 0xFF, (byte) 0xFF,
160 (byte) 0x09, (byte) 0x10, (byte) 0x00, (byte) 0x14,
161 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
162 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
163 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
164 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00
167 private static final byte[] PCRT3 = {
168 (byte) 0x20, (byte) 0x0A, (byte) 0x00, (byte) 0x4C,
170 (byte) 0x20, (byte) 0x10, (byte) 0x00, (byte) 0x1C, //(byte) 0x39,
171 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, //Skip
172 (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x10, //TLV Type + TLV Length
173 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x01, //TLV 127.0.1.1
174 (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x01, //TLV LSP Id + Tunnel id
175 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x02, //TLV Ipv4ExtendedTunnelId 127.0.1.2
176 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x03, //TLV TunnelEndpointAddress 127.0.1.3
178 (byte) 0x07, (byte) 0x10, (byte) 0x00, (byte) 0x08,
179 (byte) 0x20, (byte) 0x04, (byte) 0xFF, (byte) 0xFF,
180 (byte) 0x09, (byte) 0x10, (byte) 0x00, (byte) 0x14,
181 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
182 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
183 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
184 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
186 (byte) 0x05, (byte) 0x10, (byte) 0x00, (byte) 0x08,
187 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
188 (byte) 0x05, (byte) 0x20, (byte) 0x00, (byte) 0x08,
189 (byte) 0x47, (byte) 0x74, (byte) 0x24, (byte) 0x00
193 public void setUp() {
194 this.ctx = new SimplePCEPExtensionProviderContext();
195 this.act = new BaseParserExtensionActivator();
196 this.act.start(this.ctx);
198 final LspaBuilder lspaBuilder = new LspaBuilder();
199 lspaBuilder.setProcessingRule(false);
200 lspaBuilder.setIgnore(false);
201 lspaBuilder.setLocalProtectionDesired(false);
202 lspaBuilder.setHoldPriority((short) 0);
203 lspaBuilder.setSetupPriority((short) 0);
204 lspaBuilder.setExcludeAny(new AttributeFilter(0L));
205 lspaBuilder.setIncludeAll(new AttributeFilter(0L));
206 lspaBuilder.setIncludeAny(new AttributeFilter(0L));
207 lspaBuilder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109
208 .lspa.object.lspa.TlvsBuilder().build());
209 this.lspa = lspaBuilder.build();
211 final MetricBuilder mBuilder = new MetricBuilder();
212 mBuilder.setIgnore(false);
213 mBuilder.setProcessingRule(false);
214 mBuilder.setComputed(false);
215 mBuilder.setBound(false);
216 mBuilder.setMetricType((short) 1);
217 mBuilder.setValue(new Float32(new byte[4]));
218 this.metrics = new MetricsBuilder().setMetric(mBuilder.build()).build();
220 this.eroASSubobject = new AsNumberCaseBuilder().setAsNumber(new AsNumberBuilder().setAsNumber(
221 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.AsNumber(0xFFFFL))
224 this.rroUnnumberedSub = new UnnumberedCaseBuilder().setUnnumbered(
225 new UnnumberedBuilder().setRouterId(0x00112233L).setInterfaceId(0x00ff00ffL).build()).build();
227 final IroBuilder iroBuilder = new IroBuilder();
228 iroBuilder.setIgnore(false);
229 iroBuilder.setProcessingRule(false);
230 final List<Subobject> iroSubs = new ArrayList<>();
231 iroSubs.add(new SubobjectBuilder().setSubobjectType(this.eroASSubobject).setLoose(false).build());
232 iroBuilder.setSubobject(iroSubs);
233 this.iro = iroBuilder.build();
235 final EroBuilder eroBuilder = new EroBuilder();
236 eroBuilder.setIgnore(false);
237 eroBuilder.setProcessingRule(false);
238 final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.explicit.route
239 .object.ero.Subobject> eroSubs = new ArrayList<>();
240 eroSubs.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.explicit
241 .route.object.ero.SubobjectBuilder().setSubobjectType(this.eroASSubobject).setLoose(false).build());
242 eroBuilder.setSubobject(eroSubs);
243 this.ero = eroBuilder.build();
245 final RroBuilder rroBuilder = new RroBuilder();
246 rroBuilder.setIgnore(false);
247 rroBuilder.setProcessingRule(false);
248 final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.reported.route
249 .object.rro.Subobject> rroSubs = new ArrayList<>();
250 rroSubs.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.reported
251 .route.object.rro.SubobjectBuilder().setSubobjectType(this.rroUnnumberedSub).setProtectionAvailable(false)
252 .setProtectionInUse(false).build());
253 rroBuilder.setSubobject(rroSubs);
254 this.rro = rroBuilder.build();
256 final SrpBuilder srpBuilder = new SrpBuilder();
257 srpBuilder.setIgnore(false);
258 srpBuilder.setProcessingRule(false);
259 srpBuilder.setOperationId(new SrpIdNumber(1L));
260 srpBuilder.addAugmentation(Srp1.class, new Srp1Builder().setRemove(false).build());
261 srpBuilder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful
262 .rev181109.srp.object.srp.TlvsBuilder().build());
263 this.srp = srpBuilder.build();
265 final LspBuilder lspBuilder = new LspBuilder();
266 lspBuilder.setIgnore(false);
267 lspBuilder.setProcessingRule(false);
268 lspBuilder.setAdministrative(false);
269 lspBuilder.setDelegate(false);
270 lspBuilder.setPlspId(new PlspId(0L));
271 lspBuilder.setOperational(OperationalStatus.Down);
272 lspBuilder.setSync(false);
273 lspBuilder.setRemove(false);
274 lspBuilder.setTlvs(new TlvsBuilder().build());
275 lspBuilder.addAugmentation(Lsp1.class, new Lsp1Builder().setCreate(false).build());
277 final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.lsp
278 .identifiers.tlv.lsp.identifiers.address.family.ipv4._case.Ipv4Builder builder =
279 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.lsp
280 .identifiers.tlv.lsp.identifiers.address.family.ipv4._case.Ipv4Builder();
281 builder.setIpv4TunnelSenderAddress(new Ipv4AddressNoZone("127.0.1.1"));
282 final LspId lspId = new LspId(1L);
283 final TunnelId tunnelId = new TunnelId(1);
284 builder.setIpv4ExtendedTunnelId(new Ipv4ExtendedTunnelId(new Ipv4AddressNoZone("127.0.1.2")));
285 builder.setIpv4TunnelEndpointAddress(new Ipv4AddressNoZone("127.0.1.3"));
286 final AddressFamily afiLsp = new Ipv4CaseBuilder().setIpv4(builder.build()).build();
287 final LspIdentifiers identifier = new LspIdentifiersBuilder().setAddressFamily(afiLsp).setLspId(lspId)
288 .setTunnelId(tunnelId).build();
289 this.lspSrp = lspBuilder.build();
290 this.lsp = lspBuilder.setTlvs(new TlvsBuilder().setLspIdentifiers(identifier).build()).build();
292 final Ipv4Builder afi = new Ipv4Builder();
293 afi.setSourceIpv4Address(new Ipv4AddressNoZone("255.255.255.255"));
294 afi.setDestinationIpv4Address(new Ipv4AddressNoZone("255.255.255.255"));
296 final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.bandwidth.object
297 .BandwidthBuilder bandwidthBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang
298 .pcep.types.rev181109.bandwidth.object.BandwidthBuilder();
299 bandwidthBuilder.setIgnore(false);
300 bandwidthBuilder.setProcessingRule(false);
301 bandwidthBuilder.setBandwidth(new Bandwidth(new byte[] { (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 }));
302 this.bandwidth = bandwidthBuilder.build();
304 final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.reoptimization
305 .bandwidth.object.ReoptimizationBandwidthBuilder reoptimizationBandwidthBuilder = new org.opendaylight.yang
306 .gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.reoptimization.bandwidth.object
307 .ReoptimizationBandwidthBuilder();
308 reoptimizationBandwidthBuilder.setIgnore(false);
309 reoptimizationBandwidthBuilder.setProcessingRule(false);
310 reoptimizationBandwidthBuilder.setBandwidth(
311 new Bandwidth(new byte[] { (byte) 0x47, (byte) 0x74, (byte) 0x24, (byte) 0x00 }));
312 this.reoptimizationBandwidth = reoptimizationBandwidthBuilder.build();
316 public void testOpenMsg() throws IOException, PCEPDeserializerException {
317 try (StatefulActivator a = new StatefulActivator()) {
319 final ByteBuf result = Unpooled.wrappedBuffer(
320 ByteArray.fileToBytes("src/test/resources/PCEPOpenMessage1.bin"));
321 final PCEPOpenMessageParser parser = new PCEPOpenMessageParser(this.ctx.getObjectHandlerRegistry());
322 final OpenMessageBuilder builder = new OpenMessageBuilder();
324 final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.object
325 .OpenBuilder b = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types
326 .rev181109.open.object.OpenBuilder()
327 .setProcessingRule(false)
329 .setVersion(new ProtocolVersion((short) 1))
330 .setKeepalive((short) 30)
331 .setDeadTimer((short) 120)
332 .setSessionId((short) 1)
333 .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109
334 .open.object.open.TlvsBuilder().addAugmentation(Tlvs1.class,
335 new Tlvs1Builder().setStateful(new StatefulBuilder().setLspUpdateCapability(Boolean.TRUE)
336 .build()).build()).build());
337 builder.setOpen(b.build());
339 assertEquals(new OpenBuilder().setOpenMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
340 result.readableBytes() - 4), Collections.emptyList()));
341 final ByteBuf buf = Unpooled.buffer(result.readableBytes());
342 parser.serializeMessage(new OpenBuilder().setOpenMessage(builder.build()).build(), buf);
343 assertArrayEquals(result.array(), buf.array());
348 public void testSyncOptActivator() {
349 try (SyncOptimizationsActivator a = new SyncOptimizationsActivator()) {
356 public void testUpdMsg() throws IOException, PCEPDeserializerException {
357 try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator()) {
359 final Stateful07PCUpdateRequestMessageParser parser = new Stateful07PCUpdateRequestMessageParser(
360 this.ctx.getObjectHandlerRegistry());
362 final PcupdMessageBuilder builder = new PcupdMessageBuilder();
364 final List<Updates> updates = new ArrayList<>();
365 final PathBuilder pBuilder = new PathBuilder();
366 pBuilder.setEro(this.ero);
367 pBuilder.setLspa(this.lspa);
368 updates.add(new UpdatesBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build());
369 builder.setUpdates(updates);
371 ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCUpd.2.bin"));
372 assertEquals(new PcupdBuilder().setPcupdMessage(builder.build()).build(),
373 parser.parseMessage(result.slice(4, result.readableBytes() - 4), Collections.emptyList()));
374 ByteBuf buf = Unpooled.buffer(result.readableBytes());
375 parser.serializeMessage(new PcupdBuilder().setPcupdMessage(builder.build()).build(), buf);
376 assertArrayEquals(result.array(), buf.array());
378 final List<Updates> updates1 = new ArrayList<>();
379 final PathBuilder pBuilder1 = new PathBuilder();
380 pBuilder1.setEro(this.ero);
381 pBuilder1.setLspa(this.lspa);
382 updates1.add(new UpdatesBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build());
383 updates1.add(new UpdatesBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder1.build()).build());
384 builder.setUpdates(updates1);
386 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCUpd.5.bin"));
387 assertEquals(new PcupdBuilder().setPcupdMessage(builder.build()).build(),
388 parser.parseMessage(result.slice(4, result.readableBytes() - 4), Collections.emptyList()));
389 buf = Unpooled.buffer(result.readableBytes());
390 parser.serializeMessage(new PcupdBuilder().setPcupdMessage(builder.build()).build(), buf);
391 assertArrayEquals(result.array(), buf.array());
396 public void testRptMsg() throws IOException, PCEPDeserializerException {
397 try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator();
398 StatefulActivator b = new StatefulActivator()) {
401 ByteBuf result = Unpooled.wrappedBuffer(PCRT1);
403 final Stateful07PCReportMessageParser parser = new Stateful07PCReportMessageParser(
404 this.ctx.getObjectHandlerRegistry());
406 final PcrptMessageBuilder builder = new PcrptMessageBuilder();
408 final List<Reports> reports = new ArrayList<>();
409 reports.add(new ReportsBuilder().setLsp(this.lsp).build());
410 builder.setReports(reports);
411 final Message parseResult = parser.parseMessage(result.slice(4, result.readableBytes() - 4),
412 Collections.emptyList());
413 assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parseResult);
414 ByteBuf buf = Unpooled.buffer(result.readableBytes());
415 parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
416 assertArrayEquals(result.array(), buf.array());
418 result = Unpooled.wrappedBuffer(PCRT2);
420 final List<Reports> reports1 = new ArrayList<>();
421 reports1.add(new ReportsBuilder().setLsp(this.lsp).setPath(new org.opendaylight.yang.gen.v1.urn.opendaylight
422 .params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcrpt.message.pcrpt.message.reports.PathBuilder()
423 .setEro(this.ero).setLspa(this.lspa).build()).build());
424 builder.setReports(reports1);
426 final ByteBuf input = result.slice(4, result.readableBytes() - 4);
427 assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(),
428 parser.parseMessage(input, Collections.emptyList()));
429 buf = Unpooled.buffer(result.readableBytes());
430 parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
431 assertArrayEquals(result.array(), buf.array());
433 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRpt.3.bin"));
435 final List<Reports> reports2 = new ArrayList<>();
436 final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcrpt
437 .message.pcrpt.message.reports.PathBuilder pBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight
438 .params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcrpt.message.pcrpt.message.reports.PathBuilder();
439 pBuilder.setEro(this.ero);
440 pBuilder.setLspa(this.lspa);
441 pBuilder.setMetrics(Lists.newArrayList(this.metrics, this.metrics));
442 pBuilder.setRro(this.rro);
443 reports2.add(new ReportsBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build());
444 builder.setReports(reports2);
446 assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(),
447 parser.parseMessage(result.slice(4, result.readableBytes() - 4), Collections.emptyList()));
448 buf = Unpooled.buffer(result.readableBytes());
449 parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
450 assertArrayEquals(result.array(), buf.array());
452 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRpt.5.bin"));
454 final List<Reports> reports3 = new ArrayList<>();
455 final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcrpt
456 .message.pcrpt.message.reports.PathBuilder pBuilder1 = new org.opendaylight.yang.gen.v1.urn.opendaylight
457 .params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcrpt.message.pcrpt.message.reports.PathBuilder();
458 pBuilder1.setEro(this.ero);
459 pBuilder1.setLspa(this.lspa);
460 pBuilder1.setMetrics(Lists.newArrayList(this.metrics, this.metrics));
461 pBuilder1.setRro(this.rro);
462 reports3.add(new ReportsBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build());
463 reports3.add(new ReportsBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder1.build()).build());
464 builder.setReports(reports3);
466 assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(),
467 parser.parseMessage(result.slice(4, result.readableBytes() - 4), Collections.emptyList()));
468 buf = Unpooled.buffer(result.readableBytes());
469 parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
470 assertArrayEquals(result.array(), buf.array());
472 result = Unpooled.wrappedBuffer(PCRT3);
474 final List<Reports> reports4 = new ArrayList<>();
475 reports4.add(new ReportsBuilder().setLsp(this.lsp).setPath(new org.opendaylight.yang.gen.v1.urn.opendaylight
476 .params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcrpt.message.pcrpt.message.reports.PathBuilder()
477 .setEro(this.ero).setLspa(this.lspa).setBandwidth(this.bandwidth)
478 .setReoptimizationBandwidth(this.reoptimizationBandwidth).build()).build());
479 builder.setReports(reports4);
481 final ByteBuf input2 = result.slice(4, result.readableBytes() - 4);
482 assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(),
483 parser.parseMessage(input2, Collections.emptyList()));
484 buf = Unpooled.buffer(result.readableBytes());
485 parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
486 assertArrayEquals(result.array(), buf.array());
491 public void testPcinitMsg() throws IOException, PCEPDeserializerException {
492 try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator()) {
494 final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/Pcinit.bin"));
496 final CInitiated00PCInitiateMessageParser parser = new CInitiated00PCInitiateMessageParser(
497 this.ctx.getObjectHandlerRegistry());
499 final PcinitiateMessageBuilder builder = new PcinitiateMessageBuilder();
500 final RequestsBuilder rBuilder = new RequestsBuilder();
502 final List<Requests> reqs = new ArrayList<>();
503 rBuilder.setSrp(this.srp);
504 rBuilder.setLsp(this.lspSrp);
505 rBuilder.setEro(this.ero);
506 rBuilder.setLspa(this.lspa);
507 rBuilder.setMetrics(Lists.newArrayList(this.metrics));
508 rBuilder.setIro(this.iro);
509 reqs.add(rBuilder.build());
510 builder.setRequests(reqs);
512 assertEquals(new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build(),
513 parser.parseMessage(result.slice(4,result.readableBytes() - 4), Collections.emptyList()));
514 final ByteBuf buf = Unpooled.buffer(result.readableBytes());
515 parser.serializeMessage(new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build(), buf);
516 assertArrayEquals(result.array(), buf.array());
521 public void testErrorMsg() throws IOException, PCEPDeserializerException {
522 try (StatefulActivator a = new StatefulActivator()) {
524 final Stateful07ErrorMessageParser parser = new Stateful07ErrorMessageParser(
525 this.ctx.getObjectHandlerRegistry());
527 ErrorObject error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false).setType((short) 19)
528 .setValue((short) 1).build();
530 List<Errors> innerErr = new ArrayList<>();
531 innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
533 PcerrMessageBuilder builder = new PcerrMessageBuilder();
534 builder.setErrors(innerErr);
535 final List<Srps> srps = new ArrayList<>();
536 srps.add(new SrpsBuilder().setSrp(new SrpBuilder().setOperationId(new SrpIdNumber(3L)).setIgnore(false)
537 .setProcessingRule(false).setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang
538 .pcep.ietf.stateful.rev181109.srp.object.srp.TlvsBuilder().build()).build()).build());
539 builder.setErrorType(new StatefulCaseBuilder().setStateful(new org.opendaylight.yang.gen.v1.urn.opendaylight
540 .params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcerr.pcerr.message.error.type.stateful._case
541 .StatefulBuilder().setSrps(srps).build()).build());
543 ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.1.bin"));
544 assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(),
545 parser.parseMessage(result.slice(4, result.readableBytes() - 4), Collections.emptyList()));
546 ByteBuf buf = Unpooled.buffer(result.readableBytes());
547 parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf);
548 assertArrayEquals(result.array(), buf.array());
550 error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false).setType((short) 3)
551 .setValue((short) 1).build();
553 innerErr = new ArrayList<>();
554 builder = new PcerrMessageBuilder();
556 final RpBuilder rpBuilder = new RpBuilder();
557 rpBuilder.setProcessingRule(true);
558 rpBuilder.setIgnore(false);
559 rpBuilder.setReoptimization(false);
560 rpBuilder.setBiDirectional(false);
561 rpBuilder.setLoose(true);
562 rpBuilder.setMakeBeforeBreak(false);
563 rpBuilder.setOrder(false);
564 rpBuilder.setPathKey(false);
565 rpBuilder.setSupplyOf(false);
566 rpBuilder.setFragmentation(false);
567 rpBuilder.setP2mp(false);
568 rpBuilder.setEroCompression(false);
569 rpBuilder.setPriority((short) 1);
570 rpBuilder.setRequestId(new RequestId(10L));
571 rpBuilder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109
572 .rp.object.rp.TlvsBuilder().build());
573 rpBuilder.setProcessingRule(false);
574 final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr
575 .message.pcerr.message.error.type.request._case.request.Rps> rps = new ArrayList<>();
576 rps.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr
577 .message.pcerr.message.error.type.request._case.request.RpsBuilder().setRp(rpBuilder.build()).build());
579 innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
581 builder.setErrors(innerErr);
582 builder.setErrorType(new RequestCaseBuilder().setRequest(new RequestBuilder().setRps(rps).build()).build());
584 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.5.bin"));
585 assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(),
586 parser.parseMessage(result.slice(4, result.readableBytes() - 4), Collections.emptyList()));
587 buf = Unpooled.buffer(result.readableBytes());
588 parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf);
589 assertArrayEquals(result.array(), buf.array());
592 builder = new PcerrMessageBuilder();
593 error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false).setType((short) 3)
594 .setValue((short) 1).build();
596 innerErr = new ArrayList<>();
597 innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
599 builder.setErrors(innerErr);
600 builder.setErrorType(new SessionCaseBuilder().setSession(new SessionBuilder()
601 .setOpen(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open
602 .object.OpenBuilder()
603 .setDeadTimer((short) 1)
604 .setKeepalive((short) 1)
605 .setVersion(new ProtocolVersion((short) 1))
606 .setSessionId((short) 0)
608 .setProcessingRule(false)
609 .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types
610 .rev181109.open.object.open.TlvsBuilder().build())
611 .build()).build()).build());
613 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.3.bin"));
614 assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(),
615 parser.parseMessage(result.slice(4,result.readableBytes() - 4), Collections.emptyList()));
616 buf = Unpooled.buffer(result.readableBytes());
617 parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf);
618 assertArrayEquals(result.array(), buf.array());
623 public void testMissingLspObjectErrorInPcRptMsg() throws PCEPDeserializerException {
624 final byte[] statefulMsg = {
625 (byte) 0x20, (byte) 0x0B, (byte) 0x00, (byte) 0x1C,
627 (byte) 0x21, (byte) 0x10, (byte) 0x00, (byte) 0x0C,
628 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x001,
629 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01,
630 /* lsp-object is missing*/
632 (byte) 0x07, (byte) 0x10, (byte) 0x00, (byte) 0x0C,
633 /* ipv4 prefix subobject */
634 (byte) 0x81, (byte) 0x08, (byte) 0xFF, (byte) 0xFF,
635 (byte) 0xFF, (byte) 0xFF, (byte) 0x16, (byte) 0x00
638 try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator();
639 StatefulActivator b = new StatefulActivator()) {
642 final Stateful07PCReportMessageParser parser = new Stateful07PCReportMessageParser(
643 this.ctx.getObjectHandlerRegistry());
645 final PcerrMessageBuilder errMsgBuilder = new PcerrMessageBuilder();
646 errMsgBuilder.setErrors(Lists.newArrayList(new ErrorsBuilder()
647 .setErrorObject(new ErrorObjectBuilder().setType((short) 6).setValue((short) 8).build()).build()));
648 final PcerrBuilder builder = new PcerrBuilder();
649 builder.setPcerrMessage(errMsgBuilder.build());
651 final ByteBuf buf = Unpooled.wrappedBuffer(statefulMsg);
652 final List<Message> errors = new ArrayList<>();
653 parser.parseMessage(buf.slice(4, buf.readableBytes() - 4), errors);
654 assertFalse(errors.isEmpty());
655 assertEquals(builder.build(), errors.get(0));
660 public void testUnexpectedRroObjectInPcUpdMsg() throws PCEPDeserializerException {
661 final byte[] badUpdateMsg = {
662 (byte) 0x20, (byte) 0x0b, (byte) 0x00, (byte) 0x50,
663 /* SRP, LSP and ERO objects */
664 (byte) 0x21, (byte) 0x12, (byte) 0x00, (byte) 0x0c,
665 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
666 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01,
667 (byte) 0x20, (byte) 0x10, (byte) 0x00, (byte) 0x08,
668 (byte) 0x00, (byte) 0x00, (byte) 0x10, (byte) 0x09,
669 (byte) 0x07, (byte) 0x10, (byte) 0x00, (byte) 0x14,
670 (byte) 0x01, (byte) 0x08, (byte) 0x05, (byte) 0x05,
671 (byte) 0x05, (byte) 0x03, (byte) 0x18, (byte) 0x00,
672 (byte) 0x01, (byte) 0x08, (byte) 0x08, (byte) 0x08,
673 (byte) 0x08, (byte) 0x04, (byte) 0x18, (byte) 0x00,
675 (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x24,
676 (byte) 0x01, (byte) 0x08, (byte) 0x0a, (byte) 0x00,
677 (byte) 0x00, (byte) 0x83, (byte) 0x20, (byte) 0x20,
678 (byte) 0x03, (byte) 0x08, (byte) 0x01, (byte) 0x01,
679 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
680 (byte) 0x01, (byte) 0x08, (byte) 0x0a, (byte) 0x00,
681 (byte) 0x09, (byte) 0xde, (byte) 0x20, (byte) 0x00,
682 (byte) 0x03, (byte) 0x08, (byte) 0x01, (byte) 0x01,
683 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00
686 try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator()) {
689 final Stateful07PCUpdateRequestMessageParser parser = new Stateful07PCUpdateRequestMessageParser(
690 this.ctx.getObjectHandlerRegistry());
692 final PcerrMessageBuilder errMsgBuilder = new PcerrMessageBuilder();
693 errMsgBuilder.setErrors(Lists.newArrayList(new ErrorsBuilder()
694 .setErrorObject(new ErrorObjectBuilder().setType((short) 6).setValue((short) 10).build()).build()));
695 final PcerrBuilder builder = new PcerrBuilder();
696 builder.setPcerrMessage(errMsgBuilder.build());
698 final ByteBuf buf = Unpooled.wrappedBuffer(badUpdateMsg);
699 final List<Message> errors = new ArrayList<>();
700 parser.parseMessage(buf.slice(4, buf.readableBytes() - 4), errors);
701 assertFalse(errors.isEmpty());
702 assertEquals(builder.build(), errors.get(0));