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 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 \
... ...