BUG-50 : added test for ERO.
[bgpcep.git] / pcep / impl / src / test / java / org / opendaylight / protocol / pcep / impl / PCEPObjectParserTest.java
1 /*
2  * Copyright (c) 2013 Cisco Systems, Inc. and others.  All rights reserved.
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6  * and is available at http://www.eclipse.org/legal/epl-v10.html
7  */
8 package org.opendaylight.protocol.pcep.impl;
9
10 import static org.junit.Assert.assertArrayEquals;
11 import static org.junit.Assert.assertEquals;
12
13 import java.io.IOException;
14 import java.math.BigInteger;
15 import java.util.List;
16
17 import org.apache.commons.codec.binary.Hex;
18 import org.junit.Before;
19 import org.junit.Test;
20 import org.opendaylight.protocol.concepts.Ipv4Util;
21 import org.opendaylight.protocol.concepts.Ipv6Util;
22 import org.opendaylight.protocol.pcep.PCEPDeserializerException;
23 import org.opendaylight.protocol.pcep.PCEPDocumentedException;
24 import org.opendaylight.protocol.pcep.impl.object.PCEPBandwidthObjectParser;
25 import org.opendaylight.protocol.pcep.impl.object.PCEPClassTypeObjectParser;
26 import org.opendaylight.protocol.pcep.impl.object.PCEPCloseObjectParser;
27 import org.opendaylight.protocol.pcep.impl.object.PCEPEndPointsObjectParser;
28 import org.opendaylight.protocol.pcep.impl.object.PCEPErrorObjectParser;
29 import org.opendaylight.protocol.pcep.impl.object.PCEPExcludeRouteObjectParser;
30 import org.opendaylight.protocol.pcep.impl.object.PCEPExplicitRouteObjectParser;
31 import org.opendaylight.protocol.pcep.impl.object.PCEPGlobalConstraintsObjectParser;
32 import org.opendaylight.protocol.pcep.impl.object.PCEPLoadBalancingObjectParser;
33 import org.opendaylight.protocol.pcep.impl.object.PCEPLspObjectParser;
34 import org.opendaylight.protocol.pcep.impl.object.PCEPLspaObjectParser;
35 import org.opendaylight.protocol.pcep.impl.object.PCEPMetricObjectParser;
36 import org.opendaylight.protocol.pcep.impl.object.PCEPNoPathObjectParser;
37 import org.opendaylight.protocol.pcep.impl.object.PCEPNotificationObjectParser;
38 import org.opendaylight.protocol.pcep.impl.object.PCEPObjectiveFunctionObjectParser;
39 import org.opendaylight.protocol.pcep.impl.object.PCEPOpenObjectParser;
40 import org.opendaylight.protocol.pcep.impl.object.PCEPRequestParameterObjectParser;
41 import org.opendaylight.protocol.pcep.impl.object.PCEPSrpObjectParser;
42 import org.opendaylight.protocol.pcep.impl.object.PCEPSvecObjectParser;
43 import org.opendaylight.protocol.pcep.spi.ObjectHeaderImpl;
44 import org.opendaylight.protocol.pcep.spi.TlvHandlerRegistry;
45 import org.opendaylight.protocol.pcep.spi.pojo.PCEPExtensionProviderContextImpl;
46 import org.opendaylight.protocol.util.ByteArray;
47 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.AsNumber;
48 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix;
49 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ieee754.rev130819.Float32;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.ClassType;
52 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.OfId;
53 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.OperationalStatus;
54 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.PlspId;
55 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.ProtocolVersion;
56 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.RequestId;
57 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.SrpIdNumber;
58 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.close.message.c.close.message.CCloseBuilder;
59 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.object.address.family.Ipv4Builder;
60 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.endpoints.object.address.family.Ipv6Builder;
61 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.exclude.route.object.Subobjects;
62 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.exclude.route.object.SubobjectsBuilder;
63 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.attributes.ClassTypeBuilder;
64 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.attributes.LspaBuilder;
65 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.attributes.OfBuilder;
66 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.db.version.tlv.LspDbVersion;
67 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.db.version.tlv.LspDbVersionBuilder;
68 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.error.code.tlv.LspErrorCode;
69 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.error.code.tlv.LspErrorCodeBuilder;
70 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.message.open.message.OpenBuilder;
71 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.order.tlv.OrderBuilder;
72 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.overload.duration.tlv.OverloadDurationBuilder;
73 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.path.definition.ExplicitRouteBuilder;
74 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcep.error.object.TlvsBuilder;
75 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcerr.message.pcerr.message.ErrorsBuilder;
76 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcinitiate.message.pcinitiate.message.requests.EndpointsBuilder;
77 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcinitiate.message.pcinitiate.message.requests.LspBuilder;
78 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcinitiate.message.pcinitiate.message.requests.SrpBuilder;
79 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcntf.message.pcntf.message.notifications.NotificationsBuilder;
80 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcrep.message.pcrep.message.replies.result.failure.NoPathBuilder;
81 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;
82 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.SvecBuilder;
83 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.requests.RpBuilder;
84 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.requests.segment.computation.p2p.LoadBalancingBuilder;
85 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;
86 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.svec.GcBuilder;
87 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.svec.MetricBuilder;
88 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.pcreq.message.pcreq.message.svec.XroBuilder;
89 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.predundancy.group.id.tlv.PredundancyGroupId;
90 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.predundancy.group.id.tlv.PredundancyGroupIdBuilder;
91 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.req.missing.tlv.ReqMissingBuilder;
92 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.stateful.capability.tlv.Stateful;
93 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.stateful.capability.tlv.Stateful.Flags;
94 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.stateful.capability.tlv.StatefulBuilder;
95 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.symbolic.path.name.tlv.SymbolicPathName;
96 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.symbolic.path.name.tlv.SymbolicPathNameBuilder;
97 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.AttributeFilter;
98 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.ExcludeRouteSubobjects.Attribute;
99 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.basic.explicit.route.subobjects.subobject.type.AsNumberBuilder;
100 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.basic.explicit.route.subobjects.subobject.type.IpPrefixBuilder;
101 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.rsvp.rev130820.basic.explicit.route.subobjects.subobject.type.UnnumberedBuilder;
102
103 import com.google.common.collect.Lists;
104 import com.google.common.primitives.UnsignedBytes;
105
106 public class PCEPObjectParserTest {
107
108         private TlvHandlerRegistry tlvRegistry;
109
110         @Before
111         public void setUp() throws Exception {
112                 this.tlvRegistry = PCEPExtensionProviderContextImpl.create().getTlvHandlerRegistry();
113         }
114
115         @Test
116         public void testOpenObjectWithTLV() throws PCEPDeserializerException, IOException, PCEPDocumentedException {
117                 final PCEPOpenObjectParser parser = new PCEPOpenObjectParser(this.tlvRegistry);
118                 final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPOpenObject1.bin");
119
120                 final OpenBuilder builder = new OpenBuilder();
121                 builder.setProcessingRule(false);
122                 builder.setIgnore(false);
123                 builder.setVersion(new ProtocolVersion((short) 1));
124                 builder.setKeepalive((short) 30);
125                 builder.setDeadTimer((short) 120);
126                 builder.setSessionId((short) 1);
127
128                 final Stateful tlv1 = new StatefulBuilder().setFlags(new Flags(true, false, true)).build();
129                 final LspDbVersion tlv2 = new LspDbVersionBuilder().setVersion(BigInteger.valueOf(0x80L)).build();
130                 final byte[] predundancyBytes = { (byte) 0x12, (byte) 0x34, (byte) 0x56, (byte) 0x78, (byte) 0x9a, (byte) 0xbc, (byte) 0xde,
131                                 (byte) 0xf0 };
132                 final PredundancyGroupId tlv3 = new PredundancyGroupIdBuilder().setIdentifier(predundancyBytes).build();
133
134                 builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.open.object.TlvsBuilder().setStateful(
135                                 tlv1).setPredundancyGroupId(tlv3).setLspDbVersion(tlv2).build());
136
137                 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false), result));
138                 assertArrayEquals(result, parser.serializeObject(builder.build()));
139         }
140
141         @Test
142         public void testCloseObject() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
143                 final PCEPCloseObjectParser parser = new PCEPCloseObjectParser(this.tlvRegistry);
144                 final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPCloseObject1.bin");
145
146                 final CCloseBuilder builder = new CCloseBuilder();
147                 builder.setProcessingRule(false);
148                 builder.setIgnore(false);
149                 builder.setReason((short) 5);
150
151                 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false), result));
152                 assertArrayEquals(result, parser.serializeObject(builder.build()));
153         }
154
155         @Test
156         public void testLoadBalancingObject() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
157                 final PCEPLoadBalancingObjectParser parser = new PCEPLoadBalancingObjectParser(this.tlvRegistry);
158                 final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPLoadBalancingObject1.bin");
159
160                 final LoadBalancingBuilder builder = new LoadBalancingBuilder();
161                 builder.setProcessingRule(true);
162                 builder.setIgnore(false);
163                 builder.setMaxLsp((short) UnsignedBytes.toInt((byte) 0xf1));
164                 builder.setMinBandwidth(new Float32(new byte[] { (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF }));
165
166                 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, false), result));
167                 assertArrayEquals(result, parser.serializeObject(builder.build()));
168         }
169
170         @Test
171         public void testLspObjectWithTLV() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
172                 final PCEPLspObjectParser parser = new PCEPLspObjectParser(this.tlvRegistry);
173                 final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPLspObject1WithTLV.bin");
174
175                 final LspBuilder builder = new LspBuilder();
176                 builder.setProcessingRule(true);
177                 builder.setIgnore(true);
178                 builder.setAdministrative(true);
179                 builder.setDelegate(false);
180                 builder.setRemove(true);
181                 builder.setSync(false);
182                 builder.setOperational(OperationalStatus.GoingDown);
183                 builder.setPlspId(new PlspId(0x12345L));
184
185                 final LspErrorCode tlv1 = new LspErrorCodeBuilder().setErrorCode(627610883L).build();
186                 final SymbolicPathName tlv2 = new SymbolicPathNameBuilder().setPathName(
187                                 new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.SymbolicPathName("Med".getBytes())).build();
188                 builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.lsp.object.TlvsBuilder().setLspErrorCode(
189                                 tlv1).setSymbolicPathName(tlv2).build());
190                 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
191                 assertArrayEquals(result, parser.serializeObject(builder.build()));
192         }
193
194         @Test
195         public void testEROObject() throws Exception {
196                 final PCEPExplicitRouteObjectParser parser = new PCEPExplicitRouteObjectParser(PCEPExtensionProviderContextImpl.create().getEROSubobjectHandlerRegistry());
197                 final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPExplicitRouteObject1PackOfSubobjects.bin");
198
199                 final ExplicitRouteBuilder builder = new ExplicitRouteBuilder();
200                 builder.setProcessingRule(false);
201                 builder.setIgnore(false);
202                 final List<org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.Subobjects> subs = Lists.newArrayList();
203                 subs.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.SubobjectsBuilder().setLoose(
204                                 true).setSubobjectType(new AsNumberBuilder().setAsNumber(new AsNumber(0xffffL)).build()).build());
205                 subs.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.SubobjectsBuilder().setLoose(
206                                 true).setSubobjectType(new IpPrefixBuilder().setIpPrefix(new IpPrefix(new Ipv4Prefix("255.255.255.255/32"))).build()).build());
207                 subs.add(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.explicit.route.object.SubobjectsBuilder().setLoose(
208                                 true).setSubobjectType(new UnnumberedBuilder().setRouterId(0xffffffffL).setInterfaceId(0xffffffffL).build()).build());
209                 builder.setSubobjects(subs);
210
211                 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false), result));
212                 System.out.println(new String(Hex.encodeHex(parser.serializeObject(builder.build()))));
213                 assertArrayEquals(result, parser.serializeObject(builder.build()));
214         }
215
216         //
217         // @Test
218         // public void testIRObjectSerDeser() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
219         // final byte[] bytesFromFile =
220         // ByteArray.fileToBytes("src/test/resources/PCEPIncludeRouteObject1PackOfSubobjects.bin");
221         //
222         // final PCEPIncludeRouteObject specObj = (PCEPIncludeRouteObject)
223         // PCEPObjectFactory.parseObjects(bytesFromFile).get(0);
224         //
225         // assertEquals(8, specObj.getSubobjects().size());
226         //
227         // final byte[] bytesActual = PCEPObjectFactory.put(Arrays.asList((PCEPObject) specObj));
228         // assertArrayEquals(bytesFromFile, bytesActual);
229         // }
230         //
231         // @Test
232         // public void tesRRObjectSerDeser() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
233         // final byte[] bytesFromFile =
234         // ByteArray.fileToBytes("src/test/resources/PCEPReportedRouteObject1PackOfSubobjects.bin");
235         //
236         // final PCEPReportedRouteObject specObj = (PCEPReportedRouteObject)
237         // PCEPObjectFactory.parseObjects(bytesFromFile).get(0);
238         //
239         // assertEquals(6, specObj.getSubobjects().size());
240         //
241         // final byte[] bytesActual = PCEPObjectFactory.put(Arrays.asList((PCEPObject) specObj));
242         // assertArrayEquals(bytesFromFile, bytesActual);
243         // }
244         //
245
246         @Test
247         public void testBandwidthObject() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
248                 final PCEPBandwidthObjectParser parser = new PCEPBandwidthObjectParser(this.tlvRegistry);
249                 byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPBandwidthObject1LowerBounds.bin");
250
251                 final BandwidthBuilder builder = new BandwidthBuilder();
252                 builder.setProcessingRule(true);
253                 builder.setIgnore(true);
254                 builder.setBandwidth(new Float32(result));
255
256                 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
257                 assertArrayEquals(result, parser.serializeObject(builder.build()));
258
259                 result = ByteArray.fileToBytes("src/test/resources/PCEPBandwidthObject2UpperBounds.bin");
260
261                 builder.setBandwidth(new Float32(result));
262
263                 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
264                 assertArrayEquals(result, parser.serializeObject(builder.build()));
265         }
266
267         @Test
268         public void testEndPointsObjectIPv4() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
269                 final byte[] srcIPBytes = { (byte) 0xA2, (byte) 0xF5, (byte) 0x11, (byte) 0x0E };
270                 final byte[] destIPBytes = { (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF };
271
272                 final PCEPEndPointsObjectParser parser = new PCEPEndPointsObjectParser(this.tlvRegistry);
273                 final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPEndPointsObject1IPv4.bin");
274
275                 final EndpointsBuilder builder = new EndpointsBuilder();
276                 builder.setProcessingRule(true);
277                 builder.setIgnore(false);
278                 builder.setAddressFamily(new Ipv4Builder().setSourceIpv4Address(Ipv4Util.addressForBytes(srcIPBytes)).setDestinationIpv4Address(
279                                 Ipv4Util.addressForBytes(destIPBytes)).build());
280
281                 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, false), result));
282                 assertArrayEquals(result, parser.serializeObject(builder.build()));
283         }
284
285         @Test
286         public void testEndPointsObjectIPv6() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
287                 final byte[] destIPBytes = { (byte) 0x00, (byte) 0x02, (byte) 0x5D, (byte) 0xD2, (byte) 0xFF, (byte) 0xEC, (byte) 0xA1,
288                                 (byte) 0xB6, (byte) 0x58, (byte) 0x1E, (byte) 0x9F, (byte) 0x50, (byte) 0x00, (byte) 0x00, (byte) 0x00, (byte) 0x00, };
289                 final byte[] srcIPBytes = { (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF,
290                                 (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF };
291
292                 final PCEPEndPointsObjectParser parser = new PCEPEndPointsObjectParser(this.tlvRegistry);
293                 final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPEndPointsObject2IPv6.bin");
294
295                 final EndpointsBuilder builder = new EndpointsBuilder();
296                 builder.setProcessingRule(true);
297                 builder.setIgnore(false);
298                 builder.setAddressFamily(new Ipv6Builder().setSourceIpv6Address(Ipv6Util.addressForBytes(srcIPBytes)).setDestinationIpv6Address(
299                                 Ipv6Util.addressForBytes(destIPBytes)).build());
300
301                 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, false), result));
302                 assertArrayEquals(result, parser.serializeObject(builder.build()));
303         }
304
305         @Test
306         public void testErrorObjectWithTlv() throws PCEPDeserializerException, IOException, PCEPDocumentedException {
307                 final PCEPErrorObjectParser parser = new PCEPErrorObjectParser(this.tlvRegistry);
308                 byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPErrorObject1.bin");
309
310                 final ErrorsBuilder builder = new ErrorsBuilder();
311                 builder.setProcessingRule(true);
312                 builder.setIgnore(true);
313                 builder.setType((short) 1);
314                 builder.setValue((short) 1);
315
316                 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
317                 assertArrayEquals(result, parser.serializeObject(builder.build()));
318
319                 result = ByteArray.fileToBytes("src/test/resources/PCEPErrorObject3.bin");
320
321                 builder.setType((short) 7);
322                 builder.setValue((short) 0);
323                 builder.setTlvs(new TlvsBuilder().setReqMissing(new ReqMissingBuilder().setRequestId(new RequestId(0x00001155L)).build()).build());
324
325                 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
326                 assertArrayEquals(result, parser.serializeObject(builder.build()));
327         }
328
329         @Test
330         public void testLspaObject() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
331                 final PCEPLspaObjectParser parser = new PCEPLspaObjectParser(this.tlvRegistry);
332                 byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPLspaObject1LowerBounds.bin");
333
334                 final LspaBuilder builder = new LspaBuilder();
335                 builder.setProcessingRule(true);
336                 builder.setIgnore(true);
337                 builder.setExcludeAny(new AttributeFilter(0L));
338                 builder.setIncludeAny(new AttributeFilter(0L));
339                 builder.setIncludeAll(new AttributeFilter(0L));
340                 builder.setHoldPriority((short) 0);
341                 builder.setSetupPriority((short) 0);
342                 builder.setLocalProtectionDesired(false);
343
344                 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
345                 assertArrayEquals(result, parser.serializeObject(builder.build()));
346
347                 result = ByteArray.fileToBytes("src/test/resources/PCEPLspaObject2UpperBounds.bin");
348
349                 builder.setExcludeAny(new AttributeFilter(0xFFFFFFFFL));
350                 builder.setIncludeAny(new AttributeFilter(0xFFFFFFFFL));
351                 builder.setIncludeAll(new AttributeFilter(0xFFFFFFFFL));
352                 builder.setHoldPriority((short) 0xFF);
353                 builder.setSetupPriority((short) 0xFF);
354                 builder.setLocalProtectionDesired(true);
355
356                 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
357                 assertArrayEquals(result, parser.serializeObject(builder.build()));
358
359                 result = ByteArray.fileToBytes("src/test/resources/PCEPLspaObject3RandVals.bin");
360
361                 builder.setExcludeAny(new AttributeFilter(0x20A1FEE3L));
362                 builder.setIncludeAny(new AttributeFilter(0x1A025CC7L));
363                 builder.setIncludeAll(new AttributeFilter(0x2BB66532L));
364                 builder.setHoldPriority((short) 0x02);
365                 builder.setSetupPriority((short) 0x03);
366                 builder.setLocalProtectionDesired(true);
367
368                 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
369                 assertArrayEquals(result, parser.serializeObject(builder.build()));
370         }
371
372         @Test
373         public void testMetricObject() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
374                 final PCEPMetricObjectParser parser = new PCEPMetricObjectParser(this.tlvRegistry);
375                 byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPMetricObject1LowerBounds.bin");
376
377                 final MetricBuilder builder = new MetricBuilder();
378                 builder.setProcessingRule(true);
379                 builder.setIgnore(true);
380                 builder.setComputed(false);
381                 builder.setBound(false);
382                 builder.setMetricType((short) 1);
383                 builder.setValue(new Float32(new byte[] { 0, 0, 0, 0 }));
384
385                 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
386                 assertArrayEquals(result, parser.serializeObject(builder.build()));
387
388                 result = ByteArray.fileToBytes("src/test/resources/PCEPMetricObject2UpperBounds.bin");
389
390                 builder.setComputed(true);
391                 builder.setBound(false);
392                 builder.setMetricType((short) 2);
393                 builder.setValue(new Float32(new byte[] { (byte) 0x4f, (byte) 0x70, (byte) 0x00, (byte) 0x00 }));
394
395                 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
396                 assertArrayEquals(result, parser.serializeObject(builder.build()));
397         }
398
399         @Test
400         public void testNoPathObjectWithTlv() throws PCEPDeserializerException, IOException, PCEPDocumentedException {
401                 final PCEPNoPathObjectParser parser = new PCEPNoPathObjectParser(this.tlvRegistry);
402                 byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPNoPathObject1WithoutTLV.bin");
403
404                 final NoPathBuilder builder = new NoPathBuilder();
405                 builder.setProcessingRule(true);
406                 builder.setIgnore(true);
407                 builder.setNatureOfIssue((short) 1);
408                 builder.setUnsatisfiedConstraints(true);
409
410                 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
411                 assertArrayEquals(result, parser.serializeObject(builder.build()));
412
413                 result = ByteArray.fileToBytes("src/test/resources/PCEPNoPathObject2WithTLV.bin");
414
415                 builder.setNatureOfIssue((short) 0);
416                 builder.setUnsatisfiedConstraints(false);
417
418                 final NoPathVectorBuilder b = new NoPathVectorBuilder();
419                 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));
420                 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(
421                                 b.build()).build());
422
423                 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
424                 assertArrayEquals(result, parser.serializeObject(builder.build()));
425         }
426
427         @Test
428         public void testNotifyObjectWithTlv() throws PCEPDeserializerException, IOException, PCEPDocumentedException {
429                 final PCEPNotificationObjectParser parser = new PCEPNotificationObjectParser(this.tlvRegistry);
430                 byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPNotificationObject2WithoutTlv.bin");
431
432                 final NotificationsBuilder builder = new NotificationsBuilder();
433                 builder.setProcessingRule(true);
434                 builder.setIgnore(true);
435                 builder.setType((short) 0xff);
436                 builder.setValue((short) 0xff);
437
438                 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
439                 assertArrayEquals(result, parser.serializeObject(builder.build()));
440
441                 result = ByteArray.fileToBytes("src/test/resources/PCEPNotificationObject1WithTlv.bin");
442
443                 builder.setType((short) 2);
444                 builder.setValue((short) 1);
445                 builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.notification.object.TlvsBuilder().setOverloadDuration(
446                                 new OverloadDurationBuilder().setDuration(0xff0000a2L).build()).build());
447
448                 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
449                 assertArrayEquals(result, parser.serializeObject(builder.build()));
450         }
451
452         @Test
453         public void testRPObjectWithTlv() throws PCEPDeserializerException, IOException, PCEPDocumentedException {
454                 final PCEPRequestParameterObjectParser parser = new PCEPRequestParameterObjectParser(this.tlvRegistry);
455                 byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPRPObject1.bin");
456
457                 final RpBuilder builder = new RpBuilder();
458                 builder.setProcessingRule(true);
459                 builder.setIgnore(true);
460                 builder.setReoptimization(true);
461                 builder.setBiDirectional(false);
462                 builder.setLoose(true);
463                 builder.setMakeBeforeBreak(true);
464                 builder.setOrder(false);
465                 builder.setSupplyOf(false);
466                 builder.setFragmentation(false);
467                 builder.setP2mp(false);
468                 builder.setEroCompression(false);
469                 builder.setPriority((short) 5);
470                 builder.setRequestId(new RequestId(0xdeadbeefL));
471
472                 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
473                 assertArrayEquals(result, parser.serializeObject(builder.build()));
474
475                 result = ByteArray.fileToBytes("src/test/resources/PCEPRPObject2.bin");
476
477                 builder.setReoptimization(false);
478                 builder.setFragmentation(true);
479                 builder.setEroCompression(true);
480
481                 final OrderBuilder b = new OrderBuilder();
482                 b.setDelete(0xffffffffL);
483                 b.setSetup(1L);
484
485                 builder.setTlvs(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.rp.object.TlvsBuilder().setOrder(
486                                 b.build()).build());
487
488                 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, true), result));
489                 assertArrayEquals(result, parser.serializeObject(builder.build()));
490         }
491
492         @Test
493         public void testSvecObject() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
494                 final PCEPSvecObjectParser parser = new PCEPSvecObjectParser(this.tlvRegistry);
495                 byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPSvecObject2.bin");
496
497                 final SvecBuilder builder = new SvecBuilder();
498                 builder.setProcessingRule(false);
499                 builder.setIgnore(false);
500                 builder.setLinkDiverse(false);
501                 builder.setNodeDiverse(false);
502                 builder.setSrlgDiverse(false);
503                 builder.setRequestsIds(Lists.newArrayList(new RequestId(0xFFL)));
504
505                 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false), result));
506                 assertArrayEquals(result, parser.serializeObject(builder.build()));
507
508                 result = ByteArray.fileToBytes("src/test/resources/PCEPSvecObject1_10ReqIDs.bin");
509
510                 builder.setProcessingRule(true);
511                 builder.setLinkDiverse(true);
512                 builder.setSrlgDiverse(true);
513
514                 final List<RequestId> requestIDs = Lists.newArrayList();
515                 requestIDs.add(new RequestId(0xFFFFFFFFL));
516                 requestIDs.add(new RequestId(0x00000000L));
517                 requestIDs.add(new RequestId(0x01234567L));
518                 requestIDs.add(new RequestId(0x89ABCDEFL));
519                 requestIDs.add(new RequestId(0xFEDCBA98L));
520                 requestIDs.add(new RequestId(0x76543210L));
521                 requestIDs.add(new RequestId(0x15825266L));
522                 requestIDs.add(new RequestId(0x48120BBEL));
523                 requestIDs.add(new RequestId(0x25FB7E52L));
524                 requestIDs.add(new RequestId(0xB2F2546BL));
525
526                 builder.setRequestsIds(requestIDs);
527
528                 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, false), result));
529                 assertArrayEquals(result, parser.serializeObject(builder.build()));
530         }
531
532         @Test
533         public void testClassTypeObject() throws PCEPDeserializerException, PCEPDocumentedException {
534                 final PCEPClassTypeObjectParser parser = new PCEPClassTypeObjectParser(this.tlvRegistry);
535                 final byte[] result = new byte[] { 0, 0, 0, (byte) 0x04 };
536
537                 final ClassTypeBuilder builder = new ClassTypeBuilder();
538                 builder.setProcessingRule(true);
539                 builder.setIgnore(false);
540                 builder.setClassType(new ClassType((short) 4));
541
542                 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, false), result));
543                 assertArrayEquals(result, parser.serializeObject(builder.build()));
544         }
545
546         @Test
547         public void testExcludeRouteObject() throws Exception {
548                 final PCEPExcludeRouteObjectParser parser = new PCEPExcludeRouteObjectParser(PCEPExtensionProviderContextImpl.create().getXROSubobjectHandlerRegistry());
549                 final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPExcludeRouteObject.1.bin");
550
551                 final XroBuilder builder = new XroBuilder();
552                 builder.setProcessingRule(false);
553                 builder.setIgnore(false);
554                 builder.setFlags(new org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.pcep.types.rev131005.ExcludeRouteObject.Flags(true));
555                 final List<Subobjects> subs = Lists.newArrayList();
556                 subs.add(new SubobjectsBuilder().setMandatory(true).setSubobjectType(
557                                 new IpPrefixBuilder().setIpPrefix(new IpPrefix(new Ipv4Prefix("192.168.0.0/16"))).build()).setAttribute(Attribute.Node).build());
558                 subs.add(new SubobjectsBuilder().setMandatory(false).setSubobjectType(
559                                 new AsNumberBuilder().setAsNumber(new AsNumber(0x1234L)).build()).build());
560                 builder.setSubobjects(subs);
561
562                 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false), result));
563                 assertArrayEquals(result, parser.serializeObject(builder.build()));
564         }
565
566         @Test
567         public void testSrpObject() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
568                 final PCEPSrpObjectParser parser = new PCEPSrpObjectParser(this.tlvRegistry);
569                 final byte[] result = new byte[] { 0, 0, 0, 0, 0, 0, 0, (byte) 0x01 };
570
571                 final SrpBuilder builder = new SrpBuilder();
572                 builder.setProcessingRule(false);
573                 builder.setIgnore(false);
574                 builder.setOperationId(new SrpIdNumber(1L));
575
576                 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(false, false), result));
577                 assertArrayEquals(result, parser.serializeObject(builder.build()));
578         }
579
580         @Test
581         public void testObjectiveFunctionObject() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
582                 final PCEPObjectiveFunctionObjectParser parser = new PCEPObjectiveFunctionObjectParser(this.tlvRegistry);
583                 final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPObjectiveFunctionObject.1.bin");
584
585                 final OfBuilder builder = new OfBuilder();
586                 builder.setProcessingRule(true);
587                 builder.setIgnore(false);
588                 builder.setCode(new OfId(4));
589
590                 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, false), result));
591                 assertArrayEquals(result, parser.serializeObject(builder.build()));
592         }
593
594         @Test
595         public void testGlobalConstraintsObject() throws IOException, PCEPDeserializerException, PCEPDocumentedException {
596                 final PCEPGlobalConstraintsObjectParser parser = new PCEPGlobalConstraintsObjectParser(this.tlvRegistry);
597                 final byte[] result = ByteArray.fileToBytes("src/test/resources/PCEPGlobalConstraintsObject.1.bin");
598
599                 final GcBuilder builder = new GcBuilder();
600                 builder.setProcessingRule(true);
601                 builder.setIgnore(false);
602                 builder.setMaxHop((short) 1);
603                 builder.setMaxUtilization((short) 0);
604                 builder.setMinUtilization((short) 100);
605                 builder.setOverBookingFactor((short) 0xFF);
606
607                 assertEquals(builder.build(), parser.parseObject(new ObjectHeaderImpl(true, false), result));
608                 assertArrayEquals(result, parser.serializeObject(builder.build()));
609         }
610
611 }