| #!/usr/bin/perl |
| |
| # Copyright (c) 2021, PostgreSQL Global Development Group |
| |
| use strict; |
| use warnings; |
| |
| # use of SRCDIR/SUBDIR is required for supporting VPath builds |
| my $srcdir = $ENV{'SRCDIR'} or die 'SRCDIR environment variable is not set'; |
| my $subdir = $ENV{'SUBDIR'} or die 'SUBDIR environment variable is not set'; |
| |
| my $regress_in = "$srcdir/$subdir/regress.in"; |
| my $expected_out = "$srcdir/$subdir/expected.out"; |
| |
| # the output file should land in the build_dir of VPath, or just in |
| # the current dir, if VPath isn't used |
| my $regress_out = "regress.out"; |
| |
| # open input file first, so possible error isn't sent to redirected STDERR |
| open(my $regress_in_fh, "<", $regress_in) |
| or die "can't open $regress_in for reading: $!"; |
| |
| # save STDOUT/ERR and redirect both to regress.out |
| open(my $oldout_fh, ">&", \*STDOUT) or die "can't dup STDOUT: $!"; |
| open(my $olderr_fh, ">&", \*STDERR) or die "can't dup STDERR: $!"; |
| |
| open(STDOUT, ">", $regress_out) |
| or die "can't open $regress_out for writing: $!"; |
| open(STDERR, ">&", \*STDOUT) or die "can't dup STDOUT: $!"; |
| |
| # read lines from regress.in and run uri-regress on them |
| while (<$regress_in_fh>) |
| { |
| chomp; |
| print "trying $_\n"; |
| system("./uri-regress \"$_\""); |
| print "\n"; |
| } |
| |
| # restore STDOUT/ERR so we can print the outcome to the user |
| open(STDERR, ">&", $olderr_fh) |
| or die; # can't complain as STDERR is still duped |
| open(STDOUT, ">&", $oldout_fh) or die "can't restore STDOUT: $!"; |
| |
| # just in case |
| close $regress_in_fh; |
| |
| my $diff_status = system( |
| "diff -c \"$srcdir/$subdir/expected.out\" regress.out >regress.diff"); |
| |
| print "=" x 70, "\n"; |
| if ($diff_status == 0) |
| { |
| print "All tests passed\n"; |
| exit 0; |
| } |
| else |
| { |
| print <<EOF; |
| FAILED: the test result differs from the expected output |
| |
| Review the difference in "$subdir/regress.diff" |
| EOF |
| exit 1; |
| } |