BUG-6647 Increase code coverage and clean up II
[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.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;
114
115 public class PCEPValidatorTest {
116
117     private Lspa lspa;
118     private Metrics metrics;
119     private Iro iro;
120     private Ero ero;
121     private Rro rro;
122     private Srp srp;
123     private Lsp lsp;
124     private Lsp lspSrp;
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;
127
128     private AsNumberCase eroASSubobject;
129     private UnnumberedCase rroUnnumberedSub;
130
131     private SimplePCEPExtensionProviderContext ctx;
132     private BaseParserExtensionActivator act;
133
134     private static final byte[] PCRT1 = {
135         (byte) 0x20, (byte) 0x0A, (byte) 0x00, (byte) 0x20,
136
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
144     };
145
146     private static final byte[] PCRT2 = {
147         (byte) 0x20, (byte) 0x0A, (byte) 0x00, (byte) 0x3C,
148
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
156
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
164     };
165
166     private static final byte[] PCRT3 = {
167         (byte) 0x20, (byte) 0x0A, (byte) 0x00, (byte) 0x4C,
168
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
176
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,
184
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
189     };
190
191     @Before
192     public void setUp() throws Exception {
193         this.ctx = new SimplePCEPExtensionProviderContext();
194         this.act = new BaseParserExtensionActivator();
195         this.act.start(this.ctx);
196
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();
208
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();
217
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();
221
222         this.rroUnnumberedSub = new UnnumberedCaseBuilder().setUnnumbered(
223             new UnnumberedBuilder().setRouterId(0x00112233L).setInterfaceId(0x00ff00ffL).build()).build();
224
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();
232
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();
241
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();
250
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();
258
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());
270
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();
281
282         final Ipv4Builder afi = new Ipv4Builder();
283         afi.setSourceIpv4Address(new Ipv4Address("255.255.255.255"));
284         afi.setDestinationIpv4Address(new Ipv4Address("255.255.255.255"));
285
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();
291
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();
297     }
298
299     @Test
300     public void testOpenMsg() throws IOException, PCEPDeserializerException {
301         try (StatefulActivator a = new StatefulActivator()) {
302             a.start(this.ctx);
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();
306
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);
309             b.setIgnore(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());
318
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());
324         }
325     }
326
327     @Test
328     public void testSyncOptActivator() {
329         try (SyncOptimizationsActivator a = new SyncOptimizationsActivator()) {
330             a.start(this.ctx);
331             a.close();
332         }
333     }
334
335     @Test
336     public void testUpdMsg() throws IOException, PCEPDeserializerException {
337         try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator()) {
338             a.start(this.ctx);
339             ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCUpd.2.bin"));
340
341             final Stateful07PCUpdateRequestMessageParser parser = new Stateful07PCUpdateRequestMessageParser(this.ctx.getObjectHandlerRegistry());
342
343             final PcupdMessageBuilder builder = new PcupdMessageBuilder();
344
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);
351
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());
357
358             result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCUpd.5.bin"));
359
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);
367
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());
373         }
374     }
375
376     @Test
377     public void testRptMsg() throws IOException, PCEPDeserializerException {
378         try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator(); StatefulActivator b = new StatefulActivator()) {
379             a.start(this.ctx);
380             b.start(this.ctx);
381             ByteBuf result = Unpooled.wrappedBuffer(PCRT1);
382
383             final Stateful07PCReportMessageParser parser = new Stateful07PCReportMessageParser(this.ctx.getObjectHandlerRegistry());
384
385             final PcrptMessageBuilder builder = new PcrptMessageBuilder();
386
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());
395
396             result = Unpooled.wrappedBuffer(PCRT2);
397
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);
403
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());
409
410             result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRpt.3.bin"));
411
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);
420
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());
426
427             result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRpt.5.bin"));
428
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);
438
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());
444
445             result = Unpooled.wrappedBuffer(PCRT3);
446
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);
452
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());
458         }
459     }
460
461     @Test
462     public void testPcinitMsg() throws IOException, PCEPDeserializerException {
463         try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator()) {
464             a.start(this.ctx);
465             final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/Pcinit.bin"));
466
467             final CInitiated00PCInitiateMessageParser parser = new CInitiated00PCInitiateMessageParser(this.ctx.getObjectHandlerRegistry());
468
469             final PcinitiateMessageBuilder builder = new PcinitiateMessageBuilder();
470             final RequestsBuilder rBuilder = new RequestsBuilder();
471
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);
481
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());
487         }
488     }
489
490     @Test
491     public void testErrorMsg() throws IOException, PCEPDeserializerException {
492         try (StatefulActivator a = new StatefulActivator()) {
493             a.start(this.ctx);
494             final Stateful07ErrorMessageParser parser = new Stateful07ErrorMessageParser(this.ctx.getObjectHandlerRegistry());
495
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(
498                 (short) 1).build();
499
500             List<Errors> innerErr = new ArrayList<>();
501             innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
502
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());
508
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());
514
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();
517
518             innerErr = new ArrayList<>();
519             builder = new PcerrMessageBuilder();
520
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());
541
542             innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
543
544             builder.setErrors(innerErr);
545             builder.setErrorType(new RequestCaseBuilder().setRequest(new RequestBuilder().setRps(rps).build()).build());
546
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());
552
553             result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.3.bin"));
554
555             builder = new PcerrMessageBuilder();
556             error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false).setType((short) 3).setValue((short) 1).build();
557
558             innerErr = new ArrayList<>();
559             innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
560
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)
568                         .setIgnore(false)
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());
572
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());
578         }
579     }
580
581     @Test
582     public void testMissingLspObjectErrorInPcRptMsg() throws PCEPDeserializerException {
583         final byte[] statefulMsg= {
584             (byte) 0x20, (byte) 0x0B, (byte) 0x00, (byte) 0x1C,
585             /* srp-object */
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*/
590             /* sr-ero-object */
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
595         };
596
597         try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator();
598                 StatefulActivator b = new StatefulActivator()) {
599             a.start(this.ctx);
600             b.start(this.ctx);
601             final Stateful07PCReportMessageParser parser = new Stateful07PCReportMessageParser(
602                     this.ctx.getObjectHandlerRegistry());
603
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());
609
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));
615         }
616     }
617
618     @Test
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,
633             /* RRO object */
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
643         };
644
645         try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator()) {
646             a.start(this.ctx);
647
648             final Stateful07PCUpdateRequestMessageParser parser = new Stateful07PCUpdateRequestMessageParser(
649                     this.ctx.getObjectHandlerRegistry());
650
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());
656
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));
662         }
663     }
664 }