openssl/test/recipes/00-check_testalltests.t
Richard Levitte aec27d4d52 Groundwork for a perl based testing framework
The idea with this perl based testing framework is to make use of
what's delivered with perl and exists on all sorts of platforms.

The choice came to using Test::More and Test::Harness, as that seems
to be the most widely spread foundation, even if perl is aged.

The main runner of the show is run_tests.pl.  As it currently stands,
it's designed to run from inside Makefile, but it's absolutely
possible to run it from the command line as well, like so:

	cd test
	OPENSSL_SRCDIR=.. perl run_tests.pl

The tester scripts themselves are stored in the subdirectory recipes/,
and initially, we have two such scripts, recipes/00-check_testalltests.t
and recipes/00-check_testexes.t.  recipes/00-check_testalltests.t will
pick out the dependencies of "alltests" in test/Makefile, and check if
it can find recipes with corresponding names.  recipes/00-check_testexes.t
does something similar, but bases it on existing compiled test binaries.
They make it easy to figure out what's to be added, and will be
removed when this effort is finished.

Individual recipes can be run as well, of course, as they are perl
scripts in themselves.  For example, you can run only
recipes/00-check_testexes.t like so:

	cd test
	OPENSSL_SRCDIR=.. perl recipes/00-check_testexes.t

To make coding easier, there's a routine library OpenSSL::Test, which
is reachable in a perl script like so:

	use lib 'testlib';
	use OpenSSL::Test;

Reviewed-by: Rich Salz <rsalz@openssl.org>
2015-09-07 16:10:57 +02:00

64 lines
1.3 KiB
Perl

#! /usr/bin/perl
use strict;
use File::Spec::Functions;
use Test::More;
use lib 'testlib';
use OpenSSL::Test;
setup("check_testalltests");
my $Makefile = top_file("test","Makefile");
plan tests => 2;
if (ok(open(FH,$Makefile), "test/Makefile exists")) {
subtest 'Finding test scripts for the alltests target' => sub {
find_tests(\*FH); close FH;
};
} else {
diag("Expected to find $Makefile");
}
#-------------
# test script finder
sub find_tests {
my $fh = shift;
my $line;
while(<$fh>) {
chomp;
$line = $_;
last if /^alltests:/;
}
while(<$fh>) {
chomp;
my $l = $_;
$line =~ s/\\\s*$/$l/;
last if $line !~ /\\\s*$/;
}
close $fh;
$line =~ s/^alltests:\s*//;
# It's part of the test_ssl recipe
$line =~ s/\s+test_ss\s+/ /;
# It's split into sha1, sha256 and sha512
$line =~ s/\s+test_sha\s+/ test_sha1 test_sha256 test_sha512 /;
my %foundfiles =
map {
s/^test_//;
$_ => top_file("test",
"recipes/[0-9][0-9]-test_$_.t"); } split(/\s+/,
$line);
plan tests => scalar (keys %foundfiles);
foreach (sort keys %foundfiles) {
my @check = glob($foundfiles{$_});
ok(scalar @check, "check that a test for $_ exists")
|| diag("Expected to find something matching $foundfiles{$_}");
}
}