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