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.impl;
10 import static org.junit.Assert.assertEquals;
11 import static org.junit.Assert.assertNull;
12 import static org.junit.Assert.assertTrue;
14 import java.io.IOException;
15 import java.util.ArrayList;
16 import java.util.List;
18 import org.junit.Before;
19 import org.junit.Test;
21 import org.opendaylight.protocol.concepts.ASNumber;
22 import org.opendaylight.protocol.concepts.Bandwidth;
23 import org.opendaylight.protocol.concepts.IPv4Address;
24 import org.opendaylight.protocol.concepts.TEMetric;
25 import org.opendaylight.protocol.pcep.PCEPErrors;
26 import org.opendaylight.protocol.pcep.PCEPObject;
27 import org.opendaylight.protocol.pcep.PCEPSessionPreferences;
28 import org.opendaylight.protocol.pcep.PCEPTlv;
29 import org.opendaylight.protocol.pcep.object.CompositeErrorObject;
30 import org.opendaylight.protocol.pcep.object.CompositeNotifyObject;
31 import org.opendaylight.protocol.pcep.object.CompositePathObject;
32 import org.opendaylight.protocol.pcep.object.CompositeRequestObject;
33 import org.opendaylight.protocol.pcep.object.CompositeResponseObject;
34 import org.opendaylight.protocol.pcep.object.CompositeRptPathObject;
35 import org.opendaylight.protocol.pcep.object.CompositeStateReportObject;
36 import org.opendaylight.protocol.pcep.object.CompositeUpdPathObject;
37 import org.opendaylight.protocol.pcep.object.CompositeUpdateRequestObject;
38 import org.opendaylight.protocol.pcep.object.PCEPClassTypeObject;
39 import org.opendaylight.protocol.pcep.object.PCEPEndPointsObject;
40 import org.opendaylight.protocol.pcep.object.PCEPErrorObject;
41 import org.opendaylight.protocol.pcep.object.PCEPExistingPathBandwidthObject;
42 import org.opendaylight.protocol.pcep.object.PCEPExplicitRouteObject;
43 import org.opendaylight.protocol.pcep.object.PCEPIncludeRouteObject;
44 import org.opendaylight.protocol.pcep.object.PCEPLoadBalancingObject;
45 import org.opendaylight.protocol.pcep.object.PCEPLspObject;
46 import org.opendaylight.protocol.pcep.object.PCEPLspaObject;
47 import org.opendaylight.protocol.pcep.object.PCEPMetricObject;
48 import org.opendaylight.protocol.pcep.object.PCEPNoPathObject;
49 import org.opendaylight.protocol.pcep.object.PCEPNotificationObject;
50 import org.opendaylight.protocol.pcep.object.PCEPOpenObject;
51 import org.opendaylight.protocol.pcep.object.PCEPReportedRouteObject;
52 import org.opendaylight.protocol.pcep.object.PCEPRequestParameterObject;
53 import org.opendaylight.protocol.pcep.object.PCEPRequestedPathBandwidthObject;
54 import org.opendaylight.protocol.pcep.subobject.EROAsNumberSubobject;
55 import org.opendaylight.protocol.pcep.subobject.ExplicitRouteSubobject;
56 import org.opendaylight.protocol.pcep.subobject.RROAsNumberSubobject;
57 import org.opendaylight.protocol.pcep.subobject.ReportedRouteSubobject;
58 import org.opendaylight.protocol.pcep.tlv.LSPCleanupTlv;
59 import org.opendaylight.protocol.pcep.tlv.PCEStatefulCapabilityTlv;
61 public class CompositeTest {
63 public PCEPExplicitRouteObject ero;
64 public PCEPClassTypeObject ct;
65 public PCEPLspaObject lspa;
66 public List<PCEPMetricObject> metrics = new ArrayList<PCEPMetricObject>();
67 public PCEPIncludeRouteObject iro = new PCEPIncludeRouteObject(new ArrayList<ExplicitRouteSubobject>() {
68 private static final long serialVersionUID = 1L;
71 this.add(new EROAsNumberSubobject(new ASNumber(0L), true));
74 public PCEPRequestParameterObject requestParameter;
75 public PCEPNoPathObject noPath;
76 public PCEPRequestedPathBandwidthObject bandwidth;
78 public List<PCEPRequestParameterObject> requestParameters = new ArrayList<PCEPRequestParameterObject>();
79 public PCEPErrorObject error;
80 public List<PCEPErrorObject> errors = new ArrayList<PCEPErrorObject>();
82 public PCEPNotificationObject notification;
83 public List<PCEPNotificationObject> notifications = new ArrayList<PCEPNotificationObject>();
85 private PCEPReportedRouteObject reportedRoute;
86 private PCEPExistingPathBandwidthObject rroBandwidth;
87 private PCEPIncludeRouteObject includeRoute;
88 private PCEPLoadBalancingObject loadBalancing;
89 private PCEPEndPointsObject<?> endPoints;
91 private PCEPLspObject lsp;
92 private final List<CompositePathObject> compositePaths = new ArrayList<CompositePathObject>();
93 private final List<CompositeRptPathObject> compositeRptPaths = new ArrayList<CompositeRptPathObject>();
94 private final List<CompositeUpdPathObject> compositeUpdPaths = new ArrayList<CompositeUpdPathObject>();
95 public PCEPReportedRouteObject rro = new PCEPReportedRouteObject(new ArrayList<ReportedRouteSubobject>() {
96 private static final long serialVersionUID = 1L;
99 this.add(new RROAsNumberSubobject(new ASNumber(0L)));
104 public void setUp() {
105 this.ero = new PCEPExplicitRouteObject(new ArrayList<ExplicitRouteSubobject>() {
106 private static final long serialVersionUID = 1L;
109 this.add(new EROAsNumberSubobject(new ASNumber(0L), true));
112 this.ct = new PCEPClassTypeObject((short) 5);
113 this.lspa = new PCEPLspaObject(0, 0, 0, (short) 0, (short) 0, false, false, false, false);
114 this.metrics.add(new PCEPMetricObject(false, false, new TEMetric(1000), false, false));
115 this.metrics.add(new PCEPMetricObject(false, false, new TEMetric(1000), false, false));
117 this.requestParameter = new PCEPRequestParameterObject(false, false, false, false, false, false, false, false, (short) 0, 0, false, false);
118 this.noPath = new PCEPNoPathObject((short) 2, false, false);
119 this.bandwidth = new PCEPRequestedPathBandwidthObject(new Bandwidth(0), false, false);
121 this.requestParameters.add(this.requestParameter);
122 this.requestParameters.add(this.requestParameter);
124 this.error = new PCEPErrorObject(PCEPErrors.BANDWIDTH_MISSING);
126 this.errors.add(this.error);
127 this.errors.add(this.error);
128 this.errors.add(this.error);
130 this.notification = new PCEPNotificationObject((short) 1, (short) 1);
132 this.notifications.add(this.notification);
133 this.notifications.add(this.notification);
135 final List<ExplicitRouteSubobject> eroSubobjects = new ArrayList<ExplicitRouteSubobject>();
136 eroSubobjects.add(new EROAsNumberSubobject(new ASNumber(0x0L), false));
137 eroSubobjects.add(new EROAsNumberSubobject(new ASNumber(0x0L), false));
138 eroSubobjects.add(new EROAsNumberSubobject(new ASNumber(0x0L), false));
140 final List<ReportedRouteSubobject> rroSubobjects = new ArrayList<ReportedRouteSubobject>();
141 rroSubobjects.add(new RROAsNumberSubobject(new ASNumber(0x0L)));
142 rroSubobjects.add(new RROAsNumberSubobject(new ASNumber(0x0L)));
143 rroSubobjects.add(new RROAsNumberSubobject(new ASNumber(0x0L)));
145 this.reportedRoute = new PCEPReportedRouteObject(rroSubobjects, true);
146 this.rroBandwidth = new PCEPExistingPathBandwidthObject(new Bandwidth(Float.intBitsToFloat(0xFF)), true, false);
147 this.includeRoute = new PCEPIncludeRouteObject(eroSubobjects, true, false);
148 this.loadBalancing = new PCEPLoadBalancingObject(0x0, new Bandwidth(Float.intBitsToFloat(0x0)), false);
149 final byte[] ipbytes = { (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF };
150 this.endPoints = new PCEPEndPointsObject<IPv4Address>(new IPv4Address(ipbytes), new IPv4Address(ipbytes));
152 this.lsp = new PCEPLspObject(0, false, false, true, true, null);
153 this.compositePaths.add(new CompositePathObject(new PCEPExplicitRouteObject(eroSubobjects, true), this.lspa, this.bandwidth, this.metrics,
155 this.compositePaths.add(new CompositePathObject(new PCEPExplicitRouteObject(eroSubobjects, true)));
157 this.compositeUpdPaths.add(new CompositeUpdPathObject(new PCEPExplicitRouteObject(eroSubobjects, true), this.lspa, this.bandwidth, this.metrics));
158 this.compositeUpdPaths.add(new CompositeUpdPathObject(new PCEPExplicitRouteObject(eroSubobjects, true)));
163 public void testCompositePathObject() {
164 final List<PCEPObject> objects = new ArrayList<PCEPObject>();
165 objects.add(this.ero);
166 objects.add(this.lspa);
167 objects.add(this.metrics.get(0));
168 objects.add(this.metrics.get(1));
169 objects.add(this.iro);
170 objects.add(new PCEPMetricObject(false, false, new TEMetric(1000), false, false));
171 final CompositePathObject path = CompositePathObject.getCompositeFromList(objects);
172 assertEquals(path.getExcludedRoute(), this.ero);
173 assertEquals(path.getLspa(), this.lspa);
174 assertNull(path.getBandwidth());
175 assertEquals(path.getMetrics().get(0), this.metrics.get(0));
176 assertEquals(path.getMetrics().get(1), this.metrics.get(1));
177 assertEquals(path.getIncludeRoute(), this.iro);
181 public void testCompositeRptPathObject() {
182 final List<PCEPObject> objects = new ArrayList<PCEPObject>();
183 objects.add(this.ero);
184 objects.add(this.lspa);
185 objects.add(this.rro);
186 objects.add(this.metrics.get(0));
187 objects.add(this.metrics.get(1));
188 objects.add(new PCEPMetricObject(false, false, new TEMetric(1000), false, false));
189 final CompositeRptPathObject path = CompositeRptPathObject.getCompositeFromList(objects);
190 assertEquals(path.getExcludedRoute(), this.ero);
191 assertEquals(path.getLspa(), this.lspa);
192 assertNull(path.getBandwidth());
193 assertEquals(path.getMetrics().get(0), this.metrics.get(0));
194 assertEquals(path.getMetrics().get(1), this.metrics.get(1));
195 assertEquals(path.getReportedRoute(), this.rro);
199 public void testCompositeResponseObject() {
200 final List<PCEPObject> objects = new ArrayList<PCEPObject>();
201 objects.add(this.requestParameter);
202 objects.add(this.noPath);
203 objects.add(this.bandwidth);
204 objects.add(this.metrics.get(0));
205 objects.add(this.metrics.get(1));
206 objects.add(this.iro);
208 objects.add(this.ero);
209 objects.add(this.lspa);
210 objects.add(this.metrics.get(0));
211 objects.add(this.metrics.get(1));
212 objects.add(this.iro);
214 objects.add(this.ero);
215 objects.add(this.lspa);
216 objects.add(this.metrics.get(0));
217 objects.add(new PCEPMetricObject(false, false, new TEMetric(1000), false, false));
218 objects.add(this.iro);
220 objects.add(this.requestParameter);
221 final List<CompositeResponseObject> list = new ArrayList<CompositeResponseObject>();
222 while (!objects.isEmpty()) {
223 list.add(CompositeResponseObject.getCompositeFromList(objects));
225 assertEquals(2, list.size());
226 final CompositeResponseObject response = list.get(0);
228 assertEquals(response.getRequestParameter(), this.requestParameter);
229 assertEquals(response.getNoPath(), this.noPath);
230 assertNull(response.getLspa());
231 assertEquals(response.getBandwidth(), this.bandwidth);
232 assertEquals(response.getMetrics().get(0), this.metrics.get(0));
233 assertEquals(response.getMetrics().get(1), this.metrics.get(1));
234 assertEquals(response.getIncludeRoute(), this.iro);
236 CompositePathObject path = response.getPaths().get(0);
237 assertEquals(path.getExcludedRoute(), this.ero);
238 assertEquals(path.getLspa(), this.lspa);
239 assertNull(path.getBandwidth());
240 assertEquals(path.getMetrics().get(0), this.metrics.get(0));
241 assertEquals(path.getMetrics().get(1), this.metrics.get(1));
242 assertEquals(path.getIncludeRoute(), this.iro);
244 path = response.getPaths().get(1);
245 assertEquals(path.getExcludedRoute(), this.ero);
246 assertEquals(path.getLspa(), this.lspa);
247 assertNull(path.getBandwidth());
248 assertEquals(path.getMetrics().get(0), this.metrics.get(0));
249 assertEquals(path.getMetrics().get(1), new PCEPMetricObject(false, false, new TEMetric(1000), false, false));
250 assertEquals(path.getIncludeRoute(), this.iro);
254 public void testCompositeErrorObject() {
255 final List<PCEPObject> objects = new ArrayList<PCEPObject>();
256 CompositeErrorObject compositeErrors;
258 objects.addAll(this.requestParameters);
259 objects.addAll(this.errors);
260 compositeErrors = new CompositeErrorObject(this.requestParameters.subList(0, this.requestParameters.size()), this.errors.subList(0, this.errors.size()));
261 assertEquals(compositeErrors, CompositeErrorObject.getCompositeFromList(objects));
264 objects.addAll(this.errors);
265 compositeErrors = new CompositeErrorObject(null, this.errors.subList(0, this.errors.size()));
266 assertEquals(compositeErrors, CompositeErrorObject.getCompositeFromList(objects));
271 public void testCompositeNotifyObject() {
272 final List<PCEPObject> objects = new ArrayList<PCEPObject>();
273 CompositeNotifyObject compositeNotifications;
275 objects.addAll(this.requestParameters);
276 objects.addAll(this.notifications);
277 compositeNotifications = new CompositeNotifyObject(this.requestParameters.subList(0, this.requestParameters.size()), this.notifications.subList(0,
278 this.notifications.size()));
279 assertEquals(compositeNotifications, CompositeNotifyObject.getCompositeFromList(objects));
283 objects.addAll(this.requestParameters);
284 objects.addAll(this.notifications);
286 objects.addAll(this.requestParameters);
287 objects.addAll(this.notifications);
288 while (!objects.isEmpty()) {
289 assertEquals(compositeNotifications, CompositeNotifyObject.getCompositeFromList(objects));
293 objects.addAll(this.notifications);
294 compositeNotifications = new CompositeNotifyObject(null, this.notifications.subList(0, this.notifications.size()));
295 assertEquals(compositeNotifications, CompositeNotifyObject.getCompositeFromList(objects));
300 public void testCompositeRequestObject() {
301 final List<PCEPObject> objects = new ArrayList<PCEPObject>();
302 CompositeRequestObject compositeRequest;
304 objects.add(this.requestParameter);
305 objects.add(this.endPoints);
306 objects.add(this.ct);
307 objects.add(this.lsp);
308 objects.add(this.lspa);
309 objects.add(this.bandwidth);
310 objects.addAll(this.metrics);
311 objects.add(this.reportedRoute);
312 objects.add(this.rroBandwidth);
313 objects.add(this.includeRoute);
314 objects.add(this.loadBalancing);
316 compositeRequest = new CompositeRequestObject(this.requestParameter, this.endPoints, this.ct, this.lsp, this.lspa, this.bandwidth,
317 this.metrics.subList(0, this.metrics.size()), this.reportedRoute, this.rroBandwidth, this.includeRoute, this.loadBalancing);
318 assertEquals(compositeRequest, CompositeRequestObject.getCompositeFromList(objects));
322 objects.add(this.requestParameter);
323 objects.add(this.endPoints);
324 objects.add(this.ct);
325 objects.add(this.lsp);
326 objects.add(this.lspa);
327 objects.add(this.bandwidth);
328 objects.addAll(this.metrics);
329 objects.add(this.reportedRoute);
330 objects.add(this.rroBandwidth);
331 objects.add(this.includeRoute);
332 objects.add(this.loadBalancing);
334 objects.add(this.requestParameter);
335 objects.add(this.endPoints);
336 objects.add(this.ct);
337 objects.add(this.lsp);
338 objects.add(this.lspa);
339 objects.add(this.bandwidth);
340 objects.addAll(this.metrics);
341 objects.add(this.reportedRoute);
342 objects.add(this.rroBandwidth);
343 objects.add(this.includeRoute);
344 objects.add(this.loadBalancing);
345 while (!objects.isEmpty()) {
346 assertEquals(compositeRequest, CompositeRequestObject.getCompositeFromList(objects));
350 objects.add(this.requestParameter);
351 objects.add(this.endPoints);
352 compositeRequest = new CompositeRequestObject(this.requestParameter, this.endPoints);
353 assertEquals(compositeRequest, CompositeRequestObject.getCompositeFromList(objects));
358 public void testCompositeStateReportObject() {
359 final List<PCEPObject> objects = new ArrayList<PCEPObject>();
360 CompositeStateReportObject compositeStateReport;
362 objects.add(this.lsp);
363 for (final CompositeRptPathObject compositeRptPath : this.compositeRptPaths) {
364 objects.addAll(compositeRptPath.getCompositeAsList());
367 compositeStateReport = new CompositeStateReportObject(this.lsp, this.compositeRptPaths);
368 assertEquals(compositeStateReport, CompositeStateReportObject.getCompositeFromList(objects));
372 objects.add(this.lsp);
373 for (final CompositeRptPathObject compositeRptPath : this.compositeRptPaths) {
374 objects.addAll(compositeRptPath.getCompositeAsList());
377 objects.add(this.lsp);
378 for (final CompositeRptPathObject compositeRptPath : this.compositeRptPaths) {
379 objects.addAll(compositeRptPath.getCompositeAsList());
381 while (!objects.isEmpty()) {
382 assertEquals(compositeStateReport, CompositeStateReportObject.getCompositeFromList(objects));
386 objects.add(this.lsp);
387 for (final CompositeRptPathObject compositeRptPath : this.compositeRptPaths) {
388 objects.addAll(compositeRptPath.getCompositeAsList());
390 compositeStateReport = new CompositeStateReportObject(this.lsp, this.compositeRptPaths);
391 assertEquals(compositeStateReport, CompositeStateReportObject.getCompositeFromList(objects));
396 public void testCompositeUpdateRequestObject() {
397 final List<PCEPObject> objects = new ArrayList<PCEPObject>();
398 CompositeUpdateRequestObject compositeStateReport;
400 objects.add(this.lsp);
401 for (final CompositeUpdPathObject compositePath : this.compositeUpdPaths) {
402 objects.addAll(compositePath.getCompositeAsList());
405 compositeStateReport = new CompositeUpdateRequestObject(this.lsp, this.compositeUpdPaths);
406 assertEquals(compositeStateReport, CompositeUpdateRequestObject.getCompositeFromList(objects));
410 objects.add(this.lsp);
411 for (final CompositeUpdPathObject compositePath : this.compositeUpdPaths) {
412 objects.addAll(compositePath.getCompositeAsList());
415 objects.add(this.lsp);
416 for (final CompositeUpdPathObject compositePath : this.compositeUpdPaths) {
417 objects.addAll(compositePath.getCompositeAsList());
419 while (!objects.isEmpty()) {
420 assertEquals(compositeStateReport, CompositeUpdateRequestObject.getCompositeFromList(objects));
424 objects.add(this.lsp);
425 for (final CompositeUpdPathObject compositePath : this.compositeUpdPaths) {
426 objects.addAll(compositePath.getCompositeAsList());
428 compositeStateReport = new CompositeUpdateRequestObject(this.lsp, this.compositeUpdPaths);
429 assertEquals(compositeStateReport, CompositeUpdateRequestObject.getCompositeFromList(objects));
433 @SuppressWarnings("resource")
435 public void testSessionProposalCheckerFactory() {
436 assertTrue(new PCEPSessionProposalCheckerFactoryImpl().getPreferencesChecker(null).checkSessionCharacteristics(null));
437 assertEquals(new PCEPSessionPreferences(new PCEPOpenObject(30, 120, 0, null)), new PCEPSessionProposalCheckerFactoryImpl().getPreferencesChecker(null).getNewProposal(null));
441 public void testSessionProposalFactory() throws IOException {
442 final PCEPSessionProposalFactoryImpl spf = new PCEPSessionProposalFactoryImpl(10, 2, true, false, true, true, 5);
444 final List<PCEPTlv> tlvs = new ArrayList<PCEPTlv>();
445 tlvs.add(new PCEStatefulCapabilityTlv(true, false, true));
446 tlvs.add(new LSPCleanupTlv(5));
447 assertEquals(new PCEPSessionPreferences(new PCEPOpenObject(2, 10, 0, tlvs)), spf.getSessionProposal(null, 0).getProposal());