Commit 1639d972ea0b30711b9a762fe4475cdb2b229be1
1 parent
127a957a
Run libtests for crypto with all available providers
If QPDF_CRYPTO_PROVIDER is set, just run the tests for the given provider. This is to support cases of running the entire test suite for each provider. If QPDF_CRYPTO_PROVIDER is not set, run the tests that exercise the cyrpto provider for each available provider.
Showing
5 changed files
with
170 additions
and
88 deletions
libtests/qtest/aes.test
| ... | ... | @@ -10,60 +10,81 @@ require TestDriver; |
| 10 | 10 | |
| 11 | 11 | my $td = new TestDriver('AES'); |
| 12 | 12 | |
| 13 | -cleanup(); | |
| 14 | - | |
| 15 | -my $key = '000102030405060708090a0b0c0d0e0f'; | |
| 16 | -$td->runtest("encrypt test vector", | |
| 17 | - {$td->COMMAND => "aes -cbc -encrypt $key test-vector.clear tmp1"}, | |
| 18 | - {$td->STRING => "", $td->EXIT_STATUS => 0}); | |
| 19 | -$td->runtest("check output", | |
| 20 | - {$td->FILE => "tmp1"}, | |
| 21 | - {$td->FILE => "test-vector.cipher"}); | |
| 22 | -$td->runtest("decrypt test vector", | |
| 23 | - {$td->COMMAND => "aes -cbc -decrypt $key tmp1 tmp2"}, | |
| 24 | - {$td->STRING => "", $td->EXIT_STATUS => 0}); | |
| 25 | -$td->runtest("check output", | |
| 26 | - {$td->FILE => "tmp2"}, | |
| 27 | - {$td->FILE => "test-vector.clear"}); | |
| 28 | - | |
| 29 | -$key = '243f6a8885243f6a8885243f6a888524'; | |
| 30 | -foreach my $d (['data1', 17072], ['data2', 16032]) | |
| 13 | +my @providers = (); | |
| 14 | +if (exists $ENV{'QPDF_CRYPTO_PROVIDER'}) | |
| 15 | +{ | |
| 16 | + push(@providers, $ENV{'QPDF_CRYPTO_PROVIDER'}); | |
| 17 | +} | |
| 18 | +else | |
| 31 | 19 | { |
| 32 | - my ($file, $size) = @$d; | |
| 33 | - $td->runtest("encrypt $file", | |
| 34 | - {$td->COMMAND => "aes +cbc -encrypt $key $file tmp1"}, | |
| 35 | - {$td->STRING => "", $td->EXIT_STATUS => 0}); | |
| 36 | - # sleep one second so random number will get a different seed | |
| 37 | - sleep(1); | |
| 38 | - $td->runtest("encrypt $file again", | |
| 39 | - {$td->COMMAND => "aes +cbc -encrypt $key $file tmp2"}, | |
| 40 | - {$td->STRING => "", $td->EXIT_STATUS => 0}); | |
| 41 | - foreach my $f (qw(tmp1 tmp2)) | |
| 20 | + open(Q, "qpdf --show-crypto|") or die; | |
| 21 | + while (<Q>) | |
| 42 | 22 | { |
| 43 | - $td->runtest("check size", | |
| 44 | - {$td->STRING => sprintf("%d\n", stat($f)->size)}, | |
| 45 | - {$td->STRING => "$size\n"}); | |
| 23 | + s/\s+$//s; | |
| 24 | + push(@providers, $_); | |
| 46 | 25 | } |
| 47 | - $td->runtest("verify files are different", | |
| 48 | - {$td->COMMAND => "cmp tmp1 tmp2"}, | |
| 49 | - {$td->REGEXP => '.*', $td->EXIT_STATUS => '!0'}); | |
| 50 | - $td->runtest("decrypt $file", | |
| 51 | - {$td->COMMAND => "aes +cbc -decrypt $key tmp1 tmp3"}, | |
| 52 | - {$td->STRING => "", $td->EXIT_STATUS => 0}); | |
| 53 | - $td->runtest("decrypt $file again", | |
| 54 | - {$td->COMMAND => "aes +cbc -decrypt $key tmp2 tmp4"}, | |
| 55 | - {$td->STRING => "", $td->EXIT_STATUS => 0}); | |
| 26 | + close(Q); | |
| 27 | +} | |
| 28 | +foreach my $p (@providers) | |
| 29 | +{ | |
| 30 | + $ENV{'QPDF_CRYPTO_PROVIDER'} = $p; | |
| 31 | + | |
| 32 | + cleanup(); | |
| 33 | + | |
| 34 | + my $key = '000102030405060708090a0b0c0d0e0f'; | |
| 35 | + $td->runtest("encrypt test vector ($p)", | |
| 36 | + {$td->COMMAND => | |
| 37 | + "aes -cbc -encrypt $key test-vector.clear tmp1"}, | |
| 38 | + {$td->STRING => "", $td->EXIT_STATUS => 0}); | |
| 56 | 39 | $td->runtest("check output", |
| 57 | - {$td->FILE => "tmp3"}, | |
| 58 | - {$td->FILE => $file}); | |
| 40 | + {$td->FILE => "tmp1"}, | |
| 41 | + {$td->FILE => "test-vector.cipher"}); | |
| 42 | + $td->runtest("decrypt test vector ($p)", | |
| 43 | + {$td->COMMAND => "aes -cbc -decrypt $key tmp1 tmp2"}, | |
| 44 | + {$td->STRING => "", $td->EXIT_STATUS => 0}); | |
| 59 | 45 | $td->runtest("check output", |
| 60 | - {$td->FILE => "tmp4"}, | |
| 61 | - {$td->FILE => $file}); | |
| 62 | -} | |
| 46 | + {$td->FILE => "tmp2"}, | |
| 47 | + {$td->FILE => "test-vector.clear"}); | |
| 48 | + | |
| 49 | + $key = '243f6a8885243f6a8885243f6a888524'; | |
| 50 | + foreach my $d (['data1', 17072], ['data2', 16032]) | |
| 51 | + { | |
| 52 | + my ($file, $size) = @$d; | |
| 53 | + $td->runtest("encrypt $file ($p)", | |
| 54 | + {$td->COMMAND => "aes +cbc -encrypt $key $file tmp1"}, | |
| 55 | + {$td->STRING => "", $td->EXIT_STATUS => 0}); | |
| 56 | + # sleep one second so random number will get a different seed | |
| 57 | + sleep(1); | |
| 58 | + $td->runtest("encrypt $file again ($p)", | |
| 59 | + {$td->COMMAND => "aes +cbc -encrypt $key $file tmp2"}, | |
| 60 | + {$td->STRING => "", $td->EXIT_STATUS => 0}); | |
| 61 | + foreach my $f (qw(tmp1 tmp2)) | |
| 62 | + { | |
| 63 | + $td->runtest("check size", | |
| 64 | + {$td->STRING => sprintf("%d\n", stat($f)->size)}, | |
| 65 | + {$td->STRING => "$size\n"}); | |
| 66 | + } | |
| 67 | + $td->runtest("verify files are different", | |
| 68 | + {$td->COMMAND => "cmp tmp1 tmp2"}, | |
| 69 | + {$td->REGEXP => '.*', $td->EXIT_STATUS => '!0'}); | |
| 70 | + $td->runtest("decrypt $file ($p)", | |
| 71 | + {$td->COMMAND => "aes +cbc -decrypt $key tmp1 tmp3"}, | |
| 72 | + {$td->STRING => "", $td->EXIT_STATUS => 0}); | |
| 73 | + $td->runtest("decrypt $file again ($p)", | |
| 74 | + {$td->COMMAND => "aes +cbc -decrypt $key tmp2 tmp4"}, | |
| 75 | + {$td->STRING => "", $td->EXIT_STATUS => 0}); | |
| 76 | + $td->runtest("check output", | |
| 77 | + {$td->FILE => "tmp3"}, | |
| 78 | + {$td->FILE => $file}); | |
| 79 | + $td->runtest("check output", | |
| 80 | + {$td->FILE => "tmp4"}, | |
| 81 | + {$td->FILE => $file}); | |
| 82 | + } | |
| 63 | 83 | |
| 64 | -cleanup(); | |
| 84 | + cleanup(); | |
| 85 | +} | |
| 65 | 86 | |
| 66 | -$td->report(22); | |
| 87 | +$td->report(22 * scalar(@providers)); | |
| 67 | 88 | |
| 68 | 89 | sub cleanup |
| 69 | 90 | { | ... | ... |
libtests/qtest/md5.test
| ... | ... | @@ -9,10 +9,30 @@ require TestDriver; |
| 9 | 9 | |
| 10 | 10 | my $td = new TestDriver('md5'); |
| 11 | 11 | |
| 12 | -$td->runtest("md5", | |
| 13 | - {$td->COMMAND => "md5"}, | |
| 14 | - {$td->FILE => "md5.out", | |
| 15 | - $td->EXIT_STATUS => 0}, | |
| 16 | - $td->NORMALIZE_NEWLINES); | |
| 12 | +my @providers = (); | |
| 13 | +if (exists $ENV{'QPDF_CRYPTO_PROVIDER'}) | |
| 14 | +{ | |
| 15 | + push(@providers, $ENV{'QPDF_CRYPTO_PROVIDER'}); | |
| 16 | +} | |
| 17 | +else | |
| 18 | +{ | |
| 19 | + open(Q, "qpdf --show-crypto|") or die; | |
| 20 | + while (<Q>) | |
| 21 | + { | |
| 22 | + s/\s+$//s; | |
| 23 | + push(@providers, $_); | |
| 24 | + } | |
| 25 | + close(Q); | |
| 26 | +} | |
| 27 | +foreach my $p (@providers) | |
| 28 | +{ | |
| 29 | + $ENV{'QPDF_CRYPTO_PROVIDER'} = $p; | |
| 17 | 30 | |
| 18 | -$td->report(1); | |
| 31 | + $td->runtest("md5 ($p)", | |
| 32 | + {$td->COMMAND => "md5"}, | |
| 33 | + {$td->FILE => "md5.out", | |
| 34 | + $td->EXIT_STATUS => 0}, | |
| 35 | + $td->NORMALIZE_NEWLINES); | |
| 36 | +} | |
| 37 | + | |
| 38 | +$td->report(scalar(@providers)); | ... | ... |
libtests/qtest/rc4.test
| ... | ... | @@ -9,40 +9,60 @@ require TestDriver; |
| 9 | 9 | |
| 10 | 10 | my $td = new TestDriver('RC4'); |
| 11 | 11 | |
| 12 | -cleanup(); | |
| 13 | - | |
| 12 | +my @providers = (); | |
| 13 | +if (exists $ENV{'QPDF_CRYPTO_PROVIDER'}) | |
| 14 | +{ | |
| 15 | + push(@providers, $ENV{'QPDF_CRYPTO_PROVIDER'}); | |
| 16 | +} | |
| 17 | +else | |
| 18 | +{ | |
| 19 | + open(Q, "qpdf --show-crypto|") or die; | |
| 20 | + while (<Q>) | |
| 21 | + { | |
| 22 | + s/\s+$//s; | |
| 23 | + push(@providers, $_); | |
| 24 | + } | |
| 25 | + close(Q); | |
| 26 | +} | |
| 14 | 27 | my @tests = ('0123456789abcdef', |
| 15 | - '0123456789abcdef', | |
| 16 | - '0000000000000000', | |
| 17 | - 'ef012345', | |
| 18 | - '0123456789abcdef'); | |
| 28 | + '0123456789abcdef', | |
| 29 | + '0000000000000000', | |
| 30 | + 'ef012345', | |
| 31 | + '0123456789abcdef'); | |
| 19 | 32 | |
| 20 | -my $n = 0; | |
| 21 | -foreach my $key (@tests) | |
| 33 | +foreach my $p (@providers) | |
| 22 | 34 | { |
| 23 | - ++$n; | |
| 24 | - $td->runtest("test $n", | |
| 25 | - {$td->COMMAND => "rc4 $key test$n.in tmp1-$n.out"}, | |
| 26 | - {$td->STRING => "", $td->EXIT_STATUS => 0}); | |
| 27 | - $td->runtest("check output", | |
| 28 | - {$td->FILE => "tmp1-$n.out"}, | |
| 29 | - {$td->FILE => "test$n.out"}); | |
| 30 | - $td->runtest("test $n reverse", | |
| 31 | - {$td->COMMAND => "rc4 $key test$n.out tmp2-$n.out"}, | |
| 32 | - {$td->STRING => "", $td->EXIT_STATUS => 0}); | |
| 33 | - $td->runtest("check output", | |
| 34 | - {$td->FILE => "tmp2-$n.out"}, | |
| 35 | - {$td->FILE => "test$n.in"}); | |
| 36 | -} | |
| 35 | + $ENV{'QPDF_CRYPTO_PROVIDER'} = $p; | |
| 36 | + | |
| 37 | + cleanup(); | |
| 37 | 38 | |
| 38 | -$td->runtest("other tests", | |
| 39 | - {$td->COMMAND => "rc4 other"}, | |
| 40 | - {$td->STRING => "passed\n", $td->EXIT_STATUS => 0}, | |
| 41 | - $td->NORMALIZE_NEWLINES); | |
| 39 | + my $n = 0; | |
| 40 | + foreach my $key (@tests) | |
| 41 | + { | |
| 42 | + ++$n; | |
| 43 | + $td->runtest("test $n ($p)", | |
| 44 | + {$td->COMMAND => "rc4 $key test$n.in tmp1-$n.out"}, | |
| 45 | + {$td->STRING => "", $td->EXIT_STATUS => 0}); | |
| 46 | + $td->runtest("check output", | |
| 47 | + {$td->FILE => "tmp1-$n.out"}, | |
| 48 | + {$td->FILE => "test$n.out"}); | |
| 49 | + $td->runtest("test $n reverse ($p)", | |
| 50 | + {$td->COMMAND => "rc4 $key test$n.out tmp2-$n.out"}, | |
| 51 | + {$td->STRING => "", $td->EXIT_STATUS => 0}); | |
| 52 | + $td->runtest("check output", | |
| 53 | + {$td->FILE => "tmp2-$n.out"}, | |
| 54 | + {$td->FILE => "test$n.in"}); | |
| 55 | + } | |
| 42 | 56 | |
| 43 | -cleanup(); | |
| 57 | + $td->runtest("other tests ($p)", | |
| 58 | + {$td->COMMAND => "rc4 other"}, | |
| 59 | + {$td->STRING => "passed\n", $td->EXIT_STATUS => 0}, | |
| 60 | + $td->NORMALIZE_NEWLINES); | |
| 61 | + | |
| 62 | + cleanup(); | |
| 63 | +} | |
| 44 | 64 | |
| 45 | -$td->report(1 + (4 * scalar(@tests))); | |
| 65 | +$td->report((1 + (4 * scalar(@tests))) * scalar(@providers)); | |
| 46 | 66 | |
| 47 | 67 | sub cleanup |
| 48 | 68 | { | ... | ... |
libtests/qtest/sha2.test
| ... | ... | @@ -9,10 +9,30 @@ require TestDriver; |
| 9 | 9 | |
| 10 | 10 | my $td = new TestDriver('sha2'); |
| 11 | 11 | |
| 12 | -$td->runtest("sha2", | |
| 13 | - {$td->COMMAND => "sha2"}, | |
| 14 | - {$td->FILE => "sha2.out", | |
| 15 | - $td->EXIT_STATUS => 0}, | |
| 16 | - $td->NORMALIZE_NEWLINES); | |
| 12 | +my @providers = (); | |
| 13 | +if (exists $ENV{'QPDF_CRYPTO_PROVIDER'}) | |
| 14 | +{ | |
| 15 | + push(@providers, $ENV{'QPDF_CRYPTO_PROVIDER'}); | |
| 16 | +} | |
| 17 | +else | |
| 18 | +{ | |
| 19 | + open(Q, "qpdf --show-crypto|") or die; | |
| 20 | + while (<Q>) | |
| 21 | + { | |
| 22 | + s/\s+$//s; | |
| 23 | + push(@providers, $_); | |
| 24 | + } | |
| 25 | + close(Q); | |
| 26 | +} | |
| 27 | +foreach my $p (@providers) | |
| 28 | +{ | |
| 29 | + $ENV{'QPDF_CRYPTO_PROVIDER'} = $p; | |
| 17 | 30 | |
| 18 | -$td->report(1); | |
| 31 | + $td->runtest("sha2 ($p)", | |
| 32 | + {$td->COMMAND => "sha2"}, | |
| 33 | + {$td->FILE => "sha2.out", | |
| 34 | + $td->EXIT_STATUS => 0}, | |
| 35 | + $td->NORMALIZE_NEWLINES); | |
| 36 | +} | |
| 37 | + | |
| 38 | +$td->report(scalar(@providers)); | ... | ... |
make/rules.mk
| ... | ... | @@ -53,7 +53,8 @@ define run_qtest |
| 53 | 53 | @echo running qtest-driver for $(1) |
| 54 | 54 | @(cd $(1)/$(OUTPUT_DIR); \ |
| 55 | 55 | if TC_SRCS="$(foreach T,$(TC_SRCS_$(1)),../../$(T))" \ |
| 56 | - $(QTEST) -bindirs .:.. -datadir ../qtest -covdir .. \ | |
| 56 | + $(QTEST) -bindirs .:..:../../qpdf/$(OUTPUT_DIR) \ | |
| 57 | + -datadir ../qtest -covdir .. \ | |
| 57 | 58 | -junit-suffix `basename $(1)`; then \ |
| 58 | 59 | true; \ |
| 59 | 60 | else \ | ... | ... |