13
13
# 2) extracting the state of the process itself
14
14
15
15
my $node ;
16
- my $dbh_status ;
17
- my $pid_status ;
18
-
19
- sub bad_pid
20
- {
21
- note(' Extracting from bad pid' );
22
- my $stderr ;
23
- $node -> psql(' postgres' ,' SELECT * from pg_progress_bar(-1)' ,stderr => \$stderr );
24
- is ($stderr ,' psql:<stdin>:1: ERROR: backend with pid=-1 not found' ," appealing to a bad pid for pg_progress_bar" );
25
- $node -> psql(' postgres' ,' SELECT * from pg_progress_bar(-1)_visual' ,stderr => \$stderr );
26
- is ($stderr ,' psql:<stdin>:1: ERROR: backend with pid=-1 not found' ," appealing to a bad pid for pg_progress_bar_visual" );
27
- }
28
-
29
- sub self_status
30
- {
31
- note(' Extracting your own status' );
32
- $dbh_status -> do(' SELECT * from pg_progress_bar(' .$pid_status .' )' );
33
- is($dbh_status -> errstr,' ERROR: attempt to extract state of current process' ," extracting the state of the process itself for pg_progress_bar" );
34
- $dbh_status -> do(' SELECT * from pg_progress_bar_visual(' .$pid_status .' )' );
35
- is($dbh_status -> errstr,' ERROR: attempt to extract state of current process' ," extracting the state of the process itself for pg_progress_bar_visual" );
36
- }
37
-
38
- # start backend for function pg_progress_bar
39
16
17
+ # modules depend on the PostgreSQL version
40
18
my $pg_15_modules ;
41
19
42
20
BEGIN
@@ -68,11 +46,95 @@ BEGIN
68
46
$node = PostgresNode-> get_new_node(" master" );
69
47
}
70
48
71
- $node -> init;
49
+ # start backend for function pg_progress_bar
50
+ my $dbh_status ;
51
+ my $pid_status ;
52
+
53
+ # this code exists only because of problems
54
+ # with authentification in Windows
55
+ #
56
+ # in a friendlier system it would be enough to do:
57
+ #
58
+ # $node->init;
59
+ # $node->start;
60
+ # $node->append_conf('postgresql.conf', "shared_preload_libraries = 'pg_query_state'");
61
+ # $node->restart;
62
+ # $node->psql('postgres', 'CREATE EXTENSION pg_query_state;');
63
+ #
64
+ # but now we will carefully configure the work
65
+ # for specific users and databases
66
+ # -----------------------------------------------------------
67
+ $ENV {LC_ALL } =' C' ;
68
+ $ENV {PGCLIENTENCODING } =' LATIN1' ;
69
+
70
+ my $dbname1 =' regression_bad_progress_bar' ;
71
+ my $username1 =$dbname1 ;
72
+ my $src_bootstrap_super =' regress_postgres' ;
73
+
74
+ $node -> init(
75
+ extra => [
76
+ ' --username' => $src_bootstrap_super ,
77
+ ' --locale' => ' C' ,
78
+ ' --encoding' => ' LATIN1' ,
79
+ ]);
80
+
81
+ # update pg_hba.conf and pg_ident.conf
82
+ # for sppi-authentification in Windows
83
+ $node -> run_log(
84
+ [
85
+ $ENV {PG_REGRESS },
86
+ ' --config-auth' => $node -> data_dir,
87
+ ' --user' => $src_bootstrap_super ,
88
+ ' --create-role' => " $username1 " ,
89
+ ]);
90
+
72
91
$node -> start;
92
+
93
+ # create test user and test database
94
+ $node -> run_log(
95
+ [' createdb' ,' --username' => $src_bootstrap_super ,$dbname1 ]);
96
+ $node -> run_log(
97
+ [
98
+ ' createuser' ,
99
+ ' --username' => $src_bootstrap_super ,
100
+ ' --superuser' ,
101
+ $username1 ,
102
+ ]);
103
+
73
104
$node -> append_conf(' postgresql.conf' ," shared_preload_libraries = 'pg_query_state'" );
74
105
$node -> restart;
75
- $node -> psql(' postgres' ,' CREATE EXTENSION pg_query_state;' );
106
+
107
+ # now we are ready to create extension pg_query_state
108
+ # we perform this and following actions under the
109
+ # created test user and on the test database
110
+ $node -> psql($dbname1 ,' CREATE EXTENSION pg_query_state;' ,
111
+ extra_params => [' -U' ,$username1 ]);
112
+ # -----------------------------------------------------------
113
+
114
+ sub bad_pid
115
+ {
116
+ note(' Extracting from bad pid' );
117
+ my $stderr ;
118
+ $node -> psql($dbname1 ,' SELECT * from pg_progress_bar(-1)' ,
119
+ stderr => \$stderr ,extra_params => [' -U' ,$username1 ]);
120
+ is ($stderr ,' psql:<stdin>:1: ERROR: backend with pid=-1 not found' ,
121
+ " appealing to a bad pid for pg_progress_bar" );
122
+ $node -> psql($dbname1 ,' SELECT * from pg_progress_bar(-1)_visual' ,
123
+ stderr => \$stderr ,extra_params => [' -U' ,$username1 ]);
124
+ is ($stderr ,' psql:<stdin>:1: ERROR: backend with pid=-1 not found' ,
125
+ " appealing to a bad pid for pg_progress_bar_visual" );
126
+ }
127
+
128
+ sub self_status
129
+ {
130
+ note(' Extracting your own status' );
131
+ $dbh_status -> do(' SELECT * from pg_progress_bar(' .$pid_status .' )' );
132
+ is($dbh_status -> errstr,' ERROR: attempt to extract state of current process' ,
133
+ " extracting the state of the process itself for pg_progress_bar" );
134
+ $dbh_status -> do(' SELECT * from pg_progress_bar_visual(' .$pid_status .' )' );
135
+ is($dbh_status -> errstr,' ERROR: attempt to extract state of current process' ,
136
+ " extracting the state of the process itself for pg_progress_bar_visual" );
137
+ }
76
138
77
139
# 2 tests for 1 case
78
140
bad_pid();
@@ -81,34 +143,36 @@ BEGIN
81
143
82
144
my $dbdpg_rc =eval
83
145
{
84
- require DBI;
85
- require DBD::Pg;
86
- 1;
146
+ require DBI;
147
+ require DBD::Pg;
148
+ 1;
87
149
};
88
150
89
151
$dbdpg_rc = 0unless defined $dbdpg_rc ;
90
152
91
153
if ($dbdpg_rc != 1)
92
154
{
93
- diag(' DBI and DBD::Pg are not available, skip 2/4 tests' );
155
+ diag(' DBI and DBD::Pg are not available, skip 2/4 tests' );
94
156
}
95
157
96
158
SKIP: {
97
- skip" DBI and DBD::Pg are not available" , 2if ($dbdpg_rc != 1);
159
+ skip" DBI and DBD::Pg are not available" , 2if ($dbdpg_rc != 1);
160
+
161
+ DBD::Pg-> import (' :async' );
98
162
99
- DBD::Pg -> import ( ' :async ' );
100
- $dbh_status = DBI-> connect (' DBI:Pg:' .$node -> connstr(' postgres ' ) );
101
- if ( !defined $dbh_status )
102
- {
103
- die " Cannot connect to database for dbh with pg_progress_bar\n " ;
104
- }
163
+ # connect to test database under the test user
164
+ $dbh_status = DBI-> connect (' DBI:Pg:' .$node -> connstr() . " user= $username1 " . " dbname= $dbname1 " );
165
+ if ( !defined $dbh_status )
166
+ {
167
+ die " Cannot connect to database for dbh with pg_progress_bar\n " ;
168
+ }
105
169
106
- $pid_status =$dbh_status -> {pg_pid };
170
+ $pid_status =$dbh_status -> {pg_pid };
107
171
108
- # 2 tests for 2 case
109
- self_status();
172
+ # 2 tests for 2 case
173
+ self_status();
110
174
111
- $dbh_status -> disconnect;
175
+ $dbh_status -> disconnect;
112
176
}
113
177
114
178
$node -> stop(' fast' );