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;
113 import org.opendaylight.yangtools.yang.common.Uint16;
114 import org.opendaylight.yangtools.yang.common.Uint32;
115 import org.opendaylight.yangtools.yang.common.Uint8;
117 public class PCEPValidatorTest {
120 private Metrics metrics;
127 private org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.bandwidth.object
128 .Bandwidth bandwidth;
129 private org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.reoptimization
130 .bandwidth.object.ReoptimizationBandwidth reoptimizationBandwidth;
132 private AsNumberCase eroASSubobject;
133 private UnnumberedCase rroUnnumberedSub;
135 private SimplePCEPExtensionProviderContext ctx;
136 private BaseParserExtensionActivator act;
138 private static final byte[] PCRT1 = {
139 (byte) 0x20, (byte) 0x0A, (byte) 0x00, (byte) 0x20,
141 (byte) 0x20, (byte) 0x10, (byte) 0x00, (byte) 0x1C,
142 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, //Skip
143 (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x10, //TLV Type + TLV Length
144 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x01, //TLV 127.0.1.1
145 (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x01, //TLV LSP Id + Tunnel id
146 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x02, //TLV Ipv4ExtendedTunnelId 127.0.1.2
147 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x03, //TLV TunnelEndpointAddress 127.0.1.3
150 private static final byte[] PCRT2 = {
151 (byte) 0x20, (byte) 0x0A, (byte) 0x00, (byte) 0x3C,
153 (byte) 0x20, (byte) 0x10, (byte) 0x00, (byte) 0x1C, //(byte) 0x39,
154 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, //Skip
155 (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x10, //TLV Type + TLV Length
156 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x01, //TLV 127.0.1.1
157 (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x01, //TLV LSP Id + Tunnel id
158 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x02, //TLV Ipv4ExtendedTunnelId 127.0.1.2
159 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x03, //TLV TunnelEndpointAddress 127.0.1.3
161 (byte) 0x07, (byte) 0x10, (byte) 0x00, (byte) 0x08,
162 (byte) 0x20, (byte) 0x04, (byte) 0xFF, (byte) 0xFF,
163 (byte) 0x09, (byte) 0x10, (byte) 0x00, (byte) 0x14,
164 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
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
170 private static final byte[] PCRT3 = {
171 (byte) 0x20, (byte) 0x0A, (byte) 0x00, (byte) 0x4C,
173 (byte) 0x20, (byte) 0x10, (byte) 0x00, (byte) 0x1C, //(byte) 0x39,
174 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, //Skip
175 (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x10, //TLV Type + TLV Length
176 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x01, //TLV 127.0.1.1
177 (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x01, //TLV LSP Id + Tunnel id
178 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x02, //TLV Ipv4ExtendedTunnelId 127.0.1.2
179 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x03, //TLV TunnelEndpointAddress 127.0.1.3
181 (byte) 0x07, (byte) 0x10, (byte) 0x00, (byte) 0x08,
182 (byte) 0x20, (byte) 0x04, (byte) 0xFF, (byte) 0xFF,
183 (byte) 0x09, (byte) 0x10, (byte) 0x00, (byte) 0x14,
184 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
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,
189 (byte) 0x05, (byte) 0x10, (byte) 0x00, (byte) 0x08,
190 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
191 (byte) 0x05, (byte) 0x20, (byte) 0x00, (byte) 0x08,
192 (byte) 0x47, (byte) 0x74, (byte) 0x24, (byte) 0x00
196 public void setUp() {
197 this.ctx = new SimplePCEPExtensionProviderContext();
198 this.act = new BaseParserExtensionActivator();
199 this.act.start(this.ctx);
201 this.lspa = new LspaBuilder()
202 .setProcessingRule(false)
204 .setLocalProtectionDesired(false)
205 .setHoldPriority(Uint8.ZERO)
206 .setSetupPriority(Uint8.ZERO)
207 .setExcludeAny(new AttributeFilter(Uint32.ZERO))
208 .setIncludeAll(new AttributeFilter(Uint32.ZERO))
209 .setIncludeAny(new AttributeFilter(Uint32.ZERO))
210 .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109
211 .lspa.object.lspa.TlvsBuilder().build())
214 this.metrics = new MetricsBuilder()
215 .setMetric(new MetricBuilder()
217 .setProcessingRule(false)
220 .setMetricType(Uint8.ONE)
221 .setValue(new Float32(new byte[4])).build())
224 this.eroASSubobject = new AsNumberCaseBuilder().setAsNumber(new AsNumberBuilder().setAsNumber(
225 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.AsNumber(
226 Uint32.valueOf(0xFFFF)))
229 this.rroUnnumberedSub = new UnnumberedCaseBuilder()
230 .setUnnumbered(new UnnumberedBuilder()
231 .setRouterId(Uint32.valueOf(0x00112233L))
232 .setInterfaceId(Uint32.valueOf(0x00ff00ffL))
236 final IroBuilder iroBuilder = new IroBuilder()
238 .setProcessingRule(false);
239 final List<Subobject> iroSubs = new ArrayList<>();
240 iroSubs.add(new SubobjectBuilder().setSubobjectType(this.eroASSubobject).setLoose(false).build());
241 iroBuilder.setSubobject(iroSubs);
242 this.iro = iroBuilder.build();
244 final EroBuilder eroBuilder = new EroBuilder();
245 eroBuilder.setIgnore(false);
246 eroBuilder.setProcessingRule(false);
247 final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.explicit.route
248 .object.ero.Subobject> eroSubs = new ArrayList<>();
249 eroSubs.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.explicit
250 .route.object.ero.SubobjectBuilder().setSubobjectType(this.eroASSubobject).setLoose(false).build());
251 eroBuilder.setSubobject(eroSubs);
252 this.ero = eroBuilder.build();
254 final RroBuilder rroBuilder = new RroBuilder();
255 rroBuilder.setIgnore(false);
256 rroBuilder.setProcessingRule(false);
257 final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.reported.route
258 .object.rro.Subobject> rroSubs = new ArrayList<>();
259 rroSubs.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.reported
260 .route.object.rro.SubobjectBuilder().setSubobjectType(this.rroUnnumberedSub).setProtectionAvailable(false)
261 .setProtectionInUse(false).build());
262 rroBuilder.setSubobject(rroSubs);
263 this.rro = rroBuilder.build();
265 this.srp = new SrpBuilder()
267 .setProcessingRule(false)
268 .setOperationId(new SrpIdNumber(Uint32.ONE))
269 .addAugmentation(Srp1.class, new Srp1Builder().setRemove(false).build())
270 .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful
271 .rev181109.srp.object.srp.TlvsBuilder().build())
274 final LspBuilder lspBuilder = new LspBuilder()
276 .setProcessingRule(false)
277 .setAdministrative(false)
279 .setPlspId(new PlspId(Uint32.ZERO))
280 .setOperational(OperationalStatus.Down)
283 .setTlvs(new TlvsBuilder().build())
284 .addAugmentation(Lsp1.class, new Lsp1Builder().setCreate(false).build());
286 final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.lsp
287 .identifiers.tlv.lsp.identifiers.address.family.ipv4._case.Ipv4Builder builder =
288 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.lsp
289 .identifiers.tlv.lsp.identifiers.address.family.ipv4._case.Ipv4Builder();
290 builder.setIpv4TunnelSenderAddress(new Ipv4AddressNoZone("127.0.1.1"));
291 final LspId lspId = new LspId(Uint32.ONE);
292 final TunnelId tunnelId = new TunnelId(Uint16.ONE);
293 builder.setIpv4ExtendedTunnelId(new Ipv4ExtendedTunnelId(new Ipv4AddressNoZone("127.0.1.2")));
294 builder.setIpv4TunnelEndpointAddress(new Ipv4AddressNoZone("127.0.1.3"));
295 final AddressFamily afiLsp = new Ipv4CaseBuilder().setIpv4(builder.build()).build();
296 final LspIdentifiers identifier = new LspIdentifiersBuilder().setAddressFamily(afiLsp).setLspId(lspId)
297 .setTunnelId(tunnelId).build();
298 this.lspSrp = lspBuilder.build();
299 this.lsp = lspBuilder.setTlvs(new TlvsBuilder().setLspIdentifiers(identifier).build()).build();
301 final Ipv4Builder afi = new Ipv4Builder();
302 afi.setSourceIpv4Address(new Ipv4AddressNoZone("255.255.255.255"));
303 afi.setDestinationIpv4Address(new Ipv4AddressNoZone("255.255.255.255"));
305 final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.bandwidth.object
306 .BandwidthBuilder bandwidthBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang
307 .pcep.types.rev181109.bandwidth.object.BandwidthBuilder();
308 bandwidthBuilder.setIgnore(false);
309 bandwidthBuilder.setProcessingRule(false);
310 bandwidthBuilder.setBandwidth(new Bandwidth(new byte[] { (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 }));
311 this.bandwidth = bandwidthBuilder.build();
313 final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.reoptimization
314 .bandwidth.object.ReoptimizationBandwidthBuilder reoptimizationBandwidthBuilder = new org.opendaylight.yang
315 .gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.reoptimization.bandwidth.object
316 .ReoptimizationBandwidthBuilder();
317 reoptimizationBandwidthBuilder.setIgnore(false);
318 reoptimizationBandwidthBuilder.setProcessingRule(false);
319 reoptimizationBandwidthBuilder.setBandwidth(
320 new Bandwidth(new byte[] { (byte) 0x47, (byte) 0x74, (byte) 0x24, (byte) 0x00 }));
321 this.reoptimizationBandwidth = reoptimizationBandwidthBuilder.build();
325 public void testOpenMsg() throws IOException, PCEPDeserializerException {
326 try (StatefulActivator a = new StatefulActivator()) {
328 final ByteBuf result = Unpooled.wrappedBuffer(
329 ByteArray.fileToBytes("src/test/resources/PCEPOpenMessage1.bin"));
330 final PCEPOpenMessageParser parser = new PCEPOpenMessageParser(this.ctx.getObjectHandlerRegistry());
331 final OpenMessageBuilder builder = new OpenMessageBuilder();
333 final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open.object
334 .OpenBuilder b = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types
335 .rev181109.open.object.OpenBuilder()
336 .setProcessingRule(false)
338 .setVersion(new ProtocolVersion(Uint8.ONE))
339 .setKeepalive(Uint8.valueOf(30))
340 .setDeadTimer(Uint8.valueOf(120))
341 .setSessionId(Uint8.ONE)
342 .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109
343 .open.object.open.TlvsBuilder().addAugmentation(Tlvs1.class,
344 new Tlvs1Builder().setStateful(new StatefulBuilder().setLspUpdateCapability(Boolean.TRUE)
345 .build()).build()).build());
346 builder.setOpen(b.build());
348 assertEquals(new OpenBuilder().setOpenMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
349 result.readableBytes() - 4), Collections.emptyList()));
350 final ByteBuf buf = Unpooled.buffer(result.readableBytes());
351 parser.serializeMessage(new OpenBuilder().setOpenMessage(builder.build()).build(), buf);
352 assertArrayEquals(result.array(), buf.array());
357 public void testSyncOptActivator() {
358 try (SyncOptimizationsActivator a = new SyncOptimizationsActivator()) {
365 public void testUpdMsg() throws IOException, PCEPDeserializerException {
366 try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator()) {
368 final Stateful07PCUpdateRequestMessageParser parser = new Stateful07PCUpdateRequestMessageParser(
369 this.ctx.getObjectHandlerRegistry());
371 final PcupdMessageBuilder builder = new PcupdMessageBuilder();
373 final List<Updates> updates = new ArrayList<>();
374 final PathBuilder pBuilder = new PathBuilder();
375 pBuilder.setEro(this.ero);
376 pBuilder.setLspa(this.lspa);
377 updates.add(new UpdatesBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build());
378 builder.setUpdates(updates);
380 ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCUpd.2.bin"));
381 assertEquals(new PcupdBuilder().setPcupdMessage(builder.build()).build(),
382 parser.parseMessage(result.slice(4, result.readableBytes() - 4), Collections.emptyList()));
383 ByteBuf buf = Unpooled.buffer(result.readableBytes());
384 parser.serializeMessage(new PcupdBuilder().setPcupdMessage(builder.build()).build(), buf);
385 assertArrayEquals(result.array(), buf.array());
387 final List<Updates> updates1 = new ArrayList<>();
388 final PathBuilder pBuilder1 = new PathBuilder();
389 pBuilder1.setEro(this.ero);
390 pBuilder1.setLspa(this.lspa);
391 updates1.add(new UpdatesBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build());
392 updates1.add(new UpdatesBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder1.build()).build());
393 builder.setUpdates(updates1);
395 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCUpd.5.bin"));
396 assertEquals(new PcupdBuilder().setPcupdMessage(builder.build()).build(),
397 parser.parseMessage(result.slice(4, result.readableBytes() - 4), Collections.emptyList()));
398 buf = Unpooled.buffer(result.readableBytes());
399 parser.serializeMessage(new PcupdBuilder().setPcupdMessage(builder.build()).build(), buf);
400 assertArrayEquals(result.array(), buf.array());
405 public void testRptMsg() throws IOException, PCEPDeserializerException {
406 try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator();
407 StatefulActivator b = new StatefulActivator()) {
410 ByteBuf result = Unpooled.wrappedBuffer(PCRT1);
412 final Stateful07PCReportMessageParser parser = new Stateful07PCReportMessageParser(
413 this.ctx.getObjectHandlerRegistry());
415 final PcrptMessageBuilder builder = new PcrptMessageBuilder();
417 final List<Reports> reports = new ArrayList<>();
418 reports.add(new ReportsBuilder().setLsp(this.lsp).build());
419 builder.setReports(reports);
420 final Message parseResult = parser.parseMessage(result.slice(4, result.readableBytes() - 4),
421 Collections.emptyList());
422 assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parseResult);
423 ByteBuf buf = Unpooled.buffer(result.readableBytes());
424 parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
425 assertArrayEquals(result.array(), buf.array());
427 result = Unpooled.wrappedBuffer(PCRT2);
429 final List<Reports> reports1 = new ArrayList<>();
430 reports1.add(new ReportsBuilder().setLsp(this.lsp).setPath(new org.opendaylight.yang.gen.v1.urn.opendaylight
431 .params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcrpt.message.pcrpt.message.reports.PathBuilder()
432 .setEro(this.ero).setLspa(this.lspa).build()).build());
433 builder.setReports(reports1);
435 final ByteBuf input = result.slice(4, result.readableBytes() - 4);
436 assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(),
437 parser.parseMessage(input, Collections.emptyList()));
438 buf = Unpooled.buffer(result.readableBytes());
439 parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
440 assertArrayEquals(result.array(), buf.array());
442 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRpt.3.bin"));
444 final List<Reports> reports2 = new ArrayList<>();
445 final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcrpt
446 .message.pcrpt.message.reports.PathBuilder pBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight
447 .params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcrpt.message.pcrpt.message.reports.PathBuilder();
448 pBuilder.setEro(this.ero);
449 pBuilder.setLspa(this.lspa);
450 pBuilder.setMetrics(Lists.newArrayList(this.metrics, this.metrics));
451 pBuilder.setRro(this.rro);
452 reports2.add(new ReportsBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build());
453 builder.setReports(reports2);
455 assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(),
456 parser.parseMessage(result.slice(4, result.readableBytes() - 4), Collections.emptyList()));
457 buf = Unpooled.buffer(result.readableBytes());
458 parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
459 assertArrayEquals(result.array(), buf.array());
461 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRpt.5.bin"));
463 final List<Reports> reports3 = new ArrayList<>();
464 final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcrpt
465 .message.pcrpt.message.reports.PathBuilder pBuilder1 = new org.opendaylight.yang.gen.v1.urn.opendaylight
466 .params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcrpt.message.pcrpt.message.reports.PathBuilder();
467 pBuilder1.setEro(this.ero);
468 pBuilder1.setLspa(this.lspa);
469 pBuilder1.setMetrics(Lists.newArrayList(this.metrics, this.metrics));
470 pBuilder1.setRro(this.rro);
471 reports3.add(new ReportsBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build());
472 reports3.add(new ReportsBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder1.build()).build());
473 builder.setReports(reports3);
475 assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(),
476 parser.parseMessage(result.slice(4, result.readableBytes() - 4), Collections.emptyList()));
477 buf = Unpooled.buffer(result.readableBytes());
478 parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
479 assertArrayEquals(result.array(), buf.array());
481 result = Unpooled.wrappedBuffer(PCRT3);
483 final List<Reports> reports4 = new ArrayList<>();
484 reports4.add(new ReportsBuilder().setLsp(this.lsp).setPath(new org.opendaylight.yang.gen.v1.urn.opendaylight
485 .params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcrpt.message.pcrpt.message.reports.PathBuilder()
486 .setEro(this.ero).setLspa(this.lspa).setBandwidth(this.bandwidth)
487 .setReoptimizationBandwidth(this.reoptimizationBandwidth).build()).build());
488 builder.setReports(reports4);
490 final ByteBuf input2 = result.slice(4, result.readableBytes() - 4);
491 assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(),
492 parser.parseMessage(input2, Collections.emptyList()));
493 buf = Unpooled.buffer(result.readableBytes());
494 parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
495 assertArrayEquals(result.array(), buf.array());
500 public void testPcinitMsg() throws IOException, PCEPDeserializerException {
501 try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator()) {
503 final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/Pcinit.bin"));
505 final CInitiated00PCInitiateMessageParser parser = new CInitiated00PCInitiateMessageParser(
506 this.ctx.getObjectHandlerRegistry());
508 final PcinitiateMessageBuilder builder = new PcinitiateMessageBuilder();
509 final RequestsBuilder rBuilder = new RequestsBuilder();
511 final List<Requests> reqs = new ArrayList<>();
512 rBuilder.setSrp(this.srp);
513 rBuilder.setLsp(this.lspSrp);
514 rBuilder.setEro(this.ero);
515 rBuilder.setLspa(this.lspa);
516 rBuilder.setMetrics(Lists.newArrayList(this.metrics));
517 rBuilder.setIro(this.iro);
518 reqs.add(rBuilder.build());
519 builder.setRequests(reqs);
521 assertEquals(new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build(),
522 parser.parseMessage(result.slice(4,result.readableBytes() - 4), Collections.emptyList()));
523 final ByteBuf buf = Unpooled.buffer(result.readableBytes());
524 parser.serializeMessage(new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build(), buf);
525 assertArrayEquals(result.array(), buf.array());
530 public void testErrorMsg() throws IOException, PCEPDeserializerException {
531 try (StatefulActivator a = new StatefulActivator()) {
533 final Stateful07ErrorMessageParser parser = new Stateful07ErrorMessageParser(
534 this.ctx.getObjectHandlerRegistry());
536 ErrorObject error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false)
537 .setType(Uint8.valueOf(19)).setValue(Uint8.ONE).build();
539 List<Errors> innerErr = new ArrayList<>();
540 innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
542 PcerrMessageBuilder builder = new PcerrMessageBuilder();
543 builder.setErrors(innerErr);
544 final List<Srps> srps = new ArrayList<>();
545 srps.add(new SrpsBuilder()
546 .setSrp(new SrpBuilder()
547 .setOperationId(new SrpIdNumber(Uint32.valueOf(3)))
549 .setProcessingRule(false)
550 .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful
551 .rev181109.srp.object.srp.TlvsBuilder().build())
554 builder.setErrorType(new StatefulCaseBuilder().setStateful(new org.opendaylight.yang.gen.v1.urn.opendaylight
555 .params.xml.ns.yang.pcep.ietf.stateful.rev181109.pcerr.pcerr.message.error.type.stateful._case
556 .StatefulBuilder().setSrps(srps).build()).build());
558 ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.1.bin"));
559 assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(),
560 parser.parseMessage(result.slice(4, result.readableBytes() - 4), Collections.emptyList()));
561 ByteBuf buf = Unpooled.buffer(result.readableBytes());
562 parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf);
563 assertArrayEquals(result.array(), buf.array());
565 error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false).setType(Uint8.valueOf(3))
566 .setValue(Uint8.ONE).build();
568 innerErr = new ArrayList<>();
569 builder = new PcerrMessageBuilder();
571 final RpBuilder rpBuilder = new RpBuilder()
572 .setProcessingRule(true)
574 .setReoptimization(false)
575 .setBiDirectional(false)
577 .setMakeBeforeBreak(false)
581 .setFragmentation(false)
583 .setEroCompression(false)
584 .setPriority(Uint8.ONE)
585 .setRequestId(new RequestId(Uint32.TEN))
586 .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109
587 .rp.object.rp.TlvsBuilder().build())
588 .setProcessingRule(false);
589 final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr
590 .message.pcerr.message.error.type.request._case.request.Rps> rps = new ArrayList<>();
591 rps.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.pcerr
592 .message.pcerr.message.error.type.request._case.request.RpsBuilder().setRp(rpBuilder.build()).build());
594 innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
596 builder.setErrors(innerErr);
597 builder.setErrorType(new RequestCaseBuilder().setRequest(new RequestBuilder().setRps(rps).build()).build());
599 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.5.bin"));
600 assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(),
601 parser.parseMessage(result.slice(4, result.readableBytes() - 4), Collections.emptyList()));
602 buf = Unpooled.buffer(result.readableBytes());
603 parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf);
604 assertArrayEquals(result.array(), buf.array());
607 builder = new PcerrMessageBuilder();
608 error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false).setType(Uint8.valueOf(3))
609 .setValue(Uint8.ONE).build();
611 innerErr = new ArrayList<>();
612 innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
614 builder.setErrors(innerErr);
615 builder.setErrorType(new SessionCaseBuilder().setSession(new SessionBuilder()
616 .setOpen(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev181109.open
617 .object.OpenBuilder()
618 .setDeadTimer(Uint8.ONE)
619 .setKeepalive(Uint8.ONE)
620 .setVersion(new ProtocolVersion(Uint8.ONE))
621 .setSessionId(Uint8.ZERO)
623 .setProcessingRule(false)
624 .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types
625 .rev181109.open.object.open.TlvsBuilder().build())
626 .build()).build()).build());
628 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.3.bin"));
629 assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(),
630 parser.parseMessage(result.slice(4,result.readableBytes() - 4), Collections.emptyList()));
631 buf = Unpooled.buffer(result.readableBytes());
632 parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf);
633 assertArrayEquals(result.array(), buf.array());
638 public void testMissingLspObjectErrorInPcRptMsg() throws PCEPDeserializerException {
639 final byte[] statefulMsg = {
640 (byte) 0x20, (byte) 0x0B, (byte) 0x00, (byte) 0x1C,
642 (byte) 0x21, (byte) 0x10, (byte) 0x00, (byte) 0x0C,
643 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x001,
644 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01,
645 /* lsp-object is missing*/
647 (byte) 0x07, (byte) 0x10, (byte) 0x00, (byte) 0x0C,
648 /* ipv4 prefix subobject */
649 (byte) 0x81, (byte) 0x08, (byte) 0xFF, (byte) 0xFF,
650 (byte) 0xFF, (byte) 0xFF, (byte) 0x16, (byte) 0x00
653 try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator();
654 StatefulActivator b = new StatefulActivator()) {
657 final Stateful07PCReportMessageParser parser = new Stateful07PCReportMessageParser(
658 this.ctx.getObjectHandlerRegistry());
660 final PcerrMessageBuilder errMsgBuilder = new PcerrMessageBuilder();
661 errMsgBuilder.setErrors(Lists.newArrayList(new ErrorsBuilder()
662 .setErrorObject(new ErrorObjectBuilder()
663 .setType(Uint8.valueOf(6))
664 .setValue(Uint8.valueOf(8))
667 final PcerrBuilder builder = new PcerrBuilder();
668 builder.setPcerrMessage(errMsgBuilder.build());
670 final ByteBuf buf = Unpooled.wrappedBuffer(statefulMsg);
671 final List<Message> errors = new ArrayList<>();
672 parser.parseMessage(buf.slice(4, buf.readableBytes() - 4), errors);
673 assertFalse(errors.isEmpty());
674 assertEquals(builder.build(), errors.get(0));
679 public void testUnexpectedRroObjectInPcUpdMsg() throws PCEPDeserializerException {
680 final byte[] badUpdateMsg = {
681 (byte) 0x20, (byte) 0x0b, (byte) 0x00, (byte) 0x50,
682 /* SRP, LSP and ERO objects */
683 (byte) 0x21, (byte) 0x12, (byte) 0x00, (byte) 0x0c,
684 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
685 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01,
686 (byte) 0x20, (byte) 0x10, (byte) 0x00, (byte) 0x08,
687 (byte) 0x00, (byte) 0x00, (byte) 0x10, (byte) 0x09,
688 (byte) 0x07, (byte) 0x10, (byte) 0x00, (byte) 0x14,
689 (byte) 0x01, (byte) 0x08, (byte) 0x05, (byte) 0x05,
690 (byte) 0x05, (byte) 0x03, (byte) 0x18, (byte) 0x00,
691 (byte) 0x01, (byte) 0x08, (byte) 0x08, (byte) 0x08,
692 (byte) 0x08, (byte) 0x04, (byte) 0x18, (byte) 0x00,
694 (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x24,
695 (byte) 0x01, (byte) 0x08, (byte) 0x0a, (byte) 0x00,
696 (byte) 0x00, (byte) 0x83, (byte) 0x20, (byte) 0x20,
697 (byte) 0x03, (byte) 0x08, (byte) 0x01, (byte) 0x01,
698 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
699 (byte) 0x01, (byte) 0x08, (byte) 0x0a, (byte) 0x00,
700 (byte) 0x09, (byte) 0xde, (byte) 0x20, (byte) 0x00,
701 (byte) 0x03, (byte) 0x08, (byte) 0x01, (byte) 0x01,
702 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00
705 try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator()) {
708 final Stateful07PCUpdateRequestMessageParser parser = new Stateful07PCUpdateRequestMessageParser(
709 this.ctx.getObjectHandlerRegistry());
711 final PcerrMessageBuilder errMsgBuilder = new PcerrMessageBuilder();
712 errMsgBuilder.setErrors(Lists.newArrayList(new ErrorsBuilder()
713 .setErrorObject(new ErrorObjectBuilder()
714 .setType(Uint8.valueOf(6))
715 .setValue(Uint8.valueOf(10))
718 final PcerrBuilder builder = new PcerrBuilder();
719 builder.setPcerrMessage(errMsgBuilder.build());
721 final ByteBuf buf = Unpooled.wrappedBuffer(badUpdateMsg);
722 final List<Message> errors = new ArrayList<>();
723 parser.parseMessage(buf.slice(4, buf.readableBytes() - 4), errors);
724 assertFalse(errors.isEmpty());
725 assertEquals(builder.build(), errors.get(0));