4 * @brief Tests to test the Generator class generator_t
9 * Copyright (C) 2005 Jan Hutter, Martin Willi
10 * Hochschule fuer Technik Rapperswil
12 * This program is free software; you can redistribute it and/or modify it
13 * under the terms of the GNU General Public License as published by the
14 * Free Software Foundation; either version 2 of the License, or (at your
15 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
17 * This program is distributed in the hope that it will be useful, but
18 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
19 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
25 #include "generator_test.h"
28 #include <encoding/generator.h>
29 #include <utils/allocator.h>
30 #include <utils/logger_manager.h>
31 #include <utils/logger.h>
32 #include <encoding/payloads/encodings.h>
33 #include <encoding/payloads/ike_header.h>
34 #include <encoding/payloads/transform_attribute.h>
35 #include <encoding/payloads/transform_substructure.h>
36 #include <encoding/payloads/proposal_substructure.h>
37 #include <encoding/payloads/sa_payload.h>
38 #include <encoding/payloads/ke_payload.h>
39 #include <encoding/payloads/notify_payload.h>
40 #include <encoding/payloads/nonce_payload.h>
45 void test_generator_with_header_payload(tester_t
*tester
)
47 generator_t
*generator
;
48 ike_header_t
*header_data
;
49 chunk_t generated_data
;
53 logger
= global_logger_manager
->create_logger(global_logger_manager
,TESTER
,"header payload");
55 header_data
= ike_header_create();
56 header_data
->set_initiator_spi(header_data
,1);
57 header_data
->set_responder_spi(header_data
,2);
58 ((payload_t
*) header_data
)->set_next_type((payload_t
*) header_data
, 3);
59 header_data
->set_exchange_type(header_data
, 6);
60 header_data
->set_initiator_flag(header_data
, TRUE
);
61 header_data
->set_response_flag(header_data
, TRUE
);
62 header_data
->set_message_id(header_data
,7);
64 generator
= generator_create();
65 tester
->assert_true(tester
,(generator
!= NULL
), "generator create check");
67 status
= generator
->generate_payload(generator
,(payload_t
*) header_data
);
68 tester
->assert_true(tester
,(status
== SUCCESS
),"generate_payload call check");
70 tester
->assert_true(tester
,(generator
->write_to_chunk(generator
,&generated_data
) == SUCCESS
),"write_to_chunk call check");
72 u_int8_t expected_generation
[] = {
82 logger
->log_bytes(logger
,RAW
,"expected header",expected_generation
,sizeof(expected_generation
));
83 tester
->assert_true(tester
,(generated_data
.len
== sizeof(expected_generation
)), "compare generated data length");
84 logger
->log_chunk(logger
,RAW
,"generated header",&generated_data
);
85 tester
->assert_true(tester
,(memcmp(expected_generation
,generated_data
.ptr
,sizeof(expected_generation
)) == 0), "compare generated data 1");
86 allocator_free_chunk(&generated_data
);
88 tester
->assert_true(tester
,(generator
->destroy(generator
) == SUCCESS
), "generator destroy call check");
90 header_data
->set_initiator_spi(header_data
,0x22000054231234LL
);
91 header_data
->set_responder_spi(header_data
,0x122398);
92 ((payload_t
*) header_data
)->set_next_type((payload_t
*) header_data
,0xF3);
93 header_data
->set_exchange_type(header_data
, 0x12);
94 header_data
->set_initiator_flag(header_data
, TRUE
);
95 header_data
->set_response_flag(header_data
, TRUE
);
96 header_data
->set_message_id(header_data
,0x33AFF3);
98 generator
= generator_create();
99 tester
->assert_true(tester
,(generator
!= NULL
), "generator create check");
101 status
= generator
->generate_payload(generator
,(payload_t
*)header_data
);
102 tester
->assert_true(tester
,(status
== SUCCESS
),"generate_payload call check");
104 tester
->assert_true(tester
,(generator
->write_to_chunk(generator
,&generated_data
) == SUCCESS
),"write_to_chunk call check");
106 u_int8_t expected_generation2
[] = {
117 logger
->log_bytes(logger
,RAW
,"expected header",expected_generation2
,sizeof(expected_generation2
));
119 logger
->log_chunk(logger
,RAW
,"generated header",&generated_data
);
121 tester
->assert_true(tester
,(memcmp(expected_generation2
,generated_data
.ptr
,sizeof(expected_generation2
)) == 0), "compare generated data 2");
122 allocator_free_chunk(&generated_data
);
124 header_data
->destroy(header_data
);
126 global_logger_manager
->destroy_logger(global_logger_manager
,logger
);
127 tester
->assert_true(tester
,(generator
->destroy(generator
) == SUCCESS
), "generator destroy call check");
131 * Described in header
133 void test_generator_with_transform_attribute(tester_t
*tester
)
135 generator_t
*generator
;
136 transform_attribute_t
*attribute
;
138 chunk_t generated_data
;
141 logger
= global_logger_manager
->create_logger(global_logger_manager
,TESTER
,"transform_attribute payload");
144 /* test empty attribute */
145 generator
= generator_create();
146 tester
->assert_true(tester
,(generator
!= NULL
), "generator create check");
147 attribute
= transform_attribute_create();
148 status
= generator
->generate_payload(generator
,(payload_t
*)attribute
);
149 tester
->assert_true(tester
,(status
== SUCCESS
),"generate_payload call check");
150 tester
->assert_true(tester
,(generator
->write_to_chunk(generator
,&generated_data
) == SUCCESS
),"write_to_chunk call check");
151 logger
->log_chunk(logger
,RAW
,"generated attribute",&generated_data
);
153 u_int8_t expected_generation
[] = {
156 tester
->assert_true(tester
,(memcmp(expected_generation
,generated_data
.ptr
,sizeof(expected_generation
)) == 0), "compare generated data");
157 allocator_free_chunk(&generated_data
);
158 tester
->assert_true(tester
,(attribute
->destroy(attribute
) == SUCCESS
), "attribute destroy call check");
159 tester
->assert_true(tester
,(generator
->destroy(generator
) == SUCCESS
), "generator destroy call check");
161 /* test attribute with 2 byte data */
162 generator
= generator_create();
163 tester
->assert_true(tester
,(generator
!= NULL
), "generator create check");
165 attribute
= transform_attribute_create();
166 u_int16_t dataval
= 5768;
168 data
.ptr
= (void *) &dataval
;
171 attribute
->set_value_chunk(attribute
,data
);
173 status
= generator
->generate_payload(generator
,(payload_t
*)attribute
);
174 tester
->assert_true(tester
,(status
== SUCCESS
),"generate_payload call check");
175 tester
->assert_true(tester
,(generator
->write_to_chunk(generator
,&generated_data
) == SUCCESS
),"write_to_chunk call check");
176 logger
->log_chunk(logger
,RAW
,"generated attribute",&generated_data
);
178 u_int8_t expected_generation2
[] = {
181 tester
->assert_true(tester
,(memcmp(expected_generation2
,generated_data
.ptr
,sizeof(expected_generation2
)) == 0), "compare generated data");
183 allocator_free_chunk(&generated_data
);
184 tester
->assert_true(tester
,(attribute
->destroy(attribute
) == SUCCESS
), "attribute destroy call check");
185 tester
->assert_true(tester
,(generator
->destroy(generator
) == SUCCESS
), "generator destroy call check");
189 /* test attribute with 25 byte data */
190 generator
= generator_create();
191 tester
->assert_true(tester
,(generator
!= NULL
), "generator create check");
193 attribute
= transform_attribute_create();
194 char *stringval
= "ddddddddddeeeeeeeeeefffff";
195 data
.ptr
= (void *) stringval
;
198 status
= attribute
->set_value_chunk(attribute
,data
);
199 tester
->assert_true(tester
,(status
== SUCCESS
),"set_value call check");
201 status
= attribute
->set_attribute_type(attribute
,456);
202 tester
->assert_true(tester
,(status
== SUCCESS
),"set_attribute_type call check");
205 status
= generator
->generate_payload(generator
,(payload_t
*)attribute
);
206 tester
->assert_true(tester
,(status
== SUCCESS
),"generate_payload call check");
207 tester
->assert_true(tester
,(generator
->write_to_chunk(generator
,&generated_data
) == SUCCESS
),"write_to_chunk call check");
208 logger
->log_chunk(logger
,RAW
,"generated attribute",&generated_data
);
210 u_int8_t expected_generation3
[] = {
220 tester
->assert_true(tester
,(memcmp(expected_generation3
,generated_data
.ptr
,sizeof(expected_generation3
)) == 0), "compare generated data");
222 allocator_free_chunk(&generated_data
);
223 tester
->assert_true(tester
,(attribute
->destroy(attribute
) == SUCCESS
), "attribute destroy call check");
224 tester
->assert_true(tester
,(generator
->destroy(generator
) == SUCCESS
), "generator destroy call check");
227 global_logger_manager
->destroy_logger(global_logger_manager
,logger
);
233 * Described in header
235 void test_generator_with_transform_substructure(tester_t
*tester
)
237 generator_t
*generator
;
238 transform_attribute_t
*attribute1
, *attribute2
;
239 transform_substructure_t
*transform
;
242 chunk_t generated_data
;
245 logger
= global_logger_manager
->create_logger(global_logger_manager
,TESTER
,"transform substr.");
247 /* create generator */
248 generator
= generator_create();
249 tester
->assert_true(tester
,(generator
!= NULL
), "generator create check");
251 /* create attribute 1 */
252 attribute1
= transform_attribute_create();
253 char *stringval
= "abcd";
254 data
.ptr
= (void *) stringval
;
256 status
= attribute1
->set_value_chunk(attribute1
,data
);
257 tester
->assert_true(tester
,(status
== SUCCESS
),"set_value call check");
258 status
= attribute1
->set_attribute_type(attribute1
,0);
259 tester
->assert_true(tester
,(status
== SUCCESS
),"set_attribute_type call check");
260 logger
->log(logger
,CONTROL
,"attribute1 created");
262 /* create attribute 2 */
263 attribute2
= transform_attribute_create();
265 data
.ptr
= (void *) stringval
;
267 status
= attribute2
->set_value_chunk(attribute2
,data
);
268 tester
->assert_true(tester
,(status
== SUCCESS
),"set_value call check");
269 status
= attribute2
->set_attribute_type(attribute2
,0);
270 tester
->assert_true(tester
,(status
== SUCCESS
),"set_attribute_type call check");
271 logger
->log(logger
,CONTROL
,"attribute2 created");
273 /* create transform */
274 transform
= transform_substructure_create();
275 tester
->assert_true(tester
,(transform
!= NULL
), "transform create check");
276 status
= transform
->add_transform_attribute(transform
,attribute1
);
277 tester
->assert_true(tester
,(status
== SUCCESS
),"add_transform_attribute call check");
278 status
= transform
->add_transform_attribute(transform
,attribute2
);
279 tester
->assert_true(tester
,(status
== SUCCESS
),"add_transform_attribute call check");
280 status
= transform
->set_transform_type(transform
,5); /* hex 5 */
281 tester
->assert_true(tester
,(status
== SUCCESS
),"set_transform_type call check");
282 status
= transform
->set_transform_id(transform
,65000); /* hex FDE8 */
283 tester
->assert_true(tester
,(status
== SUCCESS
),"set_transform_id call check");
286 logger
->log(logger
,CONTROL
,"transform created");
288 status
= generator
->generate_payload(generator
,(payload_t
*)transform
);
289 tester
->assert_true(tester
,(status
== SUCCESS
),"generate_payload call check");
290 tester
->assert_true(tester
,(generator
->write_to_chunk(generator
,&generated_data
) == SUCCESS
),"write_to_chunk call check");
291 logger
->log_chunk(logger
,RAW
,"generated transform",&generated_data
);
293 u_int8_t expected_generation3
[] = {
301 tester
->assert_true(tester
,(memcmp(expected_generation3
,generated_data
.ptr
,sizeof(expected_generation3
)) == 0), "compare generated data");
303 allocator_free_chunk(&generated_data
);
304 tester
->assert_true(tester
,(transform
->destroy(transform
) == SUCCESS
), "transform destroy call check");
305 tester
->assert_true(tester
,(generator
->destroy(generator
) == SUCCESS
), "generator destroy call check");
308 global_logger_manager
->destroy_logger(global_logger_manager
,logger
);
313 * Described in header
315 void test_generator_with_proposal_substructure(tester_t
*tester
)
317 generator_t
*generator
;
318 transform_attribute_t
*attribute1
, *attribute2
, *attribute3
;
319 transform_substructure_t
*transform1
, *transform2
;
320 proposal_substructure_t
*proposal
;
323 chunk_t generated_data
;
326 logger
= global_logger_manager
->create_logger(global_logger_manager
,TESTER
,"transform substr.");
328 /* create generator */
329 generator
= generator_create();
330 tester
->assert_true(tester
,(generator
!= NULL
), "generator create check");
332 /* create attribute 1 */
333 attribute1
= transform_attribute_create();
334 char *stringval
= "abcd";
335 data
.ptr
= (void *) stringval
;
337 status
= attribute1
->set_value_chunk(attribute1
,data
);
338 tester
->assert_true(tester
,(status
== SUCCESS
),"set_value call check");
339 status
= attribute1
->set_attribute_type(attribute1
,0);
340 tester
->assert_true(tester
,(status
== SUCCESS
),"set_attribute_type call check");
341 logger
->log(logger
,CONTROL
,"attribute1 created");
343 /* create attribute 2 */
344 attribute2
= transform_attribute_create();
346 data
.ptr
= (void *) stringval
;
348 status
= attribute2
->set_value_chunk(attribute2
,data
);
349 tester
->assert_true(tester
,(status
== SUCCESS
),"set_value call check");
350 status
= attribute2
->set_attribute_type(attribute2
,0);
351 tester
->assert_true(tester
,(status
== SUCCESS
),"set_attribute_type call check");
352 logger
->log(logger
,CONTROL
,"attribute2 created");
354 /* create attribute 3 */
355 attribute3
= transform_attribute_create();
357 data
.ptr
= (void *) stringval
;
359 status
= attribute3
->set_value_chunk(attribute3
,data
);
360 tester
->assert_true(tester
,(status
== SUCCESS
),"set_value call check");
361 status
= attribute3
->set_attribute_type(attribute3
,0);
362 tester
->assert_true(tester
,(status
== SUCCESS
),"set_attribute_type call check");
363 logger
->log(logger
,CONTROL
,"attribute3 created");
365 /* create transform 1*/
366 transform1
= transform_substructure_create();
367 tester
->assert_true(tester
,(transform1
!= NULL
), "transform create check");
368 status
= transform1
->add_transform_attribute(transform1
,attribute1
);
369 tester
->assert_true(tester
,(status
== SUCCESS
),"add_transform_attribute call check");
370 status
= transform1
->add_transform_attribute(transform1
,attribute2
);
371 tester
->assert_true(tester
,(status
== SUCCESS
),"add_transform_attribute call check");
372 status
= transform1
->set_transform_type(transform1
,5); /* hex 5 */
373 tester
->assert_true(tester
,(status
== SUCCESS
),"set_transform_type call check");
374 status
= transform1
->set_transform_id(transform1
,65000); /* hex FDE8 */
375 tester
->assert_true(tester
,(status
== SUCCESS
),"set_transform_id call check");
377 /* create transform 2*/
378 transform2
= transform_substructure_create();
379 tester
->assert_true(tester
,(transform2
!= NULL
), "transform create check");
380 status
= transform2
->add_transform_attribute(transform2
,attribute3
);
381 tester
->assert_true(tester
,(status
== SUCCESS
),"add_transform_attribute call check");
382 status
= transform2
->set_transform_type(transform2
,3); /* hex 3 */
383 tester
->assert_true(tester
,(status
== SUCCESS
),"set_transform_type call check");
384 status
= transform2
->set_transform_id(transform2
,4); /* hex 4 */
385 tester
->assert_true(tester
,(status
== SUCCESS
),"set_transform_id call check");
387 logger
->log(logger
,CONTROL
,"transforms created");
389 proposal
= proposal_substructure_create();
390 tester
->assert_true(tester
,(proposal
!= NULL
), "proposal create check");
392 stringval
= "ABCDEFGH";
393 data
.ptr
= (void *) stringval
;
396 status
= proposal
->add_transform_substructure(proposal
,transform1
);
397 tester
->assert_true(tester
,(status
== SUCCESS
),"add_transform_substructure call check");
398 status
= proposal
->add_transform_substructure(proposal
,transform2
);
399 tester
->assert_true(tester
,(status
== SUCCESS
),"add_transform_substructure call check");
400 status
= proposal
->set_spi(proposal
,data
);
401 tester
->assert_true(tester
,(status
== SUCCESS
),"set_spi call check");
402 status
= proposal
->set_proposal_number(proposal
,7);
403 tester
->assert_true(tester
,(status
== SUCCESS
),"set_proposal_number call check");
404 status
= proposal
->set_protocol_id(proposal
,4);
405 tester
->assert_true(tester
,(status
== SUCCESS
),"set_protocol_id call check");
408 status
= generator
->generate_payload(generator
,(payload_t
*)proposal
);
409 tester
->assert_true(tester
,(status
== SUCCESS
),"generate_payload call check");
410 tester
->assert_true(tester
,(generator
->write_to_chunk(generator
,&generated_data
) == SUCCESS
),"write_to_chunk call check");
411 logger
->log_chunk(logger
,RAW
,"generated transform",&generated_data
);
413 u_int8_t expected_generation
[] = {
414 /* proposal header */
420 /* first transform */
423 /* first transform attributes */
428 /* second transform */
431 /* second transform attributes */
435 logger
->log_bytes(logger
,RAW
,"expected transform",expected_generation
,sizeof(expected_generation
));
437 tester
->assert_true(tester
,(memcmp(expected_generation
,generated_data
.ptr
,sizeof(expected_generation
)) == 0), "compare generated data");
439 allocator_free_chunk(&generated_data
);
440 tester
->assert_true(tester
,(proposal
->destroy(proposal
) == SUCCESS
), "proposal destroy call check");
441 tester
->assert_true(tester
,(generator
->destroy(generator
) == SUCCESS
), "generator destroy call check");
444 global_logger_manager
->destroy_logger(global_logger_manager
,logger
);
448 * Described in header
450 void test_generator_with_sa_payload(tester_t
*tester
)
452 generator_t
*generator
;
453 transform_attribute_t
*attribute1
, *attribute2
, *attribute3
;
454 transform_substructure_t
*transform1
, *transform2
;
455 proposal_substructure_t
*proposal1
, *proposal2
;
456 sa_payload_t
*sa_payload
;
457 ike_header_t
*ike_header
;
461 chunk_t generated_data
;
464 logger
= global_logger_manager
->create_logger(global_logger_manager
,TESTER
,"Message with SA Payload");
466 /* create generator */
467 generator
= generator_create();
468 tester
->assert_true(tester
,(generator
!= NULL
), "generator create check");
470 /* create attribute 1 */
471 attribute1
= transform_attribute_create();
472 char *stringval
= "abcd";
473 data
.ptr
= (void *) stringval
;
475 status
= attribute1
->set_value_chunk(attribute1
,data
);
476 tester
->assert_true(tester
,(status
== SUCCESS
),"set_value call check");
477 status
= attribute1
->set_attribute_type(attribute1
,0);
478 tester
->assert_true(tester
,(status
== SUCCESS
),"set_attribute_type call check");
479 logger
->log(logger
,CONTROL
,"attribute1 created");
481 /* create attribute 2 */
482 attribute2
= transform_attribute_create();
484 data
.ptr
= (void *) stringval
;
486 status
= attribute2
->set_value_chunk(attribute2
,data
);
487 tester
->assert_true(tester
,(status
== SUCCESS
),"set_value call check");
488 status
= attribute2
->set_attribute_type(attribute2
,0);
489 tester
->assert_true(tester
,(status
== SUCCESS
),"set_attribute_type call check");
490 logger
->log(logger
,CONTROL
,"attribute2 created");
492 /* create attribute 3 */
493 attribute3
= transform_attribute_create();
495 data
.ptr
= (void *) stringval
;
497 status
= attribute3
->set_value_chunk(attribute3
,data
);
498 tester
->assert_true(tester
,(status
== SUCCESS
),"set_value call check");
499 status
= attribute3
->set_attribute_type(attribute3
,0);
500 tester
->assert_true(tester
,(status
== SUCCESS
),"set_attribute_type call check");
501 logger
->log(logger
,CONTROL
,"attribute3 created");
503 /* create transform 1*/
504 transform1
= transform_substructure_create();
505 tester
->assert_true(tester
,(transform1
!= NULL
), "transform create check");
506 status
= transform1
->add_transform_attribute(transform1
,attribute1
);
507 tester
->assert_true(tester
,(status
== SUCCESS
),"add_transform_attribute call check");
508 status
= transform1
->add_transform_attribute(transform1
,attribute2
);
509 tester
->assert_true(tester
,(status
== SUCCESS
),"add_transform_attribute call check");
510 status
= transform1
->set_transform_type(transform1
,5); /* hex 5 */
511 tester
->assert_true(tester
,(status
== SUCCESS
),"set_transform_type call check");
512 status
= transform1
->set_transform_id(transform1
,65000); /* hex FDE8 */
513 tester
->assert_true(tester
,(status
== SUCCESS
),"set_transform_id call check");
515 /* create transform 2*/
516 transform2
= transform_substructure_create();
517 tester
->assert_true(tester
,(transform2
!= NULL
), "transform create check");
518 status
= transform2
->add_transform_attribute(transform2
,attribute3
);
519 tester
->assert_true(tester
,(status
== SUCCESS
),"add_transform_attribute call check");
520 status
= transform2
->set_transform_type(transform2
,3); /* hex 3 */
521 tester
->assert_true(tester
,(status
== SUCCESS
),"set_transform_type call check");
522 status
= transform2
->set_transform_id(transform2
,4); /* hex 4 */
523 tester
->assert_true(tester
,(status
== SUCCESS
),"set_transform_id call check");
525 logger
->log(logger
,CONTROL
,"transforms created");
527 /* create proposal 1 */
528 proposal1
= proposal_substructure_create();
529 tester
->assert_true(tester
,(proposal1
!= NULL
), "proposal create check");
531 stringval
= "ABCDEFGH";
532 data
.ptr
= (void *) stringval
;
535 status
= proposal1
->add_transform_substructure(proposal1
,transform1
);
536 tester
->assert_true(tester
,(status
== SUCCESS
),"add_transform_substructure call check");
537 status
= proposal1
->add_transform_substructure(proposal1
,transform2
);
538 tester
->assert_true(tester
,(status
== SUCCESS
),"add_transform_substructure call check");
539 status
= proposal1
->set_spi(proposal1
,data
);
540 tester
->assert_true(tester
,(status
== SUCCESS
),"set_spi call check");
541 status
= proposal1
->set_proposal_number(proposal1
,7);
542 tester
->assert_true(tester
,(status
== SUCCESS
),"set_proposal_number call check");
543 status
= proposal1
->set_protocol_id(proposal1
,4);
544 tester
->assert_true(tester
,(status
== SUCCESS
),"set_protocol_id call check");
546 /* create proposal 2 */
547 proposal2
= proposal_substructure_create();
548 tester
->assert_true(tester
,(proposal2
!= NULL
), "proposal create check");
549 status
= proposal2
->set_proposal_number(proposal2
,7);
550 tester
->assert_true(tester
,(status
== SUCCESS
),"set_proposal_number call check");
551 status
= proposal2
->set_protocol_id(proposal2
,5);
552 tester
->assert_true(tester
,(status
== SUCCESS
),"set_protocol_id call check");
554 /* create sa_payload */
555 sa_payload
= sa_payload_create();
557 sa_payload
->add_proposal_substructure(sa_payload
,proposal1
);
558 sa_payload
->add_proposal_substructure(sa_payload
,proposal2
);
560 ike_header
= ike_header_create();
561 ike_header
->set_initiator_spi(ike_header
,0x22000054231234LL
);
562 ike_header
->set_responder_spi(ike_header
,0x122398);
563 ((payload_t
*) ike_header
)->set_next_type((payload_t
*) ike_header
,SECURITY_ASSOCIATION
);
564 ike_header
->set_exchange_type(ike_header
, 0x12);
565 ike_header
->set_initiator_flag(ike_header
, TRUE
);
566 ike_header
->set_response_flag(ike_header
, TRUE
);
567 ike_header
->set_message_id(ike_header
,0x33AFF3);
569 status
= generator
->generate_payload(generator
,(payload_t
*)ike_header
);
570 tester
->assert_true(tester
,(status
== SUCCESS
),"generate_payload call check");
571 status
= generator
->generate_payload(generator
,(payload_t
*)sa_payload
);
572 tester
->assert_true(tester
,(status
== SUCCESS
),"generate_payload call check");
573 tester
->assert_true(tester
,(generator
->write_to_chunk(generator
,&generated_data
) == SUCCESS
),"write_to_chunk call check");
574 logger
->log_chunk(logger
,RAW
,"generated transform",&generated_data
);
576 u_int8_t expected_generation
[] = {
577 /* sa payload header */
586 /* sa payload header */
588 /* proposal header */
594 /* first transform */
597 /* first transform attributes */
602 /* second transform */
605 /* second transform attributes */
608 /* proposal header 2*/
614 logger
->log_bytes(logger
,RAW
,"expected transform",expected_generation
,sizeof(expected_generation
));
616 tester
->assert_true(tester
,(memcmp(expected_generation
,generated_data
.ptr
,sizeof(expected_generation
)) == 0), "compare generated data");
618 allocator_free_chunk(&generated_data
);
619 tester
->assert_true(tester
,(ike_header
->destroy(ike_header
) == SUCCESS
), "ike_header destroy call check");
620 tester
->assert_true(tester
,(sa_payload
->destroy(sa_payload
) == SUCCESS
), "sa_payload destroy call check");
621 tester
->assert_true(tester
,(generator
->destroy(generator
) == SUCCESS
), "generator destroy call check");
623 global_logger_manager
->destroy_logger(global_logger_manager
,logger
);
628 * Described in header
630 void test_generator_with_ke_payload(tester_t
*tester
)
632 generator_t
*generator
;
633 ke_payload_t
*ke_payload
;
636 chunk_t generated_data
;
637 chunk_t key_exchange_data
;
639 logger
= global_logger_manager
->create_logger(global_logger_manager
,TESTER
,"Message with KE Payload");
641 /* create generator */
642 generator
= generator_create();
643 tester
->assert_true(tester
,(generator
!= NULL
), "generator create check");
645 ke_payload
= ke_payload_create();
648 key_exchange_data
.ptr
= "test-text";
649 key_exchange_data
.len
= strlen(key_exchange_data
.ptr
);
651 ke_payload
->set_key_exchange_data(ke_payload
,key_exchange_data
);
653 ke_payload
->set_dh_group_number(ke_payload
,7777);
655 status
= generator
->generate_payload(generator
,(payload_t
*)ke_payload
);
656 tester
->assert_true(tester
,(status
== SUCCESS
),"generate_payload call check");
657 tester
->assert_true(tester
,(generator
->write_to_chunk(generator
,&generated_data
) == SUCCESS
),"write_to_chunk call check");
658 logger
->log_chunk(logger
,RAW
,"generated payload",&generated_data
);
660 u_int8_t expected_generation
[] = {
664 /* key exchange data */
671 logger
->log_bytes(logger
,RAW
,"expected payload",expected_generation
,sizeof(expected_generation
));
673 tester
->assert_true(tester
,(memcmp(expected_generation
,generated_data
.ptr
,sizeof(expected_generation
)) == 0), "compare generated data");
675 allocator_free_chunk(&generated_data
);
677 tester
->assert_true(tester
,(ke_payload
->destroy(ke_payload
) == SUCCESS
), "sa_payload destroy call check");
678 tester
->assert_true(tester
,(generator
->destroy(generator
) == SUCCESS
), "generator destroy call check");
680 global_logger_manager
->destroy_logger(global_logger_manager
,logger
);
685 * Described in header
687 void test_generator_with_notify_payload(tester_t
*tester
)
689 generator_t
*generator
;
690 notify_payload_t
*notify_payload
;
693 chunk_t generated_data
;
694 chunk_t spi
,notification_data
;
696 logger
= global_logger_manager
->create_logger(global_logger_manager
,TESTER
,"Message with Notify Payload");
698 /* create generator */
699 generator
= generator_create();
700 tester
->assert_true(tester
,(generator
!= NULL
), "generator create check");
702 notify_payload
= notify_payload_create();
706 spi
.len
= strlen(spi
.ptr
);
708 notification_data
.ptr
= "67890";
709 notification_data
.len
= strlen(notification_data
.ptr
);
711 notify_payload
->set_protocol_id(notify_payload
,255);
712 notify_payload
->set_notify_message_type(notify_payload
,63333); /* Hex F765 */
713 notify_payload
->set_spi(notify_payload
,spi
);
714 notify_payload
->set_notification_data(notify_payload
,notification_data
);
716 status
= generator
->generate_payload(generator
,(payload_t
*)notify_payload
);
717 tester
->assert_true(tester
,(status
== SUCCESS
),"generate_payload call check");
718 tester
->assert_true(tester
,(generator
->write_to_chunk(generator
,&generated_data
) == SUCCESS
),"write_to_chunk call check");
719 logger
->log_chunk(logger
,RAW
,"generated payload",&generated_data
);
721 u_int8_t expected_generation
[] = {
728 /* notification data */
733 logger
->log_bytes(logger
,RAW
,"expected payload",expected_generation
,sizeof(expected_generation
));
735 tester
->assert_true(tester
,(memcmp(expected_generation
,generated_data
.ptr
,sizeof(expected_generation
)) == 0), "compare generated data");
737 allocator_free_chunk(&generated_data
);
739 tester
->assert_true(tester
,(notify_payload
->destroy(notify_payload
) == SUCCESS
), "notify_payload destroy call check");
740 tester
->assert_true(tester
,(generator
->destroy(generator
) == SUCCESS
), "generator destroy call check");
742 global_logger_manager
->destroy_logger(global_logger_manager
,logger
);
747 * Described in header
749 void test_generator_with_nonce_payload(tester_t
*tester
)
751 generator_t
*generator
;
752 nonce_payload_t
*nonce_payload
;
755 chunk_t generated_data
;
758 logger
= global_logger_manager
->create_logger(global_logger_manager
,TESTER
,"Message with Nonce Payload");
760 /* create generator */
761 generator
= generator_create();
762 tester
->assert_true(tester
,(generator
!= NULL
), "generator create check");
764 nonce_payload
= nonce_payload_create();
767 nonce
.ptr
= "1234567890123456";
768 nonce
.len
= strlen("1234567890123456");
770 nonce_payload
->set_nonce(nonce_payload
,nonce
);
772 status
= generator
->generate_payload(generator
,(payload_t
*)nonce_payload
);
773 tester
->assert_true(tester
,(status
== SUCCESS
),"generate_payload call check");
774 tester
->assert_true(tester
,(generator
->write_to_chunk(generator
,&generated_data
) == SUCCESS
),"write_to_chunk call check");
775 logger
->log_chunk(logger
,RAW
,"generated payload",&generated_data
);
778 u_int8_t expected_generation
[] = {
788 logger
->log_bytes(logger
,RAW
,"expected payload",expected_generation
,sizeof(expected_generation
));
790 tester
->assert_true(tester
,(memcmp(expected_generation
,generated_data
.ptr
,sizeof(expected_generation
)) == 0), "compare generated data");
792 allocator_free_chunk(&generated_data
);
795 tester
->assert_true(tester
,(nonce_payload
->destroy(nonce_payload
) == SUCCESS
), "notify_payload destroy call check");
796 tester
->assert_true(tester
,(generator
->destroy(generator
) == SUCCESS
), "generator destroy call check");
798 global_logger_manager
->destroy_logger(global_logger_manager
,logger
);