2 * Copyright (c) 2013 Cisco Systems, Inc. and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.protocol.pcep.ietf;
10 import static org.junit.Assert.assertArrayEquals;
11 import static org.junit.Assert.assertEquals;
12 import static org.junit.Assert.assertFalse;
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;
113 public class PCEPValidatorTest {
116 private Metrics metrics;
124 private AsNumberCase eroASSubobject;
125 private UnnumberedCase rroUnnumberedSub;
127 private SimplePCEPExtensionProviderContext ctx;
128 private BaseParserExtensionActivator act;
130 private static final byte[] PCRT1 = {
131 (byte) 0x20, (byte) 0x0A, (byte) 0x00, (byte) 0x20,
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
142 private static final byte[] PCRT2 = {
143 (byte) 0x20, (byte) 0x0A, (byte) 0x00, (byte) 0x3C,
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
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
163 public void setUp() throws Exception {
164 this.ctx = new SimplePCEPExtensionProviderContext();
165 this.act = new BaseParserExtensionActivator();
166 this.act.start(this.ctx);
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();
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();
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();
193 this.rroUnnumberedSub = new UnnumberedCaseBuilder().setUnnumbered(
194 new UnnumberedBuilder().setRouterId(0x00112233L).setInterfaceId(0x00ff00ffL).build()).build();
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();
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();
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();
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();
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());
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();
253 final Ipv4Builder afi = new Ipv4Builder();
254 afi.setSourceIpv4Address(new Ipv4Address("255.255.255.255"));
255 afi.setDestinationIpv4Address(new Ipv4Address("255.255.255.255"));
259 public void testOpenMsg() throws IOException, PCEPDeserializerException {
260 try (StatefulActivator a = new StatefulActivator()) {
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();
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);
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());
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());
287 public void testSyncOptActivator() {
288 try (SyncOptimizationsActivator a = new SyncOptimizationsActivator()) {
295 public void testUpdMsg() throws IOException, PCEPDeserializerException {
296 try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator()) {
298 ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCUpd.2.bin"));
300 final Stateful07PCUpdateRequestMessageParser parser = new Stateful07PCUpdateRequestMessageParser(this.ctx.getObjectHandlerRegistry());
302 final PcupdMessageBuilder builder = new PcupdMessageBuilder();
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);
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());
317 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCUpd.5.bin"));
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);
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());
336 public void testRptMsg() throws IOException, PCEPDeserializerException {
337 try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator(); StatefulActivator b = new StatefulActivator()) {
340 ByteBuf result = Unpooled.wrappedBuffer(PCRT1);
342 final Stateful07PCReportMessageParser parser = new Stateful07PCReportMessageParser(this.ctx.getObjectHandlerRegistry());
344 final PcrptMessageBuilder builder = new PcrptMessageBuilder();
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());
355 result = Unpooled.wrappedBuffer(PCRT2);
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);
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());
369 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRpt.3.bin"));
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);
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());
386 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCRpt.5.bin"));
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);
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());
407 public void testPcinitMsg() throws IOException, PCEPDeserializerException {
408 try (CrabbeInitiatedActivator a = new CrabbeInitiatedActivator()) {
410 final ByteBuf result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/Pcinit.bin"));
412 final CInitiated00PCInitiateMessageParser parser = new CInitiated00PCInitiateMessageParser(this.ctx.getObjectHandlerRegistry());
414 final PcinitiateMessageBuilder builder = new PcinitiateMessageBuilder();
415 final RequestsBuilder rBuilder = new RequestsBuilder();
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);
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());
436 public void testErrorMsg() throws IOException, PCEPDeserializerException {
437 try (StatefulActivator a = new StatefulActivator()) {
439 final Stateful07ErrorMessageParser parser = new Stateful07ErrorMessageParser(this.ctx.getObjectHandlerRegistry());
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(
445 List<Errors> innerErr = new ArrayList<>();
446 innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
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());
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());
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();
463 innerErr = new ArrayList<>();
464 builder = new PcerrMessageBuilder();
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());
487 innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
489 builder.setErrors(innerErr);
490 builder.setErrorType(new RequestCaseBuilder().setRequest(new RequestBuilder().setRps(rps).build()).build());
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());
498 result = Unpooled.wrappedBuffer(ByteArray.fileToBytes("src/test/resources/PCErr.3.bin"));
500 builder = new PcerrMessageBuilder();
501 error1 = new ErrorObjectBuilder().setIgnore(false).setProcessingRule(false).setType((short) 3).setValue((short) 1).build();
503 innerErr = new ArrayList<>();
504 innerErr.add(new ErrorsBuilder().setErrorObject(error1).build());
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)
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());
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());
527 public void testMissingLspObjectErrorInPcRptMsg() throws PCEPDeserializerException {
528 final byte[] statefulMsg= {
532 0x00,0x00,0x00,0x001,
534 /* lsp-object is missing*/
537 /* ipv4 prefix subobject */
538 (byte) 0x81,0x08,(byte) 0xFF,(byte) 0xFF,
539 (byte) 0xFF,(byte) 0xFF,0x16,0x00};
541 final Stateful07PCReportMessageParser parser = new Stateful07PCReportMessageParser(this.ctx.getObjectHandlerRegistry());
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());
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));