1
1
/*
2
2
* pkd_hello.c --
3
3
*
4
- * (c) 2014 Jon Simons
4
+ * (c) 2014, 2017 Jon Simons <[email protected] >
5
5
*/
6
6
7
7
#include <setjmp.h> // for cmocka
@@ -25,9 +25,9 @@ static struct pkd_daemon_args pkd_dargs;
25
25
#include <argp.h>
26
26
#define PROGNAME "pkd_hello"
27
27
#define ARGP_PROGNAME "libssh " PROGNAME
28
- const char * argp_program_version = ARGP_PROGNAME " 2014-04 -12" ;
28
+ const char * argp_program_version = ARGP_PROGNAME " 2017-07 -12" ;
29
29
const char * argp_program_bug_address = "Jon Simons <[email protected] >" ;
30
- //static char **cmdline;
30
+
31
31
static char doc [] = \
32
32
"\nExample usage:\n\n"
33
33
" " PROGNAME "\n"
@@ -36,6 +36,8 @@ static char doc[] = \
36
36
" List available individual test names.\n"
37
37
" " PROGNAME " -i 1000 -t torture_pkd_rsa_ecdh_sha2_nistp256\n"
38
38
" Run only the torture_pkd_rsa_ecdh_sha2_nistp256 testcase 1000 times.\n"
39
+ " " PROGNAME " -i 1000 -m curve25519\n"
40
+ " Run all tests with the string 'curve25519' 1000 times.\n"
39
41
" " PROGNAME " -v -v -v -v -e -o\n"
40
42
" Run all tests with maximum libssh and pkd logging.\n"
41
43
;
@@ -47,6 +49,8 @@ static struct argp_option options[] = {
47
49
"List available individual test names" , 0 },
48
50
{ "iterations" , 'i' , "number" , 0 ,
49
51
"Run each test for the given number of iterations (default is 10)" , 0 },
52
+ { "match" , 'm' , "testmatch" , 0 ,
53
+ "Run all tests with the given string" , 0 },
50
54
{ "stdout" , 'o' , NULL , 0 ,
51
55
"Emit pkd stdout messages" , 0 },
52
56
{ "test" , 't' , "testname" , 0 ,
@@ -71,6 +75,9 @@ static error_t parse_opt(int key, char *arg, struct argp_state *state) {
71
75
case 'i' :
72
76
pkd_dargs .opts .iterations = atoi (arg );
73
77
break ;
78
+ case 'm' :
79
+ pkd_dargs .opts .testmatch = arg ;
80
+ break ;
74
81
case 'o' :
75
82
pkd_dargs .opts .log_stdout = 1 ;
76
83
break ;
@@ -235,7 +242,7 @@ static int torture_pkd_setup_ecdsa_521(void **state) {
235
242
f(client, ecdsa_521_aes256_ctr, ciphercmd("aes256-ctr"), setup_ecdsa_521, teardown) \
236
243
f(client, ecdsa_521_blowfish_cbc, ciphercmd("blowfish-cbc"), setup_ecdsa_521, teardown)
237
244
238
- #define PKDTESTS_CIPHER_AES192 (f , client , ciphercmd ) \
245
+ #define PKDTESTS_CIPHER_OPENSSHONLY (f , client , ciphercmd ) \
239
246
/* Ciphers. */ \
240
247
f(client, rsa_aes192_cbc, ciphercmd("aes192-cbc"), setup_rsa, teardown) \
241
248
f(client, rsa_aes192_ctr, ciphercmd("aes192-ctr"), setup_rsa, teardown) \
@@ -315,23 +322,23 @@ static void torture_pkd_runtest(const char *testname,
315
322
PKDTESTS_DEFAULT (emit_keytest , openssh_dsa , OPENSSH_CMD )
316
323
PKDTESTS_KEX (emit_keytest , openssh_dsa , OPENSSH_KEX_CMD )
317
324
PKDTESTS_CIPHER (emit_keytest , openssh_dsa , OPENSSH_CIPHER_CMD )
318
- PKDTESTS_CIPHER_AES192 (emit_keytest , openssh_dsa , OPENSSH_CIPHER_CMD )
325
+ PKDTESTS_CIPHER_OPENSSHONLY (emit_keytest , openssh_dsa , OPENSSH_CIPHER_CMD )
319
326
PKDTESTS_MAC (emit_keytest , openssh_dsa , OPENSSH_MAC_CMD )
320
327
#undef CLIENT_ID_FILE
321
328
322
329
#define CLIENT_ID_FILE OPENSSH_RSA_TESTKEY
323
330
PKDTESTS_DEFAULT (emit_keytest , openssh_rsa , OPENSSH_CMD )
324
331
PKDTESTS_KEX (emit_keytest , openssh_rsa , OPENSSH_KEX_CMD )
325
332
PKDTESTS_CIPHER (emit_keytest , openssh_rsa , OPENSSH_CIPHER_CMD )
326
- PKDTESTS_CIPHER_AES192 (emit_keytest , openssh_rsa , OPENSSH_CIPHER_CMD )
333
+ PKDTESTS_CIPHER_OPENSSHONLY (emit_keytest , openssh_rsa , OPENSSH_CIPHER_CMD )
327
334
PKDTESTS_MAC (emit_keytest , openssh_rsa , OPENSSH_MAC_CMD )
328
335
#undef CLIENT_ID_FILE
329
336
330
337
#define CLIENT_ID_FILE OPENSSH_ECDSA256_TESTKEY
331
338
PKDTESTS_DEFAULT (emit_keytest , openssh_e256 , OPENSSH_CMD )
332
339
PKDTESTS_KEX (emit_keytest , openssh_e256 , OPENSSH_KEX_CMD )
333
340
PKDTESTS_CIPHER (emit_keytest , openssh_e256 , OPENSSH_CIPHER_CMD )
334
- PKDTESTS_CIPHER_AES192 (emit_keytest , openssh_e256 , OPENSSH_CIPHER_CMD )
341
+ PKDTESTS_CIPHER_OPENSSHONLY (emit_keytest , openssh_e256 , OPENSSH_CIPHER_CMD )
335
342
PKDTESTS_MAC (emit_keytest , openssh_e256 , OPENSSH_MAC_CMD )
336
343
#undef CLIENT_ID_FILE
337
344
@@ -343,7 +350,7 @@ PKDTESTS_MAC(emit_keytest, openssh_e256, OPENSSH_MAC_CMD)
343
350
PKDTESTS_DEFAULT (emit_keytest , openssh_ed , OPENSSH_CMD )
344
351
PKDTESTS_KEX (emit_keytest , openssh_ed , OPENSSH_KEX_CMD )
345
352
PKDTESTS_CIPHER (emit_keytest , openssh_ed , OPENSSH_CIPHER_CMD )
346
- PKDTESTS_CIPHER_AES192 (emit_keytest , openssh_ed , OPENSSH_CIPHER_CMD )
353
+ PKDTESTS_CIPHER_OPENSSHONLY (emit_keytest , openssh_ed , OPENSSH_CIPHER_CMD )
347
354
PKDTESTS_MAC (emit_keytest , openssh_ed , OPENSSH_MAC_CMD )
348
355
#undef CLIENT_ID_FILE
349
356
@@ -361,7 +368,7 @@ PKDTESTS_MAC(emit_keytest, dropbear, DROPBEAR_MAC_CMD)
361
368
362
369
#define emit_testmap (client , testname , sshcmd , setup , teardown ) \
363
370
{ "torture_pkd_" #client "_" #testname, \
364
- { emit_unit_test(client, testname, sshcmd, setup, teardown) } },
371
+ emit_unit_test(client, testname, sshcmd, setup, teardown) },
365
372
366
373
#define emit_unit_test (client , testname , sshcmd , setup , teardown ) \
367
374
cmocka_unit_test_setup_teardown(torture_pkd_ ## client ## _ ## testname, \
@@ -373,31 +380,31 @@ PKDTESTS_MAC(emit_keytest, dropbear, DROPBEAR_MAC_CMD)
373
380
374
381
struct {
375
382
const char * testname ;
376
- const struct CMUnitTest test [ 3 ]; /* requires setup + test + teardown */
383
+ const struct CMUnitTest test ;
377
384
} testmap [] = {
378
385
/* OpenSSH */
379
386
PKDTESTS_DEFAULT (emit_testmap , openssh_dsa , OPENSSH_CMD )
380
387
PKDTESTS_KEX (emit_testmap , openssh_dsa , OPENSSH_KEX_CMD )
381
388
PKDTESTS_CIPHER (emit_testmap , openssh_dsa , OPENSSH_CIPHER_CMD )
382
- PKDTESTS_CIPHER_AES192 (emit_testmap , openssh_dsa , OPENSSH_CIPHER_CMD )
389
+ PKDTESTS_CIPHER_OPENSSHONLY (emit_testmap , openssh_dsa , OPENSSH_CIPHER_CMD )
383
390
PKDTESTS_MAC (emit_testmap , openssh_dsa , OPENSSH_MAC_CMD )
384
391
385
392
PKDTESTS_DEFAULT (emit_testmap , openssh_rsa , OPENSSH_CMD )
386
393
PKDTESTS_KEX (emit_testmap , openssh_rsa , OPENSSH_KEX_CMD )
387
394
PKDTESTS_CIPHER (emit_testmap , openssh_rsa , OPENSSH_CIPHER_CMD )
388
- PKDTESTS_CIPHER_AES192 (emit_testmap , openssh_rsa , OPENSSH_CIPHER_CMD )
395
+ PKDTESTS_CIPHER_OPENSSHONLY (emit_testmap , openssh_rsa , OPENSSH_CIPHER_CMD )
389
396
PKDTESTS_MAC (emit_testmap , openssh_rsa , OPENSSH_MAC_CMD )
390
397
391
398
PKDTESTS_DEFAULT (emit_testmap , openssh_e256 , OPENSSH_CMD )
392
399
PKDTESTS_KEX (emit_testmap , openssh_e256 , OPENSSH_KEX_CMD )
393
400
PKDTESTS_CIPHER (emit_testmap , openssh_e256 , OPENSSH_CIPHER_CMD )
394
- PKDTESTS_CIPHER_AES192 (emit_testmap , openssh_e256 , OPENSSH_CIPHER_CMD )
401
+ PKDTESTS_CIPHER_OPENSSHONLY (emit_testmap , openssh_e256 , OPENSSH_CIPHER_CMD )
395
402
PKDTESTS_MAC (emit_testmap , openssh_e256 , OPENSSH_MAC_CMD )
396
403
397
404
PKDTESTS_DEFAULT (emit_testmap , openssh_ed , OPENSSH_CMD )
398
405
PKDTESTS_KEX (emit_testmap , openssh_ed , OPENSSH_KEX_CMD )
399
406
PKDTESTS_CIPHER (emit_testmap , openssh_ed , OPENSSH_CIPHER_CMD )
400
- PKDTESTS_CIPHER_AES192 (emit_testmap , openssh_ed , OPENSSH_CIPHER_CMD )
407
+ PKDTESTS_CIPHER_OPENSSHONLY (emit_testmap , openssh_ed , OPENSSH_CIPHER_CMD )
401
408
PKDTESTS_MAC (emit_testmap , openssh_ed , OPENSSH_MAC_CMD )
402
409
403
410
/* Dropbear */
@@ -409,8 +416,11 @@ struct {
409
416
emit_testmap (client , noop , "" , setup_noop , teardown )
410
417
411
418
/* NULL tail entry */
412
- { .testname = NULL , {
413
- { .name = NULL , }, { .name = NULL }, { .name = NULL } } }
419
+ { .testname = NULL ,
420
+ .test = { .name = NULL ,
421
+ .test_func = NULL ,
422
+ .setup_func = NULL ,
423
+ .teardown_func = NULL } }
414
424
};
415
425
416
426
static int pkd_run_tests (void ) {
@@ -421,25 +431,25 @@ static int pkd_run_tests(void) {
421
431
PKDTESTS_DEFAULT (emit_unit_test_comma , openssh_dsa , OPENSSH_CMD )
422
432
PKDTESTS_KEX (emit_unit_test_comma , openssh_dsa , OPENSSH_KEX_CMD )
423
433
PKDTESTS_CIPHER (emit_unit_test_comma , openssh_dsa , OPENSSH_CIPHER_CMD )
424
- PKDTESTS_CIPHER_AES192 (emit_unit_test_comma , openssh_dsa , OPENSSH_CIPHER_CMD )
434
+ PKDTESTS_CIPHER_OPENSSHONLY (emit_unit_test_comma , openssh_dsa , OPENSSH_CIPHER_CMD )
425
435
PKDTESTS_MAC (emit_unit_test_comma , openssh_dsa , OPENSSH_MAC_CMD )
426
436
427
437
PKDTESTS_DEFAULT (emit_unit_test_comma , openssh_rsa , OPENSSH_CMD )
428
438
PKDTESTS_KEX (emit_unit_test_comma , openssh_rsa , OPENSSH_KEX_CMD )
429
439
PKDTESTS_CIPHER (emit_unit_test_comma , openssh_rsa , OPENSSH_CIPHER_CMD )
430
- PKDTESTS_CIPHER_AES192 (emit_unit_test_comma , openssh_rsa , OPENSSH_CIPHER_CMD )
440
+ PKDTESTS_CIPHER_OPENSSHONLY (emit_unit_test_comma , openssh_rsa , OPENSSH_CIPHER_CMD )
431
441
PKDTESTS_MAC (emit_unit_test_comma , openssh_rsa , OPENSSH_MAC_CMD )
432
442
433
443
PKDTESTS_DEFAULT (emit_unit_test_comma , openssh_e256 , OPENSSH_CMD )
434
444
PKDTESTS_KEX (emit_unit_test_comma , openssh_e256 , OPENSSH_KEX_CMD )
435
445
PKDTESTS_CIPHER (emit_unit_test_comma , openssh_e256 , OPENSSH_CIPHER_CMD )
436
- PKDTESTS_CIPHER_AES192 (emit_unit_test_comma , openssh_e256 , OPENSSH_CIPHER_CMD )
446
+ PKDTESTS_CIPHER_OPENSSHONLY (emit_unit_test_comma , openssh_e256 , OPENSSH_CIPHER_CMD )
437
447
PKDTESTS_MAC (emit_unit_test_comma , openssh_e256 , OPENSSH_MAC_CMD )
438
448
439
449
PKDTESTS_DEFAULT (emit_unit_test_comma , openssh_ed , OPENSSH_CMD )
440
450
PKDTESTS_KEX (emit_unit_test_comma , openssh_ed , OPENSSH_KEX_CMD )
441
451
PKDTESTS_CIPHER (emit_unit_test_comma , openssh_ed , OPENSSH_CIPHER_CMD )
442
- PKDTESTS_CIPHER_AES192 (emit_unit_test_comma , openssh_ed , OPENSSH_CIPHER_CMD )
452
+ PKDTESTS_CIPHER_OPENSSHONLY (emit_unit_test_comma , openssh_ed , OPENSSH_CIPHER_CMD )
443
453
PKDTESTS_MAC (emit_unit_test_comma , openssh_ed , OPENSSH_MAC_CMD )
444
454
};
445
455
@@ -455,8 +465,8 @@ static int pkd_run_tests(void) {
455
465
456
466
/* Test list is populated depending on which clients are enabled. */
457
467
struct CMUnitTest all_tests [(sizeof (openssh_tests ) / sizeof (openssh_tests [0 ])) +
458
- (sizeof (dropbear_tests ) / sizeof (dropbear_tests [0 ])) +
459
- (sizeof (noop_tests ) / sizeof (noop_tests [0 ]))];
468
+ (sizeof (dropbear_tests ) / sizeof (dropbear_tests [0 ])) +
469
+ (sizeof (noop_tests ) / sizeof (noop_tests [0 ]))];
460
470
memset (& all_tests [0 ], 0x0 , sizeof (all_tests ));
461
471
462
472
/* Generate client keys and populate test list for each enabled client. */
@@ -475,23 +485,41 @@ static int pkd_run_tests(void) {
475
485
memcpy (& all_tests [tindex ], & noop_tests [0 ], sizeof (noop_tests ));
476
486
tindex += (sizeof (noop_tests ) / sizeof (noop_tests [0 ]));
477
487
478
- if (pkd_dargs .opts .testname == NULL ) {
488
+ if ((pkd_dargs .opts .testname == NULL ) &&
489
+ (pkd_dargs .opts .testmatch == NULL )) {
479
490
rc = _cmocka_run_group_tests ("all tests" , all_tests , tindex , NULL , NULL );
480
491
} else {
481
492
int i = 0 ;
482
- const struct CMUnitTest * found = NULL ;
493
+ int num_found = 0 ;
483
494
const char * testname = pkd_dargs .opts .testname ;
495
+ const char * testmatch = pkd_dargs .opts .testmatch ;
496
+
497
+ struct CMUnitTest matching_tests [sizeof (all_tests )];
498
+ memset (& matching_tests [0 ], 0x0 , sizeof (matching_tests ));
484
499
485
500
while (testmap [i ].testname != NULL ) {
486
- if (strcmp (testmap [i ].testname , testname ) == 0 ) {
487
- found = & testmap [i ].test [0 ];
501
+ if ((testname != NULL ) &&
502
+ (strcmp (testmap [i ].testname , testname ) == 0 )) {
503
+ memcpy (& matching_tests [0 ],
504
+ & testmap [i ].test ,
505
+ sizeof (struct CMUnitTest ));
506
+ num_found += 1 ;
488
507
break ;
489
508
}
509
+
510
+ if ((testmatch != NULL ) &&
511
+ (strstr (testmap [i ].testname , testmatch ) != NULL )) {
512
+ memcpy (& matching_tests [num_found ],
513
+ & testmap [i ].test ,
514
+ sizeof (struct CMUnitTest ));
515
+ num_found += 1 ;
516
+ }
517
+
490
518
i += 1 ;
491
519
}
492
520
493
- if (found != NULL ) {
494
- rc = _cmocka_run_group_tests ("found" , found , 3 , NULL , NULL );
521
+ if (num_found > 0 ) {
522
+ rc = _cmocka_run_group_tests ("found" , matching_tests , num_found , NULL , NULL );
495
523
} else {
496
524
fprintf (stderr , "Did not find test '%s'\n" , testname );
497
525
}
0 commit comments