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