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.assertArrayEquals;
11 import static org.junit.Assert.assertEquals;
13 import java.io.IOException;
14 import java.util.List;
16 import org.junit.Before;
17 import org.junit.Test;
18 import org.opendaylight.protocol.concepts.Ipv4Util;
19 import org.opendaylight.protocol.concepts.Ipv6Util;
20 import org.opendaylight.protocol.pcep.PCEPDeserializerException;
21 import org.opendaylight.protocol.pcep.PCEPDocumentedException;
22 import org.opendaylight.protocol.pcep.impl.object.PCEPBandwidthObjectParser;
23 import org.opendaylight.protocol.pcep.impl.object.PCEPClassTypeObjectParser;
24 import org.opendaylight.protocol.pcep.impl.object.PCEPCloseObjectParser;
25 import org.opendaylight.protocol.pcep.impl.object.PCEPEndPointsObjectParser;
26 import org.opendaylight.protocol.pcep.impl.object.PCEPErrorObjectParser;
27 import org.opendaylight.protocol.pcep.impl.object.PCEPGlobalConstraintsObjectParser;
28 import org.opendaylight.protocol.pcep.impl.object.PCEPLoadBalancingObjectParser;
29 import org.opendaylight.protocol.pcep.impl.object.PCEPLspObjectParser;
30 import org.opendaylight.protocol.pcep.impl.object.PCEPLspaObjectParser;
31 import org.opendaylight.protocol.pcep.impl.object.PCEPMetricObjectParser;
32 import org.opendaylight.protocol.pcep.impl.object.PCEPNoPathObjectParser;
33 import org.opendaylight.protocol.pcep.impl.object.PCEPNotificationObjectParser;
34 import org.opendaylight.protocol.pcep.impl.object.PCEPObjectiveFunctionObjectParser;
35 import org.opendaylight.protocol.pcep.impl.object.PCEPRequestParameterObjectParser;
36 import org.opendaylight.protocol.pcep.impl.object.PCEPSrpObjectParser;
37 import org.opendaylight.protocol.pcep.impl.object.PCEPSvecObjectParser;
38 import org.opendaylight.protocol.pcep.spi.ObjectHeaderImpl;
39 import org.opendaylight.protocol.pcep.spi.TlvHandlerRegistry;
40 import org.opendaylight.protocol.pcep.spi.pojo.PCEPExtensionProviderContextImpl;
41 import org.opendaylight.protocol.util.ByteArray;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ieee754.rev130819.Float32;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.ClassType;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.OfId;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.OperationalStatus;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.PlspId;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.RequestId;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.SrpIdNumber;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.close.message.c.close.message.CCloseBuilder;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.object.address.family.Ipv4Builder;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.object.address.family.Ipv6Builder;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.attributes.ClassTypeBuilder;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.attributes.LspaBuilder;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.attributes.OfBuilder;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.error.code.tlv.LspErrorCode;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.error.code.tlv.LspErrorCodeBuilder;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.order.tlv.OrderBuilder;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.overload.duration.tlv.OverloadDurationBuilder;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcep.error.object.TlvsBuilder;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.ErrorsBuilder;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcinitiate.message.pcinitiate.message.requests.EndpointsBuilder;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcinitiate.message.pcinitiate.message.requests.LspBuilder;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcinitiate.message.pcinitiate.message.requests.SrpBuilder;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcntf.message.pcntf.message.notifications.NotificationsBuilder;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.replies.result.failure.NoPathBuilder;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.replies.result.failure.no.path.tlvs.NoPathVectorBuilder;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.SvecBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.requests.RpBuilder;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.requests.segment.computation.p2p.LoadBalancingBuilder;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.requests.segment.computation.p2p.reported.route.BandwidthBuilder;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.svec.GcBuilder;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.svec.MetricBuilder;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.req.missing.tlv.ReqMissingBuilder;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.symbolic.path.name.tlv.SymbolicPathName;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.symbolic.path.name.tlv.SymbolicPathNameBuilder;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.AttributeFilter;
78 import com.google.common.collect.Lists;
79 import com.google.common.primitives.UnsignedBytes;
81 public class PCEPObjectParserTest {
83 private TlvHandlerRegistry tlvRegistry;
86 public void setUp() throws Exception {
87 this.tlvRegistry = PCEPExtensionProviderContextImpl.create().getTlvHandlerRegistry();
92 // // FIXME: temporary
93 // public void testObjectDeserialization() throws PCEPDeserializerException, IOException, PCEPDocumentedException {
94 // PCEPObjectFactory.parseObjects(ByteArray.fileToBytes("src/test/resources/PCEPOpenObject1.bin"));
98 public void testCloseObject() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
99 final PCEPCloseObjectParser parser = new PCEPCloseObjectParser(this.tlvRegistry);
100 final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPCloseObject1.bin");
102 final CCloseBuilder builder = new CCloseBuilder();
103 builder.setProcessingRule(false);
104 builder.setIgnore(false);
105 builder.setReason((short) 5);
107 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false), result));
108 assertArrayEquals(result, parser.serializeObject(builder.build()));
112 public void testLoadBalancingObject() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
113 final PCEPLoadBalancingObjectParser parser = new PCEPLoadBalancingObjectParser(this.tlvRegistry);
114 final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPLoadBalancingObject1.bin");
116 final LoadBalancingBuilder builder = new LoadBalancingBuilder();
117 builder.setProcessingRule(true);
118 builder.setIgnore(false);
119 builder.setMaxLsp((short) UnsignedBytes.toInt((byte) 0xf1));
120 builder.setMinBandwidth(new Float32(new byte[] { (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF }));
122 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, false), result));
123 assertArrayEquals(result, parser.serializeObject(builder.build()));
127 public void testLspObjectWithTLV() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
128 final PCEPLspObjectParser parser = new PCEPLspObjectParser(this.tlvRegistry);
129 final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPLspObject1WithTLV.bin");
131 final LspBuilder builder = new LspBuilder();
132 builder.setProcessingRule(true);
133 builder.setIgnore(true);
134 builder.setAdministrative(true);
135 builder.setDelegate(false);
136 builder.setRemove(true);
137 builder.setSync(false);
138 builder.setOperational(OperationalStatus.GoingDown);
139 builder.setPlspId(new PlspId(0x12345L));
141 final LspErrorCode tlv1 = new LspErrorCodeBuilder().setErrorCode(627610883L).build();
142 final SymbolicPathName tlv2 = new SymbolicPathNameBuilder().setPathName(
143 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.SymbolicPathName("Med".getBytes())).build();
144 builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.object.TlvsBuilder().setLspErrorCode(
145 tlv1).setSymbolicPathName(tlv2).build());
146 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
147 assertArrayEquals(result, parser.serializeObject(builder.build()));
152 // public void testERObjectSerDeser() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
153 // final byte[] bytesFromFile =
154 // ByteArray.fileToBytes("src/test/resources/PCEPExplicitRouteObject1PackOfSubobjects.bin");
156 // MockitoAnnotations.initMocks(this);
157 // PCEPExplicitRouteObjectParser parser = new PCEPExplicitRouteObjectParser(registry);
158 // doReturn(parser).when(registry).getObjectParser(PCEPExplicitRouteObjectParser.TYPE,
159 // PCEPExplicitRouteObjectParser.CLASS);
160 // doReturn(new EROAsNumberSubobjectParser()).when(registry).getSubobjectParser(EROAsNumberSubobjectParser.TYPE);
161 // ObjectHeader h = new ObjectHeader() {
164 // public Class<? extends DataContainer> getImplementedInterface() {
165 // // TODO Auto-generated method stub
170 // public Boolean isProcessingRule() {
175 // public Boolean isIgnore() {
180 // final ExplicitRouteSubobject specObj = (ExplicitRouteSubobject)
181 // registry.getObjectParser(PCEPExplicitRouteObjectParser.TYPE, PCEPExplicitRouteObjectParser.CLASS).parseObject(h,
184 // System.out.println(specObj.toString());
186 // //final byte[] bytesActual = PCEPObjectFactory.put(Arrays.asList((PCEPObject) specObj));
187 // //assertArrayEquals(bytesFromFile, bytesActual);
191 // public void testIRObjectSerDeser() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
192 // final byte[] bytesFromFile =
193 // ByteArray.fileToBytes("src/test/resources/PCEPIncludeRouteObject1PackOfSubobjects.bin");
195 // final PCEPIncludeRouteObject specObj = (PCEPIncludeRouteObject)
196 // PCEPObjectFactory.parseObjects(bytesFromFile).get(0);
198 // assertEquals(8, specObj.getSubobjects().size());
200 // final byte[] bytesActual = PCEPObjectFactory.put(Arrays.asList((PCEPObject) specObj));
201 // assertArrayEquals(bytesFromFile, bytesActual);
205 // public void tesRRObjectSerDeser() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
206 // final byte[] bytesFromFile =
207 // ByteArray.fileToBytes("src/test/resources/PCEPReportedRouteObject1PackOfSubobjects.bin");
209 // final PCEPReportedRouteObject specObj = (PCEPReportedRouteObject)
210 // PCEPObjectFactory.parseObjects(bytesFromFile).get(0);
212 // assertEquals(6, specObj.getSubobjects().size());
214 // final byte[] bytesActual = PCEPObjectFactory.put(Arrays.asList((PCEPObject) specObj));
215 // assertArrayEquals(bytesFromFile, bytesActual);
220 public void testBandwidthObject() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
221 final PCEPBandwidthObjectParser parser = new PCEPBandwidthObjectParser(this.tlvRegistry);
222 byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPBandwidthObject1LowerBounds.bin");
224 final BandwidthBuilder builder = new BandwidthBuilder();
225 builder.setProcessingRule(true);
226 builder.setIgnore(true);
227 builder.setBandwidth(new Float32(result));
229 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
230 assertArrayEquals(result, parser.serializeObject(builder.build()));
232 result = ByteArray.fileToBytes("src/test/resources/PCEPBandwidthObject2UpperBounds.bin");
234 builder.setBandwidth(new Float32(result));
236 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
237 assertArrayEquals(result, parser.serializeObject(builder.build()));
241 public void testEndPointsObjectIPv4() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
242 final byte[] srcIPBytes = { (byte) 0xA2, (byte) 0xF5, (byte) 0x11, (byte) 0x0E };
243 final byte[] destIPBytes = { (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF };
245 final PCEPEndPointsObjectParser parser = new PCEPEndPointsObjectParser(this.tlvRegistry);
246 final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPEndPointsObject1IPv4.bin");
248 final EndpointsBuilder builder = new EndpointsBuilder();
249 builder.setProcessingRule(true);
250 builder.setIgnore(false);
251 builder.setAddressFamily(new Ipv4Builder().setSourceIpv4Address(Ipv4Util.addressForBytes(srcIPBytes)).setDestinationIpv4Address(
252 Ipv4Util.addressForBytes(destIPBytes)).build());
254 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, false), result));
255 assertArrayEquals(result, parser.serializeObject(builder.build()));
259 public void testEndPointsObjectIPv6() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
260 final byte[] destIPBytes = { (byte) 0x00, (byte) 0x02, (byte) 0x5D, (byte) 0xD2, (byte) 0xFF, (byte) 0xEC, (byte) 0xA1,
261 (byte) 0xB6, (byte) 0x58, (byte) 0x1E, (byte) 0x9F, (byte) 0x50, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, };
262 final byte[] srcIPBytes = { (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
263 (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF };
265 final PCEPEndPointsObjectParser parser = new PCEPEndPointsObjectParser(this.tlvRegistry);
266 final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPEndPointsObject2IPv6.bin");
268 final EndpointsBuilder builder = new EndpointsBuilder();
269 builder.setProcessingRule(true);
270 builder.setIgnore(false);
271 builder.setAddressFamily(new Ipv6Builder().setSourceIpv6Address(Ipv6Util.addressForBytes(srcIPBytes)).setDestinationIpv6Address(
272 Ipv6Util.addressForBytes(destIPBytes)).build());
274 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, false), result));
275 assertArrayEquals(result, parser.serializeObject(builder.build()));
279 public void testErrorObjectWithTlv() throws PCEPDeserializerException, IOException, PCEPDocumentedException {
280 final PCEPErrorObjectParser parser = new PCEPErrorObjectParser(this.tlvRegistry);
281 byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPErrorObject1.bin");
283 final ErrorsBuilder builder = new ErrorsBuilder();
284 builder.setProcessingRule(true);
285 builder.setIgnore(true);
286 builder.setType((short) 1);
287 builder.setValue((short) 1);
289 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
290 assertArrayEquals(result, parser.serializeObject(builder.build()));
292 result = ByteArray.fileToBytes("src/test/resources/PCEPErrorObject3.bin");
294 builder.setType((short) 7);
295 builder.setValue((short) 0);
296 builder.setTlvs(new TlvsBuilder().setReqMissing(new ReqMissingBuilder().setRequestId(new RequestId(0x00001155L)).build()).build());
298 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
299 assertArrayEquals(result, parser.serializeObject(builder.build()));
303 public void testLspaObject() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
304 final PCEPLspaObjectParser parser = new PCEPLspaObjectParser(this.tlvRegistry);
305 byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPLspaObject1LowerBounds.bin");
307 final LspaBuilder builder = new LspaBuilder();
308 builder.setProcessingRule(true);
309 builder.setIgnore(true);
310 builder.setExcludeAny(new AttributeFilter(0L));
311 builder.setIncludeAny(new AttributeFilter(0L));
312 builder.setIncludeAll(new AttributeFilter(0L));
313 builder.setHoldPriority((short) 0);
314 builder.setSetupPriority((short) 0);
315 builder.setLocalProtectionDesired(false);
317 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
318 assertArrayEquals(result, parser.serializeObject(builder.build()));
320 result = ByteArray.fileToBytes("src/test/resources/PCEPLspaObject2UpperBounds.bin");
322 builder.setExcludeAny(new AttributeFilter(0xFFFFFFFFL));
323 builder.setIncludeAny(new AttributeFilter(0xFFFFFFFFL));
324 builder.setIncludeAll(new AttributeFilter(0xFFFFFFFFL));
325 builder.setHoldPriority((short) 0xFF);
326 builder.setSetupPriority((short) 0xFF);
327 builder.setLocalProtectionDesired(true);
329 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
330 assertArrayEquals(result, parser.serializeObject(builder.build()));
332 result = ByteArray.fileToBytes("src/test/resources/PCEPLspaObject3RandVals.bin");
334 builder.setExcludeAny(new AttributeFilter(0x20A1FEE3L));
335 builder.setIncludeAny(new AttributeFilter(0x1A025CC7L));
336 builder.setIncludeAll(new AttributeFilter(0x2BB66532L));
337 builder.setHoldPriority((short) 0x02);
338 builder.setSetupPriority((short) 0x03);
339 builder.setLocalProtectionDesired(true);
341 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
342 assertArrayEquals(result, parser.serializeObject(builder.build()));
346 public void testMetricObject() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
347 final PCEPMetricObjectParser parser = new PCEPMetricObjectParser(this.tlvRegistry);
348 byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPMetricObject1LowerBounds.bin");
350 final MetricBuilder builder = new MetricBuilder();
351 builder.setProcessingRule(true);
352 builder.setIgnore(true);
353 builder.setComputed(false);
354 builder.setBound(false);
355 builder.setMetricType((short) 1);
356 builder.setValue(new Float32(new byte[] { 0, 0, 0, 0 }));
358 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
359 assertArrayEquals(result, parser.serializeObject(builder.build()));
361 result = ByteArray.fileToBytes("src/test/resources/PCEPMetricObject2UpperBounds.bin");
363 builder.setComputed(true);
364 builder.setBound(false);
365 builder.setMetricType((short) 2);
366 builder.setValue(new Float32(new byte[] { (byte) 0x4f, (byte) 0x70, (byte) 0x00, (byte) 0x00 }));
368 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
369 assertArrayEquals(result, parser.serializeObject(builder.build()));
373 public void testNoPathObjectWithTlv() throws PCEPDeserializerException, IOException, PCEPDocumentedException {
374 final PCEPNoPathObjectParser parser = new PCEPNoPathObjectParser(this.tlvRegistry);
375 byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPNoPathObject1WithoutTLV.bin");
377 final NoPathBuilder builder = new NoPathBuilder();
378 builder.setProcessingRule(true);
379 builder.setIgnore(true);
380 builder.setNatureOfIssue((short) 1);
381 builder.setUnsatisfiedConstraints(true);
383 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
384 assertArrayEquals(result, parser.serializeObject(builder.build()));
386 result = ByteArray.fileToBytes("src/test/resources/PCEPNoPathObject2WithTLV.bin");
388 builder.setNatureOfIssue((short) 0);
389 builder.setUnsatisfiedConstraints(false);
391 final NoPathVectorBuilder b = new NoPathVectorBuilder();
392 b.setFlags(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.NoPathVectorTlv.Flags(false, true, false, true, false, true, true, true));
393 builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.replies.result.failure.no.path.TlvsBuilder().setNoPathVector(
396 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
397 assertArrayEquals(result, parser.serializeObject(builder.build()));
401 public void testNotifyObjectWithTlv() throws PCEPDeserializerException, IOException, PCEPDocumentedException {
402 final PCEPNotificationObjectParser parser = new PCEPNotificationObjectParser(this.tlvRegistry);
403 byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPNotificationObject2WithoutTlv.bin");
405 final NotificationsBuilder builder = new NotificationsBuilder();
406 builder.setProcessingRule(true);
407 builder.setIgnore(true);
408 builder.setType((short) 0xff);
409 builder.setValue((short) 0xff);
411 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
412 assertArrayEquals(result, parser.serializeObject(builder.build()));
414 result = ByteArray.fileToBytes("src/test/resources/PCEPNotificationObject1WithTlv.bin");
416 builder.setType((short) 2);
417 builder.setValue((short) 1);
418 builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.notification.object.TlvsBuilder().setOverloadDuration(
419 new OverloadDurationBuilder().setDuration(0xff0000a2L).build()).build());
421 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
422 assertArrayEquals(result, parser.serializeObject(builder.build()));
427 // * Standard ser deser test<br/>
428 // * used resources:<br/>
429 // * - PCEPOpenObject1.bin
431 // * @throws PCEPDeserializerException
432 // * @throws IOException
433 // * @throws PCEPDocumentedException
437 // // FIXME: temporary
438 // public void testOpenObjectSerDeser() throws PCEPDeserializerException, IOException, PCEPDocumentedException {
439 // // final List<PCEPTlv> tlvs = new ArrayList<PCEPTlv>();
440 // // tlvs.add(new PCEStatefulCapabilityTlv(false, true, true));
441 // // tlvs.add(new LSPStateDBVersionTlv(0x80));
442 // // final byte[] valueBytes = { (byte) 0x12, (byte) 0x34, (byte) 0x56, (byte) 0x78, (byte) 0x9A, (byte) 0xBC,
443 // (byte) 0xDE, (byte) 0xF0 };
444 // // tlvs.add(new NodeIdentifierTlv(valueBytes));
445 // // final PCEPOpenObject specObject = new PCEPOpenObject(30, 120, 1, tlvs);
447 // // serDeserTest("src/test/resources/PCEPOpenObject1.bin", specObject);
451 // * Specific test for upper bounds and without tlvs<br/>
452 // * Used resources:<br/>
453 // * - PCEPOpenObject2UpperBoundsNoTlv.bin
455 // * @throws PCEPDeserializerException
456 // * @throws IOException
457 // * @throws PCEPDocumentedException
460 // public void testOpenObjectBoundsWithoutTlvs() throws IOException, PCEPDeserializerException,
461 // PCEPDocumentedException {
462 // // final List<PCEPTlv> tlvs = new ArrayList<PCEPTlv>();
463 // // serDeserTest("src/test/resources/PCEPOpenObject2UpperBoundsNoTlv.bin", new PCEPOpenObject(0xFF, 0xFF, 0xFF,
465 // serDeserTest("src/test/resources/PCEPOpenObject2UpperBoundsNoTlv.bin", new PCEPOpenObject(0xFF, 0xFF, 0xFF,
471 public void testRPObjectWithTlv() throws PCEPDeserializerException, IOException, PCEPDocumentedException {
472 final PCEPRequestParameterObjectParser parser = new PCEPRequestParameterObjectParser(this.tlvRegistry);
473 byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPRPObject1.bin");
475 final RpBuilder builder = new RpBuilder();
476 builder.setProcessingRule(true);
477 builder.setIgnore(true);
478 builder.setReoptimization(true);
479 builder.setBiDirectional(false);
480 builder.setLoose(true);
481 builder.setMakeBeforeBreak(true);
482 builder.setOrder(false);
483 builder.setSupplyOf(false);
484 builder.setFragmentation(false);
485 builder.setP2mp(false);
486 builder.setEroCompression(false);
487 builder.setPriority((short) 5);
488 builder.setRequestId(new RequestId(0xdeadbeefL));
490 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
491 assertArrayEquals(result, parser.serializeObject(builder.build()));
493 result = ByteArray.fileToBytes("src/test/resources/PCEPRPObject2.bin");
495 builder.setReoptimization(false);
496 builder.setFragmentation(true);
497 builder.setEroCompression(true);
499 final OrderBuilder b = new OrderBuilder();
500 b.setDelete(0xffffffffL);
503 builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rp.object.TlvsBuilder().setOrder(
506 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
507 assertArrayEquals(result, parser.serializeObject(builder.build()));
511 public void testSvecObject() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
512 final PCEPSvecObjectParser parser = new PCEPSvecObjectParser(this.tlvRegistry);
513 byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPSvecObject2.bin");
515 final SvecBuilder builder = new SvecBuilder();
516 builder.setProcessingRule(false);
517 builder.setIgnore(false);
518 builder.setLinkDiverse(false);
519 builder.setNodeDiverse(false);
520 builder.setSrlgDiverse(false);
521 builder.setRequestsIds(Lists.newArrayList(new RequestId(0xFFL)));
523 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false), result));
524 assertArrayEquals(result, parser.serializeObject(builder.build()));
526 result = ByteArray.fileToBytes("src/test/resources/PCEPSvecObject1_10ReqIDs.bin");
528 builder.setProcessingRule(true);
529 builder.setLinkDiverse(true);
530 builder.setSrlgDiverse(true);
532 final List<RequestId> requestIDs = Lists.newArrayList();
533 requestIDs.add(new RequestId(0xFFFFFFFFL));
534 requestIDs.add(new RequestId(0x00000000L));
535 requestIDs.add(new RequestId(0x01234567L));
536 requestIDs.add(new RequestId(0x89ABCDEFL));
537 requestIDs.add(new RequestId(0xFEDCBA98L));
538 requestIDs.add(new RequestId(0x76543210L));
539 requestIDs.add(new RequestId(0x15825266L));
540 requestIDs.add(new RequestId(0x48120BBEL));
541 requestIDs.add(new RequestId(0x25FB7E52L));
542 requestIDs.add(new RequestId(0xB2F2546BL));
544 builder.setRequestsIds(requestIDs);
546 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, false), result));
547 assertArrayEquals(result, parser.serializeObject(builder.build()));
551 public void testClassTypeObject() throws PCEPDeserializerException, PCEPDocumentedException {
552 final PCEPClassTypeObjectParser parser = new PCEPClassTypeObjectParser(this.tlvRegistry);
553 final byte[] result = new byte[] { 0, 0, 0, (byte) 0x04 };
555 final ClassTypeBuilder builder = new ClassTypeBuilder();
556 builder.setProcessingRule(true);
557 builder.setIgnore(false);
558 builder.setClassType(new ClassType((short) 4));
560 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, false), result));
561 assertArrayEquals(result, parser.serializeObject(builder.build()));
566 // * Test PCEPExcludeRouteObjectObject (Serialization/Deserialization)<br/>
567 // * Used resources:<br/>
568 // * - PCEPExcludeRouteObject.1.bin<br/>
570 // * @throws IOException
571 // * @throws PCEPDeserializerException
572 // * @throws PCEPDocumentedException
575 // public void testExcludeRouteObject() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
576 // final List<ExcludeRouteSubobject> xroSubobjects = new ArrayList<ExcludeRouteSubobject>();
577 // xroSubobjects.add(new XROIPPrefixSubobject<IPv4Prefix>(new IPv4Prefix(new IPv4Address(new byte[] { (byte) 192,
579 // (byte) 100, (byte) 100 }), 16), true, XROSubobjectAttribute.NODE));
580 // xroSubobjects.add(new XROAsNumberSubobject(new AsNumber(0x1234L), false));
586 public void testSrpObject() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
587 final PCEPSrpObjectParser parser = new PCEPSrpObjectParser(this.tlvRegistry);
588 final byte[] result = new byte[] { 0, 0, 0, 0, 0, 0, 0, (byte) 0x01 };
590 final SrpBuilder builder = new SrpBuilder();
591 builder.setProcessingRule(false);
592 builder.setIgnore(false);
593 builder.setOperationId(new SrpIdNumber(1L));
595 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false), result));
596 assertArrayEquals(result, parser.serializeObject(builder.build()));
600 public void testObjectiveFunctionObject() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
601 final PCEPObjectiveFunctionObjectParser parser = new PCEPObjectiveFunctionObjectParser(this.tlvRegistry);
602 final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPObjectiveFunctionObject.1.bin");
604 final OfBuilder builder = new OfBuilder();
605 builder.setProcessingRule(true);
606 builder.setIgnore(false);
607 builder.setCode(new OfId(4));
609 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, false), result));
610 assertArrayEquals(result, parser.serializeObject(builder.build()));
614 public void testGlobalConstraintsObject() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
615 final PCEPGlobalConstraintsObjectParser parser = new PCEPGlobalConstraintsObjectParser(this.tlvRegistry);
616 final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPGlobalConstraintsObject.1.bin");
618 final GcBuilder builder = new GcBuilder();
619 builder.setProcessingRule(true);
620 builder.setIgnore(false);
621 builder.setMaxHop((short) 1);
622 builder.setMaxUtilization((short) 0);
623 builder.setMinUtilization((short) 100);
624 builder.setOverBookingFactor((short) 0xFF);
626 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, false), result));
627 assertArrayEquals(result, parser.serializeObject(builder.build()));
630 // // FIXME: add at least one test with true value
632 // public void openObjectWithTlv() throws PCEPDeserializerException, PCEPDocumentedException {
633 // // this.testOpenObjectWithSpecTlv(new PCEStatefulCapabilityTlv(false, false, false));
634 // // this.testOpenObjectWithSpecTlv(new PCEStatefulCapabilityTlv(false, false, true));
635 // // this.testOpenObjectWithSpecTlv(new PCEStatefulCapabilityTlv(false, true, false));
636 // // this.testOpenObjectWithSpecTlv(new PCEStatefulCapabilityTlv(false, true, true));
639 // // private void testOpenObjectWithSpecTlv(final PCEPTlv tlv) throws PCEPDeserializerException,
640 // PCEPDocumentedException {
641 // // final List<PCEPObject> objs = new ArrayList<PCEPObject>();
642 // // final List<PCEPTlv> tlvs = new ArrayList<PCEPTlv>();
644 // // final PCEPOpenObject oo = new PCEPOpenObject(30, 120, 0, tlvs);
646 // // final byte[] bytes = PCEPObjectFactory.put(objs);
647 // // final PCEPObject obj = PCEPObjectFactory.parseObjects(bytes).get(0);
648 // // assertEquals(oo, obj);
652 // public void testErrorsMapping() {
653 // final PCEPErrorObjectParser.PCEPErrorsMaping mapper = PCEPErrorObjectParser.PCEPErrorsMaping.getInstance();
655 // for (final PCEPErrors error : PCEPErrors.values()) {
656 // final PCEPErrorIdentifier errorId = mapper.getFromErrorsEnum(error);
657 // assertEquals(error, mapper.getFromErrorIdentifier(errorId));
662 // public void testSERObjects() throws PCEPDocumentedException, PCEPDeserializerException {
663 // final List<ExplicitRouteSubobject> eroSubobjects = new ArrayList<ExplicitRouteSubobject>();
664 // eroSubobjects.add(new EROIPPrefixSubobject<IPv4Prefix>(new IPv4Prefix(new IPv4Address(new byte[] { (byte) 192,
665 // (byte) 168, 1, 8 }), 16), false));
666 // eroSubobjects.add(new EROIPPrefixSubobject<IPv6Prefix>(new IPv6Prefix(new IPv6Address(new byte[] { (byte) 192,
668 // (byte) 192, (byte) 168, 2, 1, (byte) 192, (byte) 168, 2, 1, (byte) 192, (byte) 168, 2, 1 }), 64), false));
670 // serDeserTestWithoutBin(new PCEPSecondaryExplicitRouteObject(eroSubobjects, true, false));
674 // public void testSRRObject() throws PCEPDocumentedException, PCEPDeserializerException {
675 // final List<ReportedRouteSubobject> rroSubobjects = new ArrayList<ReportedRouteSubobject>();
676 // rroSubobjects.add(new RROIPAddressSubobject<IPv4Prefix>(new IPv4Prefix(this.ipv4addr, 16), true, false));
677 // rroSubobjects.add(new RROIPAddressSubobject<IPv6Prefix>(new IPv6Prefix(this.ipv6addr, 64), false, true));
679 // serDeserTestWithoutBin(new PCEPSecondaryRecordRouteObject(rroSubobjects, true, false));