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
1421sub pgbench
1522{
1623 local $Test::Builder::Level = $Test::Builder::Level + 1;
1724
18- my ($opts , $stat , $out , $err , $name , $files ) = @_ ;
25+ my ($opts , $stat , $out , $err , $name , $files , @args ) = @_ ;
1926 my @cmd = (' pgbench' , split /\s +/, $opts );
2027 my @filenames = ();
2128 if (defined $files )
@@ -40,6 +47,9 @@ sub pgbench
4047 append_to_file($filename , $$files {$fn });
4148 }
4249 }
50+
51+ push @cmd , @args ;
52+
4353 $node -> command_checks_all(\@cmd , $stat , $out , $err , $name );
4454
4555 # cleanup?
@@ -868,20 +878,32 @@ sub pgbench
868878 qr { type: .*/001_pgbench_sleep} ,
869879 qr { above the 1.0 ms latency limit: [01]/}
870880 ],
871- [qr { ^$} i ],
881+ [qr { ^$} ],
872882 ' pgbench late throttling' ,
873883 { ' 001_pgbench_sleep' => q{ \sleep 2ms} });
874884
885+ # return a list of files from directory $dir matching regexpr $re
886+ # this works around glob portability and escaping issues
887+ sub list_files
888+ {
889+ my ($dir , $re ) = @_ ;
890+ opendir my $dh , $dir or die " cannot opendir $dir : $! " ;
891+ my @files = grep /$re /, readdir $dh ;
892+ closedir $dh or die " cannot closedir $dir : $! " ;
893+ return map { $dir . ' /' . $_ } @files ;
894+ }
895+
875896# check log contents and cleanup
876897sub check_pgbench_logs
877898{
878899 local $Test::Builder::Level = $Test::Builder::Level + 1;
879900
880- my ($prefix , $nb , $min , $max , $re ) = @_ ;
901+ my ($dir , $ prefix , $nb , $min , $max , $re ) = @_ ;
881902
882- my @logs = glob " $prefix .*" ;
903+ # $prefix is simple enough, thus does not need escaping
904+ my @logs = list_files($dir , qr { ^$prefix \. .*$} );
883905 ok(@logs == $nb , " number of log files" );
884- ok(grep (/ ^ $prefix \.\d +(\.\d +)?$ / , @logs ) == $nb , " file name format" );
906+ ok(grep (/ \/ $prefix \.\d +(\.\d +)?$ / , @logs ) == $nb , " file name format" );
885907
886908 my $log_number = 0;
887909 for my $log (sort @logs )
@@ -905,22 +927,25 @@ sub check_pgbench_logs
905927
906928# with sampling rate
907929pgbench(
908- " -n -S -t 50 -c 2 --log --log-prefix= $bdir /001_pgbench_log_2 -- sampling-rate=0.5" ,
930+ " -n -S -t 50 -c 2 --log --sampling-rate=0.5" ,
909931 0,
910932 [ qr { select only} , qr { processed: 100/100} ],
911- [qr { ^$} ],
912- ' pgbench logs' );
933+ [ qr { ^$} ],
934+ ' pgbench logs' ,
935+ undef ,
936+ " --log-prefix=$bdir /001_pgbench_log_2" );
913937
914- check_pgbench_logs(" $bdir / 001_pgbench_log_2" , 1, 8, 92,
938+ check_pgbench_logs($bdir , ' 001_pgbench_log_2' , 1, 8, 92,
915939 qr { ^0 \d {1,2} \d + \d \d + \d +$} );
916940
917941# check log file in some detail
918942pgbench(
919- " -n -b se -t 10 -l --log-prefix=$bdir /001_pgbench_log_3" ,
920- 0, [ qr { select only} , qr { processed: 10/10} ],
921- [qr { ^$} ], ' pgbench logs contents' );
943+ " -n -b se -t 10 -l" ,
944+ 0, [ qr { select only} , qr { processed: 10/10} ], [ qr { ^$} ],
945+ ' pgbench logs contents' , undef ,
946+ " --log-prefix=$bdir /001_pgbench_log_3" );
922947
923- check_pgbench_logs(" $bdir / 001_pgbench_log_3" , 1, 10, 10,
948+ check_pgbench_logs($bdir , ' 001_pgbench_log_3' , 1, 10, 10,
924949 qr { ^\d \d {1,2} \d + \d \d + \d +$} );
925950
926951# done
0 commit comments