Convert rsvp-api to use ip-address-no-zone
[bgpcep.git] / pcep / ietf-stateful07 / src / test / java / org / opendaylight / protocol / pcep / ietf / PCEPValidatorTest.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
3  *
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
7  */
8 package org.opendaylight.protocol.pcep.ietf;
9
10 import static org.junit.Assert.assertArrayEquals;
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertFalse;
13
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;
115
116 public class PCEPValidatorTest {
117
118     private Lspa lspa;
119     private Metrics metrics;
120     private Iro iro;
121     private Ero ero;
122     private Rro rro;
123     private Srp srp;
124     private Lsp lsp;
125     private Lsp lspSrp;
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;
128
129     private AsNumberCase eroASSubobject;
130     private UnnumberedCase rroUnnumberedSub;
131
132     private SimplePCEPExtensionProviderContext ctx;
133     private BaseParserExtensionActivator act;
134
135     private static final byte[] PCRT1 = {
136         (byte) 0x20, (byte) 0x0A, (byte) 0x00, (byte) 0x20,
137
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
145     };
146
147     private static final byte[] PCRT2 = {
148         (byte) 0x20, (byte) 0x0A, (byte) 0x00, (byte) 0x3C,
149
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
157
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
165     };
166
167     private static final byte[] PCRT3 = {
168         (byte) 0x20, (byte) 0x0A, (byte) 0x00, (byte) 0x4C,
169
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
177
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,
185
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
190     };
191
192     @Before
193     public void setUp() throws Exception {
194         this.ctx = new SimplePCEPExtensionProviderContext();
195         this.act = new BaseParserExtensionActivator();
196         this.act.start(this.ctx);
197
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();
209
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();
218
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();
222
223         this.rroUnnumberedSub = new UnnumberedCaseBuilder().setUnnumbered(
224             new UnnumberedBuilder().setRouterId(0x00112233L).setInterfaceId(0x00ff00ffL).build()).build();
225
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();
233
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();
242
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();
251
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();
259
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());
271
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();
282
283         final Ipv4Builder afi = new Ipv4Builder();
284         afi.setSourceIpv4Address(new Ipv4Address("255.255.255.255"));
285         afi.setDestinationIpv4Address(new Ipv4Address("255.255.255.255"));
286
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();
292
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();
298     }
299
300     @Test
301     public void testOpenMsg() throws IOException, PCEPDeserializerException {
302         try (StatefulActivator a = new StatefulActivator()) {
303             a.start(this.ctx);
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();
307
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);
310             b.setIgnore(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());
319
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());
325         }
326     }
327
328     @Test
329     public void testSyncOptActivator() {
330         try (SyncOptimizationsActivator a = new SyncOptimizationsActivator()) {
331             a.start(this.ctx);
332             a.close();
333         }
334     }
335
336     @Test
337     public void testUpdMsg() throws IOException, PCEPDeserializerException {
338         try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator()) {
339             a.start(this.ctx);
340             ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCUpd.2.bin"));
341
342             final Stateful07PCUpdateRequestMessageParser parser = new Stateful07PCUpdateRequestMessageParser(this.ctx.getObjectHandlerRegistry());
343
344             final PcupdMessageBuilder builder = new PcupdMessageBuilder();
345
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);
352
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());
358
359             result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCUpd.5.bin"));
360
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);
368
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());
374         }
375     }
376
377     @Test
378     public void testRptMsg() throws IOException, PCEPDeserializerException {
379         try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator(); StatefulActivator b = new StatefulActivator()) {
380             a.start(this.ctx);
381             b.start(this.ctx);
382             ByteBuf result = Unpooled.wrappedBuffer(PCRT1);
383
384             final Stateful07PCReportMessageParser parser = new Stateful07PCReportMessageParser(this.ctx.getObjectHandlerRegistry());
385
386             final PcrptMessageBuilder builder = new PcrptMessageBuilder();
387
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());
396
397             result = Unpooled.wrappedBuffer(PCRT2);
398
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);
404
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());
410
411             result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRpt.3.bin"));
412
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);
421
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());
427
428             result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRpt.5.bin"));
429
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);
439
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());
445
446             result = Unpooled.wrappedBuffer(PCRT3);
447
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);
453
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());
459         }
460     }
461
462     @Test
463     public void testPcinitMsg() throws IOException, PCEPDeserializerException {
464         try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator()) {
465             a.start(this.ctx);
466             final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/Pcinit.bin"));
467
468             final CInitiated00PCInitiateMessageParser parser = new CInitiated00PCInitiateMessageParser(this.ctx.getObjectHandlerRegistry());
469
470             final PcinitiateMessageBuilder builder = new PcinitiateMessageBuilder();
471             final RequestsBuilder rBuilder = new RequestsBuilder();
472
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);
482
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());
488         }
489     }
490
491     @Test
492     public void testErrorMsg() throws IOException, PCEPDeserializerException {
493         try (StatefulActivator a = new StatefulActivator()) {
494             a.start(this.ctx);
495             final Stateful07ErrorMessageParser parser = new Stateful07ErrorMessageParser(this.ctx.getObjectHandlerRegistry());
496
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(
499                 (short) 1).build();
500
501             List<Errors> innerErr = new ArrayList<>();
502             innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
503
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());
509
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());
515
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();
518
519             innerErr = new ArrayList<>();
520             builder = new PcerrMessageBuilder();
521
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());
542
543             innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
544
545             builder.setErrors(innerErr);
546             builder.setErrorType(new RequestCaseBuilder().setRequest(new RequestBuilder().setRps(rps).build()).build());
547
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());
553
554             result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.3.bin"));
555
556             builder = new PcerrMessageBuilder();
557             error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false).setType((short) 3).setValue((short) 1).build();
558
559             innerErr = new ArrayList<>();
560             innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
561
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)
569                         .setIgnore(false)
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());
573
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());
579         }
580     }
581
582     @Test
583     public void testMissingLspObjectErrorInPcRptMsg() throws PCEPDeserializerException {
584         final byte[] statefulMsg= {
585             (byte) 0x20, (byte) 0x0B, (byte) 0x00, (byte) 0x1C,
586             /* srp-object */
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*/
591             /* sr-ero-object */
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
596         };
597
598         try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator();
599                 StatefulActivator b = new StatefulActivator()) {
600             a.start(this.ctx);
601             b.start(this.ctx);
602             final Stateful07PCReportMessageParser parser = new Stateful07PCReportMessageParser(
603                     this.ctx.getObjectHandlerRegistry());
604
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());
610
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));
616         }
617     }
618
619     @Test
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,
634             /* RRO object */
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
644         };
645
646         try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator()) {
647             a.start(this.ctx);
648
649             final Stateful07PCUpdateRequestMessageParser parser = new Stateful07PCUpdateRequestMessageParser(
650                     this.ctx.getObjectHandlerRegistry());
651
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());
657
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));
663         }
664     }
665 }