Re: set TESTDIR from perl rather than Makefile - Mailing list pgsql-hackers

From Andres Freund
Subject Re: set TESTDIR from perl rather than Makefile
Date
Msg-id 20220221003908.lw33x7zmsxk5wm2z@alap3.anarazel.de
Whole thread Raw
In response to Re: set TESTDIR from perl rather than Makefile  (Justin Pryzby <pryzby@telsasoft.com>)
Responses Re: set TESTDIR from perl rather than Makefile
List pgsql-hackers
Hi,

On 2022-02-19 17:53:09 -0600, Justin Pryzby wrote:
> I also meant to also attach it.

Is the patch actually independent of the other patches in your stack?


I like this concept a lot:

- I've had to use a wrapper around individual tap tests for meson, just to set
  the CWD etc.
- Being able to run all tap tests at once, instead of many separate prove
  invocations is a lot more readable. And can be faster.
- makes it easier to invoke tap tests "manually", which can be useful when
  debugging problems (not fun to run make in valgrind or rr)
- I'd like to put test data and test log files in different places than they
  are eventually. This seems like it gets us a tiny bit closer to that.



> -        $expected = slurp_file_eval("traces/$testname.trace");
> +        my $inputdir = "$ENV{'TESTDIR'}/tmp_check";
> +        $expected = slurp_file_eval("$inputdir/traces/$testname.trace");

Why is this needed? Shouldn't we end up in exactly the same dir with/without
this patch?


> diff --git a/src/test/perl/PostgreSQL/Test/Utils.pm b/src/test/perl/PostgreSQL/Test/Utils.pm
> index 31e2b0315e..8a8d95ca8c 100644
> --- a/src/test/perl/PostgreSQL/Test/Utils.pm
> +++ b/src/test/perl/PostgreSQL/Test/Utils.pm
> @@ -184,19 +184,21 @@ INIT
>      # test may still fail, but it's more likely to report useful facts.
>      $SIG{PIPE} = 'IGNORE';
>  
> -    # Determine output directories, and create them.  The base path is the
> -    # TESTDIR environment variable, which is normally set by the invoking
> -    # Makefile.
> -    $tmp_check = $ENV{TESTDIR} ? "$ENV{TESTDIR}/tmp_check" : "tmp_check";
> +    my $test_dir = File::Spec->rel2abs(dirname($0));
> +    my $test_name = basename($0);
> +    $test_name =~ s/\.[^.]+$//;
> +
> +    # Determine output directories, and create them.
> +    # TODO: set srcdir?
> +    $tmp_check = "$test_dir/tmp_check";
>      $log_path = "$tmp_check/log";
> +    $ENV{TESTDIR} = $test_dir;
>  
>      mkdir $tmp_check;
>      mkdir $log_path;
>  
>      # Open the test log file, whose name depends on the test name.
> -    $test_logfile = basename($0);
> -    $test_logfile =~ s/\.[^.]+$//;
> -    $test_logfile = "$log_path/regress_log_$test_logfile";
> +    $test_logfile = "$log_path/regress_log_$test_name";
>      open my $testlog, '>', $test_logfile
>        or die "could not open STDOUT to logfile \"$test_logfile\": $!";
>  
> diff --git a/src/tools/msvc/vcregress.pl b/src/tools/msvc/vcregress.pl
> index e2b0db0879..63085506e0 100644
> --- a/src/tools/msvc/vcregress.pl
> +++ b/src/tools/msvc/vcregress.pl
> @@ -261,10 +261,8 @@ sub tap_check
>      $ENV{PG_REGRESS}    = "$topdir/$Config/pg_regress/pg_regress";
>      $ENV{REGRESS_SHLIB} = "$topdir/src/test/regress/regress.dll";
>  
> -    $ENV{TESTDIR} = "$dir";
>      my $module = basename $dir;
> -    # add the module build dir as the second element in the PATH
> -    $ENV{PATH} =~ s!;!;$topdir/$Config/$module;!;
> +    #$ENV{VCREGRESS_MODE} = $Config;

Hm. How does the module build dir end up on PATH after this?

Greetings,

Andres Freund



pgsql-hackers by date:

Previous
From: "osumi.takamichi@fujitsu.com"
Date:
Subject: RE: Optionally automatically disable logical replication subscriptions on error
Next
From: Corey Huinker
Date:
Subject: Re: WIP: System Versioned Temporal Table