Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit f1b864e

Browse files
committed
Fix pgbench TAP test failure with funky file names (redux)
This test fails if the containing directory contains a funny character such as a space or some perl metacharacter. To avoid that, we check for files names using readdir and a regex, rather than using a glob pattern. Discussion: https://postgr.es/m/CAM6_UM6dGdU39PKAC24T+HD9ouy0jLN9vH6163K8QEEzr__iZw@mail.gmail.com Author: Fabien COELHO Reviewed-by: Raúl Marín Rodríguez
1 parent 8722c4d commit f1b864e

File tree

1 file changed

+39
-14
lines changed

1 file changed

+39
-14
lines changed

src/bin/pgbench/t/001_pgbench_with_server.pl

Lines changed: 39 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,17 @@
1010
$node->init;
1111
$node->start;
1212

13-
# invoke pgbench
13+
# invoke pgbench, with parameters:
14+
# $opts: options as a string to be split on spaces
15+
# $stat: expected exit status
16+
# $out: reference to a regexp list that must match stdout
17+
# $err: reference to a regexp list that must match stderr
18+
# $name: name of test for error messages
19+
# $files: reference to filename/contents dictionnary
20+
# @args: further raw options or arguments
1421
sub pgbench
1522
{
16-
my ($opts, $stat, $out, $err, $name, $files) = @_;
23+
my ($opts, $stat, $out, $err, $name, $files, @args) = @_;
1724
my @cmd = ('pgbench', split /\s+/, $opts);
1825
my @filenames = ();
1926
if (defined $files)
@@ -38,6 +45,9 @@ sub pgbench
3845
append_to_file($filename, $$files{$fn});
3946
}
4047
}
48+
49+
push @cmd, @args;
50+
4151
$node->command_checks_all(\@cmd, $stat, $out, $err, $name);
4252

4353
# cleanup?
@@ -791,18 +801,30 @@ sub pgbench
791801
qr{type: .*/001_pgbench_sleep},
792802
qr{above the 1.0 ms latency limit: [01]/}
793803
],
794-
[qr{^$}i],
804+
[qr{^$}],
795805
'pgbench late throttling',
796806
{ '001_pgbench_sleep' => q{\sleep 2ms} });
797807

808+
# return a list of files from directory $dir matching regexpr $re
809+
# this works around glob portability and escaping issues
810+
sub list_files
811+
{
812+
my ($dir, $re) = @_;
813+
opendir my $dh, $dir or die "cannot opendir $dir: $!";
814+
my @files = grep /$re/, readdir $dh;
815+
closedir $dh or die "cannot closedir $dir: $!";
816+
return map { $dir . '/' . $_ } @files;
817+
}
818+
798819
# check log contents and cleanup
799820
sub check_pgbench_logs
800821
{
801-
my ($prefix, $nb, $min, $max, $re) = @_;
822+
my ($dir, $prefix, $nb, $min, $max, $re) = @_;
802823

803-
my @logs = glob "$prefix.*";
824+
# $prefix is simple enough, thus does not need escaping
825+
my @logs = list_files($dir, qr{^$prefix\..*$});
804826
ok(@logs == $nb, "number of log files");
805-
ok(grep(/^$prefix\.\d+(\.\d+)?$/, @logs) == $nb, "file name format");
827+
ok(grep(/\/$prefix\.\d+(\.\d+)?$/, @logs) == $nb, "file name format");
806828

807829
my $log_number = 0;
808830
for my $log (sort @logs)
@@ -826,22 +848,25 @@ sub check_pgbench_logs
826848

827849
# with sampling rate
828850
pgbench(
829-
"-n -S -t 50 -c 2 --log --log-prefix=$bdir/001_pgbench_log_2 --sampling-rate=0.5",
851+
"-n -S -t 50 -c 2 --log --sampling-rate=0.5",
830852
0,
831853
[ qr{select only}, qr{processed: 100/100} ],
832-
[qr{^$}],
833-
'pgbench logs');
854+
[ qr{^$} ],
855+
'pgbench logs',
856+
undef,
857+
"--log-prefix=$bdir/001_pgbench_log_2");
834858

835-
check_pgbench_logs("$bdir/001_pgbench_log_2", 1, 8, 92,
859+
check_pgbench_logs($bdir, '001_pgbench_log_2', 1, 8, 92,
836860
qr{^0 \d{1,2} \d+ \d \d+ \d+$});
837861

838862
# check log file in some detail
839863
pgbench(
840-
"-n -b se -t 10 -l --log-prefix=$bdir/001_pgbench_log_3",
841-
0, [ qr{select only}, qr{processed: 10/10} ],
842-
[qr{^$}], 'pgbench logs contents');
864+
"-n -b se -t 10 -l",
865+
0, [ qr{select only}, qr{processed: 10/10} ], [ qr{^$} ],
866+
'pgbench logs contents', undef,
867+
"--log-prefix=$bdir/001_pgbench_log_3");
843868

844-
check_pgbench_logs("$bdir/001_pgbench_log_3", 1, 10, 10,
869+
check_pgbench_logs($bdir, '001_pgbench_log_3', 1, 10, 10,
845870
qr{^\d \d{1,2} \d+ \d \d+ \d+$});
846871

847872
# done

0 commit comments

Comments
 (0)