aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Dunstan <andrew@dunslane.net>2015-11-18 22:47:41 -0500
committerAndrew Dunstan <andrew@dunslane.net>2015-11-18 22:47:41 -0500
commitd835dd6685246f0737ca42ab68242210681bb220 (patch)
treed6113d8d7228d24916a373d53a802a193a13fa91
parent7907a949abf100b5a1e1def1184ba1e6fc8b9fd7 (diff)
downloadpostgresql-d835dd6685246f0737ca42ab68242210681bb220.tar.gz
postgresql-d835dd6685246f0737ca42ab68242210681bb220.zip
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.
-rw-r--r--src/tools/msvc/vcregress.pl61
1 files changed, 35 insertions, 26 deletions
diff --git a/src/tools/msvc/vcregress.pl b/src/tools/msvc/vcregress.pl
index d3d736bc486..5d3ad4dfd8a 100644
--- a/src/tools/msvc/vcregress.pl
+++ b/src/tools/msvc/vcregress.pl
@@ -34,7 +34,7 @@ if (-e "src/tools/msvc/buildenv.pl")
my $what = shift || "";
if ($what =~
-/^(check|installcheck|plcheck|contribcheck|modulescheck|ecpgcheck|isolationcheck|upgradecheck|tapcheck)$/i
+/^(check|installcheck|plcheck|contribcheck|modulescheck|ecpgcheck|isolationcheck|upgradecheck|bincheck)$/i
)
{
$what = uc $what;
@@ -61,7 +61,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}"
@@ -81,7 +88,7 @@ my %command = (
CONTRIBCHECK => \&contribcheck,
MODULESCHECK => \&modulescheck,
ISOLATIONCHECK => \&isolationcheck,
- TAPCHECK => \&tapcheck,
+ BINCHECK => \&bincheck,
UPGRADECHECK => \&upgradecheck,);
my $proc = $command{$what};
@@ -168,41 +175,43 @@ sub isolationcheck
exit $status if $status;
}
-sub tapcheck
+sub tap_check
{
- InstallTemp();
+ die "Tap tests not enabled in configuration"
+ unless $config->{tap_tests};
+
+ my $dir = shift;
+ chdir $dir;
my @args = ( "prove", "--verbose", "t/*.pl");
- my $mstat = 0;
+ # 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";
+ $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 $tap_dirs = [];
- my @top_dir = ($topdir);
- File::Find::find(
- { wanted => sub {
- /^t\z/s
- && push(@$tap_dirs, $File::Find::name);
- }
- },
- @top_dir);
+ my @bin_dirs = glob("$topdir/src/bin/*");
# Process each test
- foreach my $test_path (@$tap_dirs)
+ foreach my $dir (@$bin_dirs)
{
- # Like on Unix "make check-world", don't run the SSL test suite
- # automatically.
- next if ($test_path =~ /\/src\/test\/ssl\//);
-
- my $dir = dirname($test_path);
- chdir $dir;
- # Reset those values, they may have been changed by another test.
- $ENV{TESTDIR} = "$dir";
- system(@args);
- my $status = $? >> 8;
+ next unless -d "$dir/t";
+ my $status = tap_check($dir);
$mstat ||= $status;
}
exit $mstat if $mstat;