12
12
program_version_ok(' psql' );
13
13
program_options_handling_ok(' psql' );
14
14
15
- my ($stdout ,$stderr );
16
- my $result ;
17
-
18
- # Execute a psql command and check its result patterns.
15
+ # Execute a psql command and check its output.
19
16
sub psql_like
20
17
{
21
18
local $Test::Builder::Level =$Test::Builder::Level + 1;
22
19
23
- my $node =shift ;
24
- my $test_name =shift ;
25
- my $query =shift ;
26
- my $expected_stdout =shift ;
27
- my $expected_stderr =shift ;
20
+ my ($node ,$sql ,$expected_stdout ,$test_name ) =@_ ;
21
+
22
+ my ($ret ,$stdout ,$stderr ) =$node -> psql(' postgres' ,$sql );
23
+
24
+ is($ret , 0," $test_name : exit code 0" );
25
+ is($stderr ,' ' ," $test_name : no stderr" );
26
+ like($stdout ,$expected_stdout ," $test_name : matches" );
27
+
28
+ return ;
29
+ }
30
+
31
+ # Execute a psql command and check that it fails and check the stderr.
32
+ sub psql_fails_like
33
+ {
34
+ local $Test::Builder::Level =$Test::Builder::Level + 1;
28
35
29
- die " cannot specify both expected stdout and stderr here"
30
- if (defined ($expected_stdout ) &&defined ($expected_stderr ));
36
+ my ($node ,$sql ,$expected_stderr ,$test_name ) =@_ ;
31
37
32
38
# Use the context of a WAL sender, some of the tests rely on that.
33
39
my ($ret ,$stdout ,$stderr ) =$node -> psql(
34
- ' postgres' ,$query ,
35
- on_error_die => 0,
40
+ ' postgres' ,$sql ,
36
41
replication => ' database' );
37
42
38
- if (defined ($expected_stdout ))
39
- {
40
- is($ret , 0," $test_name : expected result code" );
41
- is($stderr ,' ' ," $test_name : no stderr" );
42
- like($stdout ,$expected_stdout ," $test_name : stdout matches" );
43
- }
44
- if (defined ($expected_stderr ))
45
- {
46
- isnt($ret , 0," $test_name : expected result code" );
47
- like($stderr ,$expected_stderr ," $test_name : stderr matches" );
48
- }
43
+ isnt($ret , 0," $test_name : exit code not 0" );
44
+ like($stderr ,$expected_stderr ," $test_name : matches" );
49
45
50
46
return ;
51
47
}
52
48
53
49
# test --help=foo, analogous to program_help_ok()
54
50
foreach my $arg (qw( commands variables) )
55
51
{
52
+ my ($stdout ,$stderr );
53
+ my $result ;
54
+
56
55
$result = IPC::Run::run [' psql' ," --help=$arg " ],' >' , \$stdout ,' 2>' ,
57
56
\$stderr ;
58
57
ok($result ," psql --help=$arg exit code 0" );
@@ -70,15 +69,15 @@ sub psql_like
70
69
} );
71
70
$node -> start;
72
71
73
- psql_like($node ,' \copyright' ,' \copyright ' , qr / Copyright/ ,undef );
74
- psql_like($node ,' \help without arguments ' ,' \help ' , qr / ALTER/ ,undef );
75
- psql_like($node ,' \helpwith argument ' , ' \help SELECT' ,qr / SELECT/ ,undef );
72
+ psql_like($node ,' \copyright' ,qr / Copyright/ ,' \copyright ' );
73
+ psql_like($node ,' \help' ,qr / ALTER/ ,' \help without arguments ' );
74
+ psql_like($node ,' \help SELECT' ,qr / SELECT/ ,' \help with argument ' );
76
75
77
76
# Test clean handling of unsupported replication command responses
78
- psql_like (
77
+ psql_fails_like (
79
78
$node ,
80
- ' handling of unexpected PQresultStatus' ,
81
79
' START_REPLICATION 0/0' ,
82
- undef ,qr / unexpected PQresultStatus: 8$ / );
80
+ qr / unexpected PQresultStatus: 8$ / ,
81
+ ' handling of unexpected PQresultStatus' );
83
82
84
83
done_testing();