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.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.rev131126.Lsp1;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Lsp1Builder;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.PcinitiateBuilder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Srp1;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Srp1Builder;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.pcinitiate.message.PcinitiateMessageBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.pcinitiate.message.pcinitiate.message.Requests;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.pcinitiate.message.pcinitiate.message.RequestsBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.OperationalStatus;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.PcrptBuilder;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.PcupdBuilder;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.PlspId;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.SrpIdNumber;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Tlvs1;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Tlvs1Builder;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.identifiers.tlv.LspIdentifiers;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.identifiers.tlv.LspIdentifiersBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.identifiers.tlv.lsp.identifiers.AddressFamily;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.identifiers.tlv.lsp.identifiers.address.family.Ipv4CaseBuilder;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.Lsp;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.LspBuilder;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.lsp.TlvsBuilder;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcerr.pcerr.message.error.type.StatefulCaseBuilder;
61 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;
62 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;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcrpt.message.PcrptMessageBuilder;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcrpt.message.pcrpt.message.Reports;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcrpt.message.pcrpt.message.ReportsBuilder;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcupd.message.PcupdMessageBuilder;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcupd.message.pcupd.message.Updates;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcupd.message.pcupd.message.UpdatesBuilder;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcupd.message.pcupd.message.updates.PathBuilder;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.srp.object.Srp;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.srp.object.SrpBuilder;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.stateful.capability.tlv.Stateful;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.stateful.capability.tlv.StatefulBuilder;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.OpenBuilder;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.PcerrBuilder;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.ProtocolVersion;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.RequestId;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.address.family.ipv4._case.Ipv4Builder;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.Ero;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.EroBuilder;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.include.route.object.Iro;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.include.route.object.IroBuilder;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.include.route.object.iro.Subobject;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.include.route.object.iro.SubobjectBuilder;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.attributes.Metrics;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.attributes.MetricsBuilder;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lspa.object.Lspa;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lspa.object.LspaBuilder;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.metric.object.MetricBuilder;
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.message.OpenMessageBuilder;
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcep.error.object.ErrorObject;
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcep.error.object.ErrorObjectBuilder;
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.PcerrMessageBuilder;
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.Errors;
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.ErrorsBuilder;
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.error.type.RequestCaseBuilder;
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.error.type.SessionCaseBuilder;
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.error.type.request._case.RequestBuilder;
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.error.type.session._case.SessionBuilder;
101 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reported.route.object.Rro;
102 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reported.route.object.RroBuilder;
103 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rp.object.RpBuilder;
104 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.AttributeFilter;
105 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.Ipv4ExtendedTunnelId;
106 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.LspId;
107 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.TunnelId;
108 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.AsNumberCase;
109 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.AsNumberCaseBuilder;
110 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.as.number._case.AsNumberBuilder;
111 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.record.route.subobjects.subobject.type.UnnumberedCase;
112 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.record.route.subobjects.subobject.type.UnnumberedCaseBuilder;
113 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.record.route.subobjects.subobject.type.unnumbered._case.UnnumberedBuilder;
115 public class PCEPValidatorTest {
118 private Metrics metrics;
125 private org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.bandwidth.object.Bandwidth bandwidth;
126 private org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reoptimization.bandwidth.object.ReoptimizationBandwidth reoptimizationBandwidth;
128 private AsNumberCase eroASSubobject;
129 private UnnumberedCase rroUnnumberedSub;
131 private SimplePCEPExtensionProviderContext ctx;
132 private BaseParserExtensionActivator act;
134 private static final byte[] PCRT1 = {
135 (byte) 0x20, (byte) 0x0A, (byte) 0x00, (byte) 0x20,
137 (byte) 0x20, (byte) 0x10, (byte) 0x00, (byte) 0x1C,
138 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, //Skip
139 (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x10, //TLV Type + TLV Length
140 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x01, //TLV 127.0.1.1
141 (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x01, //TLV LSP Id + Tunnel id
142 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x02, //TLV Ipv4ExtendedTunnelId 127.0.1.2
143 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x03, //TLV TunnelEndpointAddress 127.0.1.3
146 private static final byte[] PCRT2 = {
147 (byte) 0x20, (byte) 0x0A, (byte) 0x00, (byte) 0x3C,
149 (byte) 0x20, (byte) 0x10, (byte) 0x00, (byte) 0x1C, //(byte) 0x39,
150 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, //Skip
151 (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x10, //TLV Type + TLV Length
152 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x01, //TLV 127.0.1.1
153 (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x01, //TLV LSP Id + Tunnel id
154 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x02, //TLV Ipv4ExtendedTunnelId 127.0.1.2
155 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x03, //TLV TunnelEndpointAddress 127.0.1.3
157 (byte) 0x07, (byte) 0x10, (byte) 0x00, (byte) 0x08,
158 (byte) 0x20, (byte) 0x04, (byte) 0xFF, (byte) 0xFF,
159 (byte) 0x09, (byte) 0x10, (byte) 0x00, (byte) 0x14,
160 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
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
166 private static final byte[] PCRT3 = {
167 (byte) 0x20, (byte) 0x0A, (byte) 0x00, (byte) 0x4C,
169 (byte) 0x20, (byte) 0x10, (byte) 0x00, (byte) 0x1C, //(byte) 0x39,
170 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, //Skip
171 (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x10, //TLV Type + TLV Length
172 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x01, //TLV 127.0.1.1
173 (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x01, //TLV LSP Id + Tunnel id
174 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x02, //TLV Ipv4ExtendedTunnelId 127.0.1.2
175 (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x03, //TLV TunnelEndpointAddress 127.0.1.3
177 (byte) 0x07, (byte) 0x10, (byte) 0x00, (byte) 0x08,
178 (byte) 0x20, (byte) 0x04, (byte) 0xFF, (byte) 0xFF,
179 (byte) 0x09, (byte) 0x10, (byte) 0x00, (byte) 0x14,
180 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
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,
185 (byte) 0x05, (byte) 0x10, (byte) 0x00, (byte) 0x08,
186 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
187 (byte) 0x05, (byte) 0x20, (byte) 0x00, (byte) 0x08,
188 (byte) 0x47, (byte) 0x74, (byte) 0x24, (byte) 0x00
192 public void setUp() throws Exception {
193 this.ctx = new SimplePCEPExtensionProviderContext();
194 this.act = new BaseParserExtensionActivator();
195 this.act.start(this.ctx);
197 final LspaBuilder lspaBuilder = new LspaBuilder();
198 lspaBuilder.setProcessingRule(false);
199 lspaBuilder.setIgnore(false);
200 lspaBuilder.setLocalProtectionDesired(false);
201 lspaBuilder.setHoldPriority((short) 0);
202 lspaBuilder.setSetupPriority((short) 0);
203 lspaBuilder.setExcludeAny(new AttributeFilter(0L));
204 lspaBuilder.setIncludeAll(new AttributeFilter(0L));
205 lspaBuilder.setIncludeAny(new AttributeFilter(0L));
206 lspaBuilder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lspa.object.lspa.TlvsBuilder().build());
207 this.lspa = lspaBuilder.build();
209 final MetricBuilder mBuilder = new MetricBuilder();
210 mBuilder.setIgnore(false);
211 mBuilder.setProcessingRule(false);
212 mBuilder.setComputed(false);
213 mBuilder.setBound(false);
214 mBuilder.setMetricType((short) 1);
215 mBuilder.setValue(new Float32(new byte[4]));
216 this.metrics = new MetricsBuilder().setMetric(mBuilder.build()).build();
218 this.eroASSubobject = new AsNumberCaseBuilder().setAsNumber(
219 new AsNumberBuilder().setAsNumber(
220 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.AsNumber(0xFFFFL)).build()).build();
222 this.rroUnnumberedSub = new UnnumberedCaseBuilder().setUnnumbered(
223 new UnnumberedBuilder().setRouterId(0x00112233L).setInterfaceId(0x00ff00ffL).build()).build();
225 final IroBuilder iroBuilder = new IroBuilder();
226 iroBuilder.setIgnore(false);
227 iroBuilder.setProcessingRule(false);
228 final List<Subobject> iroSubs = Lists.newArrayList();
229 iroSubs.add(new SubobjectBuilder().setSubobjectType(this.eroASSubobject).setLoose(false).build());
230 iroBuilder.setSubobject(iroSubs);
231 this.iro = iroBuilder.build();
233 final EroBuilder eroBuilder = new EroBuilder();
234 eroBuilder.setIgnore(false);
235 eroBuilder.setProcessingRule(false);
236 final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.ero.Subobject> eroSubs = Lists.newArrayList();
237 eroSubs.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.ero.SubobjectBuilder().setSubobjectType(
238 this.eroASSubobject).setLoose(false).build());
239 eroBuilder.setSubobject(eroSubs);
240 this.ero = eroBuilder.build();
242 final RroBuilder rroBuilder = new RroBuilder();
243 rroBuilder.setIgnore(false);
244 rroBuilder.setProcessingRule(false);
245 final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reported.route.object.rro.Subobject> rroSubs = Lists.newArrayList();
246 rroSubs.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reported.route.object.rro.SubobjectBuilder().setSubobjectType(
247 this.rroUnnumberedSub).setProtectionAvailable(false).setProtectionInUse(false).build());
248 rroBuilder.setSubobject(rroSubs);
249 this.rro = rroBuilder.build();
251 final SrpBuilder srpBuilder = new SrpBuilder();
252 srpBuilder.setIgnore(false);
253 srpBuilder.setProcessingRule(false);
254 srpBuilder.setOperationId(new SrpIdNumber(1L));
255 srpBuilder.addAugmentation(Srp1.class, new Srp1Builder().setRemove(false).build());
256 srpBuilder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.srp.object.srp.TlvsBuilder().build());
257 this.srp = srpBuilder.build();
259 final LspBuilder lspBuilder = new LspBuilder();
260 lspBuilder.setIgnore(false);
261 lspBuilder.setProcessingRule(false);
262 lspBuilder.setAdministrative(false);
263 lspBuilder.setDelegate(false);
264 lspBuilder.setPlspId(new PlspId(0L));
265 lspBuilder.setOperational(OperationalStatus.Down);
266 lspBuilder.setSync(false);
267 lspBuilder.setRemove(false);
268 lspBuilder.setTlvs(new TlvsBuilder().build());
269 lspBuilder.addAugmentation(Lsp1.class, new Lsp1Builder().setCreate(false).build());
271 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();
272 builder.setIpv4TunnelSenderAddress(new Ipv4Address("127.0.1.1"));
273 final LspId lspId = new LspId(1L);
274 final TunnelId tunnelId = new TunnelId(1);
275 builder.setIpv4ExtendedTunnelId(new Ipv4ExtendedTunnelId(new Ipv4Address("127.0.1.2")));
276 builder.setIpv4TunnelEndpointAddress(new Ipv4Address("127.0.1.3"));
277 final AddressFamily afiLsp = new Ipv4CaseBuilder().setIpv4(builder.build()).build();
278 final LspIdentifiers identifier = new LspIdentifiersBuilder().setAddressFamily(afiLsp).setLspId(lspId).setTunnelId(tunnelId).build();
279 this.lspSrp = lspBuilder.build();
280 this.lsp = lspBuilder.setTlvs(new TlvsBuilder().setLspIdentifiers(identifier).build()).build();
282 final Ipv4Builder afi = new Ipv4Builder();
283 afi.setSourceIpv4Address(new Ipv4Address("255.255.255.255"));
284 afi.setDestinationIpv4Address(new Ipv4Address("255.255.255.255"));
286 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();
287 bandwidthBuilder.setIgnore(false);
288 bandwidthBuilder.setProcessingRule(false);
289 bandwidthBuilder.setBandwidth(new Bandwidth(new byte[] { (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00 }));
290 this.bandwidth = bandwidthBuilder.build();
292 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();
293 reoptimizationBandwidthBuilder.setIgnore(false);
294 reoptimizationBandwidthBuilder.setProcessingRule(false);
295 reoptimizationBandwidthBuilder.setBandwidth(new Bandwidth(new byte[] { (byte) 0x47, (byte) 0x74, (byte) 0x24, (byte) 0x00 }));
296 this.reoptimizationBandwidth = reoptimizationBandwidthBuilder.build();
300 public void testOpenMsg() throws IOException, PCEPDeserializerException {
301 try (StatefulActivator a = new StatefulActivator()) {
303 final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCEPOpenMessage1.bin"));
304 final PCEPOpenMessageParser parser = new PCEPOpenMessageParser(this.ctx.getObjectHandlerRegistry());
305 final OpenMessageBuilder builder = new OpenMessageBuilder();
307 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();
308 b.setProcessingRule(false);
310 b.setVersion(new ProtocolVersion((short) 1));
311 b.setKeepalive((short) 30);
312 b.setDeadTimer((short) 120);
313 b.setSessionId((short) 1);
314 final Stateful tlv1 = new StatefulBuilder().setLspUpdateCapability(Boolean.TRUE).build();
315 b.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.TlvsBuilder().addAugmentation(
316 Tlvs1.class, new Tlvs1Builder().setStateful(tlv1).build()).build());
317 builder.setOpen(b.build());
319 assertEquals(new OpenBuilder().setOpenMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
320 result.readableBytes() - 4), Collections.emptyList()));
321 final ByteBuf buf = Unpooled.buffer(result.readableBytes());
322 parser.serializeMessage(new OpenBuilder().setOpenMessage(builder.build()).build(), buf);
323 assertArrayEquals(result.array(), buf.array());
328 public void testSyncOptActivator() {
329 try (SyncOptimizationsActivator a = new SyncOptimizationsActivator()) {
336 public void testUpdMsg() throws IOException, PCEPDeserializerException {
337 try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator()) {
339 ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCUpd.2.bin"));
341 final Stateful07PCUpdateRequestMessageParser parser = new Stateful07PCUpdateRequestMessageParser(this.ctx.getObjectHandlerRegistry());
343 final PcupdMessageBuilder builder = new PcupdMessageBuilder();
345 final List<Updates> updates = Lists.newArrayList();
346 final PathBuilder pBuilder = new PathBuilder();
347 pBuilder.setEro(this.ero);
348 pBuilder.setLspa(this.lspa);
349 updates.add(new UpdatesBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build());
350 builder.setUpdates(updates);
352 assertEquals(new PcupdBuilder().setPcupdMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
353 result.readableBytes() - 4), Collections.emptyList()));
354 ByteBuf buf = Unpooled.buffer(result.readableBytes());
355 parser.serializeMessage(new PcupdBuilder().setPcupdMessage(builder.build()).build(), buf);
356 assertArrayEquals(result.array(), buf.array());
358 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCUpd.5.bin"));
360 final List<Updates> updates1 = Lists.newArrayList();
361 final PathBuilder pBuilder1 = new PathBuilder();
362 pBuilder1.setEro(this.ero);
363 pBuilder1.setLspa(this.lspa);
364 updates1.add(new UpdatesBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build());
365 updates1.add(new UpdatesBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder1.build()).build());
366 builder.setUpdates(updates1);
368 assertEquals(new PcupdBuilder().setPcupdMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
369 result.readableBytes() - 4), Collections.emptyList()));
370 buf = Unpooled.buffer(result.readableBytes());
371 parser.serializeMessage(new PcupdBuilder().setPcupdMessage(builder.build()).build(), buf);
372 assertArrayEquals(result.array(), buf.array());
377 public void testRptMsg() throws IOException, PCEPDeserializerException {
378 try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator(); StatefulActivator b = new StatefulActivator()) {
381 ByteBuf result = Unpooled.wrappedBuffer(PCRT1);
383 final Stateful07PCReportMessageParser parser = new Stateful07PCReportMessageParser(this.ctx.getObjectHandlerRegistry());
385 final PcrptMessageBuilder builder = new PcrptMessageBuilder();
387 final List<Reports> reports = Lists.newArrayList();
388 reports.add(new ReportsBuilder().setLsp(this.lsp).build());
389 builder.setReports(reports);
390 final Message parseResult = parser.parseMessage(result.slice(4, result.readableBytes() - 4), Collections.emptyList());
391 assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parseResult);
392 ByteBuf buf = Unpooled.buffer(result.readableBytes());
393 parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
394 assertArrayEquals(result.array(), buf.array());
396 result = Unpooled.wrappedBuffer(PCRT2);
398 final List<Reports> reports1 = Lists.newArrayList();
399 reports1.add(new ReportsBuilder().setLsp(this.lsp).setPath(
400 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcrpt.message.pcrpt.message.reports.PathBuilder().setEro(
401 this.ero).setLspa(this.lspa).build()).build());
402 builder.setReports(reports1);
404 final ByteBuf input = result.slice(4, result.readableBytes() - 4);
405 assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parser.parseMessage(input, Collections.emptyList()));
406 buf = Unpooled.buffer(result.readableBytes());
407 parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
408 assertArrayEquals(result.array(), buf.array());
410 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRpt.3.bin"));
412 final List<Reports> reports2 = Lists.newArrayList();
413 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();
414 pBuilder.setEro(this.ero);
415 pBuilder.setLspa(this.lspa);
416 pBuilder.setMetrics(Lists.newArrayList(this.metrics, this.metrics));
417 pBuilder.setRro(this.rro);
418 reports2.add(new ReportsBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build());
419 builder.setReports(reports2);
421 assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
422 result.readableBytes() - 4), Collections.emptyList()));
423 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(ByteArray.fileToBytes("src/test/resources/PCRpt.5.bin"));
429 final List<Reports> reports3 = Lists.newArrayList();
430 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();
431 pBuilder1.setEro(this.ero);
432 pBuilder1.setLspa(this.lspa);
433 pBuilder1.setMetrics(Lists.newArrayList(this.metrics, this.metrics));
434 pBuilder1.setRro(this.rro);
435 reports3.add(new ReportsBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build());
436 reports3.add(new ReportsBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder1.build()).build());
437 builder.setReports(reports3);
439 assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
440 result.readableBytes() - 4), Collections.emptyList()));
441 buf = Unpooled.buffer(result.readableBytes());
442 parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
443 assertArrayEquals(result.array(), buf.array());
445 result = Unpooled.wrappedBuffer(PCRT3);
447 final List<Reports> reports4 = Lists.newArrayList();
448 reports4.add(new ReportsBuilder().setLsp(this.lsp).setPath(
449 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcrpt.message.pcrpt.message.reports.PathBuilder().setEro(
450 this.ero).setLspa(this.lspa).setBandwidth(this.bandwidth).setReoptimizationBandwidth(this.reoptimizationBandwidth).build()).build());
451 builder.setReports(reports4);
453 final ByteBuf input2 = result.slice(4, result.readableBytes() - 4);
454 assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parser.parseMessage(input2, Collections.emptyList()));
455 buf = Unpooled.buffer(result.readableBytes());
456 parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
457 assertArrayEquals(result.array(), buf.array());
462 public void testPcinitMsg() throws IOException, PCEPDeserializerException {
463 try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator()) {
465 final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/Pcinit.bin"));
467 final CInitiated00PCInitiateMessageParser parser = new CInitiated00PCInitiateMessageParser(this.ctx.getObjectHandlerRegistry());
469 final PcinitiateMessageBuilder builder = new PcinitiateMessageBuilder();
470 final RequestsBuilder rBuilder = new RequestsBuilder();
472 final List<Requests> reqs = Lists.newArrayList();
473 rBuilder.setSrp(this.srp);
474 rBuilder.setLsp(this.lspSrp);
475 rBuilder.setEro(this.ero);
476 rBuilder.setLspa(this.lspa);
477 rBuilder.setMetrics(Lists.newArrayList(this.metrics));
478 rBuilder.setIro(this.iro);
479 reqs.add(rBuilder.build());
480 builder.setRequests(reqs);
482 assertEquals(new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
483 result.readableBytes() - 4), Collections.emptyList()));
484 final ByteBuf buf = Unpooled.buffer(result.readableBytes());
485 parser.serializeMessage(new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build(), buf);
486 assertArrayEquals(result.array(), buf.array());
491 public void testErrorMsg() throws IOException, PCEPDeserializerException {
492 try (StatefulActivator a = new StatefulActivator()) {
494 final Stateful07ErrorMessageParser parser = new Stateful07ErrorMessageParser(this.ctx.getObjectHandlerRegistry());
496 ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.1.bin"));
497 ErrorObject error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false).setType((short) 19).setValue(
500 List<Errors> innerErr = new ArrayList<>();
501 innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
503 PcerrMessageBuilder builder = new PcerrMessageBuilder();
504 builder.setErrors(innerErr);
505 final List<Srps> srps = new ArrayList<>();
506 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());
507 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());
509 assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
510 result.readableBytes() - 4), Collections.emptyList()));
511 ByteBuf buf = Unpooled.buffer(result.readableBytes());
512 parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf);
513 assertArrayEquals(result.array(), buf.array());
515 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.5.bin"));
516 error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false).setType((short) 3).setValue((short) 1).build();
518 innerErr = new ArrayList<>();
519 builder = new PcerrMessageBuilder();
521 final RpBuilder rpBuilder = new RpBuilder();
522 rpBuilder.setProcessingRule(true);
523 rpBuilder.setIgnore(false);
524 rpBuilder.setReoptimization(false);
525 rpBuilder.setBiDirectional(false);
526 rpBuilder.setLoose(true);
527 rpBuilder.setMakeBeforeBreak(false);
528 rpBuilder.setOrder(false);
529 rpBuilder.setPathKey(false);
530 rpBuilder.setSupplyOf(false);
531 rpBuilder.setFragmentation(false);
532 rpBuilder.setP2mp(false);
533 rpBuilder.setEroCompression(false);
534 rpBuilder.setPriority((short) 1);
535 rpBuilder.setRequestId(new RequestId(10L));
536 rpBuilder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rp.object.rp.TlvsBuilder().build());
537 rpBuilder.setProcessingRule(false);
538 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();
539 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(
540 rpBuilder.build()).build());
542 innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
544 builder.setErrors(innerErr);
545 builder.setErrorType(new RequestCaseBuilder().setRequest(new RequestBuilder().setRps(rps).build()).build());
547 assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
548 result.readableBytes() - 4), Collections.emptyList()));
549 buf = Unpooled.buffer(result.readableBytes());
550 parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf);
551 assertArrayEquals(result.array(), buf.array());
553 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.3.bin"));
555 builder = new PcerrMessageBuilder();
556 error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false).setType((short) 3).setValue((short) 1).build();
558 innerErr = new ArrayList<>();
559 innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
561 builder.setErrors(innerErr);
562 builder.setErrorType(new SessionCaseBuilder().setSession(new SessionBuilder().setOpen(
563 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.OpenBuilder()
564 .setDeadTimer((short) 1)
565 .setKeepalive((short) 1)
566 .setVersion(new ProtocolVersion((short) 1))
567 .setSessionId((short) 0)
569 .setProcessingRule(false)
570 .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.TlvsBuilder().build())
571 .build()).build()).build());
573 assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
574 result.readableBytes() - 4), Collections.emptyList()));
575 buf = Unpooled.buffer(result.readableBytes());
576 parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf);
577 assertArrayEquals(result.array(), buf.array());
582 public void testMissingLspObjectErrorInPcRptMsg() throws PCEPDeserializerException {
583 final byte[] statefulMsg= {
584 (byte) 0x20, (byte) 0x0B, (byte) 0x00, (byte) 0x1C,
586 (byte) 0x21, (byte) 0x10, (byte) 0x00, (byte) 0x0C,
587 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x001,
588 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01,
589 /* lsp-object is missing*/
591 (byte) 0x07, (byte) 0x10, (byte) 0x00, (byte) 0x0C,
592 /* ipv4 prefix subobject */
593 (byte) 0x81, (byte) 0x08, (byte) 0xFF, (byte) 0xFF,
594 (byte) 0xFF, (byte) 0xFF, (byte) 0x16, (byte) 0x00
597 try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator();
598 StatefulActivator b = new StatefulActivator()) {
601 final Stateful07PCReportMessageParser parser = new Stateful07PCReportMessageParser(
602 this.ctx.getObjectHandlerRegistry());
604 final PcerrMessageBuilder errMsgBuilder = new PcerrMessageBuilder();
605 errMsgBuilder.setErrors(Lists.newArrayList(new ErrorsBuilder()
606 .setErrorObject(new ErrorObjectBuilder().setType((short) 6).setValue((short) 8).build()).build()));
607 final PcerrBuilder builder = new PcerrBuilder();
608 builder.setPcerrMessage(errMsgBuilder.build());
610 final ByteBuf buf = Unpooled.wrappedBuffer(statefulMsg);
611 final List<Message> errors = Lists.newArrayList();
612 parser.parseMessage(buf.slice(4, buf.readableBytes() - 4), errors);
613 assertFalse(errors.isEmpty());
614 assertEquals(builder.build(), errors.get(0));
619 public void testUnexpectedRroObjectInPcUpdMsg() throws PCEPDeserializerException {
620 final byte[] badUpdateMsg = {
621 (byte) 0x20, (byte) 0x0b, (byte) 0x00, (byte) 0x50,
622 /* SRP, LSP and ERO objects */
623 (byte) 0x21, (byte) 0x12, (byte) 0x00, (byte) 0x0c,
624 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
625 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x01,
626 (byte) 0x20, (byte) 0x10, (byte) 0x00, (byte) 0x08,
627 (byte) 0x00, (byte) 0x00, (byte) 0x10, (byte) 0x09,
628 (byte) 0x07, (byte) 0x10, (byte) 0x00, (byte) 0x14,
629 (byte) 0x01, (byte) 0x08, (byte) 0x05, (byte) 0x05,
630 (byte) 0x05, (byte) 0x03, (byte) 0x18, (byte) 0x00,
631 (byte) 0x01, (byte) 0x08, (byte) 0x08, (byte) 0x08,
632 (byte) 0x08, (byte) 0x04, (byte) 0x18, (byte) 0x00,
634 (byte) 0x08, (byte) 0x10, (byte) 0x00, (byte) 0x24,
635 (byte) 0x01, (byte) 0x08, (byte) 0x0a, (byte) 0x00,
636 (byte) 0x00, (byte) 0x83, (byte) 0x20, (byte) 0x20,
637 (byte) 0x03, (byte) 0x08, (byte) 0x01, (byte) 0x01,
638 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
639 (byte) 0x01, (byte) 0x08, (byte) 0x0a, (byte) 0x00,
640 (byte) 0x09, (byte) 0xde, (byte) 0x20, (byte) 0x00,
641 (byte) 0x03, (byte) 0x08, (byte) 0x01, (byte) 0x01,
642 (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00
645 try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator()) {
648 final Stateful07PCUpdateRequestMessageParser parser = new Stateful07PCUpdateRequestMessageParser(
649 this.ctx.getObjectHandlerRegistry());
651 final PcerrMessageBuilder errMsgBuilder = new PcerrMessageBuilder();
652 errMsgBuilder.setErrors(Lists.newArrayList(new ErrorsBuilder()
653 .setErrorObject(new ErrorObjectBuilder().setType((short) 6).setValue((short) 10).build()).build()));
654 final PcerrBuilder builder = new PcerrBuilder();
655 builder.setPcerrMessage(errMsgBuilder.build());
657 final ByteBuf buf = Unpooled.wrappedBuffer(badUpdateMsg);
658 final List<Message> errors = Lists.newArrayList();
659 parser.parseMessage(buf.slice(4, buf.readableBytes() - 4), errors);
660 assertFalse(errors.isEmpty());
661 assertEquals(builder.build(), errors.get(0));