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 com.google.common.primitives.Bytes;
16 import io.netty.buffer.ByteBuf;
17 import io.netty.buffer.Unpooled;
18 import java.io.IOException;
19 import java.util.ArrayList;
20 import java.util.Arrays;
21 import java.util.Collections;
22 import java.util.List;
23 import org.junit.Before;
24 import org.junit.Test;
25 import org.opendaylight.protocol.pcep.ietf.initiated00.CInitiated00PCInitiateMessageParser;
26 import org.opendaylight.protocol.pcep.ietf.initiated00.CrabbeInitiatedActivator;
27 import org.opendaylight.protocol.pcep.ietf.stateful07.Stateful07ErrorMessageParser;
28 import org.opendaylight.protocol.pcep.ietf.stateful07.Stateful07PCReportMessageParser;
29 import org.opendaylight.protocol.pcep.ietf.stateful07.Stateful07PCUpdateRequestMessageParser;
30 import org.opendaylight.protocol.pcep.ietf.stateful07.StatefulActivator;
31 import org.opendaylight.protocol.pcep.parser.BaseParserExtensionActivator;
32 import org.opendaylight.protocol.pcep.parser.message.PCEPOpenMessageParser;
33 import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
34 import org.opendaylight.protocol.pcep.spi.pojo.SimplePCEPExtensionProviderContext;
35 import org.opendaylight.protocol.pcep.sync.optimizations.SyncOptimizationsActivator;
36 import org.opendaylight.protocol.util.ByteArray;
37 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ieee754.rev130819.Float32;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.network.concepts.rev131125.Bandwidth;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Lsp1;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Lsp1Builder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.PcinitiateBuilder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Srp1;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Srp1Builder;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.pcinitiate.message.PcinitiateMessageBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.pcinitiate.message.pcinitiate.message.Requests;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.pcinitiate.message.pcinitiate.message.RequestsBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.OperationalStatus;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.PcrptBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.PcupdBuilder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.PlspId;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.SrpIdNumber;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Tlvs1;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Tlvs1Builder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.identifiers.tlv.LspIdentifiers;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.identifiers.tlv.LspIdentifiersBuilder;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.identifiers.tlv.lsp.identifiers.AddressFamily;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.identifiers.tlv.lsp.identifiers.address.family.Ipv4CaseBuilder;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.Lsp;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.LspBuilder;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.lsp.TlvsBuilder;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcerr.pcerr.message.error.type.StatefulCaseBuilder;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcerr.pcerr.message.error.type.stateful._case.stateful.Srps;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcerr.pcerr.message.error.type.stateful._case.stateful.SrpsBuilder;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcrpt.message.PcrptMessageBuilder;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcrpt.message.pcrpt.message.Reports;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcrpt.message.pcrpt.message.ReportsBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcupd.message.PcupdMessageBuilder;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcupd.message.pcupd.message.Updates;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcupd.message.pcupd.message.UpdatesBuilder;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcupd.message.pcupd.message.updates.PathBuilder;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.srp.object.Srp;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.srp.object.SrpBuilder;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.stateful.capability.tlv.Stateful;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.stateful.capability.tlv.StatefulBuilder;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.OpenBuilder;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.PcerrBuilder;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.ProtocolVersion;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.RequestId;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.address.family.ipv4._case.Ipv4Builder;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.Ero;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.EroBuilder;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.include.route.object.Iro;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.include.route.object.IroBuilder;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.include.route.object.iro.Subobject;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.include.route.object.iro.SubobjectBuilder;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.attributes.Metrics;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.attributes.MetricsBuilder;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lspa.object.Lspa;
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lspa.object.LspaBuilder;
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.metric.object.MetricBuilder;
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.message.OpenMessageBuilder;
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcep.error.object.ErrorObject;
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcep.error.object.ErrorObjectBuilder;
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.PcerrMessageBuilder;
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.Errors;
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.ErrorsBuilder;
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.error.type.RequestCaseBuilder;
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.error.type.SessionCaseBuilder;
101 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.error.type.request._case.RequestBuilder;
102 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.error.type.session._case.SessionBuilder;
103 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reported.route.object.Rro;
104 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reported.route.object.RroBuilder;
105 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rp.object.RpBuilder;
106 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.AttributeFilter;
107 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.Ipv4ExtendedTunnelId;
108 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.LspId;
109 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.TunnelId;
110 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.AsNumberCase;
111 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.AsNumberCaseBuilder;
112 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.as.number._case.AsNumberBuilder;
113 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.record.route.subobjects.subobject.type.UnnumberedCase;
114 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.record.route.subobjects.subobject.type.UnnumberedCaseBuilder;
115 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.record.route.subobjects.subobject.type.unnumbered._case.UnnumberedBuilder;
117 public class PCEPValidatorTest {
120 private Metrics metrics;
127 private org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.bandwidth.object.Bandwidth bandwidth;
128 private org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reoptimization.bandwidth.object.ReoptimizationBandwidth reoptimizationBandwidth;
130 private AsNumberCase eroASSubobject;
131 private UnnumberedCase rroUnnumberedSub;
133 private SimplePCEPExtensionProviderContext ctx;
134 private BaseParserExtensionActivator act;
136 private static final byte[] PCRT1 = {
137 (byte) 0x20, (byte) 0x0A, (byte) 0x00, (byte) 0x20,
139 (byte) 0x20, (byte) 0x10, (byte) 0x00, (byte) 0x1C,
140 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, //Skip
141 (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x10, //TLV Type + TLV Length
142 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x01, //TLV 127.0.1.1
143 (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x01, //TLV LSP Id + Tunnel id
144 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x02, //TLV Ipv4ExtendedTunnelId 127.0.1.2
145 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x03, //TLV TunnelEndpointAddress 127.0.1.3
148 private static final byte[] PCRT2 = {
149 (byte) 0x20, (byte) 0x0A, (byte) 0x00, (byte) 0x3C,
151 (byte) 0x20, (byte) 0x10, (byte) 0x00, (byte) 0x1C, //(byte) 0x39,
152 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, //Skip
153 (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x10, //TLV Type + TLV Length
154 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x01, //TLV 127.0.1.1
155 (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x01, //TLV LSP Id + Tunnel id
156 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x02, //TLV Ipv4ExtendedTunnelId 127.0.1.2
157 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x03, //TLV TunnelEndpointAddress 127.0.1.3
159 (byte) 0x07, (byte) 0x10, (byte) 0x00, (byte) 0x08,
160 (byte) 0x20, (byte) 0x04, (byte) 0xFF, (byte) 0xFF,
161 (byte) 0x09, (byte) 0x10, (byte) 0x00, (byte) 0x14,
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,
165 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00
168 private static final byte[] PCRT3 = {
169 (byte) 0x20, (byte) 0x0A, (byte) 0x00, (byte) 0x4C,
171 (byte) 0x20, (byte) 0x10, (byte) 0x00, (byte) 0x1C, //(byte) 0x39,
172 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, //Skip
173 (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x10, //TLV Type + TLV Length
174 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x01, //TLV 127.0.1.1
175 (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x01, //TLV LSP Id + Tunnel id
176 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x02, //TLV Ipv4ExtendedTunnelId 127.0.1.2
177 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x03, //TLV TunnelEndpointAddress 127.0.1.3
179 (byte) 0x07, (byte) 0x10, (byte) 0x00, (byte) 0x08,
180 (byte) 0x20, (byte) 0x04, (byte) 0xFF, (byte) 0xFF,
181 (byte) 0x09, (byte) 0x10, (byte) 0x00, (byte) 0x14,
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,
185 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
187 (byte) 0x05, (byte) 0x10, (byte) 0x00, (byte) 0x08,
188 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
189 (byte) 0x05, (byte) 0x20, (byte) 0x00, (byte) 0x08,
190 (byte) 0x47, (byte) 0x74, (byte) 0x24, (byte) 0x00
194 public void setUp() throws Exception {
195 this.ctx = new SimplePCEPExtensionProviderContext();
196 this.act = new BaseParserExtensionActivator();
197 this.act.start(this.ctx);
199 final LspaBuilder lspaBuilder = new LspaBuilder();
200 lspaBuilder.setProcessingRule(false);
201 lspaBuilder.setIgnore(false);
202 lspaBuilder.setLocalProtectionDesired(false);
203 lspaBuilder.setHoldPriority((short) 0);
204 lspaBuilder.setSetupPriority((short) 0);
205 lspaBuilder.setExcludeAny(new AttributeFilter(0L));
206 lspaBuilder.setIncludeAll(new AttributeFilter(0L));
207 lspaBuilder.setIncludeAny(new AttributeFilter(0L));
208 lspaBuilder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.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(
221 new AsNumberBuilder().setAsNumber(
222 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.AsNumber(0xFFFFL)).build()).build();
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 = Lists.newArrayList();
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.rev131005.explicit.route.object.ero.Subobject> eroSubs = Lists.newArrayList();
239 eroSubs.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.ero.SubobjectBuilder().setSubobjectType(
240 this.eroASSubobject).setLoose(false).build());
241 eroBuilder.setSubobject(eroSubs);
242 this.ero = eroBuilder.build();
244 final RroBuilder rroBuilder = new RroBuilder();
245 rroBuilder.setIgnore(false);
246 rroBuilder.setProcessingRule(false);
247 final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reported.route.object.rro.Subobject> rroSubs = Lists.newArrayList();
248 rroSubs.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reported.route.object.rro.SubobjectBuilder().setSubobjectType(
249 this.rroUnnumberedSub).setProtectionAvailable(false).setProtectionInUse(false).build());
250 rroBuilder.setSubobject(rroSubs);
251 this.rro = rroBuilder.build();
253 final SrpBuilder srpBuilder = new SrpBuilder();
254 srpBuilder.setIgnore(false);
255 srpBuilder.setProcessingRule(false);
256 srpBuilder.setOperationId(new SrpIdNumber(1L));
257 srpBuilder.addAugmentation(Srp1.class, new Srp1Builder().setRemove(false).build());
258 srpBuilder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.srp.object.srp.TlvsBuilder().build());
259 this.srp = srpBuilder.build();
261 final LspBuilder lspBuilder = new LspBuilder();
262 lspBuilder.setIgnore(false);
263 lspBuilder.setProcessingRule(false);
264 lspBuilder.setAdministrative(false);
265 lspBuilder.setDelegate(false);
266 lspBuilder.setPlspId(new PlspId(0L));
267 lspBuilder.setOperational(OperationalStatus.Down);
268 lspBuilder.setSync(false);
269 lspBuilder.setRemove(false);
270 lspBuilder.setTlvs(new TlvsBuilder().build());
271 lspBuilder.addAugmentation(Lsp1.class, new Lsp1Builder().setCreate(false).build());
273 final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.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.rev131222.lsp.identifiers.tlv.lsp.identifiers.address.family.ipv4._case.Ipv4Builder();
274 builder.setIpv4TunnelSenderAddress(new Ipv4Address("127.0.1.1"));
275 final LspId lspId = new LspId(1L);
276 final TunnelId tunnelId = new TunnelId(1);
277 builder.setIpv4ExtendedTunnelId(new Ipv4ExtendedTunnelId(new Ipv4Address("127.0.1.2")));
278 builder.setIpv4TunnelEndpointAddress(new Ipv4Address("127.0.1.3"));
279 final AddressFamily afiLsp = new Ipv4CaseBuilder().setIpv4(builder.build()).build();
280 final LspIdentifiers identifier = new LspIdentifiersBuilder().setAddressFamily(afiLsp).setLspId(lspId).setTunnelId(tunnelId).build();
281 this.lspSrp = lspBuilder.build();
282 this.lsp = lspBuilder.setTlvs(new TlvsBuilder().setLspIdentifiers(identifier).build()).build();
284 final Ipv4Builder afi = new Ipv4Builder();
285 afi.setSourceIpv4Address(new Ipv4Address("255.255.255.255"));
286 afi.setDestinationIpv4Address(new Ipv4Address("255.255.255.255"));
288 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();
289 bandwidthBuilder.setIgnore(false);
290 bandwidthBuilder.setProcessingRule(false);
291 bandwidthBuilder.setBandwidth(new Bandwidth(new byte[] { (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 }));
292 this.bandwidth = bandwidthBuilder.build();
294 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();
295 reoptimizationBandwidthBuilder.setIgnore(false);
296 reoptimizationBandwidthBuilder.setProcessingRule(false);
297 reoptimizationBandwidthBuilder.setBandwidth(new Bandwidth(new byte[] { (byte) 0x47, (byte) 0x74, (byte) 0x24, (byte) 0x00 }));
298 this.reoptimizationBandwidth = reoptimizationBandwidthBuilder.build();
302 public void testOpenMsg() throws IOException, PCEPDeserializerException {
303 try (StatefulActivator a = new StatefulActivator()) {
305 final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCEPOpenMessage1.bin"));
306 final PCEPOpenMessageParser parser = new PCEPOpenMessageParser(this.ctx.getObjectHandlerRegistry());
307 final OpenMessageBuilder builder = new OpenMessageBuilder();
309 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();
310 b.setProcessingRule(false);
312 b.setVersion(new ProtocolVersion((short) 1));
313 b.setKeepalive((short) 30);
314 b.setDeadTimer((short) 120);
315 b.setSessionId((short) 1);
316 final Stateful tlv1 = new StatefulBuilder().setLspUpdateCapability(Boolean.TRUE).build();
317 b.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.TlvsBuilder().addAugmentation(
318 Tlvs1.class, new Tlvs1Builder().setStateful(tlv1).build()).build());
319 builder.setOpen(b.build());
321 assertEquals(new OpenBuilder().setOpenMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
322 result.readableBytes() - 4), Collections.emptyList()));
323 final ByteBuf buf = Unpooled.buffer(result.readableBytes());
324 parser.serializeMessage(new OpenBuilder().setOpenMessage(builder.build()).build(), buf);
325 assertArrayEquals(result.array(), buf.array());
330 public void testSyncOptActivator() {
331 try (SyncOptimizationsActivator a = new SyncOptimizationsActivator()) {
338 public void testUpdMsg() throws IOException, PCEPDeserializerException {
339 try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator()) {
341 ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCUpd.2.bin"));
343 final Stateful07PCUpdateRequestMessageParser parser = new Stateful07PCUpdateRequestMessageParser(this.ctx.getObjectHandlerRegistry());
345 final PcupdMessageBuilder builder = new PcupdMessageBuilder();
347 final List<Updates> updates = Lists.newArrayList();
348 final PathBuilder pBuilder = new PathBuilder();
349 pBuilder.setEro(this.ero);
350 pBuilder.setLspa(this.lspa);
351 updates.add(new UpdatesBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build());
352 builder.setUpdates(updates);
354 assertEquals(new PcupdBuilder().setPcupdMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
355 result.readableBytes() - 4), Collections.emptyList()));
356 ByteBuf buf = Unpooled.buffer(result.readableBytes());
357 parser.serializeMessage(new PcupdBuilder().setPcupdMessage(builder.build()).build(), buf);
358 assertArrayEquals(result.array(), buf.array());
360 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCUpd.5.bin"));
362 final List<Updates> updates1 = Lists.newArrayList();
363 final PathBuilder pBuilder1 = new PathBuilder();
364 pBuilder1.setEro(this.ero);
365 pBuilder1.setLspa(this.lspa);
366 updates1.add(new UpdatesBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build());
367 updates1.add(new UpdatesBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder1.build()).build());
368 builder.setUpdates(updates1);
370 assertEquals(new PcupdBuilder().setPcupdMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
371 result.readableBytes() - 4), Collections.emptyList()));
372 buf = Unpooled.buffer(result.readableBytes());
373 parser.serializeMessage(new PcupdBuilder().setPcupdMessage(builder.build()).build(), buf);
374 assertArrayEquals(result.array(), buf.array());
379 public void testRptMsg() throws IOException, PCEPDeserializerException {
380 try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator(); StatefulActivator b = new StatefulActivator()) {
383 ByteBuf result = Unpooled.wrappedBuffer(PCRT1);
385 final Stateful07PCReportMessageParser parser = new Stateful07PCReportMessageParser(this.ctx.getObjectHandlerRegistry());
387 final PcrptMessageBuilder builder = new PcrptMessageBuilder();
389 final List<Reports> reports = Lists.newArrayList();
390 reports.add(new ReportsBuilder().setLsp(this.lsp).build());
391 builder.setReports(reports);
392 final Message parseResult = parser.parseMessage(result.slice(4, result.readableBytes() - 4), Collections.emptyList());
393 assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parseResult);
394 ByteBuf buf = Unpooled.buffer(result.readableBytes());
395 parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
396 assertArrayEquals(result.array(), buf.array());
398 result = Unpooled.wrappedBuffer(PCRT2);
400 final List<Reports> reports1 = Lists.newArrayList();
401 reports1.add(new ReportsBuilder().setLsp(this.lsp).setPath(
402 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcrpt.message.pcrpt.message.reports.PathBuilder().setEro(
403 this.ero).setLspa(this.lspa).build()).build());
404 builder.setReports(reports1);
406 final ByteBuf input = result.slice(4, result.readableBytes() - 4);
407 assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parser.parseMessage(input, Collections.emptyList()));
408 buf = Unpooled.buffer(result.readableBytes());
409 parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
410 assertArrayEquals(result.array(), buf.array());
412 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRpt.3.bin"));
414 final List<Reports> reports2 = Lists.newArrayList();
415 final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcrpt.message.pcrpt.message.reports.PathBuilder pBuilder = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcrpt.message.pcrpt.message.reports.PathBuilder();
416 pBuilder.setEro(this.ero);
417 pBuilder.setLspa(this.lspa);
418 pBuilder.setMetrics(Lists.newArrayList(this.metrics, this.metrics));
419 pBuilder.setRro(this.rro);
420 reports2.add(new ReportsBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build());
421 builder.setReports(reports2);
423 assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
424 result.readableBytes() - 4), Collections.emptyList()));
425 buf = Unpooled.buffer(result.readableBytes());
426 parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
427 assertArrayEquals(result.array(), buf.array());
429 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRpt.5.bin"));
431 final List<Reports> reports3 = Lists.newArrayList();
432 final org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcrpt.message.pcrpt.message.reports.PathBuilder pBuilder1 = new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcrpt.message.pcrpt.message.reports.PathBuilder();
433 pBuilder1.setEro(this.ero);
434 pBuilder1.setLspa(this.lspa);
435 pBuilder1.setMetrics(Lists.newArrayList(this.metrics, this.metrics));
436 pBuilder1.setRro(this.rro);
437 reports3.add(new ReportsBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build());
438 reports3.add(new ReportsBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder1.build()).build());
439 builder.setReports(reports3);
441 assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
442 result.readableBytes() - 4), Collections.emptyList()));
443 buf = Unpooled.buffer(result.readableBytes());
444 parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
445 assertArrayEquals(result.array(), buf.array());
447 result = Unpooled.wrappedBuffer(PCRT3);
449 final List<Reports> reports4 = Lists.newArrayList();
450 reports4.add(new ReportsBuilder().setLsp(this.lsp).setPath(
451 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcrpt.message.pcrpt.message.reports.PathBuilder().setEro(
452 this.ero).setLspa(this.lspa).setBandwidth(this.bandwidth).setReoptimizationBandwidth(this.reoptimizationBandwidth).build()).build());
453 builder.setReports(reports4);
455 final ByteBuf input2 = result.slice(4, result.readableBytes() - 4);
456 assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parser.parseMessage(input2, Collections.emptyList()));
457 buf = Unpooled.buffer(result.readableBytes());
458 parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
459 assertArrayEquals(result.array(), buf.array());
464 public void testPcinitMsg() throws IOException, PCEPDeserializerException {
465 try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator()) {
467 final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/Pcinit.bin"));
469 final CInitiated00PCInitiateMessageParser parser = new CInitiated00PCInitiateMessageParser(this.ctx.getObjectHandlerRegistry());
471 final PcinitiateMessageBuilder builder = new PcinitiateMessageBuilder();
472 final RequestsBuilder rBuilder = new RequestsBuilder();
474 final List<Requests> reqs = Lists.newArrayList();
475 rBuilder.setSrp(this.srp);
476 rBuilder.setLsp(this.lspSrp);
477 rBuilder.setEro(this.ero);
478 rBuilder.setLspa(this.lspa);
479 rBuilder.setMetrics(Lists.newArrayList(this.metrics));
480 rBuilder.setIro(this.iro);
481 reqs.add(rBuilder.build());
482 builder.setRequests(reqs);
484 assertEquals(new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
485 result.readableBytes() - 4), Collections.emptyList()));
486 final ByteBuf buf = Unpooled.buffer(result.readableBytes());
487 parser.serializeMessage(new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build(), buf);
488 assertArrayEquals(result.array(), buf.array());
493 public void testErrorMsg() throws IOException, PCEPDeserializerException {
494 try (StatefulActivator a = new StatefulActivator()) {
496 final Stateful07ErrorMessageParser parser = new Stateful07ErrorMessageParser(this.ctx.getObjectHandlerRegistry());
498 ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.1.bin"));
499 ErrorObject error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false).setType((short) 19).setValue(
502 List<Errors> innerErr = new ArrayList<>();
503 innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
505 PcerrMessageBuilder builder = new PcerrMessageBuilder();
506 builder.setErrors(innerErr);
507 final List<Srps> srps = new ArrayList<>();
508 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.rev131222.srp.object.srp.TlvsBuilder().build()).build()).build());
509 builder.setErrorType(new StatefulCaseBuilder().setStateful(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcerr.pcerr.message.error.type.stateful._case.StatefulBuilder().setSrps(srps).build()).build());
511 assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
512 result.readableBytes() - 4), Collections.emptyList()));
513 ByteBuf buf = Unpooled.buffer(result.readableBytes());
514 parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf);
515 assertArrayEquals(result.array(), buf.array());
517 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.5.bin"));
518 error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false).setType((short) 3).setValue((short) 1).build();
520 innerErr = new ArrayList<>();
521 builder = new PcerrMessageBuilder();
523 final RpBuilder rpBuilder = new RpBuilder();
524 rpBuilder.setProcessingRule(true);
525 rpBuilder.setIgnore(false);
526 rpBuilder.setReoptimization(false);
527 rpBuilder.setBiDirectional(false);
528 rpBuilder.setLoose(true);
529 rpBuilder.setMakeBeforeBreak(false);
530 rpBuilder.setOrder(false);
531 rpBuilder.setPathKey(false);
532 rpBuilder.setSupplyOf(false);
533 rpBuilder.setFragmentation(false);
534 rpBuilder.setP2mp(false);
535 rpBuilder.setEroCompression(false);
536 rpBuilder.setPriority((short) 1);
537 rpBuilder.setRequestId(new RequestId(10L));
538 rpBuilder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rp.object.rp.TlvsBuilder().build());
539 rpBuilder.setProcessingRule(false);
540 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();
541 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(
542 rpBuilder.build()).build());
544 innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
546 builder.setErrors(innerErr);
547 builder.setErrorType(new RequestCaseBuilder().setRequest(new RequestBuilder().setRps(rps).build()).build());
549 assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
550 result.readableBytes() - 4), Collections.emptyList()));
551 buf = Unpooled.buffer(result.readableBytes());
552 parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf);
553 assertArrayEquals(result.array(), buf.array());
555 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.3.bin"));
557 builder = new PcerrMessageBuilder();
558 error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false).setType((short) 3).setValue((short) 1).build();
560 innerErr = new ArrayList<>();
561 innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
563 builder.setErrors(innerErr);
564 builder.setErrorType(new SessionCaseBuilder().setSession(new SessionBuilder().setOpen(
565 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.OpenBuilder()
566 .setDeadTimer((short) 1)
567 .setKeepalive((short) 1)
568 .setVersion(new ProtocolVersion((short) 1))
569 .setSessionId((short) 0)
571 .setProcessingRule(false)
572 .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.TlvsBuilder().build())
573 .build()).build()).build());
575 assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
576 result.readableBytes() - 4), Collections.emptyList()));
577 buf = Unpooled.buffer(result.readableBytes());
578 parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf);
579 assertArrayEquals(result.array(), buf.array());
584 public void testMissingLspObjectErrorInPcRptMsg() throws PCEPDeserializerException {
585 final byte[] statefulMsg= {
586 (byte) 0x20, (byte) 0x0B, (byte) 0x00, (byte) 0x1C,
588 (byte) 0x21, (byte) 0x10, (byte) 0x00, (byte) 0x0C,
589 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x001,
590 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01,
591 /* lsp-object is missing*/
593 (byte) 0x07, (byte) 0x10, (byte) 0x00, (byte) 0x0C,
594 /* ipv4 prefix subobject */
595 (byte) 0x81, (byte) 0x08, (byte) 0xFF, (byte) 0xFF,
596 (byte) 0xFF, (byte) 0xFF, (byte) 0x16, (byte) 0x00
599 try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator();
600 StatefulActivator b = new StatefulActivator()) {
603 final Stateful07PCReportMessageParser parser = new Stateful07PCReportMessageParser(
604 this.ctx.getObjectHandlerRegistry());
606 final PcerrMessageBuilder errMsgBuilder = new PcerrMessageBuilder();
607 errMsgBuilder.setErrors(Lists.newArrayList(new ErrorsBuilder()
608 .setErrorObject(new ErrorObjectBuilder().setType((short) 6).setValue((short) 8).build()).build()));
609 final PcerrBuilder builder = new PcerrBuilder();
610 builder.setPcerrMessage(errMsgBuilder.build());
612 final ByteBuf buf = Unpooled.wrappedBuffer(statefulMsg);
613 final List<Message> errors = Lists.newArrayList();
614 parser.parseMessage(buf.slice(4, buf.readableBytes() - 4), errors);
615 assertFalse(errors.isEmpty());
616 assertEquals(builder.build(), errors.get(0));
621 public void testUnexpectedRroObjectInPcUpdMsg() throws PCEPDeserializerException {
622 final byte[] badUpdateMsg = {
623 (byte) 0x20, (byte) 0x0b, (byte) 0x00, (byte) 0x50,
624 /* SRP, LSP and ERO objects */
625 (byte) 0x21, (byte) 0x12, (byte) 0x00, (byte) 0x0c,
626 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
627 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01,
628 (byte) 0x20, (byte) 0x10, (byte) 0x00, (byte) 0x08,
629 (byte) 0x00, (byte) 0x00, (byte) 0x10, (byte) 0x09,
630 (byte) 0x07, (byte) 0x10, (byte) 0x00, (byte) 0x14,
631 (byte) 0x01, (byte) 0x08, (byte) 0x05, (byte) 0x05,
632 (byte) 0x05, (byte) 0x03, (byte) 0x18, (byte) 0x00,
633 (byte) 0x01, (byte) 0x08, (byte) 0x08, (byte) 0x08,
634 (byte) 0x08, (byte) 0x04, (byte) 0x18, (byte) 0x00,
636 (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x24,
637 (byte) 0x01, (byte) 0x08, (byte) 0x0a, (byte) 0x00,
638 (byte) 0x00, (byte) 0x83, (byte) 0x20, (byte) 0x20,
639 (byte) 0x03, (byte) 0x08, (byte) 0x01, (byte) 0x01,
640 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
641 (byte) 0x01, (byte) 0x08, (byte) 0x0a, (byte) 0x00,
642 (byte) 0x09, (byte) 0xde, (byte) 0x20, (byte) 0x00,
643 (byte) 0x03, (byte) 0x08, (byte) 0x01, (byte) 0x01,
644 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00
647 try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator()) {
650 final Stateful07PCUpdateRequestMessageParser parser = new Stateful07PCUpdateRequestMessageParser(
651 this.ctx.getObjectHandlerRegistry());
653 final PcerrMessageBuilder errMsgBuilder = new PcerrMessageBuilder();
654 errMsgBuilder.setErrors(Lists.newArrayList(new ErrorsBuilder()
655 .setErrorObject(new ErrorObjectBuilder().setType((short) 6).setValue((short) 10).build()).build()));
656 final PcerrBuilder builder = new PcerrBuilder();
657 builder.setPcerrMessage(errMsgBuilder.build());
659 final ByteBuf buf = Unpooled.wrappedBuffer(badUpdateMsg);
660 final List<Message> errors = Lists.newArrayList();
661 parser.parseMessage(buf.slice(4, buf.readableBytes() - 4), errors);
662 assertFalse(errors.isEmpty());
663 assertEquals(builder.build(), errors.get(0));