]>
Commit | Line | Data |
---|---|---|
74971473 JG |
1 | /* |
2 | * This file is part of the PCEPlib, a PCEP protocol library. | |
3 | * | |
4 | * Copyright (C) 2020 Volta Networks https://voltanet.io/ | |
5 | * | |
6 | * This library is free software; you can redistribute it and/or | |
7 | * modify it under the terms of the GNU Lesser General Public | |
8 | * License as published by the Free Software Foundation; either | |
9 | * version 2 of the License, or (at your option) any later version. | |
10 | * | |
11 | * This library is distributed in the hope that it will be useful, | |
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
14 | * Lesser General Public License for more details. | |
15 | * | |
16 | * You should have received a copy of the GNU Lesser General Public License | |
17 | * along with this program. If not, see <https://www.gnu.org/licenses/>. | |
18 | * | |
19 | * Author : Brady Johnson <brady@voltanet.io> | |
20 | * | |
21 | */ | |
22 | ||
23 | ||
1f8031f7 DL |
24 | #ifdef HAVE_CONFIG_H |
25 | #include "config.h" | |
26 | #endif | |
27 | ||
74971473 | 28 | #include <stdlib.h> |
fadf00aa | 29 | #include <assert.h> |
74971473 JG |
30 | |
31 | #include <CUnit/CUnit.h> | |
32 | ||
33 | #include "pcep_msg_encoding.h" | |
34 | #include "pcep_msg_messages.h" | |
35 | #include "pcep_msg_objects.h" | |
36 | #include "pcep_msg_tools.h" | |
37 | #include "pcep_utils_double_linked_list.h" | |
38 | #include "pcep_utils_memory.h" | |
39 | #include "pcep_msg_messages_test.h" | |
40 | ||
41 | /* | |
42 | * Notice: | |
43 | * All of these message Unit Tests encode the created messages by explicitly | |
44 | * calling pcep_encode_message() thus testing the message creation and the | |
45 | * message encoding. | |
46 | */ | |
47 | ||
48 | static struct pcep_versioning *versioning = NULL; | |
49 | ||
50 | int pcep_messages_test_suite_setup(void) | |
51 | { | |
52 | pceplib_memory_reset(); | |
53 | return 0; | |
54 | } | |
55 | ||
56 | int pcep_messages_test_suite_teardown(void) | |
57 | { | |
58 | printf("\n"); | |
59 | pceplib_memory_dump(); | |
60 | return 0; | |
61 | } | |
62 | ||
63 | void pcep_messages_test_setup() | |
64 | { | |
65 | versioning = create_default_pcep_versioning(); | |
66 | } | |
67 | ||
68 | void pcep_messages_test_teardown() | |
69 | { | |
70 | destroy_pcep_versioning(versioning); | |
71 | } | |
72 | ||
73 | void test_pcep_msg_create_open() | |
74 | { | |
75 | uint8_t keepalive = 30; | |
76 | uint8_t deadtimer = 60; | |
77 | uint8_t sid = 255; | |
78 | ||
79 | struct pcep_message *message = | |
80 | pcep_msg_create_open(keepalive, deadtimer, sid); | |
81 | CU_ASSERT_PTR_NOT_NULL(message); | |
82 | pcep_encode_message(message, versioning); | |
fadf00aa | 83 | assert(message != NULL); |
74971473 JG |
84 | CU_ASSERT_PTR_NOT_NULL(message->msg_header); |
85 | CU_ASSERT_PTR_NOT_NULL(message->obj_list); | |
fadf00aa | 86 | assert(message->obj_list != NULL); |
74971473 JG |
87 | CU_ASSERT_EQUAL(message->obj_list->num_entries, 1); |
88 | CU_ASSERT_EQUAL(message->encoded_message_length, | |
89 | MESSAGE_HEADER_LENGTH | |
90 | + pcep_object_get_length(PCEP_OBJ_CLASS_OPEN, | |
91 | PCEP_OBJ_TYPE_OPEN)); | |
fadf00aa | 92 | assert(message->msg_header != NULL); |
74971473 JG |
93 | CU_ASSERT_EQUAL(message->msg_header->type, PCEP_TYPE_OPEN); |
94 | CU_ASSERT_EQUAL(message->msg_header->pcep_version, | |
95 | PCEP_MESSAGE_HEADER_VERSION); | |
96 | ||
97 | /* Just check the class and type, the rest of the hdr fields | |
98 | * are verified in pcep-objects-test.c */ | |
99 | struct pcep_object_open *open_obj = | |
100 | (struct pcep_object_open *)message->obj_list->head->data; | |
101 | CU_ASSERT_EQUAL(open_obj->header.object_class, PCEP_OBJ_CLASS_OPEN); | |
102 | CU_ASSERT_EQUAL(open_obj->header.object_type, PCEP_OBJ_TYPE_OPEN); | |
103 | ||
104 | CU_ASSERT_EQUAL(open_obj->open_deadtimer, deadtimer); | |
105 | CU_ASSERT_EQUAL(open_obj->open_keepalive, keepalive); | |
106 | CU_ASSERT_EQUAL(open_obj->open_sid, sid); | |
107 | CU_ASSERT_EQUAL(open_obj->open_version, PCEP_OBJECT_OPEN_VERSION); | |
108 | pcep_msg_free_message(message); | |
109 | } | |
110 | ||
111 | ||
112 | void test_pcep_msg_create_request() | |
113 | { | |
114 | /* First test with NULL objects */ | |
115 | struct pcep_message *message = | |
116 | pcep_msg_create_request(NULL, NULL, NULL); | |
117 | CU_ASSERT_PTR_NULL(message); | |
118 | ||
119 | /* Test IPv4 */ | |
120 | struct pcep_object_rp *rp_obj = | |
121 | pcep_obj_create_rp(0, false, false, false, false, 10, NULL); | |
7ed8c4b1 | 122 | struct in_addr src_addr={}, dst_addr={}; |
74971473 JG |
123 | struct pcep_object_endpoints_ipv4 *ipv4_obj = |
124 | pcep_obj_create_endpoint_ipv4(&src_addr, &dst_addr); | |
125 | message = pcep_msg_create_request(rp_obj, ipv4_obj, NULL); | |
126 | ||
127 | CU_ASSERT_PTR_NOT_NULL(message); | |
128 | pcep_encode_message(message, versioning); | |
fadf00aa | 129 | assert(message != NULL); |
74971473 JG |
130 | CU_ASSERT_PTR_NOT_NULL(message->msg_header); |
131 | CU_ASSERT_PTR_NOT_NULL(message->obj_list); | |
132 | CU_ASSERT_EQUAL(message->obj_list->num_entries, 2); | |
133 | CU_ASSERT_EQUAL( | |
134 | message->encoded_message_length, | |
135 | MESSAGE_HEADER_LENGTH | |
136 | + pcep_object_get_length_by_hdr(&rp_obj->header) | |
137 | + pcep_object_get_length_by_hdr(&ipv4_obj->header)); | |
fadf00aa | 138 | assert(message->msg_header != NULL); |
74971473 JG |
139 | CU_ASSERT_EQUAL(message->msg_header->type, PCEP_TYPE_PCREQ); |
140 | CU_ASSERT_EQUAL(message->msg_header->pcep_version, | |
141 | PCEP_MESSAGE_HEADER_VERSION); | |
142 | pcep_msg_free_message(message); | |
143 | ||
144 | /* Test IPv6 */ | |
145 | rp_obj = pcep_obj_create_rp(0, false, false, false, false, 10, NULL); | |
146 | struct in6_addr src_addr_ipv6, dst_addr_ipv6; | |
147 | struct pcep_object_endpoints_ipv6 *ipv6_obj = | |
148 | pcep_obj_create_endpoint_ipv6(&src_addr_ipv6, &dst_addr_ipv6); | |
149 | message = pcep_msg_create_request_ipv6(rp_obj, ipv6_obj, NULL); | |
150 | ||
151 | CU_ASSERT_PTR_NOT_NULL(message); | |
152 | pcep_encode_message(message, versioning); | |
fadf00aa | 153 | assert(message != NULL); |
74971473 JG |
154 | CU_ASSERT_PTR_NOT_NULL(message->msg_header); |
155 | CU_ASSERT_PTR_NOT_NULL(message->obj_list); | |
fadf00aa | 156 | assert(message->obj_list != NULL); |
74971473 JG |
157 | CU_ASSERT_EQUAL(message->obj_list->num_entries, 2); |
158 | CU_ASSERT_EQUAL( | |
159 | message->encoded_message_length, | |
160 | MESSAGE_HEADER_LENGTH | |
161 | + pcep_object_get_length_by_hdr(&rp_obj->header) | |
162 | + pcep_object_get_length_by_hdr(&ipv6_obj->header)); | |
fadf00aa | 163 | assert(message->msg_header != NULL); |
74971473 JG |
164 | CU_ASSERT_EQUAL(message->msg_header->type, PCEP_TYPE_PCREQ); |
165 | CU_ASSERT_EQUAL(message->msg_header->pcep_version, | |
166 | PCEP_MESSAGE_HEADER_VERSION); | |
167 | pcep_msg_free_message(message); | |
168 | ||
169 | /* The objects get deleted with the message, so they need to be created | |
170 | * again */ | |
171 | rp_obj = pcep_obj_create_rp(0, false, false, false, false, 10, NULL); | |
172 | ipv4_obj = pcep_obj_create_endpoint_ipv4(&src_addr, &dst_addr); | |
173 | struct pcep_object_bandwidth *bandwidth_obj = | |
174 | pcep_obj_create_bandwidth(4.2); | |
175 | double_linked_list *obj_list = dll_initialize(); | |
176 | dll_append(obj_list, bandwidth_obj); | |
177 | message = pcep_msg_create_request(rp_obj, ipv4_obj, obj_list); | |
178 | ||
179 | CU_ASSERT_PTR_NOT_NULL(message); | |
180 | pcep_encode_message(message, versioning); | |
fadf00aa | 181 | assert(message != NULL); |
74971473 JG |
182 | CU_ASSERT_PTR_NOT_NULL(message->msg_header); |
183 | CU_ASSERT_PTR_NOT_NULL(message->obj_list); | |
fadf00aa | 184 | assert(message->obj_list != NULL); |
74971473 JG |
185 | CU_ASSERT_EQUAL(message->obj_list->num_entries, 3); |
186 | CU_ASSERT_EQUAL( | |
187 | message->encoded_message_length, | |
188 | MESSAGE_HEADER_LENGTH | |
189 | + pcep_object_get_length_by_hdr(&rp_obj->header) | |
190 | + pcep_object_get_length_by_hdr(&ipv4_obj->header) | |
191 | + pcep_object_get_length_by_hdr( | |
192 | &bandwidth_obj->header)); | |
fadf00aa | 193 | assert(message->msg_header != NULL); |
74971473 JG |
194 | CU_ASSERT_EQUAL(message->msg_header->type, PCEP_TYPE_PCREQ); |
195 | CU_ASSERT_EQUAL(message->msg_header->pcep_version, | |
196 | PCEP_MESSAGE_HEADER_VERSION); | |
197 | pcep_msg_free_message(message); | |
198 | } | |
199 | ||
200 | ||
201 | void test_pcep_msg_create_request_svec() | |
202 | { | |
203 | } | |
204 | ||
205 | ||
206 | void test_pcep_msg_create_reply_nopath() | |
207 | { | |
208 | struct pcep_object_rp *rp_obj = | |
209 | pcep_obj_create_rp(0, false, false, false, false, 10, NULL); | |
210 | struct pcep_object_nopath *nopath_obj = pcep_obj_create_nopath( | |
211 | false, false, PCEP_NOPATH_TLV_ERR_NO_TLV); | |
212 | double_linked_list *obj_list = dll_initialize(); | |
213 | dll_append(obj_list, nopath_obj); | |
214 | ||
215 | struct pcep_message *message = pcep_msg_create_reply(rp_obj, obj_list); | |
216 | CU_ASSERT_PTR_NOT_NULL(message); | |
217 | pcep_encode_message(message, versioning); | |
fadf00aa | 218 | assert(message != NULL); |
74971473 JG |
219 | CU_ASSERT_PTR_NOT_NULL(message->msg_header); |
220 | CU_ASSERT_PTR_NOT_NULL(message->obj_list); | |
fadf00aa | 221 | assert(message->obj_list != NULL); |
74971473 JG |
222 | CU_ASSERT_EQUAL(message->obj_list->num_entries, 2); |
223 | CU_ASSERT_EQUAL(message->encoded_message_length, | |
224 | (MESSAGE_HEADER_LENGTH | |
225 | + pcep_object_get_length_by_hdr(&rp_obj->header) | |
226 | + pcep_object_get_length_by_hdr(&nopath_obj->header))); | |
fadf00aa | 227 | assert(message->msg_header != NULL); |
74971473 JG |
228 | CU_ASSERT_EQUAL(message->msg_header->type, PCEP_TYPE_PCREP); |
229 | CU_ASSERT_EQUAL(message->msg_header->pcep_version, | |
230 | PCEP_MESSAGE_HEADER_VERSION); | |
231 | pcep_msg_free_message(message); | |
232 | } | |
233 | ||
234 | ||
235 | void test_pcep_msg_create_reply() | |
236 | { | |
237 | /* First test with NULL ero and rp objects */ | |
238 | struct pcep_message *message = pcep_msg_create_reply(NULL, NULL); | |
239 | ||
240 | CU_ASSERT_PTR_NOT_NULL(message); | |
241 | pcep_encode_message(message, versioning); | |
fadf00aa | 242 | assert(message != NULL); |
74971473 JG |
243 | CU_ASSERT_PTR_NOT_NULL(message->msg_header); |
244 | CU_ASSERT_PTR_NOT_NULL(message->obj_list); | |
245 | CU_ASSERT_EQUAL(message->obj_list->num_entries, 0); | |
246 | CU_ASSERT_EQUAL(message->encoded_message_length, MESSAGE_HEADER_LENGTH); | |
fadf00aa | 247 | assert(message->msg_header != NULL); |
74971473 JG |
248 | CU_ASSERT_EQUAL(message->msg_header->type, PCEP_TYPE_PCREP); |
249 | CU_ASSERT_EQUAL(message->msg_header->pcep_version, | |
250 | PCEP_MESSAGE_HEADER_VERSION); | |
251 | pcep_msg_free_message(message); | |
252 | ||
253 | double_linked_list *ero_subobj_list = dll_initialize(); | |
254 | struct pcep_object_ro_subobj *ero_subobj = | |
255 | (struct pcep_object_ro_subobj *) | |
256 | pcep_obj_create_ro_subobj_32label(true, 1, 10); | |
257 | dll_append(ero_subobj_list, ero_subobj); | |
258 | struct pcep_object_ro *ero = pcep_obj_create_ero(ero_subobj_list); | |
259 | ||
260 | double_linked_list *object_list = dll_initialize(); | |
261 | dll_append(object_list, ero); | |
262 | struct pcep_object_rp *rp_obj = | |
263 | pcep_obj_create_rp(0, false, false, false, false, 10, NULL); | |
264 | message = pcep_msg_create_reply(rp_obj, object_list); | |
265 | CU_ASSERT_PTR_NOT_NULL(message); | |
266 | pcep_encode_message(message, versioning); | |
267 | CU_ASSERT_PTR_NOT_NULL(message->msg_header); | |
268 | CU_ASSERT_PTR_NOT_NULL(message->obj_list); | |
fadf00aa | 269 | assert(message->obj_list != NULL); |
74971473 JG |
270 | CU_ASSERT_EQUAL(message->obj_list->num_entries, 2); |
271 | CU_ASSERT_EQUAL(message->encoded_message_length, | |
272 | MESSAGE_HEADER_LENGTH | |
273 | + pcep_object_get_length_by_hdr(&rp_obj->header) | |
274 | + OBJECT_HEADER_LENGTH | |
275 | + OBJECT_RO_SUBOBJ_HEADER_LENGTH | |
276 | + 6 /* size of the 32label */); | |
277 | CU_ASSERT_EQUAL(message->msg_header->type, PCEP_TYPE_PCREP); | |
278 | CU_ASSERT_EQUAL(message->msg_header->pcep_version, | |
279 | PCEP_MESSAGE_HEADER_VERSION); | |
280 | pcep_msg_free_message(message); | |
281 | } | |
282 | ||
283 | ||
284 | void test_pcep_msg_create_close() | |
285 | { | |
286 | uint8_t reason = PCEP_CLOSE_REASON_UNREC_MSG; | |
287 | ||
288 | struct pcep_message *message = pcep_msg_create_close(reason); | |
289 | CU_ASSERT_PTR_NOT_NULL(message); | |
290 | pcep_encode_message(message, versioning); | |
fadf00aa | 291 | assert(message != NULL); |
74971473 JG |
292 | CU_ASSERT_PTR_NOT_NULL(message->msg_header); |
293 | CU_ASSERT_PTR_NOT_NULL(message->obj_list); | |
fadf00aa | 294 | assert(message->obj_list != NULL); |
74971473 JG |
295 | CU_ASSERT_EQUAL(message->obj_list->num_entries, 1); |
296 | CU_ASSERT_EQUAL(message->encoded_message_length, | |
297 | MESSAGE_HEADER_LENGTH | |
298 | + pcep_object_get_length(PCEP_OBJ_CLASS_CLOSE, | |
299 | PCEP_OBJ_TYPE_CLOSE)); | |
fadf00aa | 300 | assert(message->msg_header != NULL); |
74971473 JG |
301 | CU_ASSERT_EQUAL(message->msg_header->type, PCEP_TYPE_CLOSE); |
302 | CU_ASSERT_EQUAL(message->msg_header->pcep_version, | |
303 | PCEP_MESSAGE_HEADER_VERSION); | |
304 | ||
305 | /* Just check the class and type, the rest of the hdr fields | |
306 | * are verified in pcep-objects-test.c */ | |
307 | struct pcep_object_close *close_obj = | |
308 | (struct pcep_object_close *)message->obj_list->head->data; | |
fadf00aa | 309 | assert(close_obj != NULL); |
74971473 JG |
310 | CU_ASSERT_EQUAL(close_obj->header.object_class, PCEP_OBJ_CLASS_CLOSE); |
311 | CU_ASSERT_EQUAL(close_obj->header.object_type, PCEP_OBJ_TYPE_CLOSE); | |
312 | CU_ASSERT_EQUAL(close_obj->reason, reason); | |
313 | pcep_msg_free_message(message); | |
314 | } | |
315 | ||
316 | ||
317 | void test_pcep_msg_create_error() | |
318 | { | |
319 | uint8_t error_type = PCEP_ERRT_RECEPTION_OF_INV_OBJECT; | |
320 | uint8_t error_value = PCEP_ERRV_KEEPALIVEWAIT_TIMED_OUT; | |
321 | ||
322 | struct pcep_message *message = | |
323 | pcep_msg_create_error(error_type, error_value); | |
324 | CU_ASSERT_PTR_NOT_NULL(message); | |
325 | pcep_encode_message(message, versioning); | |
fadf00aa | 326 | assert(message != NULL); |
74971473 JG |
327 | CU_ASSERT_PTR_NOT_NULL(message->msg_header); |
328 | CU_ASSERT_PTR_NOT_NULL(message->obj_list); | |
fadf00aa | 329 | assert(message->obj_list != NULL); |
74971473 JG |
330 | CU_ASSERT_EQUAL(message->obj_list->num_entries, 1); |
331 | CU_ASSERT_EQUAL(message->encoded_message_length, | |
332 | MESSAGE_HEADER_LENGTH | |
333 | + pcep_object_get_length(PCEP_OBJ_CLASS_ERROR, | |
334 | PCEP_OBJ_TYPE_ERROR)); | |
fadf00aa | 335 | assert(message->msg_header != NULL); |
74971473 JG |
336 | CU_ASSERT_EQUAL(message->msg_header->type, PCEP_TYPE_ERROR); |
337 | CU_ASSERT_EQUAL(message->msg_header->pcep_version, | |
338 | PCEP_MESSAGE_HEADER_VERSION); | |
339 | ||
340 | /* Just check the class and type, the rest of the hdr fields | |
341 | * are verified in pcep-objects-test.c */ | |
342 | struct pcep_object_error *error_obj = | |
343 | (struct pcep_object_error *)message->obj_list->head->data; | |
344 | CU_ASSERT_EQUAL(error_obj->header.object_class, PCEP_OBJ_CLASS_ERROR); | |
345 | CU_ASSERT_EQUAL(error_obj->header.object_type, PCEP_OBJ_TYPE_ERROR); | |
346 | ||
347 | CU_ASSERT_EQUAL(error_obj->error_type, error_type); | |
348 | CU_ASSERT_EQUAL(error_obj->error_value, error_value); | |
349 | pcep_msg_free_message(message); | |
350 | } | |
351 | ||
352 | ||
353 | void test_pcep_msg_create_keepalive() | |
354 | { | |
355 | struct pcep_message *message = pcep_msg_create_keepalive(); | |
356 | CU_ASSERT_PTR_NOT_NULL(message); | |
357 | pcep_encode_message(message, versioning); | |
fadf00aa | 358 | assert(message != NULL); |
74971473 JG |
359 | CU_ASSERT_PTR_NOT_NULL(message->msg_header); |
360 | CU_ASSERT_PTR_NOT_NULL(message->obj_list); | |
fadf00aa | 361 | assert(message->obj_list != NULL); |
74971473 JG |
362 | CU_ASSERT_EQUAL(message->obj_list->num_entries, 0); |
363 | CU_ASSERT_EQUAL(message->encoded_message_length, MESSAGE_HEADER_LENGTH); | |
fadf00aa | 364 | assert(message->msg_header != NULL); |
74971473 JG |
365 | CU_ASSERT_EQUAL(message->msg_header->type, PCEP_TYPE_KEEPALIVE); |
366 | CU_ASSERT_EQUAL(message->msg_header->pcep_version, | |
367 | PCEP_MESSAGE_HEADER_VERSION); | |
368 | pcep_msg_free_message(message); | |
369 | } | |
370 | ||
371 | void test_pcep_msg_create_report() | |
372 | { | |
373 | double_linked_list *obj_list = dll_initialize(); | |
374 | ||
375 | /* Should return NULL if obj_list is empty */ | |
376 | struct pcep_message *message = pcep_msg_create_report(NULL); | |
377 | CU_ASSERT_PTR_NULL(message); | |
378 | ||
379 | struct pcep_object_lsp *lsp = | |
380 | pcep_obj_create_lsp(100, PCEP_LSP_OPERATIONAL_UP, true, true, | |
381 | true, true, true, NULL); | |
382 | dll_append(obj_list, lsp); | |
383 | message = pcep_msg_create_report(obj_list); | |
384 | CU_ASSERT_PTR_NOT_NULL(message); | |
385 | pcep_encode_message(message, versioning); | |
fadf00aa | 386 | assert(message != NULL); |
74971473 JG |
387 | CU_ASSERT_PTR_NOT_NULL(message->msg_header); |
388 | CU_ASSERT_PTR_NOT_NULL(message->obj_list); | |
fadf00aa | 389 | assert(message->obj_list != NULL); |
74971473 JG |
390 | CU_ASSERT_EQUAL(message->obj_list->num_entries, 1); |
391 | CU_ASSERT_EQUAL(message->encoded_message_length, | |
392 | MESSAGE_HEADER_LENGTH | |
393 | + lsp->header.encoded_object_length); | |
fadf00aa | 394 | assert(message->msg_header != NULL); |
74971473 JG |
395 | CU_ASSERT_EQUAL(message->msg_header->type, PCEP_TYPE_REPORT); |
396 | CU_ASSERT_EQUAL(message->msg_header->pcep_version, | |
397 | PCEP_MESSAGE_HEADER_VERSION); | |
398 | ||
399 | pcep_msg_free_message(message); | |
400 | } | |
401 | ||
402 | void test_pcep_msg_create_update() | |
403 | { | |
404 | double_linked_list *obj_list = dll_initialize(); | |
405 | double_linked_list *ero_subobj_list = dll_initialize(); | |
406 | ||
407 | struct pcep_message *message = pcep_msg_create_update(NULL); | |
408 | CU_ASSERT_PTR_NULL(message); | |
409 | ||
410 | /* Should return NULL if obj_list is empty */ | |
411 | message = pcep_msg_create_update(obj_list); | |
412 | CU_ASSERT_PTR_NULL(message); | |
7ed8c4b1 JG |
413 | if (message != NULL) { |
414 | pcep_msg_free_message(message); | |
415 | message = NULL; | |
416 | } | |
74971473 JG |
417 | |
418 | struct pcep_object_srp *srp = pcep_obj_create_srp(false, 100, NULL); | |
419 | struct pcep_object_lsp *lsp = | |
420 | pcep_obj_create_lsp(100, PCEP_LSP_OPERATIONAL_UP, true, true, | |
421 | true, true, true, NULL); | |
422 | dll_append(ero_subobj_list, pcep_obj_create_ro_subobj_asn(0x0102)); | |
423 | struct pcep_object_ro *ero = pcep_obj_create_ero(ero_subobj_list); | |
424 | ||
425 | /* Should return NULL if obj_list does not have 3 entries */ | |
426 | dll_append(obj_list, srp); | |
427 | dll_append(obj_list, lsp); | |
428 | message = pcep_msg_create_update(obj_list); | |
429 | CU_ASSERT_PTR_NULL(message); | |
430 | ||
431 | dll_append(obj_list, ero); | |
7ed8c4b1 JG |
432 | if (message != NULL) { |
433 | pcep_msg_free_message(message); | |
434 | message = NULL; | |
435 | } | |
74971473 JG |
436 | message = pcep_msg_create_update(obj_list); |
437 | CU_ASSERT_PTR_NOT_NULL(message); | |
438 | pcep_encode_message(message, versioning); | |
fadf00aa | 439 | assert(message != NULL); |
74971473 JG |
440 | CU_ASSERT_PTR_NOT_NULL(message->msg_header); |
441 | CU_ASSERT_PTR_NOT_NULL(message->obj_list); | |
fadf00aa | 442 | assert(message->obj_list != NULL); |
74971473 JG |
443 | CU_ASSERT_EQUAL(message->obj_list->num_entries, 3); |
444 | CU_ASSERT_EQUAL(message->encoded_message_length, | |
445 | MESSAGE_HEADER_LENGTH | |
446 | + srp->header.encoded_object_length | |
447 | + lsp->header.encoded_object_length | |
448 | + ero->header.encoded_object_length); | |
fadf00aa | 449 | assert(message->msg_header != NULL); |
74971473 JG |
450 | CU_ASSERT_EQUAL(message->msg_header->type, PCEP_TYPE_UPDATE); |
451 | CU_ASSERT_EQUAL(message->msg_header->pcep_version, | |
452 | PCEP_MESSAGE_HEADER_VERSION); | |
453 | ||
454 | pcep_msg_free_message(message); | |
455 | } | |
456 | ||
457 | void test_pcep_msg_create_initiate() | |
458 | { | |
459 | double_linked_list *obj_list = dll_initialize(); | |
460 | double_linked_list *ero_subobj_list = dll_initialize(); | |
461 | ||
462 | /* Should return NULL if obj_list is empty */ | |
463 | struct pcep_message *message = pcep_msg_create_initiate(NULL); | |
464 | CU_ASSERT_PTR_NULL(message); | |
7ed8c4b1 JG |
465 | if (message != NULL) { |
466 | pcep_msg_free_message(message); | |
467 | message = NULL; | |
468 | } | |
74971473 JG |
469 | |
470 | struct pcep_object_srp *srp = pcep_obj_create_srp(false, 100, NULL); | |
471 | struct pcep_object_lsp *lsp = | |
472 | pcep_obj_create_lsp(100, PCEP_LSP_OPERATIONAL_UP, true, true, | |
473 | true, true, true, NULL); | |
474 | dll_append(ero_subobj_list, pcep_obj_create_ro_subobj_asn(0x0102)); | |
475 | struct pcep_object_ro *ero = pcep_obj_create_ero(ero_subobj_list); | |
476 | ||
477 | /* Should return NULL if obj_list does not have 2 entries */ | |
478 | dll_append(obj_list, srp); | |
479 | message = pcep_msg_create_initiate(obj_list); | |
480 | CU_ASSERT_PTR_NULL(message); | |
7ed8c4b1 JG |
481 | if (message != NULL) { |
482 | pcep_msg_free_message(message); | |
483 | message = NULL; | |
484 | } | |
74971473 JG |
485 | |
486 | dll_append(obj_list, lsp); | |
487 | dll_append(obj_list, ero); | |
488 | message = pcep_msg_create_initiate(obj_list); | |
489 | CU_ASSERT_PTR_NOT_NULL(message); | |
490 | pcep_encode_message(message, versioning); | |
fadf00aa | 491 | assert(message != NULL); |
74971473 JG |
492 | CU_ASSERT_PTR_NOT_NULL(message->msg_header); |
493 | CU_ASSERT_PTR_NOT_NULL(message->obj_list); | |
fadf00aa | 494 | assert(message->obj_list != NULL); |
74971473 JG |
495 | CU_ASSERT_EQUAL(message->obj_list->num_entries, 3); |
496 | CU_ASSERT_EQUAL(message->encoded_message_length, | |
497 | MESSAGE_HEADER_LENGTH | |
498 | + srp->header.encoded_object_length | |
499 | + lsp->header.encoded_object_length | |
500 | + ero->header.encoded_object_length); | |
fadf00aa | 501 | assert(message->msg_header != NULL); |
74971473 JG |
502 | CU_ASSERT_EQUAL(message->msg_header->type, PCEP_TYPE_INITIATE); |
503 | CU_ASSERT_EQUAL(message->msg_header->pcep_version, | |
504 | PCEP_MESSAGE_HEADER_VERSION); | |
505 | ||
506 | pcep_msg_free_message(message); | |
507 | } | |
508 | ||
509 | void test_pcep_msg_create_notify(void) | |
510 | { | |
511 | struct pcep_object_notify *notify_obj = pcep_obj_create_notify( | |
512 | PCEP_NOTIFY_TYPE_PENDING_REQUEST_CANCELLED, | |
513 | PCEP_NOTIFY_VALUE_PCC_CANCELLED_REQUEST); | |
514 | ||
515 | /* Should return NULL if the notify obj is empty */ | |
516 | struct pcep_message *message = pcep_msg_create_notify(NULL, NULL); | |
517 | CU_ASSERT_PTR_NULL(message); | |
518 | ||
519 | message = pcep_msg_create_notify(notify_obj, NULL); | |
520 | CU_ASSERT_PTR_NOT_NULL(message); | |
521 | pcep_encode_message(message, versioning); | |
fadf00aa | 522 | assert(message != NULL); |
74971473 | 523 | CU_ASSERT_PTR_NOT_NULL(message->obj_list); |
fadf00aa | 524 | assert(message->obj_list != NULL); |
74971473 JG |
525 | CU_ASSERT_EQUAL(message->obj_list->num_entries, 1); |
526 | CU_ASSERT_EQUAL(message->encoded_message_length, | |
527 | MESSAGE_HEADER_LENGTH | |
528 | + notify_obj->header.encoded_object_length); | |
fadf00aa | 529 | assert(message->msg_header != NULL); |
74971473 JG |
530 | CU_ASSERT_EQUAL(message->msg_header->type, PCEP_TYPE_PCNOTF); |
531 | CU_ASSERT_EQUAL(message->msg_header->pcep_version, | |
532 | PCEP_MESSAGE_HEADER_VERSION); | |
533 | ||
534 | pcep_msg_free_message(message); | |
535 | ||
536 | struct pcep_object_rp *rp_obj = | |
537 | pcep_obj_create_rp(0, false, false, false, false, 10, NULL); | |
538 | double_linked_list *obj_list = dll_initialize(); | |
539 | dll_append(obj_list, rp_obj); | |
540 | notify_obj = pcep_obj_create_notify( | |
541 | PCEP_NOTIFY_TYPE_PENDING_REQUEST_CANCELLED, | |
542 | PCEP_NOTIFY_VALUE_PCC_CANCELLED_REQUEST); | |
543 | ||
544 | message = pcep_msg_create_notify(notify_obj, obj_list); | |
545 | CU_ASSERT_PTR_NOT_NULL(message); | |
546 | pcep_encode_message(message, versioning); | |
fadf00aa | 547 | assert(message != NULL); |
74971473 | 548 | CU_ASSERT_PTR_NOT_NULL(message->obj_list); |
fadf00aa | 549 | assert(message->obj_list != NULL); |
74971473 JG |
550 | CU_ASSERT_EQUAL(message->obj_list->num_entries, 2); |
551 | CU_ASSERT_EQUAL(message->encoded_message_length, | |
552 | MESSAGE_HEADER_LENGTH | |
553 | + notify_obj->header.encoded_object_length | |
554 | + rp_obj->header.encoded_object_length); | |
555 | CU_ASSERT_EQUAL(message->msg_header->type, PCEP_TYPE_PCNOTF); | |
556 | CU_ASSERT_EQUAL(message->msg_header->pcep_version, | |
557 | PCEP_MESSAGE_HEADER_VERSION); | |
558 | ||
559 | pcep_msg_free_message(message); | |
560 | } |