]> granicus.if.org Git - postgresql/commitdiff
Improve vcregress.pl's handling of tap tests for client programs
authorAndrew Dunstan <andrew@dunslane.net>
Thu, 19 Nov 2015 03:47:41 +0000 (22:47 -0500)
committerAndrew Dunstan <andrew@dunslane.net>
Thu, 19 Nov 2015 04:37:56 +0000 (23:37 -0500)
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.

src/tools/msvc/vcregress.pl

index 84114205bb5f8e3b234bb0318e7c8f75c2729950..1723a5644ecdc33393b9b408f62eff4c1b76d249 100644 (file)
@@ -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
 {
+       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)
        {
-               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;
+               next unless -d "$dir/t";
+               my $status = tap_check($dir);
                $mstat ||= $status;
        }
        exit $mstat if $mstat;