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.Ipv4Address;
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.crabbe.initiated.rev171025.Lsp1;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev171025.Lsp1Builder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev171025.PcinitiateBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev171025.Srp1;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev171025.Srp1Builder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev171025.pcinitiate.message.PcinitiateMessageBuilder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev171025.pcinitiate.message.pcinitiate.message.Requests;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev171025.pcinitiate.message.pcinitiate.message.RequestsBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.OperationalStatus;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.PcrptBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.PcupdBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.PlspId;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.SrpIdNumber;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.Tlvs1;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.Tlvs1Builder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.lsp.identifiers.tlv.LspIdentifiers;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.lsp.identifiers.tlv.LspIdentifiersBuilder;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.lsp.identifiers.tlv.lsp.identifiers.AddressFamily;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.lsp.identifiers.tlv.lsp.identifiers.address.family.Ipv4CaseBuilder;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.lsp.object.Lsp;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.lsp.object.LspBuilder;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.lsp.object.lsp.TlvsBuilder;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcerr.pcerr.message.error.type.StatefulCaseBuilder;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcerr.pcerr.message.error.type.stateful._case.stateful.Srps;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcerr.pcerr.message.error.type.stateful._case.stateful.SrpsBuilder;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcrpt.message.PcrptMessageBuilder;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcrpt.message.pcrpt.message.Reports;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcrpt.message.pcrpt.message.ReportsBuilder;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcupd.message.PcupdMessageBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcupd.message.pcupd.message.Updates;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcupd.message.pcupd.message.UpdatesBuilder;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcupd.message.pcupd.message.updates.PathBuilder;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.srp.object.Srp;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.srp.object.SrpBuilder;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.stateful.capability.tlv.Stateful;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.stateful.capability.tlv.StatefulBuilder;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.OpenBuilder;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.PcerrBuilder;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.ProtocolVersion;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.RequestId;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.address.family.ipv4._case.Ipv4Builder;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.Ero;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.EroBuilder;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.include.route.object.Iro;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.include.route.object.IroBuilder;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.include.route.object.iro.Subobject;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.include.route.object.iro.SubobjectBuilder;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.attributes.Metrics;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.attributes.MetricsBuilder;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lspa.object.Lspa;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lspa.object.LspaBuilder;
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.metric.object.MetricBuilder;
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.message.OpenMessageBuilder;
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcep.error.object.ErrorObject;
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcep.error.object.ErrorObjectBuilder;
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.PcerrMessageBuilder;
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.Errors;
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.ErrorsBuilder;
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.error.type.RequestCaseBuilder;
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.error.type.SessionCaseBuilder;
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.error.type.request._case.RequestBuilder;
101 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.error.type.session._case.SessionBuilder;
102 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reported.route.object.Rro;
103 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reported.route.object.RroBuilder;
104 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rp.object.RpBuilder;
105 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.AttributeFilter;
106 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.Ipv4ExtendedTunnelId;
107 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.LspId;
108 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.TunnelId;
109 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.AsNumberCase;
110 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.AsNumberCaseBuilder;
111 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.as.number._case.AsNumberBuilder;
112 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.record.route.subobjects.subobject.type.UnnumberedCase;
113 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.record.route.subobjects.subobject.type.UnnumberedCaseBuilder;
114 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.record.route.subobjects.subobject.type.unnumbered._case.UnnumberedBuilder;
116 public class PCEPValidatorTest {
119 private Metrics metrics;
126 private org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.bandwidth.object.Bandwidth bandwidth;
127 private org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reoptimization.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() throws Exception {
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.rev131005.lspa.object.lspa.TlvsBuilder().build());
208 this.lspa = lspaBuilder.build();
210 final MetricBuilder mBuilder = new MetricBuilder();
211 mBuilder.setIgnore(false);
212 mBuilder.setProcessingRule(false);
213 mBuilder.setComputed(false);
214 mBuilder.setBound(false);
215 mBuilder.setMetricType((short) 1);
216 mBuilder.setValue(new Float32(new byte[4]));
217 this.metrics = new MetricsBuilder().setMetric(mBuilder.build()).build();
219 this.eroASSubobject = new AsNumberCaseBuilder().setAsNumber(
220 new AsNumberBuilder().setAsNumber(
221 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.AsNumber(0xFFFFL)).build()).build();
223 this.rroUnnumberedSub = new UnnumberedCaseBuilder().setUnnumbered(
224 new UnnumberedBuilder().setRouterId(0x00112233L).setInterfaceId(0x00ff00ffL).build()).build();
226 final IroBuilder iroBuilder = new IroBuilder();
227 iroBuilder.setIgnore(false);
228 iroBuilder.setProcessingRule(false);
229 final List<Subobject> iroSubs = Lists.newArrayList();
230 iroSubs.add(new SubobjectBuilder().setSubobjectType(this.eroASSubobject).setLoose(false).build());
231 iroBuilder.setSubobject(iroSubs);
232 this.iro = iroBuilder.build();
234 final EroBuilder eroBuilder = new EroBuilder();
235 eroBuilder.setIgnore(false);
236 eroBuilder.setProcessingRule(false);
237 final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.ero.Subobject> eroSubs = Lists.newArrayList();
238 eroSubs.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.ero.SubobjectBuilder().setSubobjectType(
239 this.eroASSubobject).setLoose(false).build());
240 eroBuilder.setSubobject(eroSubs);
241 this.ero = eroBuilder.build();
243 final RroBuilder rroBuilder = new RroBuilder();
244 rroBuilder.setIgnore(false);
245 rroBuilder.setProcessingRule(false);
246 final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reported.route.object.rro.Subobject> rroSubs = Lists.newArrayList();
247 rroSubs.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reported.route.object.rro.SubobjectBuilder().setSubobjectType(
248 this.rroUnnumberedSub).setProtectionAvailable(false).setProtectionInUse(false).build());
249 rroBuilder.setSubobject(rroSubs);
250 this.rro = rroBuilder.build();
252 final SrpBuilder srpBuilder = new SrpBuilder();
253 srpBuilder.setIgnore(false);
254 srpBuilder.setProcessingRule(false);
255 srpBuilder.setOperationId(new SrpIdNumber(1L));
256 srpBuilder.addAugmentation(Srp1.class, new Srp1Builder().setRemove(false).build());
257 srpBuilder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.srp.object.srp.TlvsBuilder().build());
258 this.srp = srpBuilder.build();
260 final LspBuilder lspBuilder = new LspBuilder();
261 lspBuilder.setIgnore(false);
262 lspBuilder.setProcessingRule(false);
263 lspBuilder.setAdministrative(false);
264 lspBuilder.setDelegate(false);
265 lspBuilder.setPlspId(new PlspId(0L));
266 lspBuilder.setOperational(OperationalStatus.Down);
267 lspBuilder.setSync(false);
268 lspBuilder.setRemove(false);
269 lspBuilder.setTlvs(new TlvsBuilder().build());
270 lspBuilder.addAugmentation(Lsp1.class, new Lsp1Builder().setCreate(false).build());
272 final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.lsp.identifiers.tlv.lsp.identifiers.address.family.ipv4._case.Ipv4Builder builder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.lsp.identifiers.tlv.lsp.identifiers.address.family.ipv4._case.Ipv4Builder();
273 builder.setIpv4TunnelSenderAddress(new Ipv4Address("127.0.1.1"));
274 final LspId lspId = new LspId(1L);
275 final TunnelId tunnelId = new TunnelId(1);
276 builder.setIpv4ExtendedTunnelId(new Ipv4ExtendedTunnelId(new Ipv4AddressNoZone("127.0.1.2")));
277 builder.setIpv4TunnelEndpointAddress(new Ipv4Address("127.0.1.3"));
278 final AddressFamily afiLsp = new Ipv4CaseBuilder().setIpv4(builder.build()).build();
279 final LspIdentifiers identifier = new LspIdentifiersBuilder().setAddressFamily(afiLsp).setLspId(lspId).setTunnelId(tunnelId).build();
280 this.lspSrp = lspBuilder.build();
281 this.lsp = lspBuilder.setTlvs(new TlvsBuilder().setLspIdentifiers(identifier).build()).build();
283 final Ipv4Builder afi = new Ipv4Builder();
284 afi.setSourceIpv4Address(new Ipv4Address("255.255.255.255"));
285 afi.setDestinationIpv4Address(new Ipv4Address("255.255.255.255"));
287 final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.bandwidth.object.BandwidthBuilder bandwidthBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.bandwidth.object.BandwidthBuilder();
288 bandwidthBuilder.setIgnore(false);
289 bandwidthBuilder.setProcessingRule(false);
290 bandwidthBuilder.setBandwidth(new Bandwidth(new byte[] { (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 }));
291 this.bandwidth = bandwidthBuilder.build();
293 final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reoptimization.bandwidth.object.ReoptimizationBandwidthBuilder reoptimizationBandwidthBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reoptimization.bandwidth.object.ReoptimizationBandwidthBuilder();
294 reoptimizationBandwidthBuilder.setIgnore(false);
295 reoptimizationBandwidthBuilder.setProcessingRule(false);
296 reoptimizationBandwidthBuilder.setBandwidth(new Bandwidth(new byte[] { (byte) 0x47, (byte) 0x74, (byte) 0x24, (byte) 0x00 }));
297 this.reoptimizationBandwidth = reoptimizationBandwidthBuilder.build();
301 public void testOpenMsg() throws IOException, PCEPDeserializerException {
302 try (StatefulActivator a = new StatefulActivator()) {
304 final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCEPOpenMessage1.bin"));
305 final PCEPOpenMessageParser parser = new PCEPOpenMessageParser(this.ctx.getObjectHandlerRegistry());
306 final OpenMessageBuilder builder = new OpenMessageBuilder();
308 final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.OpenBuilder b = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.OpenBuilder();
309 b.setProcessingRule(false);
311 b.setVersion(new ProtocolVersion((short) 1));
312 b.setKeepalive((short) 30);
313 b.setDeadTimer((short) 120);
314 b.setSessionId((short) 1);
315 final Stateful tlv1 = new StatefulBuilder().setLspUpdateCapability(Boolean.TRUE).build();
316 b.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.TlvsBuilder().addAugmentation(
317 Tlvs1.class, new Tlvs1Builder().setStateful(tlv1).build()).build());
318 builder.setOpen(b.build());
320 assertEquals(new OpenBuilder().setOpenMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
321 result.readableBytes() - 4), Collections.emptyList()));
322 final ByteBuf buf = Unpooled.buffer(result.readableBytes());
323 parser.serializeMessage(new OpenBuilder().setOpenMessage(builder.build()).build(), buf);
324 assertArrayEquals(result.array(), buf.array());
329 public void testSyncOptActivator() {
330 try (SyncOptimizationsActivator a = new SyncOptimizationsActivator()) {
337 public void testUpdMsg() throws IOException, PCEPDeserializerException {
338 try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator()) {
340 ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCUpd.2.bin"));
342 final Stateful07PCUpdateRequestMessageParser parser = new Stateful07PCUpdateRequestMessageParser(this.ctx.getObjectHandlerRegistry());
344 final PcupdMessageBuilder builder = new PcupdMessageBuilder();
346 final List<Updates> updates = Lists.newArrayList();
347 final PathBuilder pBuilder = new PathBuilder();
348 pBuilder.setEro(this.ero);
349 pBuilder.setLspa(this.lspa);
350 updates.add(new UpdatesBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build());
351 builder.setUpdates(updates);
353 assertEquals(new PcupdBuilder().setPcupdMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
354 result.readableBytes() - 4), Collections.emptyList()));
355 ByteBuf buf = Unpooled.buffer(result.readableBytes());
356 parser.serializeMessage(new PcupdBuilder().setPcupdMessage(builder.build()).build(), buf);
357 assertArrayEquals(result.array(), buf.array());
359 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCUpd.5.bin"));
361 final List<Updates> updates1 = Lists.newArrayList();
362 final PathBuilder pBuilder1 = new PathBuilder();
363 pBuilder1.setEro(this.ero);
364 pBuilder1.setLspa(this.lspa);
365 updates1.add(new UpdatesBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build());
366 updates1.add(new UpdatesBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder1.build()).build());
367 builder.setUpdates(updates1);
369 assertEquals(new PcupdBuilder().setPcupdMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
370 result.readableBytes() - 4), Collections.emptyList()));
371 buf = Unpooled.buffer(result.readableBytes());
372 parser.serializeMessage(new PcupdBuilder().setPcupdMessage(builder.build()).build(), buf);
373 assertArrayEquals(result.array(), buf.array());
378 public void testRptMsg() throws IOException, PCEPDeserializerException {
379 try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator(); StatefulActivator b = new StatefulActivator()) {
382 ByteBuf result = Unpooled.wrappedBuffer(PCRT1);
384 final Stateful07PCReportMessageParser parser = new Stateful07PCReportMessageParser(this.ctx.getObjectHandlerRegistry());
386 final PcrptMessageBuilder builder = new PcrptMessageBuilder();
388 final List<Reports> reports = Lists.newArrayList();
389 reports.add(new ReportsBuilder().setLsp(this.lsp).build());
390 builder.setReports(reports);
391 final Message parseResult = parser.parseMessage(result.slice(4, result.readableBytes() - 4), Collections.emptyList());
392 assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parseResult);
393 ByteBuf buf = Unpooled.buffer(result.readableBytes());
394 parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
395 assertArrayEquals(result.array(), buf.array());
397 result = Unpooled.wrappedBuffer(PCRT2);
399 final List<Reports> reports1 = Lists.newArrayList();
400 reports1.add(new ReportsBuilder().setLsp(this.lsp).setPath(
401 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcrpt.message.pcrpt.message.reports.PathBuilder().setEro(
402 this.ero).setLspa(this.lspa).build()).build());
403 builder.setReports(reports1);
405 final ByteBuf input = result.slice(4, result.readableBytes() - 4);
406 assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parser.parseMessage(input, Collections.emptyList()));
407 buf = Unpooled.buffer(result.readableBytes());
408 parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
409 assertArrayEquals(result.array(), buf.array());
411 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRpt.3.bin"));
413 final List<Reports> reports2 = Lists.newArrayList();
414 final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcrpt.message.pcrpt.message.reports.PathBuilder pBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcrpt.message.pcrpt.message.reports.PathBuilder();
415 pBuilder.setEro(this.ero);
416 pBuilder.setLspa(this.lspa);
417 pBuilder.setMetrics(Lists.newArrayList(this.metrics, this.metrics));
418 pBuilder.setRro(this.rro);
419 reports2.add(new ReportsBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build());
420 builder.setReports(reports2);
422 assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
423 result.readableBytes() - 4), Collections.emptyList()));
424 buf = Unpooled.buffer(result.readableBytes());
425 parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
426 assertArrayEquals(result.array(), buf.array());
428 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRpt.5.bin"));
430 final List<Reports> reports3 = Lists.newArrayList();
431 final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcrpt.message.pcrpt.message.reports.PathBuilder pBuilder1 = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcrpt.message.pcrpt.message.reports.PathBuilder();
432 pBuilder1.setEro(this.ero);
433 pBuilder1.setLspa(this.lspa);
434 pBuilder1.setMetrics(Lists.newArrayList(this.metrics, this.metrics));
435 pBuilder1.setRro(this.rro);
436 reports3.add(new ReportsBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build());
437 reports3.add(new ReportsBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder1.build()).build());
438 builder.setReports(reports3);
440 assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
441 result.readableBytes() - 4), Collections.emptyList()));
442 buf = Unpooled.buffer(result.readableBytes());
443 parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
444 assertArrayEquals(result.array(), buf.array());
446 result = Unpooled.wrappedBuffer(PCRT3);
448 final List<Reports> reports4 = Lists.newArrayList();
449 reports4.add(new ReportsBuilder().setLsp(this.lsp).setPath(
450 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcrpt.message.pcrpt.message.reports.PathBuilder().setEro(
451 this.ero).setLspa(this.lspa).setBandwidth(this.bandwidth).setReoptimizationBandwidth(this.reoptimizationBandwidth).build()).build());
452 builder.setReports(reports4);
454 final ByteBuf input2 = result.slice(4, result.readableBytes() - 4);
455 assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parser.parseMessage(input2, Collections.emptyList()));
456 buf = Unpooled.buffer(result.readableBytes());
457 parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
458 assertArrayEquals(result.array(), buf.array());
463 public void testPcinitMsg() throws IOException, PCEPDeserializerException {
464 try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator()) {
466 final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/Pcinit.bin"));
468 final CInitiated00PCInitiateMessageParser parser = new CInitiated00PCInitiateMessageParser(this.ctx.getObjectHandlerRegistry());
470 final PcinitiateMessageBuilder builder = new PcinitiateMessageBuilder();
471 final RequestsBuilder rBuilder = new RequestsBuilder();
473 final List<Requests> reqs = Lists.newArrayList();
474 rBuilder.setSrp(this.srp);
475 rBuilder.setLsp(this.lspSrp);
476 rBuilder.setEro(this.ero);
477 rBuilder.setLspa(this.lspa);
478 rBuilder.setMetrics(Lists.newArrayList(this.metrics));
479 rBuilder.setIro(this.iro);
480 reqs.add(rBuilder.build());
481 builder.setRequests(reqs);
483 assertEquals(new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
484 result.readableBytes() - 4), Collections.emptyList()));
485 final ByteBuf buf = Unpooled.buffer(result.readableBytes());
486 parser.serializeMessage(new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build(), buf);
487 assertArrayEquals(result.array(), buf.array());
492 public void testErrorMsg() throws IOException, PCEPDeserializerException {
493 try (StatefulActivator a = new StatefulActivator()) {
495 final Stateful07ErrorMessageParser parser = new Stateful07ErrorMessageParser(this.ctx.getObjectHandlerRegistry());
497 ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.1.bin"));
498 ErrorObject error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false).setType((short) 19).setValue(
501 List<Errors> innerErr = new ArrayList<>();
502 innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
504 PcerrMessageBuilder builder = new PcerrMessageBuilder();
505 builder.setErrors(innerErr);
506 final List<Srps> srps = new ArrayList<>();
507 srps.add(new SrpsBuilder().setSrp(new SrpBuilder().setOperationId(new SrpIdNumber(3L)).setIgnore(false).setProcessingRule(false).setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.srp.object.srp.TlvsBuilder().build()).build()).build());
508 builder.setErrorType(new StatefulCaseBuilder().setStateful(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev171025.pcerr.pcerr.message.error.type.stateful._case.StatefulBuilder().setSrps(srps).build()).build());
510 assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
511 result.readableBytes() - 4), Collections.emptyList()));
512 ByteBuf buf = Unpooled.buffer(result.readableBytes());
513 parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf);
514 assertArrayEquals(result.array(), buf.array());
516 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.5.bin"));
517 error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false).setType((short) 3).setValue((short) 1).build();
519 innerErr = new ArrayList<>();
520 builder = new PcerrMessageBuilder();
522 final RpBuilder rpBuilder = new RpBuilder();
523 rpBuilder.setProcessingRule(true);
524 rpBuilder.setIgnore(false);
525 rpBuilder.setReoptimization(false);
526 rpBuilder.setBiDirectional(false);
527 rpBuilder.setLoose(true);
528 rpBuilder.setMakeBeforeBreak(false);
529 rpBuilder.setOrder(false);
530 rpBuilder.setPathKey(false);
531 rpBuilder.setSupplyOf(false);
532 rpBuilder.setFragmentation(false);
533 rpBuilder.setP2mp(false);
534 rpBuilder.setEroCompression(false);
535 rpBuilder.setPriority((short) 1);
536 rpBuilder.setRequestId(new RequestId(10L));
537 rpBuilder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rp.object.rp.TlvsBuilder().build());
538 rpBuilder.setProcessingRule(false);
539 final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.error.type.request._case.request.Rps> rps = Lists.newArrayList();
540 rps.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.error.type.request._case.request.RpsBuilder().setRp(
541 rpBuilder.build()).build());
543 innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
545 builder.setErrors(innerErr);
546 builder.setErrorType(new RequestCaseBuilder().setRequest(new RequestBuilder().setRps(rps).build()).build());
548 assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
549 result.readableBytes() - 4), Collections.emptyList()));
550 buf = Unpooled.buffer(result.readableBytes());
551 parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf);
552 assertArrayEquals(result.array(), buf.array());
554 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.3.bin"));
556 builder = new PcerrMessageBuilder();
557 error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false).setType((short) 3).setValue((short) 1).build();
559 innerErr = new ArrayList<>();
560 innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
562 builder.setErrors(innerErr);
563 builder.setErrorType(new SessionCaseBuilder().setSession(new SessionBuilder().setOpen(
564 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.OpenBuilder()
565 .setDeadTimer((short) 1)
566 .setKeepalive((short) 1)
567 .setVersion(new ProtocolVersion((short) 1))
568 .setSessionId((short) 0)
570 .setProcessingRule(false)
571 .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.TlvsBuilder().build())
572 .build()).build()).build());
574 assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
575 result.readableBytes() - 4), Collections.emptyList()));
576 buf = Unpooled.buffer(result.readableBytes());
577 parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf);
578 assertArrayEquals(result.array(), buf.array());
583 public void testMissingLspObjectErrorInPcRptMsg() throws PCEPDeserializerException {
584 final byte[] statefulMsg= {
585 (byte) 0x20, (byte) 0x0B, (byte) 0x00, (byte) 0x1C,
587 (byte) 0x21, (byte) 0x10, (byte) 0x00, (byte) 0x0C,
588 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x001,
589 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01,
590 /* lsp-object is missing*/
592 (byte) 0x07, (byte) 0x10, (byte) 0x00, (byte) 0x0C,
593 /* ipv4 prefix subobject */
594 (byte) 0x81, (byte) 0x08, (byte) 0xFF, (byte) 0xFF,
595 (byte) 0xFF, (byte) 0xFF, (byte) 0x16, (byte) 0x00
598 try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator();
599 StatefulActivator b = new StatefulActivator()) {
602 final Stateful07PCReportMessageParser parser = new Stateful07PCReportMessageParser(
603 this.ctx.getObjectHandlerRegistry());
605 final PcerrMessageBuilder errMsgBuilder = new PcerrMessageBuilder();
606 errMsgBuilder.setErrors(Lists.newArrayList(new ErrorsBuilder()
607 .setErrorObject(new ErrorObjectBuilder().setType((short) 6).setValue((short) 8).build()).build()));
608 final PcerrBuilder builder = new PcerrBuilder();
609 builder.setPcerrMessage(errMsgBuilder.build());
611 final ByteBuf buf = Unpooled.wrappedBuffer(statefulMsg);
612 final List<Message> errors = Lists.newArrayList();
613 parser.parseMessage(buf.slice(4, buf.readableBytes() - 4), errors);
614 assertFalse(errors.isEmpty());
615 assertEquals(builder.build(), errors.get(0));
620 public void testUnexpectedRroObjectInPcUpdMsg() throws PCEPDeserializerException {
621 final byte[] badUpdateMsg = {
622 (byte) 0x20, (byte) 0x0b, (byte) 0x00, (byte) 0x50,
623 /* SRP, LSP and ERO objects */
624 (byte) 0x21, (byte) 0x12, (byte) 0x00, (byte) 0x0c,
625 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
626 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01,
627 (byte) 0x20, (byte) 0x10, (byte) 0x00, (byte) 0x08,
628 (byte) 0x00, (byte) 0x00, (byte) 0x10, (byte) 0x09,
629 (byte) 0x07, (byte) 0x10, (byte) 0x00, (byte) 0x14,
630 (byte) 0x01, (byte) 0x08, (byte) 0x05, (byte) 0x05,
631 (byte) 0x05, (byte) 0x03, (byte) 0x18, (byte) 0x00,
632 (byte) 0x01, (byte) 0x08, (byte) 0x08, (byte) 0x08,
633 (byte) 0x08, (byte) 0x04, (byte) 0x18, (byte) 0x00,
635 (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x24,
636 (byte) 0x01, (byte) 0x08, (byte) 0x0a, (byte) 0x00,
637 (byte) 0x00, (byte) 0x83, (byte) 0x20, (byte) 0x20,
638 (byte) 0x03, (byte) 0x08, (byte) 0x01, (byte) 0x01,
639 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
640 (byte) 0x01, (byte) 0x08, (byte) 0x0a, (byte) 0x00,
641 (byte) 0x09, (byte) 0xde, (byte) 0x20, (byte) 0x00,
642 (byte) 0x03, (byte) 0x08, (byte) 0x01, (byte) 0x01,
643 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00
646 try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator()) {
649 final Stateful07PCUpdateRequestMessageParser parser = new Stateful07PCUpdateRequestMessageParser(
650 this.ctx.getObjectHandlerRegistry());
652 final PcerrMessageBuilder errMsgBuilder = new PcerrMessageBuilder();
653 errMsgBuilder.setErrors(Lists.newArrayList(new ErrorsBuilder()
654 .setErrorObject(new ErrorObjectBuilder().setType((short) 6).setValue((short) 10).build()).build()));
655 final PcerrBuilder builder = new PcerrBuilder();
656 builder.setPcerrMessage(errMsgBuilder.build());
658 final ByteBuf buf = Unpooled.wrappedBuffer(badUpdateMsg);
659 final List<Message> errors = Lists.newArrayList();
660 parser.parseMessage(buf.slice(4, buf.readableBytes() - 4), errors);
661 assertFalse(errors.isEmpty());
662 assertEquals(builder.build(), errors.get(0));