Improve vcregress.pl's handling of tap tests for client programs
The target is now named 'bincheck' rather than 'tapcheck' so that it reflects what is checked instead of the test mechanism. Some of the logic is improved, making it easier to add further sets of TAP based tests in future. Also, the environment setting logic is imrpoved. As discussed on -hackers a couple of months ago.
This commit is contained in:
parent
d5bb7c6f69
commit
b06a8e3cc2
@ -33,7 +33,7 @@ if (-e "src/tools/msvc/buildenv.pl")
|
||||
|
||||
my $what = shift || "";
|
||||
if ($what =~
|
||||
/^(check|installcheck|plcheck|contribcheck|ecpgcheck|isolationcheck|upgradecheck|tapcheck)$/i
|
||||
/^(check|installcheck|plcheck|contribcheck|ecpgcheck|isolationcheck|upgradecheck|bincheck)$/i
|
||||
)
|
||||
{
|
||||
$what = uc $what;
|
||||
@ -60,7 +60,14 @@ unless ($schedule)
|
||||
$schedule = "parallel" if ($what eq 'CHECK' || $what =~ /PARALLEL/);
|
||||
}
|
||||
|
||||
$ENV{PERL5LIB} = "$topdir/src/tools/msvc;$ENV{PERL5LIB}";
|
||||
if ($ENV{PERL5LIB})
|
||||
{
|
||||
$ENV{PERL5LIB} = "$topdir/src/tools/msvc;$ENV{PERL5LIB}";
|
||||
}
|
||||
else
|
||||
{
|
||||
$ENV{PERL5LIB} = "$topdir/src/tools/msvc";
|
||||
}
|
||||
|
||||
my $maxconn = "";
|
||||
$maxconn = "--max_connections=$ENV{MAX_CONNECTIONS}"
|
||||
@ -79,7 +86,7 @@ my %command = (
|
||||
ECPGCHECK => \&ecpgcheck,
|
||||
CONTRIBCHECK => \&contribcheck,
|
||||
ISOLATIONCHECK => \&isolationcheck,
|
||||
TAPCHECK => \&tapcheck,
|
||||
BINCHECK => \&bincheck,
|
||||
UPGRADECHECK => \&upgradecheck,);
|
||||
|
||||
my $proc = $command{$what};
|
||||
@ -165,39 +172,43 @@ sub isolationcheck
|
||||
exit $status if $status;
|
||||
}
|
||||
|
||||
sub tapcheck
|
||||
sub tap_check
|
||||
{
|
||||
my @args = ( "prove", "--verbose", "t/*.pl");
|
||||
my $mstat = 0;
|
||||
die "Tap tests not enabled in configuration"
|
||||
unless $config->{tap_tests};
|
||||
|
||||
my $dir = shift;
|
||||
chdir $dir;
|
||||
|
||||
my @args = ( "prove", "--verbose", "t/*.pl");
|
||||
|
||||
# adjust the environment for just this test
|
||||
local %ENV = %ENV;
|
||||
$ENV{PERL5LIB} = "$topdir/src/test/perl;$ENV{PERL5LIB}";
|
||||
$ENV{PG_REGRESS} = "$topdir/$Config/pg_regress/pg_regress";
|
||||
|
||||
# Find out all the existing TAP tests by looking for t/ directories
|
||||
# in the tree.
|
||||
my $tap_dirs = [];
|
||||
my @top_dir = ($topdir);
|
||||
File::Find::find(
|
||||
{ wanted => sub {
|
||||
/^t\z/s
|
||||
&& push(@$tap_dirs, $File::Find::name);
|
||||
}
|
||||
},
|
||||
@top_dir);
|
||||
|
||||
# Process each test
|
||||
foreach my $test_path (@$tap_dirs)
|
||||
{
|
||||
my $dir = dirname($test_path);
|
||||
my $tmp_root = "$dir/tmp_check";
|
||||
(mkdir $tmp_root || die $!) unless -d $tmp_root;
|
||||
my $tmp_install = "$tmp_root/install";
|
||||
Install($tmp_install, "all", $config);
|
||||
chdir $dir;
|
||||
# Reset those values, they may have been changed by another test.
|
||||
$ENV{TESTDIR} = "$dir";
|
||||
|
||||
system(@args);
|
||||
my $status = $? >> 8;
|
||||
return $status;
|
||||
}
|
||||
|
||||
sub bincheck
|
||||
{
|
||||
InstallTemp();
|
||||
|
||||
my $mstat = 0;
|
||||
|
||||
# Find out all the existing TAP tests by looking for t/ directories
|
||||
# in the tree.
|
||||
my @bin_dirs = glob("$topdir/src/bin/*");
|
||||
|
||||
# Process each test
|
||||
foreach my $dir (@$bin_dirs)
|
||||
{
|
||||
next unless -d "$dir/t";
|
||||
my $status = tap_check($dir);
|
||||
$mstat ||= $status;
|
||||
}
|
||||
exit $mstat if $mstat;
|
||||
|
Loading…
x
Reference in New Issue
Block a user