1 // SPDX-License-Identifier: LGPL-2.1-or-later
3 * This file is part of the PCEPlib, a PCEP protocol library.
5 * Copyright (C) 2020 Volta Networks https://voltanet.io/
7 * Author : Brady Johnson <brady@voltanet.io>
19 #include <CUnit/CUnit.h>
21 #include "pcep_msg_encoding.h"
22 #include "pcep_msg_messages.h"
23 #include "pcep_msg_objects.h"
24 #include "pcep_msg_tools.h"
25 #include "pcep_utils_double_linked_list.h"
26 #include "pcep_utils_memory.h"
27 #include "pcep_msg_messages_test.h"
31 * All of these message Unit Tests encode the created messages by explicitly
32 * calling pcep_encode_message() thus testing the message creation and the
36 static struct pcep_versioning
*versioning
= NULL
;
38 int pcep_messages_test_suite_setup(void)
40 pceplib_memory_reset();
44 int pcep_messages_test_suite_teardown(void)
47 pceplib_memory_dump();
51 void pcep_messages_test_setup()
53 versioning
= create_default_pcep_versioning();
56 void pcep_messages_test_teardown()
58 destroy_pcep_versioning(versioning
);
61 void test_pcep_msg_create_open()
63 uint8_t keepalive
= 30;
64 uint8_t deadtimer
= 60;
67 struct pcep_message
*message
=
68 pcep_msg_create_open(keepalive
, deadtimer
, sid
);
69 CU_ASSERT_PTR_NOT_NULL(message
);
70 pcep_encode_message(message
, versioning
);
71 assert(message
!= NULL
);
72 CU_ASSERT_PTR_NOT_NULL(message
->msg_header
);
73 CU_ASSERT_PTR_NOT_NULL(message
->obj_list
);
74 assert(message
->obj_list
!= NULL
);
75 CU_ASSERT_EQUAL(message
->obj_list
->num_entries
, 1);
76 CU_ASSERT_EQUAL(message
->encoded_message_length
,
78 + pcep_object_get_length(PCEP_OBJ_CLASS_OPEN
,
80 assert(message
->msg_header
!= NULL
);
81 CU_ASSERT_EQUAL(message
->msg_header
->type
, PCEP_TYPE_OPEN
);
82 CU_ASSERT_EQUAL(message
->msg_header
->pcep_version
,
83 PCEP_MESSAGE_HEADER_VERSION
);
85 /* Just check the class and type, the rest of the hdr fields
86 * are verified in pcep-objects-test.c */
87 struct pcep_object_open
*open_obj
=
88 (struct pcep_object_open
*)message
->obj_list
->head
->data
;
89 CU_ASSERT_EQUAL(open_obj
->header
.object_class
, PCEP_OBJ_CLASS_OPEN
);
90 CU_ASSERT_EQUAL(open_obj
->header
.object_type
, PCEP_OBJ_TYPE_OPEN
);
92 CU_ASSERT_EQUAL(open_obj
->open_deadtimer
, deadtimer
);
93 CU_ASSERT_EQUAL(open_obj
->open_keepalive
, keepalive
);
94 CU_ASSERT_EQUAL(open_obj
->open_sid
, sid
);
95 CU_ASSERT_EQUAL(open_obj
->open_version
, PCEP_OBJECT_OPEN_VERSION
);
96 pcep_msg_free_message(message
);
100 void test_pcep_msg_create_request()
102 /* First test with NULL objects */
103 struct pcep_message
*message
=
104 pcep_msg_create_request(NULL
, NULL
, NULL
);
105 CU_ASSERT_PTR_NULL(message
);
108 struct pcep_object_rp
*rp_obj
=
109 pcep_obj_create_rp(0, false, false, false, false, 10, NULL
);
110 struct in_addr src_addr
= {}, dst_addr
= {};
111 struct pcep_object_endpoints_ipv4
*ipv4_obj
=
112 pcep_obj_create_endpoint_ipv4(&src_addr
, &dst_addr
);
113 message
= pcep_msg_create_request(rp_obj
, ipv4_obj
, NULL
);
115 CU_ASSERT_PTR_NOT_NULL(message
);
116 pcep_encode_message(message
, versioning
);
117 assert(message
!= NULL
);
118 CU_ASSERT_PTR_NOT_NULL(message
->msg_header
);
119 CU_ASSERT_PTR_NOT_NULL(message
->obj_list
);
120 CU_ASSERT_EQUAL(message
->obj_list
->num_entries
, 2);
122 message
->encoded_message_length
,
123 MESSAGE_HEADER_LENGTH
124 + pcep_object_get_length_by_hdr(&rp_obj
->header
)
125 + pcep_object_get_length_by_hdr(&ipv4_obj
->header
));
126 assert(message
->msg_header
!= NULL
);
127 CU_ASSERT_EQUAL(message
->msg_header
->type
, PCEP_TYPE_PCREQ
);
128 CU_ASSERT_EQUAL(message
->msg_header
->pcep_version
,
129 PCEP_MESSAGE_HEADER_VERSION
);
130 pcep_msg_free_message(message
);
133 rp_obj
= pcep_obj_create_rp(0, false, false, false, false, 10, NULL
);
134 struct in6_addr src_addr_ipv6
= {}, dst_addr_ipv6
= {};
135 struct pcep_object_endpoints_ipv6
*ipv6_obj
=
136 pcep_obj_create_endpoint_ipv6(&src_addr_ipv6
, &dst_addr_ipv6
);
137 message
= pcep_msg_create_request_ipv6(rp_obj
, ipv6_obj
, NULL
);
139 CU_ASSERT_PTR_NOT_NULL(message
);
140 pcep_encode_message(message
, versioning
);
141 assert(message
!= NULL
);
142 CU_ASSERT_PTR_NOT_NULL(message
->msg_header
);
143 CU_ASSERT_PTR_NOT_NULL(message
->obj_list
);
144 assert(message
->obj_list
!= NULL
);
145 CU_ASSERT_EQUAL(message
->obj_list
->num_entries
, 2);
147 message
->encoded_message_length
,
148 MESSAGE_HEADER_LENGTH
149 + pcep_object_get_length_by_hdr(&rp_obj
->header
)
150 + pcep_object_get_length_by_hdr(&ipv6_obj
->header
));
151 assert(message
->msg_header
!= NULL
);
152 CU_ASSERT_EQUAL(message
->msg_header
->type
, PCEP_TYPE_PCREQ
);
153 CU_ASSERT_EQUAL(message
->msg_header
->pcep_version
,
154 PCEP_MESSAGE_HEADER_VERSION
);
155 pcep_msg_free_message(message
);
157 /* The objects get deleted with the message, so they need to be created
159 rp_obj
= pcep_obj_create_rp(0, false, false, false, false, 10, NULL
);
160 ipv4_obj
= pcep_obj_create_endpoint_ipv4(&src_addr
, &dst_addr
);
161 struct pcep_object_bandwidth
*bandwidth_obj
=
162 pcep_obj_create_bandwidth(4.2);
163 double_linked_list
*obj_list
= dll_initialize();
164 dll_append(obj_list
, bandwidth_obj
);
165 message
= pcep_msg_create_request(rp_obj
, ipv4_obj
, obj_list
);
167 CU_ASSERT_PTR_NOT_NULL(message
);
168 pcep_encode_message(message
, versioning
);
169 assert(message
!= NULL
);
170 CU_ASSERT_PTR_NOT_NULL(message
->msg_header
);
171 CU_ASSERT_PTR_NOT_NULL(message
->obj_list
);
172 assert(message
->obj_list
!= NULL
);
173 CU_ASSERT_EQUAL(message
->obj_list
->num_entries
, 3);
175 message
->encoded_message_length
,
176 MESSAGE_HEADER_LENGTH
177 + pcep_object_get_length_by_hdr(&rp_obj
->header
)
178 + pcep_object_get_length_by_hdr(&ipv4_obj
->header
)
179 + pcep_object_get_length_by_hdr(
180 &bandwidth_obj
->header
));
181 assert(message
->msg_header
!= NULL
);
182 CU_ASSERT_EQUAL(message
->msg_header
->type
, PCEP_TYPE_PCREQ
);
183 CU_ASSERT_EQUAL(message
->msg_header
->pcep_version
,
184 PCEP_MESSAGE_HEADER_VERSION
);
185 pcep_msg_free_message(message
);
189 void test_pcep_msg_create_request_svec()
194 void test_pcep_msg_create_reply_nopath()
196 struct pcep_object_rp
*rp_obj
=
197 pcep_obj_create_rp(0, false, false, false, false, 10, NULL
);
198 struct pcep_object_nopath
*nopath_obj
= pcep_obj_create_nopath(
199 false, false, PCEP_NOPATH_TLV_ERR_NO_TLV
);
200 double_linked_list
*obj_list
= dll_initialize();
201 dll_append(obj_list
, nopath_obj
);
203 struct pcep_message
*message
= pcep_msg_create_reply(rp_obj
, obj_list
);
204 CU_ASSERT_PTR_NOT_NULL(message
);
205 pcep_encode_message(message
, versioning
);
206 assert(message
!= NULL
);
207 CU_ASSERT_PTR_NOT_NULL(message
->msg_header
);
208 CU_ASSERT_PTR_NOT_NULL(message
->obj_list
);
209 assert(message
->obj_list
!= NULL
);
210 CU_ASSERT_EQUAL(message
->obj_list
->num_entries
, 2);
211 CU_ASSERT_EQUAL(message
->encoded_message_length
,
212 (MESSAGE_HEADER_LENGTH
213 + pcep_object_get_length_by_hdr(&rp_obj
->header
)
214 + pcep_object_get_length_by_hdr(&nopath_obj
->header
)));
215 assert(message
->msg_header
!= NULL
);
216 CU_ASSERT_EQUAL(message
->msg_header
->type
, PCEP_TYPE_PCREP
);
217 CU_ASSERT_EQUAL(message
->msg_header
->pcep_version
,
218 PCEP_MESSAGE_HEADER_VERSION
);
219 pcep_msg_free_message(message
);
223 void test_pcep_msg_create_reply()
225 /* First test with NULL ero and rp objects */
226 struct pcep_message
*message
= pcep_msg_create_reply(NULL
, NULL
);
228 CU_ASSERT_PTR_NOT_NULL(message
);
229 pcep_encode_message(message
, versioning
);
230 assert(message
!= NULL
);
231 CU_ASSERT_PTR_NOT_NULL(message
->msg_header
);
232 CU_ASSERT_PTR_NOT_NULL(message
->obj_list
);
233 CU_ASSERT_EQUAL(message
->obj_list
->num_entries
, 0);
234 CU_ASSERT_EQUAL(message
->encoded_message_length
, MESSAGE_HEADER_LENGTH
);
235 assert(message
->msg_header
!= NULL
);
236 CU_ASSERT_EQUAL(message
->msg_header
->type
, PCEP_TYPE_PCREP
);
237 CU_ASSERT_EQUAL(message
->msg_header
->pcep_version
,
238 PCEP_MESSAGE_HEADER_VERSION
);
239 pcep_msg_free_message(message
);
241 double_linked_list
*ero_subobj_list
= dll_initialize();
242 struct pcep_object_ro_subobj
*ero_subobj
=
243 (struct pcep_object_ro_subobj
*)
244 pcep_obj_create_ro_subobj_32label(true, 1, 10);
245 dll_append(ero_subobj_list
, ero_subobj
);
246 struct pcep_object_ro
*ero
= pcep_obj_create_ero(ero_subobj_list
);
248 double_linked_list
*object_list
= dll_initialize();
249 dll_append(object_list
, ero
);
250 struct pcep_object_rp
*rp_obj
=
251 pcep_obj_create_rp(0, false, false, false, false, 10, NULL
);
252 message
= pcep_msg_create_reply(rp_obj
, object_list
);
253 CU_ASSERT_PTR_NOT_NULL(message
);
254 pcep_encode_message(message
, versioning
);
255 CU_ASSERT_PTR_NOT_NULL(message
->msg_header
);
256 CU_ASSERT_PTR_NOT_NULL(message
->obj_list
);
257 assert(message
->obj_list
!= NULL
);
258 CU_ASSERT_EQUAL(message
->obj_list
->num_entries
, 2);
259 CU_ASSERT_EQUAL(message
->encoded_message_length
,
260 MESSAGE_HEADER_LENGTH
261 + pcep_object_get_length_by_hdr(&rp_obj
->header
)
262 + OBJECT_HEADER_LENGTH
263 + OBJECT_RO_SUBOBJ_HEADER_LENGTH
264 + 6 /* size of the 32label */);
265 CU_ASSERT_EQUAL(message
->msg_header
->type
, PCEP_TYPE_PCREP
);
266 CU_ASSERT_EQUAL(message
->msg_header
->pcep_version
,
267 PCEP_MESSAGE_HEADER_VERSION
);
268 pcep_msg_free_message(message
);
272 void test_pcep_msg_create_close()
274 uint8_t reason
= PCEP_CLOSE_REASON_UNREC_MSG
;
276 struct pcep_message
*message
= pcep_msg_create_close(reason
);
277 CU_ASSERT_PTR_NOT_NULL(message
);
278 pcep_encode_message(message
, versioning
);
279 assert(message
!= NULL
);
280 CU_ASSERT_PTR_NOT_NULL(message
->msg_header
);
281 CU_ASSERT_PTR_NOT_NULL(message
->obj_list
);
282 assert(message
->obj_list
!= NULL
);
283 CU_ASSERT_EQUAL(message
->obj_list
->num_entries
, 1);
284 CU_ASSERT_EQUAL(message
->encoded_message_length
,
285 MESSAGE_HEADER_LENGTH
286 + pcep_object_get_length(PCEP_OBJ_CLASS_CLOSE
,
287 PCEP_OBJ_TYPE_CLOSE
));
288 assert(message
->msg_header
!= NULL
);
289 CU_ASSERT_EQUAL(message
->msg_header
->type
, PCEP_TYPE_CLOSE
);
290 CU_ASSERT_EQUAL(message
->msg_header
->pcep_version
,
291 PCEP_MESSAGE_HEADER_VERSION
);
293 /* Just check the class and type, the rest of the hdr fields
294 * are verified in pcep-objects-test.c */
295 struct pcep_object_close
*close_obj
=
296 (struct pcep_object_close
*)message
->obj_list
->head
->data
;
297 assert(close_obj
!= NULL
);
298 CU_ASSERT_EQUAL(close_obj
->header
.object_class
, PCEP_OBJ_CLASS_CLOSE
);
299 CU_ASSERT_EQUAL(close_obj
->header
.object_type
, PCEP_OBJ_TYPE_CLOSE
);
300 CU_ASSERT_EQUAL(close_obj
->reason
, reason
);
301 pcep_msg_free_message(message
);
305 void test_pcep_msg_create_error()
307 uint8_t error_type
= PCEP_ERRT_RECEPTION_OF_INV_OBJECT
;
308 uint8_t error_value
= PCEP_ERRV_KEEPALIVEWAIT_TIMED_OUT
;
310 struct pcep_message
*message
=
311 pcep_msg_create_error(error_type
, error_value
);
312 CU_ASSERT_PTR_NOT_NULL(message
);
313 pcep_encode_message(message
, versioning
);
314 assert(message
!= NULL
);
315 CU_ASSERT_PTR_NOT_NULL(message
->msg_header
);
316 CU_ASSERT_PTR_NOT_NULL(message
->obj_list
);
317 assert(message
->obj_list
!= NULL
);
318 CU_ASSERT_EQUAL(message
->obj_list
->num_entries
, 1);
319 CU_ASSERT_EQUAL(message
->encoded_message_length
,
320 MESSAGE_HEADER_LENGTH
321 + pcep_object_get_length(PCEP_OBJ_CLASS_ERROR
,
322 PCEP_OBJ_TYPE_ERROR
));
323 assert(message
->msg_header
!= NULL
);
324 CU_ASSERT_EQUAL(message
->msg_header
->type
, PCEP_TYPE_ERROR
);
325 CU_ASSERT_EQUAL(message
->msg_header
->pcep_version
,
326 PCEP_MESSAGE_HEADER_VERSION
);
328 /* Just check the class and type, the rest of the hdr fields
329 * are verified in pcep-objects-test.c */
330 struct pcep_object_error
*error_obj
=
331 (struct pcep_object_error
*)message
->obj_list
->head
->data
;
332 CU_ASSERT_EQUAL(error_obj
->header
.object_class
, PCEP_OBJ_CLASS_ERROR
);
333 CU_ASSERT_EQUAL(error_obj
->header
.object_type
, PCEP_OBJ_TYPE_ERROR
);
335 CU_ASSERT_EQUAL(error_obj
->error_type
, error_type
);
336 CU_ASSERT_EQUAL(error_obj
->error_value
, error_value
);
337 pcep_msg_free_message(message
);
341 void test_pcep_msg_create_keepalive()
343 struct pcep_message
*message
= pcep_msg_create_keepalive();
344 CU_ASSERT_PTR_NOT_NULL(message
);
345 pcep_encode_message(message
, versioning
);
346 assert(message
!= NULL
);
347 CU_ASSERT_PTR_NOT_NULL(message
->msg_header
);
348 CU_ASSERT_PTR_NOT_NULL(message
->obj_list
);
349 assert(message
->obj_list
!= NULL
);
350 CU_ASSERT_EQUAL(message
->obj_list
->num_entries
, 0);
351 CU_ASSERT_EQUAL(message
->encoded_message_length
, MESSAGE_HEADER_LENGTH
);
352 assert(message
->msg_header
!= NULL
);
353 CU_ASSERT_EQUAL(message
->msg_header
->type
, PCEP_TYPE_KEEPALIVE
);
354 CU_ASSERT_EQUAL(message
->msg_header
->pcep_version
,
355 PCEP_MESSAGE_HEADER_VERSION
);
356 pcep_msg_free_message(message
);
359 void test_pcep_msg_create_report()
361 double_linked_list
*obj_list
= dll_initialize();
363 /* Should return NULL if obj_list is empty */
364 struct pcep_message
*message
= pcep_msg_create_report(NULL
);
365 CU_ASSERT_PTR_NULL(message
);
367 struct pcep_object_lsp
*lsp
=
368 pcep_obj_create_lsp(100, PCEP_LSP_OPERATIONAL_UP
, true, true,
369 true, true, true, NULL
);
370 dll_append(obj_list
, lsp
);
371 message
= pcep_msg_create_report(obj_list
);
372 CU_ASSERT_PTR_NOT_NULL(message
);
373 pcep_encode_message(message
, versioning
);
374 assert(message
!= NULL
);
375 CU_ASSERT_PTR_NOT_NULL(message
->msg_header
);
376 CU_ASSERT_PTR_NOT_NULL(message
->obj_list
);
377 assert(message
->obj_list
!= NULL
);
378 CU_ASSERT_EQUAL(message
->obj_list
->num_entries
, 1);
379 CU_ASSERT_EQUAL(message
->encoded_message_length
,
380 MESSAGE_HEADER_LENGTH
381 + lsp
->header
.encoded_object_length
);
382 assert(message
->msg_header
!= NULL
);
383 CU_ASSERT_EQUAL(message
->msg_header
->type
, PCEP_TYPE_REPORT
);
384 CU_ASSERT_EQUAL(message
->msg_header
->pcep_version
,
385 PCEP_MESSAGE_HEADER_VERSION
);
387 pcep_msg_free_message(message
);
390 void test_pcep_msg_create_update()
392 double_linked_list
*obj_list
= dll_initialize();
393 double_linked_list
*ero_subobj_list
= dll_initialize();
395 struct pcep_message
*message
= pcep_msg_create_update(NULL
);
396 CU_ASSERT_PTR_NULL(message
);
398 /* Should return NULL if obj_list is empty */
399 message
= pcep_msg_create_update(obj_list
);
400 CU_ASSERT_PTR_NULL(message
);
401 if (message
!= NULL
) {
402 pcep_msg_free_message(message
);
406 struct pcep_object_srp
*srp
= pcep_obj_create_srp(false, 100, NULL
);
407 struct pcep_object_lsp
*lsp
=
408 pcep_obj_create_lsp(100, PCEP_LSP_OPERATIONAL_UP
, true, true,
409 true, true, true, NULL
);
410 dll_append(ero_subobj_list
, pcep_obj_create_ro_subobj_asn(0x0102));
411 struct pcep_object_ro
*ero
= pcep_obj_create_ero(ero_subobj_list
);
413 /* Should return NULL if obj_list does not have 3 entries */
414 dll_append(obj_list
, srp
);
415 dll_append(obj_list
, lsp
);
416 message
= pcep_msg_create_update(obj_list
);
417 CU_ASSERT_PTR_NULL(message
);
419 dll_append(obj_list
, ero
);
420 if (message
!= NULL
) {
421 pcep_msg_free_message(message
);
424 message
= pcep_msg_create_update(obj_list
);
425 CU_ASSERT_PTR_NOT_NULL(message
);
426 pcep_encode_message(message
, versioning
);
427 assert(message
!= NULL
);
428 CU_ASSERT_PTR_NOT_NULL(message
->msg_header
);
429 CU_ASSERT_PTR_NOT_NULL(message
->obj_list
);
430 assert(message
->obj_list
!= NULL
);
431 CU_ASSERT_EQUAL(message
->obj_list
->num_entries
, 3);
432 CU_ASSERT_EQUAL(message
->encoded_message_length
,
433 MESSAGE_HEADER_LENGTH
434 + srp
->header
.encoded_object_length
435 + lsp
->header
.encoded_object_length
436 + ero
->header
.encoded_object_length
);
437 assert(message
->msg_header
!= NULL
);
438 CU_ASSERT_EQUAL(message
->msg_header
->type
, PCEP_TYPE_UPDATE
);
439 CU_ASSERT_EQUAL(message
->msg_header
->pcep_version
,
440 PCEP_MESSAGE_HEADER_VERSION
);
442 pcep_msg_free_message(message
);
445 void test_pcep_msg_create_initiate()
447 double_linked_list
*obj_list
= dll_initialize();
448 double_linked_list
*ero_subobj_list
= dll_initialize();
450 /* Should return NULL if obj_list is empty */
451 struct pcep_message
*message
= pcep_msg_create_initiate(NULL
);
452 CU_ASSERT_PTR_NULL(message
);
453 if (message
!= NULL
) {
454 pcep_msg_free_message(message
);
458 struct pcep_object_srp
*srp
= pcep_obj_create_srp(false, 100, NULL
);
459 struct pcep_object_lsp
*lsp
=
460 pcep_obj_create_lsp(100, PCEP_LSP_OPERATIONAL_UP
, true, true,
461 true, true, true, NULL
);
462 dll_append(ero_subobj_list
, pcep_obj_create_ro_subobj_asn(0x0102));
463 struct pcep_object_ro
*ero
= pcep_obj_create_ero(ero_subobj_list
);
465 /* Should return NULL if obj_list does not have 2 entries */
466 dll_append(obj_list
, srp
);
467 message
= pcep_msg_create_initiate(obj_list
);
468 CU_ASSERT_PTR_NULL(message
);
469 if (message
!= NULL
) {
470 pcep_msg_free_message(message
);
474 dll_append(obj_list
, lsp
);
475 dll_append(obj_list
, ero
);
476 message
= pcep_msg_create_initiate(obj_list
);
477 CU_ASSERT_PTR_NOT_NULL(message
);
478 pcep_encode_message(message
, versioning
);
479 assert(message
!= NULL
);
480 CU_ASSERT_PTR_NOT_NULL(message
->msg_header
);
481 CU_ASSERT_PTR_NOT_NULL(message
->obj_list
);
482 assert(message
->obj_list
!= NULL
);
483 CU_ASSERT_EQUAL(message
->obj_list
->num_entries
, 3);
484 CU_ASSERT_EQUAL(message
->encoded_message_length
,
485 MESSAGE_HEADER_LENGTH
486 + srp
->header
.encoded_object_length
487 + lsp
->header
.encoded_object_length
488 + ero
->header
.encoded_object_length
);
489 assert(message
->msg_header
!= NULL
);
490 CU_ASSERT_EQUAL(message
->msg_header
->type
, PCEP_TYPE_INITIATE
);
491 CU_ASSERT_EQUAL(message
->msg_header
->pcep_version
,
492 PCEP_MESSAGE_HEADER_VERSION
);
494 pcep_msg_free_message(message
);
497 void test_pcep_msg_create_notify(void)
499 struct pcep_object_notify
*notify_obj
= pcep_obj_create_notify(
500 PCEP_NOTIFY_TYPE_PENDING_REQUEST_CANCELLED
,
501 PCEP_NOTIFY_VALUE_PCC_CANCELLED_REQUEST
);
503 /* Should return NULL if the notify obj is empty */
504 struct pcep_message
*message
= pcep_msg_create_notify(NULL
, NULL
);
505 CU_ASSERT_PTR_NULL(message
);
507 message
= pcep_msg_create_notify(notify_obj
, NULL
);
508 CU_ASSERT_PTR_NOT_NULL(message
);
509 pcep_encode_message(message
, versioning
);
510 assert(message
!= NULL
);
511 CU_ASSERT_PTR_NOT_NULL(message
->obj_list
);
512 assert(message
->obj_list
!= NULL
);
513 CU_ASSERT_EQUAL(message
->obj_list
->num_entries
, 1);
514 CU_ASSERT_EQUAL(message
->encoded_message_length
,
515 MESSAGE_HEADER_LENGTH
516 + notify_obj
->header
.encoded_object_length
);
517 assert(message
->msg_header
!= NULL
);
518 CU_ASSERT_EQUAL(message
->msg_header
->type
, PCEP_TYPE_PCNOTF
);
519 CU_ASSERT_EQUAL(message
->msg_header
->pcep_version
,
520 PCEP_MESSAGE_HEADER_VERSION
);
522 pcep_msg_free_message(message
);
524 struct pcep_object_rp
*rp_obj
=
525 pcep_obj_create_rp(0, false, false, false, false, 10, NULL
);
526 double_linked_list
*obj_list
= dll_initialize();
527 dll_append(obj_list
, rp_obj
);
528 notify_obj
= pcep_obj_create_notify(
529 PCEP_NOTIFY_TYPE_PENDING_REQUEST_CANCELLED
,
530 PCEP_NOTIFY_VALUE_PCC_CANCELLED_REQUEST
);
532 message
= pcep_msg_create_notify(notify_obj
, obj_list
);
533 CU_ASSERT_PTR_NOT_NULL(message
);
534 pcep_encode_message(message
, versioning
);
535 assert(message
!= NULL
);
536 CU_ASSERT_PTR_NOT_NULL(message
->obj_list
);
537 assert(message
->obj_list
!= NULL
);
538 CU_ASSERT_EQUAL(message
->obj_list
->num_entries
, 2);
539 CU_ASSERT_EQUAL(message
->encoded_message_length
,
540 MESSAGE_HEADER_LENGTH
541 + notify_obj
->header
.encoded_object_length
542 + rp_obj
->header
.encoded_object_length
);
543 CU_ASSERT_EQUAL(message
->msg_header
->type
, PCEP_TYPE_PCNOTF
);
544 CU_ASSERT_EQUAL(message
->msg_header
->pcep_version
,
545 PCEP_MESSAGE_HEADER_VERSION
);
547 pcep_msg_free_message(message
);