Move pcep base parser Activator to its own bundle
[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 import com.google.common.collect.Lists;
14 import io.netty.buffer.ByteBuf;
15 import io.netty.buffer.Unpooled;
16 import java.io.IOException;
17 import java.util.ArrayList;
18 import java.util.Collections;
19 import java.util.List;
20 import org.junit.Before;
21 import org.junit.Test;
22 import org.opendaylight.protocol.pcep.ietf.initiated00.CInitiated00PCInitiateMessageParser;
23 import org.opendaylight.protocol.pcep.ietf.initiated00.CrabbeInitiatedActivator;
24 import org.opendaylight.protocol.pcep.ietf.stateful07.Stateful07ErrorMessageParser;
25 import org.opendaylight.protocol.pcep.ietf.stateful07.Stateful07PCReportMessageParser;
26 import org.opendaylight.protocol.pcep.ietf.stateful07.Stateful07PCUpdateRequestMessageParser;
27 import org.opendaylight.protocol.pcep.ietf.stateful07.StatefulActivator;
28 import org.opendaylight.protocol.pcep.parser.BaseParserExtensionActivator;
29 import org.opendaylight.protocol.pcep.parser.message.PCEPOpenMessageParser;
30 import org.opendaylight.protocol.pcep.spi.PCEPDeserializerException;
31 import org.opendaylight.protocol.pcep.spi.pojo.SimplePCEPExtensionProviderContext;
32 import org.opendaylight.protocol.pcep.sync.optimizations.SyncOptimizationsActivator;
33 import org.opendaylight.protocol.util.ByteArray;
34 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
35 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ieee754.rev130819.Float32;
36 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Lsp1;
37 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Lsp1Builder;
38 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.PcinitiateBuilder;
39 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Srp1;
40 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.Srp1Builder;
41 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.pcinitiate.message.PcinitiateMessageBuilder;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.pcinitiate.message.pcinitiate.message.Requests;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.crabbe.initiated.rev131126.pcinitiate.message.pcinitiate.message.RequestsBuilder;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.OperationalStatus;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.PcrptBuilder;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.PcupdBuilder;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.PlspId;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.SrpIdNumber;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Tlvs1;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.Tlvs1Builder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.identifiers.tlv.LspIdentifiers;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.identifiers.tlv.LspIdentifiersBuilder;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.identifiers.tlv.lsp.identifiers.AddressFamily;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.identifiers.tlv.lsp.identifiers.address.family.Ipv4CaseBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.Lsp;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.LspBuilder;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.lsp.object.lsp.TlvsBuilder;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcerr.pcerr.message.error.type.StatefulCaseBuilder;
59 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;
60 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;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcrpt.message.PcrptMessageBuilder;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcrpt.message.pcrpt.message.Reports;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcrpt.message.pcrpt.message.ReportsBuilder;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcupd.message.PcupdMessageBuilder;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcupd.message.pcupd.message.Updates;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcupd.message.pcupd.message.UpdatesBuilder;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcupd.message.pcupd.message.updates.PathBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.srp.object.Srp;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.srp.object.SrpBuilder;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.stateful.capability.tlv.Stateful;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.stateful.capability.tlv.StatefulBuilder;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.OpenBuilder;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.message.rev131007.PcerrBuilder;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.Message;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.ProtocolVersion;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.RequestId;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.address.family.ipv4._case.Ipv4Builder;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.Ero;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.EroBuilder;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.include.route.object.Iro;
81 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.include.route.object.IroBuilder;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.include.route.object.iro.Subobject;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.include.route.object.iro.SubobjectBuilder;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.attributes.Metrics;
85 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.attributes.MetricsBuilder;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lspa.object.Lspa;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lspa.object.LspaBuilder;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.metric.object.MetricBuilder;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.message.OpenMessageBuilder;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcep.error.object.ErrorObject;
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcep.error.object.ErrorObjectBuilder;
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.PcerrMessageBuilder;
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.Errors;
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.ErrorsBuilder;
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.error.type.RequestCaseBuilder;
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.error.type.SessionCaseBuilder;
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.error.type.request._case.RequestBuilder;
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.error.type.session._case.SessionBuilder;
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reported.route.object.Rro;
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reported.route.object.RroBuilder;
101 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rp.object.RpBuilder;
102 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.AttributeFilter;
103 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.Ipv4ExtendedTunnelId;
104 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.LspId;
105 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.TunnelId;
106 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.AsNumberCase;
107 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.AsNumberCaseBuilder;
108 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.basic.explicit.route.subobjects.subobject.type.as.number._case.AsNumberBuilder;
109 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.record.route.subobjects.subobject.type.UnnumberedCase;
110 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.record.route.subobjects.subobject.type.UnnumberedCaseBuilder;
111 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev150820.record.route.subobjects.subobject.type.unnumbered._case.UnnumberedBuilder;
112
113 public class PCEPValidatorTest {
114
115     private Lspa lspa;
116     private Metrics metrics;
117     private Iro iro;
118     private Ero ero;
119     private Rro rro;
120     private Srp srp;
121     private Lsp lsp;
122     private Lsp lspSrp;
123
124     private AsNumberCase eroASSubobject;
125     private UnnumberedCase rroUnnumberedSub;
126
127     private SimplePCEPExtensionProviderContext ctx;
128     private BaseParserExtensionActivator act;
129
130     private static final byte[] PCRT1 = {
131         (byte) 0x20, (byte) 0x0A, (byte) 0x00, (byte) 0x20,
132
133         (byte) 0x20, (byte) 0x10, (byte) 0x00, (byte) 0x1C,
134         (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, //Skip
135         (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x10, //TLV Type + TLV Length
136         (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x01, //TLV 127.0.1.1
137         (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x01, //TLV LSP Id + Tunnel id
138         (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x02, //TLV Ipv4ExtendedTunnelId 127.0.1.2
139         (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x03, //TLV TunnelEndpointAddress 127.0.1.3
140     };
141
142     private static final byte[] PCRT2 = {
143         (byte) 0x20, (byte) 0x0A, (byte) 0x00, (byte) 0x3C,
144
145         (byte) 0x20, (byte) 0x10, (byte) 0x00, (byte) 0x1C, //(byte) 0x39,
146         (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, //Skip
147         (byte) 0x00, (byte) 0x12, (byte) 0x00, (byte) 0x10, //TLV Type + TLV Length
148         (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x01, //TLV 127.0.1.1
149         (byte) 0x00, (byte) 0x01, (byte) 0x00, (byte) 0x01, //TLV LSP Id + Tunnel id
150         (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x02, //TLV Ipv4ExtendedTunnelId 127.0.1.2
151         (byte) 0x7F, (byte) 0x00, (byte) 0x01, (byte) 0x03, //TLV TunnelEndpointAddress 127.0.1.3
152
153         (byte) 0x07, (byte) 0x10, (byte) 0x00, (byte) 0x08,
154         (byte) 0x20, (byte) 0x04, (byte) 0xFF, (byte) 0xFF,
155         (byte) 0x09, (byte) 0x10, (byte) 0x00, (byte) 0x14,
156         (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
157         (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
158         (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00,
159         (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00
160     };
161
162     @Before
163     public void setUp() throws Exception {
164         this.ctx = new SimplePCEPExtensionProviderContext();
165         this.act = new BaseParserExtensionActivator();
166         this.act.start(this.ctx);
167
168         final LspaBuilder lspaBuilder = new LspaBuilder();
169         lspaBuilder.setProcessingRule(false);
170         lspaBuilder.setIgnore(false);
171         lspaBuilder.setLocalProtectionDesired(false);
172         lspaBuilder.setHoldPriority((short) 0);
173         lspaBuilder.setSetupPriority((short) 0);
174         lspaBuilder.setExcludeAny(new AttributeFilter(0L));
175         lspaBuilder.setIncludeAll(new AttributeFilter(0L));
176         lspaBuilder.setIncludeAny(new AttributeFilter(0L));
177         lspaBuilder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lspa.object.lspa.TlvsBuilder().build());
178         this.lspa = lspaBuilder.build();
179
180         final MetricBuilder mBuilder = new MetricBuilder();
181         mBuilder.setIgnore(false);
182         mBuilder.setProcessingRule(false);
183         mBuilder.setComputed(false);
184         mBuilder.setBound(false);
185         mBuilder.setMetricType((short) 1);
186         mBuilder.setValue(new Float32(new byte[4]));
187         this.metrics = new MetricsBuilder().setMetric(mBuilder.build()).build();
188
189         this.eroASSubobject = new AsNumberCaseBuilder().setAsNumber(
190             new AsNumberBuilder().setAsNumber(
191                 new org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.AsNumber(0xFFFFL)).build()).build();
192
193         this.rroUnnumberedSub = new UnnumberedCaseBuilder().setUnnumbered(
194             new UnnumberedBuilder().setRouterId(0x00112233L).setInterfaceId(0x00ff00ffL).build()).build();
195
196         final IroBuilder iroBuilder = new IroBuilder();
197         iroBuilder.setIgnore(false);
198         iroBuilder.setProcessingRule(false);
199         final List<Subobject> iroSubs = Lists.newArrayList();
200         iroSubs.add(new SubobjectBuilder().setSubobjectType(this.eroASSubobject).setLoose(false).build());
201         iroBuilder.setSubobject(iroSubs);
202         this.iro = iroBuilder.build();
203
204         final EroBuilder eroBuilder = new EroBuilder();
205         eroBuilder.setIgnore(false);
206         eroBuilder.setProcessingRule(false);
207         final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.ero.Subobject> eroSubs = Lists.newArrayList();
208         eroSubs.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.ero.SubobjectBuilder().setSubobjectType(
209             this.eroASSubobject).setLoose(false).build());
210         eroBuilder.setSubobject(eroSubs);
211         this.ero = eroBuilder.build();
212
213         final RroBuilder rroBuilder = new RroBuilder();
214         rroBuilder.setIgnore(false);
215         rroBuilder.setProcessingRule(false);
216         final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reported.route.object.rro.Subobject> rroSubs = Lists.newArrayList();
217         rroSubs.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.reported.route.object.rro.SubobjectBuilder().setSubobjectType(
218             this.rroUnnumberedSub).setProtectionAvailable(false).setProtectionInUse(false).build());
219         rroBuilder.setSubobject(rroSubs);
220         this.rro = rroBuilder.build();
221
222         final SrpBuilder srpBuilder = new SrpBuilder();
223         srpBuilder.setIgnore(false);
224         srpBuilder.setProcessingRule(false);
225         srpBuilder.setOperationId(new SrpIdNumber(1L));
226         srpBuilder.addAugmentation(Srp1.class, new Srp1Builder().setRemove(false).build());
227         srpBuilder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.srp.object.srp.TlvsBuilder().build());
228         this.srp = srpBuilder.build();
229
230         final LspBuilder lspBuilder = new LspBuilder();
231         lspBuilder.setIgnore(false);
232         lspBuilder.setProcessingRule(false);
233         lspBuilder.setAdministrative(false);
234         lspBuilder.setDelegate(false);
235         lspBuilder.setPlspId(new PlspId(0L));
236         lspBuilder.setOperational(OperationalStatus.Down);
237         lspBuilder.setSync(false);
238         lspBuilder.setRemove(false);
239         lspBuilder.setTlvs(new TlvsBuilder().build());
240         lspBuilder.addAugmentation(Lsp1.class, new Lsp1Builder().setCreate(false).build());
241
242         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();
243         builder.setIpv4TunnelSenderAddress(new Ipv4Address("127.0.1.1"));
244         final LspId lspId = new LspId(1L);
245         final TunnelId tunnelId = new TunnelId(1);
246         builder.setIpv4ExtendedTunnelId(new Ipv4ExtendedTunnelId(new Ipv4Address("127.0.1.2")));
247         builder.setIpv4TunnelEndpointAddress(new Ipv4Address("127.0.1.3"));
248         final AddressFamily afiLsp = new Ipv4CaseBuilder().setIpv4(builder.build()).build();
249         final LspIdentifiers identifier = new LspIdentifiersBuilder().setAddressFamily(afiLsp).setLspId(lspId).setTunnelId(tunnelId).build();
250         this.lspSrp = lspBuilder.build();
251         this.lsp = lspBuilder.setTlvs(new TlvsBuilder().setLspIdentifiers(identifier).build()).build();
252
253         final Ipv4Builder afi = new Ipv4Builder();
254         afi.setSourceIpv4Address(new Ipv4Address("255.255.255.255"));
255         afi.setDestinationIpv4Address(new Ipv4Address("255.255.255.255"));
256     }
257
258     @Test
259     public void testOpenMsg() throws IOException, PCEPDeserializerException {
260         try (StatefulActivator a = new StatefulActivator()) {
261             a.start(this.ctx);
262             final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCEPOpenMessage1.bin"));
263             final PCEPOpenMessageParser parser = new PCEPOpenMessageParser(this.ctx.getObjectHandlerRegistry());
264             final OpenMessageBuilder builder = new OpenMessageBuilder();
265
266             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();
267             b.setProcessingRule(false);
268             b.setIgnore(false);
269             b.setVersion(new ProtocolVersion((short) 1));
270             b.setKeepalive((short) 30);
271             b.setDeadTimer((short) 120);
272             b.setSessionId((short) 1);
273             final Stateful tlv1 = new StatefulBuilder().setLspUpdateCapability(Boolean.TRUE).build();
274             b.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.TlvsBuilder().addAugmentation(
275                 Tlvs1.class, new Tlvs1Builder().setStateful(tlv1).build()).build());
276             builder.setOpen(b.build());
277
278             assertEquals(new OpenBuilder().setOpenMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
279                 result.readableBytes() - 4), Collections.emptyList()));
280             final ByteBuf buf = Unpooled.buffer(result.readableBytes());
281             parser.serializeMessage(new OpenBuilder().setOpenMessage(builder.build()).build(), buf);
282             assertArrayEquals(result.array(), buf.array());
283         }
284     }
285
286     @Test
287     public void testSyncOptActivator() {
288         try (SyncOptimizationsActivator a = new SyncOptimizationsActivator()) {
289             a.start(this.ctx);
290             a.close();
291         }
292     }
293
294     @Test
295     public void testUpdMsg() throws IOException, PCEPDeserializerException {
296         try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator()) {
297             a.start(this.ctx);
298             ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCUpd.2.bin"));
299
300             final Stateful07PCUpdateRequestMessageParser parser = new Stateful07PCUpdateRequestMessageParser(this.ctx.getObjectHandlerRegistry());
301
302             final PcupdMessageBuilder builder = new PcupdMessageBuilder();
303
304             final List<Updates> updates = Lists.newArrayList();
305             final PathBuilder pBuilder = new PathBuilder();
306             pBuilder.setEro(this.ero);
307             pBuilder.setLspa(this.lspa);
308             updates.add(new UpdatesBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build());
309             builder.setUpdates(updates);
310
311             assertEquals(new PcupdBuilder().setPcupdMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
312                 result.readableBytes() - 4), Collections.emptyList()));
313             ByteBuf buf = Unpooled.buffer(result.readableBytes());
314             parser.serializeMessage(new PcupdBuilder().setPcupdMessage(builder.build()).build(), buf);
315             assertArrayEquals(result.array(), buf.array());
316
317             result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCUpd.5.bin"));
318
319             final List<Updates> updates1 = Lists.newArrayList();
320             final PathBuilder pBuilder1 = new PathBuilder();
321             pBuilder1.setEro(this.ero);
322             pBuilder1.setLspa(this.lspa);
323             updates1.add(new UpdatesBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build());
324             updates1.add(new UpdatesBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder1.build()).build());
325             builder.setUpdates(updates1);
326
327             assertEquals(new PcupdBuilder().setPcupdMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
328                 result.readableBytes() - 4), Collections.emptyList()));
329             buf = Unpooled.buffer(result.readableBytes());
330             parser.serializeMessage(new PcupdBuilder().setPcupdMessage(builder.build()).build(), buf);
331             assertArrayEquals(result.array(), buf.array());
332         }
333     }
334
335     @Test
336     public void testRptMsg() throws IOException, PCEPDeserializerException {
337         try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator(); StatefulActivator b = new StatefulActivator()) {
338             a.start(this.ctx);
339             b.start(this.ctx);
340             ByteBuf result = Unpooled.wrappedBuffer(PCRT1);
341
342             final Stateful07PCReportMessageParser parser = new Stateful07PCReportMessageParser(this.ctx.getObjectHandlerRegistry());
343
344             final PcrptMessageBuilder builder = new PcrptMessageBuilder();
345
346             final List<Reports> reports = Lists.newArrayList();
347             reports.add(new ReportsBuilder().setLsp(this.lsp).build());
348             builder.setReports(reports);
349             final Message parseResult = parser.parseMessage(result.slice(4, result.readableBytes() - 4), Collections.emptyList());
350             assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parseResult);
351             ByteBuf buf = Unpooled.buffer(result.readableBytes());
352             parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
353             assertArrayEquals(result.array(), buf.array());
354
355             result = Unpooled.wrappedBuffer(PCRT2);
356
357             final List<Reports> reports1 = Lists.newArrayList();
358             reports1.add(new ReportsBuilder().setLsp(this.lsp).setPath(
359                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.ietf.stateful.rev131222.pcrpt.message.pcrpt.message.reports.PathBuilder().setEro(
360                     this.ero).setLspa(this.lspa).build()).build());
361             builder.setReports(reports1);
362
363             final ByteBuf input = result.slice(4, result.readableBytes() - 4);
364             assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parser.parseMessage(input, Collections.emptyList()));
365             buf = Unpooled.buffer(result.readableBytes());
366             parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
367             assertArrayEquals(result.array(), buf.array());
368
369             result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRpt.3.bin"));
370
371             final List<Reports> reports2 = Lists.newArrayList();
372             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();
373             pBuilder.setEro(this.ero);
374             pBuilder.setLspa(this.lspa);
375             pBuilder.setMetrics(Lists.newArrayList(this.metrics, this.metrics));
376             pBuilder.setRro(this.rro);
377             reports2.add(new ReportsBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build());
378             builder.setReports(reports2);
379
380             assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
381                 result.readableBytes() - 4), Collections.emptyList()));
382             buf = Unpooled.buffer(result.readableBytes());
383             parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
384             assertArrayEquals(result.array(), buf.array());
385
386             result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRpt.5.bin"));
387
388             final List<Reports> reports3 = Lists.newArrayList();
389             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();
390             pBuilder1.setEro(this.ero);
391             pBuilder1.setLspa(this.lspa);
392             pBuilder1.setMetrics(Lists.newArrayList(this.metrics, this.metrics));
393             pBuilder1.setRro(this.rro);
394             reports3.add(new ReportsBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder.build()).build());
395             reports3.add(new ReportsBuilder().setSrp(this.srp).setLsp(this.lspSrp).setPath(pBuilder1.build()).build());
396             builder.setReports(reports3);
397
398             assertEquals(new PcrptBuilder().setPcrptMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
399                 result.readableBytes() - 4), Collections.emptyList()));
400             buf = Unpooled.buffer(result.readableBytes());
401             parser.serializeMessage(new PcrptBuilder().setPcrptMessage(builder.build()).build(), buf);
402             assertArrayEquals(result.array(), buf.array());
403         }
404     }
405
406     @Test
407     public void testPcinitMsg() throws IOException, PCEPDeserializerException {
408         try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator()) {
409             a.start(this.ctx);
410             final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/Pcinit.bin"));
411
412             final CInitiated00PCInitiateMessageParser parser = new CInitiated00PCInitiateMessageParser(this.ctx.getObjectHandlerRegistry());
413
414             final PcinitiateMessageBuilder builder = new PcinitiateMessageBuilder();
415             final RequestsBuilder rBuilder = new RequestsBuilder();
416
417             final List<Requests> reqs = Lists.newArrayList();
418             rBuilder.setSrp(this.srp);
419             rBuilder.setLsp(this.lspSrp);
420             rBuilder.setEro(this.ero);
421             rBuilder.setLspa(this.lspa);
422             rBuilder.setMetrics(Lists.newArrayList(this.metrics));
423             rBuilder.setIro(this.iro);
424             reqs.add(rBuilder.build());
425             builder.setRequests(reqs);
426
427             assertEquals(new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
428                 result.readableBytes() - 4), Collections.emptyList()));
429             final ByteBuf buf = Unpooled.buffer(result.readableBytes());
430             parser.serializeMessage(new PcinitiateBuilder().setPcinitiateMessage(builder.build()).build(), buf);
431             assertArrayEquals(result.array(), buf.array());
432         }
433     }
434
435     @Test
436     public void testErrorMsg() throws IOException, PCEPDeserializerException {
437         try (StatefulActivator a = new StatefulActivator()) {
438             a.start(this.ctx);
439             final Stateful07ErrorMessageParser parser = new Stateful07ErrorMessageParser(this.ctx.getObjectHandlerRegistry());
440
441             ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.1.bin"));
442             ErrorObject error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false).setType((short) 19).setValue(
443                 (short) 1).build();
444
445             List<Errors> innerErr = new ArrayList<>();
446             innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
447
448             PcerrMessageBuilder builder = new PcerrMessageBuilder();
449             builder.setErrors(innerErr);
450             final List<Srps> srps = new ArrayList<>();
451             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());
452             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());
453
454             assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
455                 result.readableBytes() - 4), Collections.emptyList()));
456             ByteBuf buf = Unpooled.buffer(result.readableBytes());
457             parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf);
458             assertArrayEquals(result.array(), buf.array());
459
460             result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.5.bin"));
461             error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false).setType((short) 3).setValue((short) 1).build();
462
463             innerErr = new ArrayList<>();
464             builder = new PcerrMessageBuilder();
465
466             final RpBuilder rpBuilder = new RpBuilder();
467             rpBuilder.setProcessingRule(true);
468             rpBuilder.setIgnore(false);
469             rpBuilder.setReoptimization(false);
470             rpBuilder.setBiDirectional(false);
471             rpBuilder.setLoose(true);
472             rpBuilder.setMakeBeforeBreak(false);
473             rpBuilder.setOrder(false);
474             rpBuilder.setPathKey(false);
475             rpBuilder.setSupplyOf(false);
476             rpBuilder.setFragmentation(false);
477             rpBuilder.setP2mp(false);
478             rpBuilder.setEroCompression(false);
479             rpBuilder.setPriority((short) 1);
480             rpBuilder.setRequestId(new RequestId(10L));
481             rpBuilder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rp.object.rp.TlvsBuilder().build());
482             rpBuilder.setProcessingRule(false);
483             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();
484             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(
485                 rpBuilder.build()).build());
486
487             innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
488
489             builder.setErrors(innerErr);
490             builder.setErrorType(new RequestCaseBuilder().setRequest(new RequestBuilder().setRps(rps).build()).build());
491
492             assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
493                 result.readableBytes() - 4), Collections.emptyList()));
494             buf = Unpooled.buffer(result.readableBytes());
495             parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf);
496             assertArrayEquals(result.array(), buf.array());
497
498             result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.3.bin"));
499
500             builder = new PcerrMessageBuilder();
501             error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false).setType((short) 3).setValue((short) 1).build();
502
503             innerErr = new ArrayList<>();
504             innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
505
506             builder.setErrors(innerErr);
507             builder.setErrorType(new SessionCaseBuilder().setSession(new SessionBuilder().setOpen(
508                     new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.OpenBuilder()
509                         .setDeadTimer((short) 1)
510                         .setKeepalive((short) 1)
511                         .setVersion(new ProtocolVersion((short) 1))
512                         .setSessionId((short) 0)
513                         .setIgnore(false)
514                         .setProcessingRule(false)
515                         .setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.open.TlvsBuilder().build())
516                         .build()).build()).build());
517
518             assertEquals(new PcerrBuilder().setPcerrMessage(builder.build()).build(), parser.parseMessage(result.slice(4,
519                 result.readableBytes() - 4), Collections.emptyList()));
520             buf = Unpooled.buffer(result.readableBytes());
521             parser.serializeMessage(new PcerrBuilder().setPcerrMessage(builder.build()).build(), buf);
522             assertArrayEquals(result.array(), buf.array());
523         }
524     }
525
526     @Test
527     public void testMissingLspObjectErrorInPcRptMsg() throws PCEPDeserializerException {
528         final byte[] statefulMsg= {
529             0x20,0x0B,0x00,0x1C,
530             /* srp-object */
531             0x21,0x10,0x00,0x0C,
532             0x00,0x00,0x00,0x001,
533             0x00,0x00,0x00,0x01,
534             /* lsp-object is missing*/
535             /* sr-ero-object */
536             0x07,0x10,0x00,0x0C,
537             /* ipv4 prefix subobject */
538             (byte) 0x81,0x08,(byte) 0xFF,(byte) 0xFF,
539             (byte) 0xFF,(byte) 0xFF,0x16,0x00};
540
541         final Stateful07PCReportMessageParser parser = new Stateful07PCReportMessageParser(this.ctx.getObjectHandlerRegistry());
542
543         final PcerrMessageBuilder errMsgBuilder = new PcerrMessageBuilder();
544         errMsgBuilder.setErrors(Lists.newArrayList(new ErrorsBuilder().setErrorObject(
545             new ErrorObjectBuilder().setType((short) 6).setValue((short) 8).build()).build()));
546         final PcerrBuilder builder = new PcerrBuilder();
547         builder.setPcerrMessage(errMsgBuilder.build());
548
549         final ByteBuf buf = Unpooled.wrappedBuffer(statefulMsg);
550         final List<Message> errors = Lists.newArrayList();
551         parser.parseMessage(buf.slice(4, buf.readableBytes() - 4), errors);
552         assertFalse(errors.isEmpty());
553         assertEquals(builder.build(), errors.get(0));
554     }
555 }