summaryrefslogtreecommitdiffstats
path: root/util
diff options
context:
space:
mode:
authorRichard Levitte <levitte@openssl.org>2015-04-21 20:09:36 +0200
committerRichard Levitte <levitte@openssl.org>2015-09-07 16:10:58 +0200
commitfd9ad2300b280c0f71d24456bfbf04579331bc94 (patch)
tree37265c65bf6e1c19a28c977d0b60684f1750f36f /util
parent93de4f58ef8be2cb764343cb3102d41c81f11593 (diff)
Adapt mk1mf.pl and helpers to the new testing framework.
With the new testing framework, building a test target with mk1mf.pl becomes a very simple thing. And especially, no more need to do the amount of hackery in unix.pl we did. Also, some tests need a working apps/CA.pl as well as rehashed certs in certs/demo. So, move the code creating those files so it gets done regardless, not just in non-mk1mf environments. Reviewed-by: Rich Salz <rsalz@openssl.org>
Diffstat (limited to 'util')
-rwxr-xr-xutil/mk1mf.pl17
-rw-r--r--util/pl/BC-32.pl23
-rw-r--r--util/pl/VC-32.pl23
-rw-r--r--util/pl/unix.pl279
4 files changed, 71 insertions, 271 deletions
diff --git a/util/mk1mf.pl b/util/mk1mf.pl
index 6091a69519..9d8a47df4b 100755
--- a/util/mk1mf.pl
+++ b/util/mk1mf.pl
@@ -752,7 +752,9 @@ headers: \$(HEADER)
lib: \$(LIBS_DEP) \$(E_SHLIB)
-exe: \$(T_EXE) \$(BIN_D)$o\$(E_EXE)$exep
+exe: apps testapps
+apps: \$(BIN_D)$o\$(E_EXE)$exep
+testapps: \$(T_EXE)
install: all
\$(MKDIR) \"\$(INSTALLTOP)\"
@@ -777,15 +779,8 @@ reallyclean:
EOF
-if ($orig_platform ne 'copy')
- {
- $rules .= <<"EOF";
-test: \$(T_EXE)
- cd \$(BIN_D)
- ..${o}ms${o}test
-
-EOF
- }
+$rules .= &do_rehash_rule("rehash", "certs apps");
+$rules .= &do_test_rule("test", "rehash", "run_tests.pl");
my $platform_cpp_symbol = "MK1MF_PLATFORM_$platform";
$platform_cpp_symbol =~ s/-/_/g;
@@ -1004,8 +999,6 @@ if ($fips)
$rules.=&do_link_rule("\$(BIN_D)$o\$(E_EXE)$exep","\$(E_OBJ)","\$(LIBS_DEP)","\$(L_LIBS) \$(EX_LIBS)", ($fips && !$shlib) ? 2 : 0);
-$rules .= get_tests('test/Makefile') if $orig_platform eq 'copy';
-
print $defs;
if ($platform eq "linux-elf") {
diff --git a/util/pl/BC-32.pl b/util/pl/BC-32.pl
index fd5c4b63af..3b2b85469c 100644
--- a/util/pl/BC-32.pl
+++ b/util/pl/BC-32.pl
@@ -94,6 +94,29 @@ if ($shlib)
$tmp_def="tmp32dll";
}
+sub do_rehash_rule {
+ my ($target, $deps) = @_;
+ my $ret = <<"EOF";
+$target: $deps
+ set OPENSSL=\$(BIN_D)${o}openssl.exe
+ set OPENSSL_DEBUG_MEMORY=on
+ \$(PERL) tools/c_rehash certs/demo
+EOF
+ return $ret
+}
+sub do_test_rule {
+ my ($target, $deps, $test_cmd) = @_;
+ my $ret = <<"EOF";
+$target: $deps force.$target
+ set TOP=.
+ set BIN_D=\$(BIN_D)
+ set TEST_D=\$(TEST_D)
+ set PERL=\$(PERL)
+ \$(PERL) test\\$test_cmd
+force.$target:
+EOF
+}
+
sub do_lib_rule
{
local($objs,$target,$name,$shlib)=@_;
diff --git a/util/pl/VC-32.pl b/util/pl/VC-32.pl
index bf6aebf6c3..a2d35c6eea 100644
--- a/util/pl/VC-32.pl
+++ b/util/pl/VC-32.pl
@@ -300,6 +300,29 @@ elsif ($shlib && $FLAVOR =~ /CE/)
$lib_cflag.=" -D_DLL" if (!$fipscanisterbuild);
}
+sub do_rehash_rule {
+ my ($target, $deps) = @_;
+ my $ret = <<"EOF";
+$target: $deps
+ set OPENSSL=\$(BIN_D)${o}openssl.exe
+ set OPENSSL_DEBUG_MEMORY=on
+ \$(PERL) tools/c_rehash certs/demo
+EOF
+ return $ret
+}
+sub do_test_rule {
+ my ($target, $deps, $test_cmd) = @_;
+ my $ret = <<"EOF";
+$target: $deps force.$target
+ set TOP=.
+ set BIN_D=\$(BIN_D)
+ set TEST_D=\$(TEST_D)
+ set PERL=\$(PERL)
+ \$(PERL) test\\$test_cmd
+force.$target:
+EOF
+}
+
sub do_lib_rule
{
my($objs,$target,$name,$shlib,$ign,$base_addr) = @_;
diff --git a/util/pl/unix.pl b/util/pl/unix.pl
index 40bbe0d842..528d4d0e4f 100644
--- a/util/pl/unix.pl
+++ b/util/pl/unix.pl
@@ -186,267 +186,28 @@ sub which
}
}
-sub fixtests
- {
- my ($str, $tests) = @_;
-
- foreach my $t (keys %$tests)
- {
- $str =~ s/(\.\/)?\$\($t\)/\$(TEST_D)\/$tests->{$t}/g;
- }
-
- return $str;
- }
-
-sub fixdeps
- {
- my ($str, $fakes) = @_;
-
- my @t = split(/\s+/, $str);
- $str = '';
- foreach my $t (@t)
- {
- $str .= ' ' if $str ne '';
- if (exists($fakes->{$t}))
- {
- $str .= $fakes->{$t};
- next;
- }
- if ($t =~ /^[^\/]+$/)
- {
- $str .= '$(TEST_D)/' . $t;
- }
- else
- {
- $str .= $t;
- }
- }
-
- return $str;
- }
-
-sub fixrules
- {
- my ($str) = @_;
-
- # Compatible with -j...
-# $str =~ s/^(\s+@?)/$1cd \$(TEST_D) && /;
-# return $str;
-
- # Compatible with not -j.
- my @t = split("\n", $str);
- $str = '';
- my $prev;
- foreach my $t (@t)
- {
- $t =~ s/^\s+//;
- if (!$prev)
- {
- if ($t =~ /^@/)
- {
- $t =~ s/^@/\@cd \$(TEST_D) && /;
- }
- elsif ($t !~ /^\s*#/ && $t !~ /^echo/)
- {
- $t = 'cd $(TEST_D) && ' . $t;
- }
- }
- $str .= "\t$t\n";
- $prev = $t =~/\\$/;
- }
- return $str;
+sub do_rehash_rule {
+ my ($target, $deps) = @_;
+ my $ret = <<"EOF";
+$target: $deps
+ (OPENSSL="`pwd`/util/opensslwrap.sh"; \\
+ OPENSSL_DEBUG_MEMORY=on; \\
+ export OPENSSL OPENSSL_DEBUG_MEMORY; \\
+ \$(PERL) tools/c_rehash certs/demo)
+EOF
+ return $ret
}
+sub do_test_rule {
+ my ($target, $deps, $test_cmd) = @_;
+ my $ret = <<"EOF";
+$target: $deps force.$target
+ TOP=. BIN_D=\$(BIN_D) TEST_D=\$(TEST_D) \\
+ PERL=\$(PERL) \$(PERL) test/$test_cmd
+force.$target:
-sub copy_scripts
- {
- my ($sed, $src, @targets) = @_;
-
- my $s = '';
- foreach my $t (@targets)
- {
- # Copy first so we get file modes...
- $s .= "\$(TEST_D)/$t: \$(SRC_D)/$src/$t\n\tcp \$(SRC_D)/$src/$t \$(TEST_D)/$t\n";
- $s .= "\tsed -e 's/\\.\\.\\/apps/..\\/\$(OUT_D)/' -e 's/\\.\\.\\/util/..\\/\$(TEST_D)/' < \$(SRC_D)/$src/$t > \$(TEST_D)/$t\n" if $sed;
- $s .= "\n";
- }
- return $s;
- }
-
-sub get_tests
- {
- my ($makefile) = @_;
-
- open(M, $makefile) || die "Can't open $makefile: $!";
- my %targets;
- my %deps;
- my %tests;
- my %alltests;
- my %fakes;
- while (my $line = <M>)
- {
- chomp $line;
- while ($line =~ /^(.*)\\$/)
- {
- $line = $1 . <M>;
- }
-
- if ($line =~ /^alltests:(.*)$/)
- {
- my @t = split(/\s+/, $1);
- foreach my $t (@t)
- {
- $targets{$t} = '';
- $alltests{$t} = undef;
- }
- }
-
- if (($line =~ /^(?<t>\S+):(?<d>.*)$/ && exists $targets{$1})
- || $line =~ /^(?<t>test_(ss|gen) .*):(?<d>.*)/)
- {
- my $t = $+{t};
- my $d = $+{d};
- # If there are multiple targets stupid FreeBSD make runs the
- # rules once for each dependency that matches one of the
- # targets. Running the same rule twice concurrently causes
- # breakage, so replace with a fake target.
- if ($t =~ /\s/)
- {
- ++$fake;
- my @targets = split /\s+/, $t;
- $t = "_fake$fake";
- foreach my $f (@targets)
- {
- $fakes{$f} = $t;
- }
- }
- $deps{$t} = $d;
- $deps{$t} =~ s/#.*$//;
- for (;;)
- {
- $line = <M>;
- chomp $line;
- last if $line eq '';
- $targets{$t} .= "$line\n";
- }
- next;
- }
-
- if ($line =~ /^(\S+TEST)=\s*(\S+)$/)
- {
- $tests{$1} = $2;
- next;
- }
- }
-
- delete $alltests{test_jpake} if $no_jpake;
- delete $targets{test_ige} if $no_ige;
- delete $alltests{test_md2} if $no_md2;
- delete $alltests{test_rc5} if $no_rc5;
-
- my $tests;
- foreach my $t (keys %tests)
- {
- $tests .= "$t = $tests{$t}\n";
- }
-
- my $each;
- foreach my $t (keys %targets)
- {
- next if $t eq '';
-
- my $d = $deps{$t};
- $d =~ s/\.\.\/apps/\$(BIN_D)/g;
- $d =~ s/\.\.\/util/\$(TEST_D)/g;
- $d = fixtests($d, \%tests);
- $d = fixdeps($d, \%fakes);
-
- my $r = $targets{$t};
- $r =~ s/\.\.\/apps/..\/\$(BIN_D)/g;
- $r =~ s/\.\.\/util/..\/\$(TEST_D)/g;
- $r =~ s/\.\.\/(\S+)/\$(SRC_D)\/$1/g;
- $r = fixrules($r);
-
- next if $r eq '';
-
- $t =~ s/\s+/ \$(TEST_D)\//g;
-
- $each .= "$t: test_scripts $d\n\t\@echo '$t test started'\n$r\t\@echo '$t test done'\n\n";
- }
-
- # FIXME: Might be a clever way to figure out what needs copying
- my @copies = ( 'bctest',
- 'testgen',
- 'cms-test.pl',
- 'tx509',
- 'test.cnf',
- 'testenc',
- 'tocsp',
- 'testca',
- 'CAss.cnf',
- 'testtsa',
- 'CAtsa.cnf',
- 'Uss.cnf',
- 'P1ss.cnf',
- 'P2ss.cnf',
- 'tcrl',
- 'tsid',
- 'treq',
- 'tpkcs7',
- 'tpkcs7d',
- 'tkey',
- 'testcrl.pem',
- 'testx509.pem',
- 'v3-cert1.pem',
- 'v3-cert2.pem',
- 'testreq2.pem',
- 'testp7.pem',
- 'pkcs7-1.pem',
- 'trsa',
- 'testdsa.pem',
- 'testdsapub.pem',
- 'testec-p256.pem',
- 'testecpub-p256.pem',
- 'testrsa.pem',
- 'testrsapub.pem',
- 'testsid.pem',
- 'testss',
- 'testssl',
- 'testsslproxy',
- 'serverinfo.pem',
- );
- my $copies = copy_scripts(1, 'test', @copies);
- $copies .= copy_scripts(0, 'test', ('smcont.txt', 'evptests.txt'));
-
-
- my @utils = ( 'shlib_wrap.sh',
- 'opensslwrap.sh',
- );
- $copies .= copy_scripts(1, 'util', @utils);
-
- my @apps = ( 'CA.pl',
- 'openssl.cnf',
- 'server2.pem',
- );
- $copies .= copy_scripts(1, 'apps', @apps);
-
- $scripts = "test_scripts: \$(TEST_D)/CA.pl \$(TEST_D)/opensslwrap.sh \$(TEST_D)/openssl.cnf \$(TEST_D)/shlib_wrap.sh ocsp smime\n";
- $scripts .= "\nocsp:\n\tcp -R test/ocsp-tests \$(TEST_D)\n";
- $scripts .= "\smime:\n\tcp -R test/smime-certs \$(TEST_D)\n";
-
- my $all = 'test:';
- foreach my $t (keys %alltests)
- {
- if (exists($fakes{$t}))
- {
- $all .= " $fakes{$t}";
- }
- else
- {
- $all .= " $t";
- }
- }
+EOF
+ return $ret;
+}
- return "$scripts\n$copies\n$tests\n$all\n\n$each";
- }
1;