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{
16- my ($opts ,$stat ,$out ,$err ,$name ,$files ) =@_ ;
23+ my ($opts ,$stat ,$out ,$err ,$name ,$files , @args ) =@_ ;
1724my @cmd = (' pgbench' ,split /\s +/,$opts );
1825my @filenames = ();
1926if (defined $files )
@@ -38,6 +45,9 @@ sub pgbench
3845append_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
791801qr { type: .*/001_pgbench_sleep} ,
792802qr { 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
799820sub 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 \. .*$} );
804826ok(@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
807829my $log_number = 0;
808830for my $log (sort @logs )
@@ -826,22 +848,25 @@ sub check_pgbench_logs
826848
827849# with sampling rate
828850pgbench(
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" ,
8308520,
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,
836860qr { ^0\d {1,2}\d +\d \d +\d +$} );
837861
838862# check log file in some detail
839863pgbench(
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,
845870qr { ^\d \d {1,2}\d +\d \d +\d +$} );
846871
847872# done