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
- my ($opts , $stat , $out , $err , $name , $files ) = @_ ;
23
+ my ($opts , $stat , $out , $err , $name , $files , @args ) = @_ ;
17
24
my @cmd = (' pgbench' , split /\s +/, $opts );
18
25
my @filenames = ();
19
26
if (defined $files )
@@ -38,6 +45,9 @@ sub pgbench
38
45
append_to_file($filename , $$files {$fn });
39
46
}
40
47
}
48
+
49
+ push @cmd , @args ;
50
+
41
51
$node -> command_checks_all(\@cmd , $stat , $out , $err , $name );
42
52
43
53
# cleanup?
@@ -791,18 +801,30 @@ sub pgbench
791
801
qr { type: .*/001_pgbench_sleep} ,
792
802
qr { above the 1.0 ms latency limit: [01]/}
793
803
],
794
- [qr { ^$} i ],
804
+ [qr { ^$} ],
795
805
' pgbench late throttling' ,
796
806
{ ' 001_pgbench_sleep' => q{ \sleep 2ms} });
797
807
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
+
798
819
# check log contents and cleanup
799
820
sub check_pgbench_logs
800
821
{
801
- my ($prefix , $nb , $min , $max , $re ) = @_ ;
822
+ my ($dir , $ prefix , $nb , $min , $max , $re ) = @_ ;
802
823
803
- my @logs = glob " $prefix .*" ;
824
+ # $prefix is simple enough, thus does not need escaping
825
+ my @logs = list_files($dir , qr { ^$prefix \. .*$} );
804
826
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" );
806
828
807
829
my $log_number = 0;
808
830
for my $log (sort @logs )
@@ -826,22 +848,25 @@ sub check_pgbench_logs
826
848
827
849
# with sampling rate
828
850
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" ,
830
852
0,
831
853
[ 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" );
834
858
835
- check_pgbench_logs(" $bdir / 001_pgbench_log_2" , 1, 8, 92,
859
+ check_pgbench_logs($bdir , ' 001_pgbench_log_2' , 1, 8, 92,
836
860
qr { ^0 \d {1,2} \d + \d \d + \d +$} );
837
861
838
862
# check log file in some detail
839
863
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" );
843
868
844
- check_pgbench_logs(" $bdir / 001_pgbench_log_3" , 1, 10, 10,
869
+ check_pgbench_logs($bdir , ' 001_pgbench_log_3' , 1, 10, 10,
845
870
qr { ^\d \d {1,2} \d + \d \d + \d +$} );
846
871
847
872
# done
0 commit comments