Initial code drop
[bgpcep.git] / pcep / impl / src / test / java / org / opendaylight / protocol / pcep / impl / PCEPValidatorTest.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 java.util.Arrays.asList;
11 import static org.junit.Assert.assertEquals;
12
13 import java.io.IOException;
14 import java.util.ArrayList;
15 import java.util.Arrays;
16 import java.util.List;
17
18 import org.junit.Test;
19
20 import org.opendaylight.protocol.framework.DeserializerException;
21 import org.opendaylight.protocol.framework.DocumentedException;
22 import org.opendaylight.protocol.util.ByteArray;
23 import org.opendaylight.protocol.concepts.ASNumber;
24 import org.opendaylight.protocol.concepts.Bandwidth;
25 import org.opendaylight.protocol.concepts.IGPMetric;
26 import org.opendaylight.protocol.concepts.IPv4;
27 import org.opendaylight.protocol.concepts.IPv4Address;
28 import org.opendaylight.protocol.concepts.TEMetric;
29 import org.opendaylight.protocol.pcep.PCEPDeserializerException;
30 import org.opendaylight.protocol.pcep.PCEPDocumentedException;
31 import org.opendaylight.protocol.pcep.PCEPErrors;
32 import org.opendaylight.protocol.pcep.PCEPMessage;
33 import org.opendaylight.protocol.pcep.PCEPOFCodes;
34 import org.opendaylight.protocol.pcep.PCEPObject;
35 import org.opendaylight.protocol.pcep.PCEPTlv;
36 import org.opendaylight.protocol.pcep.concepts.LSPSymbolicName;
37 import org.opendaylight.protocol.pcep.concepts.UnnumberedInterfaceIdentifier;
38 import org.opendaylight.protocol.pcep.impl.PCEPMessageFactory.PCEPMessageType;
39 import org.opendaylight.protocol.pcep.impl.message.PCEPRawMessage;
40 import org.opendaylight.protocol.pcep.impl.object.UnknownObject;
41 import org.opendaylight.protocol.pcep.message.PCCreateMessage;
42 import org.opendaylight.protocol.pcep.message.PCEPCloseMessage;
43 import org.opendaylight.protocol.pcep.message.PCEPErrorMessage;
44 import org.opendaylight.protocol.pcep.message.PCEPKeepAliveMessage;
45 import org.opendaylight.protocol.pcep.message.PCEPNotificationMessage;
46 import org.opendaylight.protocol.pcep.message.PCEPOpenMessage;
47 import org.opendaylight.protocol.pcep.message.PCEPReplyMessage;
48 import org.opendaylight.protocol.pcep.message.PCEPReportMessage;
49 import org.opendaylight.protocol.pcep.message.PCEPRequestMessage;
50 import org.opendaylight.protocol.pcep.message.PCEPUpdateRequestMessage;
51 import org.opendaylight.protocol.pcep.message.PCEPXRAddTunnelMessage;
52 import org.opendaylight.protocol.pcep.message.PCEPXRDeleteTunnelMessage;
53 import org.opendaylight.protocol.pcep.object.CompositeErrorObject;
54 import org.opendaylight.protocol.pcep.object.CompositeInstantiationObject;
55 import org.opendaylight.protocol.pcep.object.CompositeNotifyObject;
56 import org.opendaylight.protocol.pcep.object.CompositePathObject;
57 import org.opendaylight.protocol.pcep.object.CompositeReplySvecObject;
58 import org.opendaylight.protocol.pcep.object.CompositeRequestObject;
59 import org.opendaylight.protocol.pcep.object.CompositeRequestSvecObject;
60 import org.opendaylight.protocol.pcep.object.CompositeResponseObject;
61 import org.opendaylight.protocol.pcep.object.CompositeRptPathObject;
62 import org.opendaylight.protocol.pcep.object.CompositeStateReportObject;
63 import org.opendaylight.protocol.pcep.object.CompositeUpdPathObject;
64 import org.opendaylight.protocol.pcep.object.CompositeUpdateRequestObject;
65 import org.opendaylight.protocol.pcep.object.PCEPCloseObject;
66 import org.opendaylight.protocol.pcep.object.PCEPCloseObject.Reason;
67 import org.opendaylight.protocol.pcep.object.PCEPEndPointsObject;
68 import org.opendaylight.protocol.pcep.object.PCEPErrorObject;
69 import org.opendaylight.protocol.pcep.object.PCEPExcludeRouteObject;
70 import org.opendaylight.protocol.pcep.object.PCEPExistingPathBandwidthObject;
71 import org.opendaylight.protocol.pcep.object.PCEPExplicitRouteObject;
72 import org.opendaylight.protocol.pcep.object.PCEPGlobalConstraintsObject;
73 import org.opendaylight.protocol.pcep.object.PCEPIncludeRouteObject;
74 import org.opendaylight.protocol.pcep.object.PCEPLoadBalancingObject;
75 import org.opendaylight.protocol.pcep.object.PCEPLspObject;
76 import org.opendaylight.protocol.pcep.object.PCEPLspaObject;
77 import org.opendaylight.protocol.pcep.object.PCEPMetricObject;
78 import org.opendaylight.protocol.pcep.object.PCEPNoPathObject;
79 import org.opendaylight.protocol.pcep.object.PCEPNotificationObject;
80 import org.opendaylight.protocol.pcep.object.PCEPObjectiveFunctionObject;
81 import org.opendaylight.protocol.pcep.object.PCEPOpenObject;
82 import org.opendaylight.protocol.pcep.object.PCEPReportedRouteObject;
83 import org.opendaylight.protocol.pcep.object.PCEPRequestParameterObject;
84 import org.opendaylight.protocol.pcep.object.PCEPRequestedPathBandwidthObject;
85 import org.opendaylight.protocol.pcep.object.PCEPSvecObject;
86 import org.opendaylight.protocol.pcep.subobject.EROAsNumberSubobject;
87 import org.opendaylight.protocol.pcep.subobject.EROUnnumberedInterfaceSubobject;
88 import org.opendaylight.protocol.pcep.subobject.ExcludeRouteSubobject;
89 import org.opendaylight.protocol.pcep.subobject.ExplicitRouteSubobject;
90 import org.opendaylight.protocol.pcep.subobject.RROUnnumberedInterfaceSubobject;
91 import org.opendaylight.protocol.pcep.subobject.ReportedRouteSubobject;
92 import org.opendaylight.protocol.pcep.subobject.XROAsNumberSubobject;
93 import org.opendaylight.protocol.pcep.tlv.LSPStateDBVersionTlv;
94 import org.opendaylight.protocol.pcep.tlv.LSPSymbolicNameTlv;
95 import org.opendaylight.protocol.pcep.tlv.PCEStatefulCapabilityTlv;
96
97 public class PCEPValidatorTest {
98
99     private static final PCEPLspaObject lspa = new PCEPLspaObject(0L, 0L, 0L, (short) 0, (short) 0, false, false, false, false);
100
101     private final List<ExplicitRouteSubobject> eroSubobjects = asList(
102             new EROAsNumberSubobject(new ASNumber(0xFFFFL), false),
103             new EROUnnumberedInterfaceSubobject(new IPv4Address(
104                     new byte[] { (byte) 0x00, (byte) 0x11, (byte) 0x22, (byte) 0x33 }), new UnnumberedInterfaceIdentifier(0x00FF00FF), false));
105
106     private final List<ReportedRouteSubobject> rroSubobjects = asList((ReportedRouteSubobject) new RROUnnumberedInterfaceSubobject(new IPv4Address(new byte[] { (byte) 0x00, (byte) 0x11, (byte) 0x22, (byte) 0x33 }),
107             new UnnumberedInterfaceIdentifier(0x00FF00FF)));
108
109     private final List<Long> requestIds = asList(0x000001L);
110
111     private final IPv4Address ip4addr = new IPv4Address(new byte[] { (byte) 0xFF, 0x00, 0x00, 0x01 });
112
113     private final PCEPSvecObject svecObj = new PCEPSvecObject(true, true, true, false, false, PCEPValidatorTest.this.requestIds, true);
114
115     private final PCEPRequestParameterObject requestParameter = new PCEPRequestParameterObject(true, false, false, false, false, false, false, false,
116             (short) 3, 1, true, false);
117
118     // private final PCEPEndPointsObject<IPv4Address> endPoints = new
119     // PCEPEndPointsObject<IPv4Address>(this.ip4addr, this.ip4addr);
120
121     private final PCEPEndPointsObject<IPv4Address> endPoints = new PCEPEndPointsObject<IPv4Address>(this.ip4addr, this.ip4addr);
122
123     private final PCEPMessageFactory msgFactory = new PCEPMessageFactory();
124
125     // private final PCEPClassTypeObject classType = new
126     // PCEPClassTypeObject((short) 7);
127     // private final PCEPClassTypeObjectProvider classTypeProvider = new
128     // PCEPClassTypeObjectProvider((short) 7, true);
129
130     private static List<PCEPMessage> deserMsg(final String srcFile) throws IOException, DeserializerException, DocumentedException, PCEPDeserializerException {
131                 final byte[] bytesFromFile = ByteArray.fileToBytes(srcFile);
132                 final PCEPRawMessage rawMessage = (PCEPRawMessage) new PCEPMessageFactory().parse(ByteArray.cutBytes(bytesFromFile, PCEPMessageHeader.COMMON_HEADER_LENGTH),
133                         new PCEPMessageHeader().fromBytes(Arrays.copyOf(bytesFromFile, PCEPMessageHeader.COMMON_HEADER_LENGTH)));
134
135                 return PCEPMessageValidator.getValidator(rawMessage.getMsgType()).validate(rawMessage.getAllObjects());
136     }
137
138     @Test
139     public void testOpenMessageValidationFromBin() throws IOException, DeserializerException, DocumentedException, PCEPDeserializerException {
140         assertEquals(
141                 deserMsg("src/test/resources/PCEPOpenMessage1.bin"),
142                 asList(new PCEPOpenMessage(new PCEPOpenObject(30, 120, 1, asList(new PCEStatefulCapabilityTlv(false, true, true), new LSPStateDBVersionTlv(
143                         0x80))))));
144
145         assertEquals(deserMsg("src/test/resources/Open.1.bin"), asList(new PCEPOpenMessage(new PCEPOpenObject(1, 4, 1))));
146
147         assertEquals(
148                 deserMsg("src/test/resources/Open.3.bin"),
149                 asList(new PCEPOpenMessage(new PCEPOpenObject(1, 4, 1, asList(new PCEStatefulCapabilityTlv(false, true, true), new LSPStateDBVersionTlv(53))))));
150     }
151
152     @Test
153     public void testKeepAliveMessageValidationFromBin() throws IOException, PCEPDeserializerException, PCEPDocumentedException, DeserializerException, DocumentedException {
154         assertEquals(deserMsg("src/test/resources/PCEPKeepAliveMessage1.bin"), asList(new PCEPKeepAliveMessage()));
155         assertEquals(deserMsg("src/test/resources/Keepalive.1.bin"), asList(new PCEPKeepAliveMessage()));
156     }
157
158     @Test
159     public void testCloseMsg() throws PCEPDeserializerException, IOException, PCEPDocumentedException, DeserializerException, DocumentedException {
160         assertEquals(deserMsg("src/test/resources/PCEPCloseMessage1.bin"), asList(new PCEPCloseMessage(new PCEPCloseObject(Reason.TOO_MANY_UNKNOWN_MSG))));
161         assertEquals(deserMsg("src/test/resources/Close.1.bin"), asList(new PCEPCloseMessage(new PCEPCloseObject(Reason.UNKNOWN))));
162     }
163
164     @Test
165     public void testRequestMessageValidationFromBin() throws IOException, PCEPDeserializerException, PCEPDocumentedException, DeserializerException, DocumentedException {
166         List<CompositeRequestObject> requests = new ArrayList<CompositeRequestObject>();
167         final byte[] ipAdress = { (byte) 0xFF, (byte) 0xFF, (byte) 0xFF, (byte) 0xFF };
168         requests.add(new CompositeRequestObject(new PCEPRequestParameterObject(true, false, false, false, false, false, false, false, (short) 5, 0xDEADBEEFL,
169                 true, false), new PCEPEndPointsObject<IPv4Address>(new IPv4Address(ipAdress), new IPv4Address(ipAdress))));
170         PCEPRequestMessage specMessage = new PCEPRequestMessage(requests);
171         List<PCEPMessage> deserMsgs = deserMsg("src/test/resources/PCEPRequestMessage1.bin");
172         final List<PCEPMessage> specMessages = new ArrayList<PCEPMessage>();
173         specMessages.add(specMessage);
174
175         assertEquals(deserMsgs, specMessages);
176
177         requests = new ArrayList<CompositeRequestObject>();
178         final byte[] ipAdress2 = { (byte) 0x7F, (byte) 0x00, (byte) 0x00, (byte) 0x01 };
179         requests.add(new CompositeRequestObject(this.requestParameter, new PCEPEndPointsObject<IPv4Address>(new IPv4Address(ipAdress2), new IPv4Address(ipAdress2))));
180         specMessage = new PCEPRequestMessage(requests);
181         deserMsgs = deserMsg("src/test/resources/PCReq.1.bin");
182         specMessages.clear();
183         specMessages.add(specMessage);
184         assertEquals(deserMsgs, specMessages);
185
186         requests = new ArrayList<CompositeRequestObject>();
187         requests.add(new CompositeRequestObject(this.requestParameter, new PCEPEndPointsObject<IPv4Address>(new IPv4Address(ipAdress2), new IPv4Address(ipAdress2)), null, null, null, null,
188                 null, null, null, null, new PCEPLoadBalancingObject(3, new Bandwidth(1024.75f), false)));
189         specMessage = new PCEPRequestMessage(requests);
190         deserMsgs = deserMsg("src/test/resources/PCReq.2.bin");
191         specMessages.clear();
192         specMessages.add(specMessage);
193         assertEquals(deserMsgs, specMessages);
194
195         requests = new ArrayList<CompositeRequestObject>();
196         requests.add(new CompositeRequestObject(this.requestParameter, new PCEPEndPointsObject<IPv4Address>(new IPv4Address(ipAdress2), new IPv4Address(ipAdress2)), null, new PCEPLspObject(1,
197                 false, false, true, false), PCEPValidatorTest.lspa, new PCEPRequestedPathBandwidthObject(new Bandwidth(1000), false, false),
198                 new ArrayList<PCEPMetricObject>() {
199                     private static final long serialVersionUID = 1L;
200
201                     {
202                         this.add(new PCEPMetricObject(true, true, new IGPMetric(53L), false, false));
203                     }
204                 }, new PCEPReportedRouteObject(this.rroSubobjects, false), new PCEPExistingPathBandwidthObject(new Bandwidth(5353), false, false),
205                 new PCEPIncludeRouteObject(this.eroSubobjects, false, false), new PCEPLoadBalancingObject(5, new Bandwidth(3f), false)));
206
207         List<CompositeRequestSvecObject> svecList = new ArrayList<CompositeRequestSvecObject>();
208         svecList.add(new CompositeRequestSvecObject(new PCEPSvecObject(true, false, false, false, false, this.requestIds, false)));
209
210         specMessage = new PCEPRequestMessage(svecList, requests);
211         deserMsgs = deserMsg("src/test/resources/PCReq.3.bin");
212         specMessages.clear();
213         specMessages.add(specMessage);
214         assertEquals(deserMsgs, specMessages);
215
216         specMessages.clear();
217         requests = new ArrayList<CompositeRequestObject>();
218         requests.add(new CompositeRequestObject(this.requestParameter, new PCEPEndPointsObject<IPv4Address>(new IPv4Address(ipAdress2), new IPv4Address(ipAdress2)), null, null, null, null,
219                 null, null, null, null, null));
220         specMessages.add(new PCEPRequestMessage(requests));
221
222         final byte[] ipAdress3 = { (byte) 0x7F, (byte) 0x00, (byte) 0x30, (byte) 0x01 };
223         requests = new ArrayList<CompositeRequestObject>();
224         requests.add(new CompositeRequestObject(new PCEPRequestParameterObject(false, false, false, false, false, false, false, false, (short) 4, 1, true,
225                 false), new PCEPEndPointsObject<IPv4Address>(new IPv4Address(ipAdress3), new IPv4Address(ipAdress2)), null, null, null, null, null, null, null, null, null));
226         specMessages.add(new PCEPRequestMessage(requests));
227
228         final byte[] ipAdress4 = { (byte) 0x7F, (byte) 0x30, (byte) 0x00, (byte) 0x01 };
229         requests = new ArrayList<CompositeRequestObject>();
230         requests.add(new CompositeRequestObject(this.requestParameter, new PCEPEndPointsObject<IPv4Address>(new IPv4Address(ipAdress2), new IPv4Address(ipAdress4)), null, null, null, null,
231                 null, null, null, null, null));
232         specMessages.add(new PCEPRequestMessage(requests));
233
234         final byte[] ipAdress5 = { (byte) 0x7F, (byte) 0xd0, (byte) 0x00, (byte) 0x01 };
235         requests = new ArrayList<CompositeRequestObject>();
236         requests.add(new CompositeRequestObject(
237                 new PCEPRequestParameterObject(true, false, false, false, false, false, false, false, (short) 1, 1, true, false),
238                 new PCEPEndPointsObject<IPv4Address>(new IPv4Address(ipAdress5), new IPv4Address(ipAdress5)), null, null, null, null, null, null, null, null, null));
239
240         specMessages.add(new PCEPRequestMessage(requests));
241         deserMsgs = deserMsg("src/test/resources/PCReq.4.bin");
242         assertEquals(deserMsgs, specMessages);
243
244         specMessages.clear();
245         svecList = new ArrayList<CompositeRequestSvecObject>();
246         svecList.add(new CompositeRequestSvecObject(new PCEPSvecObject(true, false, false, false, false, this.requestIds, false)));
247         svecList.add(new CompositeRequestSvecObject(new PCEPSvecObject(false, true, true, false, false, this.requestIds, false),
248                 new PCEPObjectiveFunctionObject(PCEPOFCodes.MCC, true, false), new PCEPGlobalConstraintsObject((short) 0x55, (short) 1, (short) 100,
249                         (short) 0x26, true, false), new PCEPExcludeRouteObject(new ArrayList<ExcludeRouteSubobject>() {
250                     private static final long serialVersionUID = 1L;
251
252                     {
253                         this.add(new XROAsNumberSubobject(new ASNumber(0x12), true));
254                     }
255                 }, true, true, false), new ArrayList<PCEPMetricObject>() {
256                     private static final long serialVersionUID = 1L;
257
258                     {
259                         this.add(new PCEPMetricObject(true, true, new TEMetric(123456L), true, false));
260                     }
261                 }));
262
263         requests = new ArrayList<CompositeRequestObject>();
264         requests.add(new CompositeRequestObject(this.requestParameter, new PCEPEndPointsObject<IPv4Address>(new IPv4Address(ipAdress2), new IPv4Address(ipAdress2)), null, null,
265                 PCEPValidatorTest.lspa, new PCEPRequestedPathBandwidthObject(new Bandwidth(1000), false, false), new ArrayList<PCEPMetricObject>() {
266                     private static final long serialVersionUID = 1L;
267
268                     {
269                         this.add(new PCEPMetricObject(true, true, new IGPMetric(53L), false, false));
270                         this.add(new PCEPMetricObject(true, true, new IGPMetric(5335L), false, false));
271                         this.add(new PCEPMetricObject(true, true, new IGPMetric(128256), false, false));
272                     }
273                 }, new PCEPReportedRouteObject(this.rroSubobjects, false), new PCEPExistingPathBandwidthObject(new Bandwidth(5353), false, false),
274                 new PCEPIncludeRouteObject(this.eroSubobjects, false, false), new PCEPLoadBalancingObject(5, new Bandwidth(3f), false)));
275
276         final byte[] ipAdress6 = { (byte) 0x7F, (byte) 0xF0, (byte) 0x00, (byte) 0x01 };
277         specMessages.add(new PCEPRequestMessage(svecList, requests));
278
279         requests = new ArrayList<CompositeRequestObject>();
280         requests.add(new CompositeRequestObject(this.requestParameter, new PCEPEndPointsObject<IPv4Address>(new IPv4Address(ipAdress6), new IPv4Address(ipAdress6)), null, null,
281                 PCEPValidatorTest.lspa, new PCEPRequestedPathBandwidthObject(new Bandwidth(1000), false, false), new ArrayList<PCEPMetricObject>() {
282                     private static final long serialVersionUID = 1L;
283
284                     {
285                         this.add(new PCEPMetricObject(true, true, new IGPMetric(53L), false, false));
286                     }
287                 }, new PCEPReportedRouteObject(this.rroSubobjects, false), new PCEPExistingPathBandwidthObject(new Bandwidth(5353), false, false),
288                 new PCEPIncludeRouteObject(this.eroSubobjects, false, false), new PCEPLoadBalancingObject(5, new Bandwidth(3f), false)));
289         deserMsgs = deserMsg("src/test/resources/PCReq.5.bin");
290         specMessages.add(new PCEPRequestMessage(svecList, requests));
291         assertEquals(deserMsgs, specMessages);
292
293         // FIXME: need construct with invalid processed parameter
294         // assertEquals(deserMsg("src/test/resources/PCReq.6.invalid.bin"),
295         // asList(
296         // new PCEPErrorMessage(new CompositeErrorObject(new
297         // PCEPRequestParameterObject(true, false, false, false, false, false,
298         // false, false, (short) 3,
299         // 1L, false, false), new PCEPErrorObject(PCEPErrors.P_FLAG_NOT_SET))),
300         // new PCEPRequestMessage(asList(new
301         // CompositeRequestObject(this.requestParameter, new
302         // PCEPEndPointsObject<IPv4Address>(IPv4Address
303         // .getNetworkAddressFactory().getNetworkAddressForBytes(new byte[] {
304         // 127, 0, 0, 1 }), IPv4Address.getNetworkAddressFactory()
305         // .getNetworkAddressForBytes(new byte[] { 127, 0, 0, 1 })), null, null,
306         // null, null, null, null, null, null, new PCEPLoadBalancingObject(
307         // 3, new Bandwidth(1024.75), false))))));
308
309     }
310
311     @Test
312     public void testRequestMessageValidationFromRawMsg() throws PCEPDeserializerException {
313         List<PCEPObject> objs = new ArrayList<PCEPObject>();
314         List<PCEPMessage> msgs;
315         PCEPRequestParameterObject tmpRP;
316
317         // test unrecognized object in svec list
318         objs.add(this.svecObj);
319         objs.add(new UnknownObject(true, false, PCEPErrors.UNRECOGNIZED_OBJ_CLASS));
320         objs.add(new PCEPSvecObject(true, true, true, false, false, PCEPValidatorTest.this.requestIds, true));
321
322         msgs = PCEPMessageValidator.getValidator(PCEPMessageType.REQUEST).validate(objs);
323
324         assertEquals(msgs.get(0), new PCEPErrorMessage(new ArrayList<PCEPErrorObject>() {
325             private static final long serialVersionUID = 1L;
326
327             {
328                 this.add(new PCEPErrorObject(PCEPErrors.UNRECOGNIZED_OBJ_CLASS));
329             }
330         }));
331
332         // test with request p flag not set and ignoracion of more than one
333         // end-points objects
334         objs = new ArrayList<PCEPObject>();
335         objs.add(this.svecObj);
336         objs.add(this.svecObj);
337         tmpRP = new PCEPRequestParameterObject(true, false, false, false, false, false, false, false, (short) 3, 1, false, false);
338         objs.add(tmpRP);
339         objs.add(this.endPoints);
340
341         objs.add(this.requestParameter);
342         objs.add(this.endPoints);
343         objs.add(this.endPoints);
344         // FIXME:mv use object constructor with set processed flag
345         // objs.add(this.classTypeProvider);
346         // objs.add(this.requestParameter);
347         // objs.add(this.endPointsProvider);
348         // objs.add(new PCEPClassTypeObjectProvider((short) 7, false));
349
350         msgs = PCEPMessageValidator.getValidator(PCEPMessageType.REQUEST).validate(objs);
351         // FIXME:mv use object constructor with set processed flag
352         // assertEquals(msgs.get(0), new PCEPErrorMessage(new
353         // CompositeErrorObject(tmpRP, new
354         // PCEPErrorObject(PCEPErrors.P_FLAG_NOT_SET))));
355         // assertEquals(
356         // msgs.get(1),
357         // new PCEPRequestMessage(asList(new
358         // CompositeRequestSvecObject(this.svecObj), new
359         // CompositeRequestSvecObject(this.svecObj)), Util
360         // .asList(new CompositeRequestObject(this.requestParameter,
361         // this.endPoints, this.classType, null, null, null, null, null, null,
362         // null,
363         // null))));
364         // assertEquals(msgs.get(2), new PCEPErrorMessage(new
365         // CompositeErrorObject(tmpRP, new
366         // PCEPErrorObject(PCEPErrors.P_FLAG_NOT_SET))));
367     }
368
369     @Test
370     public void testReplyMessageValidatorFromBin() throws IOException, PCEPDeserializerException, PCEPDocumentedException, DeserializerException, DocumentedException {
371
372         List<PCEPReplyMessage> specMessages = new ArrayList<PCEPReplyMessage>();
373         specMessages.add(new PCEPReplyMessage(asList(new CompositeResponseObject(new PCEPRequestParameterObject(true, false, false, false, false, false,
374                 false, false, (short) 5, 0xDEADBEEFL, true, true)))));
375         specMessages.add(new PCEPReplyMessage(asList(new CompositeResponseObject(new PCEPRequestParameterObject(true, true, true, false, false, false,
376                 false, false, (short) 7, 0x12345678L, false, false)))));
377         assertEquals(deserMsg("src/test/resources/PCEPReplyMessage1.bin"), specMessages);
378
379         specMessages = new ArrayList<PCEPReplyMessage>();
380         specMessages.add(new PCEPReplyMessage(asList(new CompositeResponseObject(new PCEPRequestParameterObject(true, false, false, false, false, false,
381                 false, false, (short) 3, 1, false, false)))));
382         assertEquals(deserMsg("src/test/resources/PCRep.1.bin"), specMessages);
383
384         specMessages = new ArrayList<PCEPReplyMessage>();
385         specMessages.add(new PCEPReplyMessage(asList(new CompositeResponseObject(new PCEPRequestParameterObject(true, false, false, false, false, false,
386                 false, false, (short) 3, 1, false, false)))));
387         specMessages.add(new PCEPReplyMessage(asList(new CompositeResponseObject(new PCEPRequestParameterObject(false, false, false, false, false, false,
388                 false, false, (short) 5, 2, false, false), new PCEPNoPathObject((short) 0, false, false), null, null, null, null, null, null))));
389         assertEquals(deserMsg("src/test/resources/PCRep.2.bin"), specMessages);
390
391         specMessages = new ArrayList<PCEPReplyMessage>();
392         specMessages.add(new PCEPReplyMessage(asList(new CompositeResponseObject(new PCEPRequestParameterObject(true, false, false, false, false, false,
393                 false, false, (short) 3, 1, false, false), new PCEPNoPathObject((short) 1, true, false), new PCEPLspObject(1, true, true, false, true),
394                 PCEPValidatorTest.lspa, new PCEPRequestedPathBandwidthObject(new Bandwidth(500f), false, false), new ArrayList<PCEPMetricObject>() {
395                     private static final long serialVersionUID = 1L;
396
397                     {
398                         this.add(new PCEPMetricObject(true, true, new IGPMetric(234), false, false));
399                     }
400                 }, new PCEPIncludeRouteObject(this.eroSubobjects, false, false), new ArrayList<CompositePathObject>() {
401                     private static final long serialVersionUID = 1L;
402
403                     {
404                         this.add(new CompositePathObject(new PCEPExplicitRouteObject(PCEPValidatorTest.this.eroSubobjects, false), lspa,
405                                 new PCEPRequestedPathBandwidthObject(new Bandwidth(500f), false, false), new ArrayList<PCEPMetricObject>() {
406                                     private static final long serialVersionUID = 1L;
407
408                                     {
409                                         this.add(new PCEPMetricObject(true, true, new IGPMetric(234L), false, false));
410                                     }
411                                 }, new PCEPIncludeRouteObject(PCEPValidatorTest.this.eroSubobjects, false, false)));
412                     }
413                 }))));
414         assertEquals(deserMsg("src/test/resources/PCRep.3.bin"), specMessages);
415
416         specMessages = new ArrayList<PCEPReplyMessage>();
417         specMessages.add(new PCEPReplyMessage(asList(new CompositeResponseObject(new PCEPRequestParameterObject(true, false, false, false, false, false,
418                 false, false, (short) 7, 1, false, false)))));
419         specMessages.add(new PCEPReplyMessage(asList(new CompositeResponseObject(new PCEPRequestParameterObject(true, false, false, false, false, false,
420                 false, false, (short) 1, 2, false, false)))));
421         specMessages.add(new PCEPReplyMessage(asList(new CompositeResponseObject(new PCEPRequestParameterObject(true, false, false, false, false, false,
422                 false, false, (short) 2, 4, false, false)))));
423         specMessages.add(new PCEPReplyMessage(asList(new CompositeResponseObject(new PCEPRequestParameterObject(false, false, false, false, false, false,
424                 false, false, (short) 3, 4, false, false)))));
425         specMessages.add(new PCEPReplyMessage(asList(new CompositeResponseObject(new PCEPRequestParameterObject(false, false, false, false, false, false,
426                 false, false, (short) 6, 5, false, false)))));
427         assertEquals(deserMsg("src/test/resources/PCRep.4.bin"), specMessages);
428
429         specMessages = new ArrayList<PCEPReplyMessage>();
430         final List<Long> requestIDs = new ArrayList<Long>();
431         requestIDs.add(0x25069045L);
432
433         final List<PCEPMetricObject> metrics = new ArrayList<PCEPMetricObject>();
434         metrics.add(new PCEPMetricObject(true, true, new IGPMetric(234L), true, false));
435
436         final List<CompositeReplySvecObject> svecList = new ArrayList<CompositeReplySvecObject>();
437         svecList.add(new CompositeReplySvecObject(new PCEPSvecObject(true, true, true, false, false, requestIDs, true), new PCEPObjectiveFunctionObject(
438                 PCEPOFCodes.MCC, true, false), metrics));
439
440         specMessages.add(new PCEPReplyMessage(asList(new CompositeResponseObject(new PCEPRequestParameterObject(true, false, false, false, false, false,
441                 false, false, (short) 3, 1, false, false), new PCEPNoPathObject((short) 1, true, false), null, PCEPValidatorTest.lspa,
442                 new PCEPRequestedPathBandwidthObject(new Bandwidth(500f), false, false), new ArrayList<PCEPMetricObject>() {
443                     private static final long serialVersionUID = 1L;
444
445                     {
446                         this.add(new PCEPMetricObject(true, true, new IGPMetric(234), false, false));
447                     }
448                 }, new PCEPIncludeRouteObject(this.eroSubobjects, false, false), new ArrayList<CompositePathObject>() {
449                     private static final long serialVersionUID = 1L;
450
451                     {
452                         this.add(new CompositePathObject(new PCEPExplicitRouteObject(PCEPValidatorTest.this.eroSubobjects, false), lspa,
453                                 new PCEPRequestedPathBandwidthObject(new Bandwidth(500f), false, false), new ArrayList<PCEPMetricObject>() {
454                                     private static final long serialVersionUID = 1L;
455
456                                     {
457                                         this.add(new PCEPMetricObject(true, true, new IGPMetric(234L), false, false));
458                                         this.add(new PCEPMetricObject(true, true, new IGPMetric(5355L), false, false));
459                                         this.add(new PCEPMetricObject(true, true, new IGPMetric(5353L), false, false));
460                                     }
461                                 }, new PCEPIncludeRouteObject(PCEPValidatorTest.this.eroSubobjects, false, false)));
462                     }
463                 })), svecList));
464         specMessages.add(new PCEPReplyMessage(asList(new CompositeResponseObject(new PCEPRequestParameterObject(true, false, false, false, false, false,
465                 false, false, (short) 3, 1, false, false), new PCEPNoPathObject((short) 1, true, false), null, PCEPValidatorTest.lspa,
466                 new PCEPRequestedPathBandwidthObject(new Bandwidth(500f), false, false), new ArrayList<PCEPMetricObject>() {
467                     private static final long serialVersionUID = 1L;
468
469                     {
470                         this.add(new PCEPMetricObject(true, true, new IGPMetric(234), false, false));
471                     }
472                 }, new PCEPIncludeRouteObject(this.eroSubobjects, false, false), new ArrayList<CompositePathObject>() {
473                     private static final long serialVersionUID = 1L;
474
475                     {
476                         this.add(new CompositePathObject(new PCEPExplicitRouteObject(PCEPValidatorTest.this.eroSubobjects, false), lspa,
477                                 new PCEPRequestedPathBandwidthObject(new Bandwidth(500f), false, false), new ArrayList<PCEPMetricObject>() {
478                                     private static final long serialVersionUID = 1L;
479
480                                     {
481                                         this.add(new PCEPMetricObject(true, true, new IGPMetric(234L), false, false));
482                                     }
483                                 }, new PCEPIncludeRouteObject(PCEPValidatorTest.this.eroSubobjects, false, false)));
484                         this.add(new CompositePathObject(new PCEPExplicitRouteObject(PCEPValidatorTest.this.eroSubobjects, false), lspa,
485                                 new PCEPRequestedPathBandwidthObject(new Bandwidth(500f), false, false), new ArrayList<PCEPMetricObject>() {
486                                     private static final long serialVersionUID = 1L;
487
488                                     {
489                                         this.add(new PCEPMetricObject(true, true, new IGPMetric(234L), false, false));
490                                     }
491                                 }, new PCEPIncludeRouteObject(PCEPValidatorTest.this.eroSubobjects, false, false)));
492                     }
493                 })), svecList));
494         assertEquals(deserMsg("src/test/resources/PCRep.5.bin"), specMessages);
495     }
496
497     @Test
498     public void testUpdMessageValidatorFromBin() throws IOException, PCEPDeserializerException, PCEPDocumentedException, DeserializerException, DocumentedException {
499         List<PCEPMessage> specMessages = new ArrayList<PCEPMessage>();
500
501         List<CompositeUpdateRequestObject> requests = new ArrayList<CompositeUpdateRequestObject>();
502         requests.add(new CompositeUpdateRequestObject(new PCEPLspObject(1, true, false, true, true)));
503
504         specMessages.add(new PCEPUpdateRequestMessage(requests));
505         assertEquals(deserMsg("src/test/resources/PCUpd.1.bin"), specMessages);
506
507         specMessages = new ArrayList<PCEPMessage>();
508         List<CompositeUpdPathObject> paths = new ArrayList<CompositeUpdPathObject>();
509         paths.add(new CompositeUpdPathObject(new PCEPExplicitRouteObject(this.eroSubobjects, false), PCEPValidatorTest.lspa, null, null));
510         requests = new ArrayList<CompositeUpdateRequestObject>();
511         requests.add(new CompositeUpdateRequestObject(new PCEPLspObject(1, true, false, true, true), paths));
512         specMessages.add(new PCEPUpdateRequestMessage(requests));
513         assertEquals(deserMsg("src/test/resources/PCUpd.2.bin"), specMessages);
514
515         specMessages = new ArrayList<PCEPMessage>();
516         paths = new ArrayList<CompositeUpdPathObject>();
517         paths.add(new CompositeUpdPathObject(new PCEPExplicitRouteObject(this.eroSubobjects, false), PCEPValidatorTest.lspa,
518                 new PCEPRequestedPathBandwidthObject(new Bandwidth(5353), false, false), new ArrayList<PCEPMetricObject>() {
519                     private static final long serialVersionUID = 1L;
520
521                     {
522                         this.add(new PCEPMetricObject(true, false, new IGPMetric(4L), false, false));
523                     }
524                 }));
525         requests = new ArrayList<CompositeUpdateRequestObject>();
526         requests.add(new CompositeUpdateRequestObject(new PCEPLspObject(1, true, false, true, true), paths));
527         specMessages.add(new PCEPUpdateRequestMessage(requests));
528         assertEquals(deserMsg("src/test/resources/PCUpd.3.bin"), specMessages);
529
530         specMessages = new ArrayList<PCEPMessage>();
531         requests = new ArrayList<CompositeUpdateRequestObject>();
532         requests.add(new CompositeUpdateRequestObject(new PCEPLspObject(1, true, false, true, true)));
533         requests.add(new CompositeUpdateRequestObject(new PCEPLspObject(1, true, false, true, true)));
534         specMessages.add(new PCEPUpdateRequestMessage(requests));
535         assertEquals(deserMsg("src/test/resources/PCUpd.4.bin"), specMessages);
536
537         specMessages = new ArrayList<PCEPMessage>();
538         requests = new ArrayList<CompositeUpdateRequestObject>();
539         requests.add(new CompositeUpdateRequestObject(new PCEPLspObject(1, true, false, true, true)));
540         paths = new ArrayList<CompositeUpdPathObject>();
541         paths.add(new CompositeUpdPathObject(new PCEPExplicitRouteObject(this.eroSubobjects, false), PCEPValidatorTest.lspa,
542                 new PCEPRequestedPathBandwidthObject(new Bandwidth(5353), false, false), new ArrayList<PCEPMetricObject>() {
543                     private static final long serialVersionUID = 1L;
544
545                     {
546                         this.add(new PCEPMetricObject(true, false, new IGPMetric(4L), false, false));
547                     }
548                 }));
549         requests.add(new CompositeUpdateRequestObject(new PCEPLspObject(1, true, false, true, true), paths));
550         paths = new ArrayList<CompositeUpdPathObject>();
551         paths.add(new CompositeUpdPathObject(new PCEPExplicitRouteObject(this.eroSubobjects, false), PCEPValidatorTest.lspa,
552                 new PCEPRequestedPathBandwidthObject(new Bandwidth(5353), false, false), new ArrayList<PCEPMetricObject>() {
553                     private static final long serialVersionUID = 1L;
554
555                     {
556                         this.add(new PCEPMetricObject(true, false, new IGPMetric(4L), false, false));
557                     }
558                 }));
559         paths.add(new CompositeUpdPathObject(new PCEPExplicitRouteObject(this.eroSubobjects, false), PCEPValidatorTest.lspa,
560                 new PCEPRequestedPathBandwidthObject(new Bandwidth(5353), false, false), new ArrayList<PCEPMetricObject>() {
561                     private static final long serialVersionUID = 1L;
562
563                     {
564                         this.add(new PCEPMetricObject(true, false, new IGPMetric(4L), false, false));
565                     }
566                 }));
567         paths.add(new CompositeUpdPathObject(new PCEPExplicitRouteObject(this.eroSubobjects, false), PCEPValidatorTest.lspa,
568                 new PCEPRequestedPathBandwidthObject(new Bandwidth(5353), false, false), new ArrayList<PCEPMetricObject>() {
569                     private static final long serialVersionUID = 1L;
570
571                     {
572                         this.add(new PCEPMetricObject(true, false, new IGPMetric(4L), false, false));
573                         this.add(new PCEPMetricObject(true, false, new IGPMetric(4L), false, false));
574                     }
575                 }));
576         requests.add(new CompositeUpdateRequestObject(new PCEPLspObject(1, true, false, true, true), paths));
577         specMessages.add(new PCEPUpdateRequestMessage(requests));
578         assertEquals(deserMsg("src/test/resources/PCUpd.5.bin"), specMessages);
579     }
580
581     @Test
582     public void testRptMessageValidatorFromBin() throws IOException, PCEPDeserializerException, PCEPDocumentedException, DeserializerException, DocumentedException {
583         List<PCEPMessage> specMessages = new ArrayList<PCEPMessage>();
584         List<CompositeStateReportObject> reports = new ArrayList<CompositeStateReportObject>();
585         reports.add(new CompositeStateReportObject(new PCEPLspObject(1, true, false, true, true)));
586         specMessages.add(new PCEPReportMessage(reports));
587         assertEquals(deserMsg("src/test/resources/PCRpt.1.bin"), specMessages);
588
589         specMessages = new ArrayList<PCEPMessage>();
590         List<CompositeRptPathObject> paths = new ArrayList<CompositeRptPathObject>();
591         paths.add(new CompositeRptPathObject(new PCEPExplicitRouteObject(this.eroSubobjects, false), PCEPValidatorTest.lspa, null, null, null));
592         reports = new ArrayList<CompositeStateReportObject>();
593         reports.add(new CompositeStateReportObject(new PCEPLspObject(1, true, false, true, true), paths));
594         specMessages.add(new PCEPReportMessage(reports));
595         assertEquals(deserMsg("src/test/resources/PCRpt.2.bin"), specMessages);
596
597         specMessages = new ArrayList<PCEPMessage>();
598         paths = new ArrayList<CompositeRptPathObject>();
599         paths.add(new CompositeRptPathObject(new PCEPExplicitRouteObject(this.eroSubobjects, false), PCEPValidatorTest.lspa,
600                 new PCEPExistingPathBandwidthObject(new Bandwidth(5353), false, false), new PCEPReportedRouteObject(this.rroSubobjects, false),
601                 new ArrayList<PCEPMetricObject>() {
602                     private static final long serialVersionUID = 1L;
603
604                     {
605                         this.add(new PCEPMetricObject(true, false, new IGPMetric(4L), false, false));
606                     }
607                 }));
608
609         reports = new ArrayList<CompositeStateReportObject>();
610         reports.add(new CompositeStateReportObject(new PCEPLspObject(1, true, false, true, true), paths));
611         specMessages.add(new PCEPReportMessage(reports));
612         //FIXME:
613         //assertEquals(deserMsg("src/test/resources/PCRpt.3.bin"), specMessages);
614
615         specMessages = new ArrayList<PCEPMessage>();
616         reports = new ArrayList<CompositeStateReportObject>();
617         reports.add(new CompositeStateReportObject(new PCEPLspObject(1, true, false, true, true)));
618         reports.add(new CompositeStateReportObject(new PCEPLspObject(1, true, false, true, true)));
619         reports.add(new CompositeStateReportObject(new PCEPLspObject(1, true, false, true, true)));
620         specMessages.add(new PCEPReportMessage(reports));
621         assertEquals(deserMsg("src/test/resources/PCRpt.4.bin"), specMessages);
622
623         specMessages = new ArrayList<PCEPMessage>();
624         reports = new ArrayList<CompositeStateReportObject>();
625         paths = new ArrayList<CompositeRptPathObject>();
626         paths.add(new CompositeRptPathObject(new PCEPExplicitRouteObject(this.eroSubobjects, false), PCEPValidatorTest.lspa,
627                 new PCEPExistingPathBandwidthObject(new Bandwidth(5353), false, false), new PCEPReportedRouteObject(this.rroSubobjects, false),
628                 new ArrayList<PCEPMetricObject>() {
629                     private static final long serialVersionUID = 1L;
630
631                     {
632                         this.add(new PCEPMetricObject(true, false, new IGPMetric(4L), false, false));
633                     }
634                 }));
635         reports.add(new CompositeStateReportObject(new PCEPLspObject(1, true, false, true, true), paths));
636         paths = new ArrayList<CompositeRptPathObject>();
637         paths.add(new CompositeRptPathObject(new PCEPExplicitRouteObject(this.eroSubobjects, false), PCEPValidatorTest.lspa,
638                 new PCEPExistingPathBandwidthObject(new Bandwidth(5353), false, false), new PCEPReportedRouteObject(this.rroSubobjects, false),
639                 new ArrayList<PCEPMetricObject>() {
640                     private static final long serialVersionUID = 1L;
641
642                     {
643                         this.add(new PCEPMetricObject(true, false, new IGPMetric(4L), false, false));
644                         this.add(new PCEPMetricObject(true, false, new IGPMetric(4L), false, false));
645                         this.add(new PCEPMetricObject(true, false, new IGPMetric(4L), false, false));
646                     }
647                 }));
648         paths.add(new CompositeRptPathObject(new PCEPExplicitRouteObject(this.eroSubobjects, false), PCEPValidatorTest.lspa,
649                 new PCEPExistingPathBandwidthObject(new Bandwidth(5353), false, false), new PCEPReportedRouteObject(this.rroSubobjects, false),
650                 new ArrayList<PCEPMetricObject>() {
651                     private static final long serialVersionUID = 1L;
652
653                     {
654                         this.add(new PCEPMetricObject(true, false, new IGPMetric(4L), false, false));
655                     }
656                 }));
657         reports.add(new CompositeStateReportObject(new PCEPLspObject(1, true, false, true, true), paths));
658         specMessages.add(new PCEPReportMessage(reports));
659         //FIXME
660         //assertEquals(deserMsg("src/test/resources/PCRpt.5.bin"), specMessages);
661     }
662
663     @Test
664     public void testXRDeleteTunnelMessage() throws DeserializerException, DocumentedException, PCEPDeserializerException {
665         final PCEPXRDeleteTunnelMessage dTunnel = new PCEPXRDeleteTunnelMessage(new PCEPLspObject(1, false, true, false, true));
666         final byte[] bytes = this.msgFactory.put(dTunnel);
667
668         final PCEPRawMessage rawMessage = (PCEPRawMessage) this.msgFactory.parse(ByteArray.cutBytes(bytes, PCEPMessageHeader.COMMON_HEADER_LENGTH),
669                 new PCEPMessageHeader().fromBytes(Arrays.copyOf(bytes, PCEPMessageHeader.COMMON_HEADER_LENGTH)));
670
671         assertEquals(PCEPMessageValidator.getValidator(rawMessage.getMsgType()).validate(rawMessage.getAllObjects()), asList((PCEPMessage) dTunnel));
672     }
673
674     @Test
675     public void testXRAddTunnelMessage() throws DeserializerException, DocumentedException, PCEPDeserializerException {
676         final List<ExplicitRouteSubobject> subs = new ArrayList<ExplicitRouteSubobject>();
677         subs.add(new EROAsNumberSubobject(new ASNumber(10), false));
678         final PCEPXRAddTunnelMessage addTunnel = new PCEPXRAddTunnelMessage(new PCEPLspObject(1, false, false, false, false),
679                 new PCEPEndPointsObject<IPv4Address>(IPv4.FAMILY.addressForString("127.0.0.2"), IPv4.FAMILY.addressForString("127.0.0.1")),
680                 new PCEPExplicitRouteObject(subs, true));
681         final byte[] bytes = this.msgFactory.put(addTunnel);
682
683         final PCEPRawMessage rawMessage = (PCEPRawMessage) this.msgFactory.parse(ByteArray.cutBytes(bytes, PCEPMessageHeader.COMMON_HEADER_LENGTH),
684                 new PCEPMessageHeader().fromBytes(Arrays.copyOf(bytes, PCEPMessageHeader.COMMON_HEADER_LENGTH)));
685         assertEquals(PCEPMessageValidator.getValidator(rawMessage.getMsgType()).validate(rawMessage.getAllObjects()), asList((PCEPMessage) addTunnel));
686     }
687
688     @Test
689     public void testPCCreateMessage() throws DeserializerException, DocumentedException, PCEPDeserializerException {
690         final List<CompositeInstantiationObject> insts = new ArrayList<CompositeInstantiationObject>();
691         final List<ExplicitRouteSubobject> subs = new ArrayList<ExplicitRouteSubobject>();
692         subs.add(new EROAsNumberSubobject(new ASNumber(10), false));
693         final List<PCEPTlv> tlvs = new ArrayList<PCEPTlv>();
694         final LSPSymbolicNameTlv tlv = new LSPSymbolicNameTlv(new LSPSymbolicName(new byte[] { 5, 4 }));
695         tlvs.add(tlv);
696         insts.add(new CompositeInstantiationObject(new PCEPEndPointsObject<IPv4Address>(IPv4.FAMILY.addressForString("127.0.0.2"),
697                         IPv4.FAMILY.addressForString("127.0.0.1")), PCEPValidatorTest.lspa, new PCEPExplicitRouteObject(subs, true), null, new ArrayList<PCEPMetricObject>() {
698             private static final long serialVersionUID = 1L;
699
700             {
701                 this.add(new PCEPMetricObject(true, false, new IGPMetric(4L), false, false));
702                 this.add(new PCEPMetricObject(true, false, new IGPMetric(4L), false, false));
703                 this.add(new PCEPMetricObject(true, false, new IGPMetric(4L), false, false));
704             }
705         }));
706         final PCCreateMessage msg = new PCCreateMessage(insts);
707
708         final byte[] bytes = this.msgFactory.put(msg);
709
710         // FIXME: need construct with invalid processed parameter
711         final PCEPRawMessage rawMessage = (PCEPRawMessage) this.msgFactory.parse(ByteArray.cutBytes(bytes, PCEPMessageHeader.COMMON_HEADER_LENGTH),
712                 new PCEPMessageHeader().fromBytes(Arrays.copyOf(bytes, PCEPMessageHeader.COMMON_HEADER_LENGTH)));
713
714         assertEquals(PCEPMessageValidator.getValidator(rawMessage.getMsgType()).validate(rawMessage.getAllObjects()), asList((PCEPMessage) msg));
715     }
716
717     @Test
718     public void testNotificationValidatorFromBin() throws IOException, PCEPDeserializerException, PCEPDocumentedException, DeserializerException, DocumentedException {
719         List<CompositeNotifyObject> notifications = new ArrayList<CompositeNotifyObject>();
720         List<PCEPNotificationObject> notificationsList = new ArrayList<PCEPNotificationObject>();
721         notificationsList.add(new PCEPNotificationObject((short) 1, (short) 1));
722         notifications.add(new CompositeNotifyObject(notificationsList));
723         PCEPNotificationMessage specMessage = new PCEPNotificationMessage(notifications);
724         assertEquals(deserMsg("src/test/resources/PCNtf.1.bin"), asList((PCEPMessage) specMessage));
725
726         notifications = new ArrayList<CompositeNotifyObject>();
727         notificationsList = new ArrayList<PCEPNotificationObject>();
728         notificationsList.add(new PCEPNotificationObject((short) 1, (short) 1));
729         List<PCEPRequestParameterObject> requestsList = new ArrayList<PCEPRequestParameterObject>();
730         requestsList.add(new PCEPRequestParameterObject(true, false, false, false, false, false, false, false, (short) 3, 1, false, false));
731         notifications.add(new CompositeNotifyObject(requestsList, notificationsList));
732         specMessage = new PCEPNotificationMessage(notifications);
733         assertEquals(deserMsg("src/test/resources/PCNtf.2.bin"), asList((PCEPMessage) specMessage));
734
735         notifications = new ArrayList<CompositeNotifyObject>();
736         notificationsList = new ArrayList<PCEPNotificationObject>();
737         notificationsList.add(new PCEPNotificationObject((short) 1, (short) 1));
738         requestsList = new ArrayList<PCEPRequestParameterObject>();
739         requestsList.add(new PCEPRequestParameterObject(true, false, false, false, false, false, false, false, (short) 1, 10, false, false));
740         notifications.add(new CompositeNotifyObject(requestsList, notificationsList));
741         specMessage = new PCEPNotificationMessage(notifications);
742         assertEquals(deserMsg("src/test/resources/PCNtf.3.bin"), asList((PCEPMessage) specMessage));
743
744         notifications = new ArrayList<CompositeNotifyObject>();
745         notificationsList = new ArrayList<PCEPNotificationObject>();
746         notificationsList.add(new PCEPNotificationObject((short) 1, (short) 1));
747         notificationsList.add(new PCEPNotificationObject((short) 1, (short) 2));
748         notificationsList.add(new PCEPNotificationObject((short) 2, (short) 1));
749         notificationsList.add(new PCEPNotificationObject((short) 2, (short) 2));
750         notifications.add(new CompositeNotifyObject(notificationsList));
751         specMessage = new PCEPNotificationMessage(notifications);
752         assertEquals(deserMsg("src/test/resources/PCNtf.4.bin"), asList((PCEPMessage) specMessage));
753
754         notifications = new ArrayList<CompositeNotifyObject>();
755         notificationsList = new ArrayList<PCEPNotificationObject>();
756         notificationsList.add(new PCEPNotificationObject((short) 1, (short) 1));
757         requestsList = new ArrayList<PCEPRequestParameterObject>();
758         requestsList.add(new PCEPRequestParameterObject(true, false, false, false, false, false, false, false, (short) 1, 10, false, false));
759         notifications.add(new CompositeNotifyObject(requestsList, notificationsList));
760         notificationsList = new ArrayList<PCEPNotificationObject>();
761         notificationsList.add(new PCEPNotificationObject((short) 1, (short) 1));
762         notificationsList.add(new PCEPNotificationObject((short) 1, (short) 1));
763         requestsList = new ArrayList<PCEPRequestParameterObject>();
764         requestsList.add(new PCEPRequestParameterObject(true, false, false, false, false, false, false, false, (short) 1, 10, false, false));
765         requestsList.add(new PCEPRequestParameterObject(true, false, false, false, false, false, false, false, (short) 1, 10, false, false));
766         notifications.add(new CompositeNotifyObject(requestsList, notificationsList));
767         specMessage = new PCEPNotificationMessage(notifications);
768         assertEquals(deserMsg("src/test/resources/PCNtf.5.bin"), asList((PCEPMessage) specMessage));
769     }
770
771     @Test
772     public void testErrorMessageValidatoinFromBin() throws IOException, PCEPDeserializerException, PCEPDocumentedException, DeserializerException, DocumentedException {
773         List<PCEPErrorObject> errorsList = new ArrayList<PCEPErrorObject>();
774         errorsList.add(new PCEPErrorObject(PCEPErrors.UNRECOGNIZED_OBJ_CLASS));
775
776         PCEPErrorMessage specMessage = new PCEPErrorMessage(errorsList);
777         assertEquals(deserMsg("src/test/resources/PCErr.1.bin"), asList((PCEPMessage) specMessage));
778
779         List<PCEPRequestParameterObject> requests = new ArrayList<PCEPRequestParameterObject>();
780         requests.add(new PCEPRequestParameterObject(true, false, false, false, false, false, false, false, (short) 3, 1, false, false));
781
782         List<CompositeErrorObject> errors = new ArrayList<CompositeErrorObject>();
783         errors.add(new CompositeErrorObject(requests, errorsList));
784
785         specMessage = new PCEPErrorMessage(errors);
786         assertEquals(deserMsg("src/test/resources/PCErr.2.bin"), asList((PCEPMessage) specMessage));
787
788         specMessage = new PCEPErrorMessage(new PCEPOpenObject(0, 0, 0), errorsList, null);
789         assertEquals(deserMsg("src/test/resources/PCErr.3.bin"), asList((PCEPMessage) specMessage));
790
791         requests = new ArrayList<PCEPRequestParameterObject>();
792         requests.add(new PCEPRequestParameterObject(true, false, false, false, false, false, false, false, (short) 1, 53, false, false));
793
794         errors = new ArrayList<CompositeErrorObject>();
795         errors.add(new CompositeErrorObject(requests, errorsList));
796
797         specMessage = new PCEPErrorMessage(errors);
798         assertEquals(deserMsg("src/test/resources/PCErr.3b.bin"), asList((PCEPMessage) specMessage));
799
800         errorsList = new ArrayList<PCEPErrorObject>();
801         errorsList.add(new PCEPErrorObject(PCEPErrors.UNRECOGNIZED_OBJ_CLASS));
802         errorsList.add(new PCEPErrorObject(PCEPErrors.UNRECOGNIZED_OBJ_CLASS));
803         errorsList.add(new PCEPErrorObject(PCEPErrors.UNRECOGNIZED_OBJ_CLASS));
804
805         specMessage = new PCEPErrorMessage(null, errorsList, null);
806         assertEquals(deserMsg("src/test/resources/PCErr.4.bin"), asList((PCEPMessage) specMessage));
807
808         requests = new ArrayList<PCEPRequestParameterObject>();
809         requests.add(new PCEPRequestParameterObject(true, false, false, false, false, false, false, false, (short) 1, 53, false, false));
810
811         errorsList = new ArrayList<PCEPErrorObject>();
812         errorsList.add(new PCEPErrorObject(PCEPErrors.UNRECOGNIZED_OBJ_CLASS));
813
814         errors = new ArrayList<CompositeErrorObject>();
815         errors.add(new CompositeErrorObject(requests, errorsList));
816         errors.add(new CompositeErrorObject(requests, errorsList));
817
818         specMessage = new PCEPErrorMessage(errors);
819         assertEquals(deserMsg("src/test/resources/PCErr.5.bin"), asList((PCEPMessage) specMessage));
820     }
821 }