Commit 1639d972ea0b30711b9a762fe4475cdb2b229be1

Authored by Jay Berkenbilt
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.
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 \