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,60 +10,81 @@ require TestDriver; | ||
| 10 | 10 | ||
| 11 | my $td = new TestDriver('AES'); | 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 | $td->runtest("check output", | 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 | $td->runtest("check output", | 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 | sub cleanup | 89 | sub cleanup |
| 69 | { | 90 | { |
libtests/qtest/md5.test
| @@ -9,10 +9,30 @@ require TestDriver; | @@ -9,10 +9,30 @@ require TestDriver; | ||
| 9 | 9 | ||
| 10 | my $td = new TestDriver('md5'); | 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,40 +9,60 @@ require TestDriver; | ||
| 9 | 9 | ||
| 10 | my $td = new TestDriver('RC4'); | 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 | my @tests = ('0123456789abcdef', | 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 | sub cleanup | 67 | sub cleanup |
| 48 | { | 68 | { |
libtests/qtest/sha2.test
| @@ -9,10 +9,30 @@ require TestDriver; | @@ -9,10 +9,30 @@ require TestDriver; | ||
| 9 | 9 | ||
| 10 | my $td = new TestDriver('sha2'); | 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,7 +53,8 @@ define run_qtest | ||
| 53 | @echo running qtest-driver for $(1) | 53 | @echo running qtest-driver for $(1) |
| 54 | @(cd $(1)/$(OUTPUT_DIR); \ | 54 | @(cd $(1)/$(OUTPUT_DIR); \ |
| 55 | if TC_SRCS="$(foreach T,$(TC_SRCS_$(1)),../../$(T))" \ | 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 | -junit-suffix `basename $(1)`; then \ | 58 | -junit-suffix `basename $(1)`; then \ |
| 58 | true; \ | 59 | true; \ |
| 59 | else \ | 60 | else \ |