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