10
10
$node -> init;
11
11
$node -> start;
12
12
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
14
21
sub pgbench
15
22
{
16
23
local $Test::Builder::Level =$Test::Builder::Level + 1;
17
24
18
- my ($opts ,$stat ,$out ,$err ,$name ,$files ) =@_ ;
25
+ my ($opts ,$stat ,$out ,$err ,$name ,$files , @args ) =@_ ;
19
26
my @cmd = (' pgbench' ,split /\s +/,$opts );
20
27
my @filenames = ();
21
28
if (defined $files )
@@ -40,6 +47,9 @@ sub pgbench
40
47
append_to_file($filename ,$$files {$fn });
41
48
}
42
49
}
50
+
51
+ push @cmd ,@args ;
52
+
43
53
$node -> command_checks_all(\@cmd ,$stat ,$out ,$err ,$name );
44
54
45
55
# cleanup?
@@ -868,20 +878,32 @@ sub pgbench
868
878
qr { type: .*/001_pgbench_sleep} ,
869
879
qr { above the 1.0 ms latency limit: [01]/}
870
880
],
871
- [qr { ^$} i ],
881
+ [qr { ^$} ],
872
882
' pgbench late throttling' ,
873
883
{' 001_pgbench_sleep' => q{ \sleep 2ms} });
874
884
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
+
875
896
# check log contents and cleanup
876
897
sub check_pgbench_logs
877
898
{
878
899
local $Test::Builder::Level =$Test::Builder::Level + 1;
879
900
880
- my ($prefix ,$nb ,$min ,$max ,$re ) =@_ ;
901
+ my ($dir , $ prefix ,$nb ,$min ,$max ,$re ) =@_ ;
881
902
882
- my @logs =glob " $prefix .*" ;
903
+ # $prefix is simple enough, thus does not need escaping
904
+ my @logs = list_files($dir ,qr { ^$prefix \. .*$} );
883
905
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" );
885
907
886
908
my $log_number = 0;
887
909
for my $log (sort @logs )
@@ -905,22 +927,25 @@ sub check_pgbench_logs
905
927
906
928
# with sampling rate
907
929
pgbench(
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" ,
909
931
0,
910
932
[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" );
913
937
914
- check_pgbench_logs(" $bdir / 001_pgbench_log_2" , 1, 8, 92,
938
+ check_pgbench_logs($bdir , ' 001_pgbench_log_2' , 1, 8, 92,
915
939
qr { ^0\d {1,2}\d +\d \d +\d +$} );
916
940
917
941
# check log file in some detail
918
942
pgbench(
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" );
922
947
923
- check_pgbench_logs(" $bdir / 001_pgbench_log_3" , 1, 10, 10,
948
+ check_pgbench_logs($bdir , ' 001_pgbench_log_3' , 1, 10, 10,
924
949
qr { ^\d \d {1,2}\d +\d \d +\d +$} );
925
950
926
951
# done