@@ -51,16 +51,29 @@ def test_backup_via_unprivileged_user(self):
5151 1 , 0 ,
5252 "Expecting Error due to missing grant on EXECUTE." )
5353 except ProbackupException as e :
54- self .assertIn (
55- "ERROR: query failed: ERROR: permission denied "
56- "for function pg_start_backup" , e .message ,
57- '\n Unexpected Error Message: {0}\n CMD: {1}' .format (
58- repr (e .message ), self .cmd ))
54+ if self .get_version (node ) < 150000 :
55+ self .assertIn (
56+ "ERROR: query failed: ERROR: permission denied "
57+ "for function pg_start_backup" , e .message ,
58+ '\n Unexpected Error Message: {0}\n CMD: {1}' .format (
59+ repr (e .message ), self .cmd ))
60+ else :
61+ self .assertIn (
62+ "ERROR: query failed: ERROR: permission denied "
63+ "for function pg_backup_start" , e .message ,
64+ '\n Unexpected Error Message: {0}\n CMD: {1}' .format (
65+ repr (e .message ), self .cmd ))
5966
60- node .safe_psql (
61- "postgres" ,
62- "GRANT EXECUTE ON FUNCTION"
63- " pg_start_backup(text, boolean, boolean) TO backup;" )
67+ if self .get_version (node ) < 150000 :
68+ node .safe_psql (
69+ "postgres" ,
70+ "GRANT EXECUTE ON FUNCTION"
71+ " pg_start_backup(text, boolean, boolean) TO backup;" )
72+ else :
73+ node .safe_psql (
74+ "postgres" ,
75+ "GRANT EXECUTE ON FUNCTION"
76+ " pg_backup_start(text, boolean) TO backup;" )
6477
6578 if self .get_version (node ) < 100000 :
6679 node .safe_psql (
@@ -97,17 +110,24 @@ def test_backup_via_unprivileged_user(self):
97110 1 , 0 ,
98111 "Expecting Error due to missing grant on EXECUTE." )
99112 except ProbackupException as e :
100- self .assertIn (
101- "ERROR: query failed: ERROR: permission denied "
102- "for function pg_stop_backup" , e .message ,
103- '\n Unexpected Error Message: {0}\n CMD: {1}' .format (
104- repr (e .message ), self .cmd ))
113+ if self .get_version (node ) < 150000 :
114+ self .assertIn (
115+ "ERROR: query failed: ERROR: permission denied "
116+ "for function pg_stop_backup" , e .message ,
117+ '\n Unexpected Error Message: {0}\n CMD: {1}' .format (
118+ repr (e .message ), self .cmd ))
119+ else :
120+ self .assertIn (
121+ "ERROR: query failed: ERROR: permission denied "
122+ "for function pg_backup_stop" , e .message ,
123+ '\n Unexpected Error Message: {0}\n CMD: {1}' .format (
124+ repr (e .message ), self .cmd ))
105125
106126 if self .get_version (node ) < self .version_to_num ('10.0' ):
107127 node .safe_psql (
108128 "postgres" ,
109129 "GRANT EXECUTE ON FUNCTION pg_stop_backup(boolean) TO backup" )
110- else :
130+ elif self . get_vestion ( node ) < self . version_to_num ( '15.0' ) :
111131 node .safe_psql (
112132 "postgres" ,
113133 "GRANT EXECUTE ON FUNCTION "
@@ -116,6 +136,16 @@ def test_backup_via_unprivileged_user(self):
116136 node .safe_psql (
117137 "postgres" ,
118138 "GRANT EXECUTE ON FUNCTION pg_stop_backup() TO backup" )
139+ else :
140+ node .safe_psql (
141+ "postgres" ,
142+ "GRANT EXECUTE ON FUNCTION "
143+ "pg_backup_stop(boolean) TO backup" )
144+ # Do this for ptrack backups
145+ node .safe_psql (
146+ "postgres" ,
147+ "GRANT EXECUTE ON FUNCTION pg_backup_stop() TO backup" )
148+
119149
120150 self .backup_node (
121151 backup_dir , 'node' , node , options = ['-U' , 'backup' ])
@@ -177,20 +207,37 @@ def setUpClass(cls):
177207 except StartNodeException :
178208 raise unittest .skip ("Node hasn't started" )
179209
180- cls .node .safe_psql (
181- "postgres" ,
182- "CREATE ROLE backup WITH LOGIN PASSWORD 'password'; "
183- "GRANT USAGE ON SCHEMA pg_catalog TO backup; "
184- "GRANT EXECUTE ON FUNCTION current_setting(text) TO backup; "
185- "GRANT EXECUTE ON FUNCTION pg_is_in_recovery() TO backup; "
186- "GRANT EXECUTE ON FUNCTION pg_start_backup(text, boolean, boolean) TO backup; "
187- "GRANT EXECUTE ON FUNCTION pg_stop_backup() TO backup; "
188- "GRANT EXECUTE ON FUNCTION pg_stop_backup(boolean) TO backup; "
189- "GRANT EXECUTE ON FUNCTION pg_create_restore_point(text) TO backup; "
190- "GRANT EXECUTE ON FUNCTION pg_switch_xlog() TO backup; "
191- "GRANT EXECUTE ON FUNCTION txid_current() TO backup; "
192- "GRANT EXECUTE ON FUNCTION txid_current_snapshot() TO backup; "
193- "GRANT EXECUTE ON FUNCTION txid_snapshot_xmax(txid_snapshot) TO backup;" )
210+ if cls .pb .get_version (cls .node ) < 150000 :
211+ cls .node .safe_psql (
212+ "postgres" ,
213+ "CREATE ROLE backup WITH LOGIN PASSWORD 'password'; "
214+ "GRANT USAGE ON SCHEMA pg_catalog TO backup; "
215+ "GRANT EXECUTE ON FUNCTION current_setting(text) TO backup; "
216+ "GRANT EXECUTE ON FUNCTION pg_is_in_recovery() TO backup; "
217+ "GRANT EXECUTE ON FUNCTION pg_start_backup(text, boolean, boolean) TO backup; "
218+ "GRANT EXECUTE ON FUNCTION pg_stop_backup() TO backup; "
219+ "GRANT EXECUTE ON FUNCTION pg_stop_backup(boolean) TO backup; "
220+ "GRANT EXECUTE ON FUNCTION pg_create_restore_point(text) TO backup; "
221+ "GRANT EXECUTE ON FUNCTION pg_switch_xlog() TO backup; "
222+ "GRANT EXECUTE ON FUNCTION txid_current() TO backup; "
223+ "GRANT EXECUTE ON FUNCTION txid_current_snapshot() TO backup; "
224+ "GRANT EXECUTE ON FUNCTION txid_snapshot_xmax(txid_snapshot) TO backup;" )
225+ else :
226+ cls .node .safe_psql (
227+ "postgres" ,
228+ "CREATE ROLE backup WITH LOGIN PASSWORD 'password'; "
229+ "GRANT USAGE ON SCHEMA pg_catalog TO backup; "
230+ "GRANT EXECUTE ON FUNCTION current_setting(text) TO backup; "
231+ "GRANT EXECUTE ON FUNCTION pg_is_in_recovery() TO backup; "
232+ "GRANT EXECUTE ON FUNCTION pg_backup_start(text, boolean) TO backup; "
233+ "GRANT EXECUTE ON FUNCTION pg_backup_stop() TO backup; "
234+ "GRANT EXECUTE ON FUNCTION pg_backup_stop(boolean) TO backup; "
235+ "GRANT EXECUTE ON FUNCTION pg_create_restore_point(text) TO backup; "
236+ "GRANT EXECUTE ON FUNCTION pg_switch_xlog() TO backup; "
237+ "GRANT EXECUTE ON FUNCTION txid_current() TO backup; "
238+ "GRANT EXECUTE ON FUNCTION txid_current_snapshot() TO backup; "
239+ "GRANT EXECUTE ON FUNCTION txid_snapshot_xmax(txid_snapshot) TO backup;" )
240+
194241 cls .pgpass_file = os .path .join (os .path .expanduser ('~' ), '.pgpass' )
195242
196243 @classmethod
0 commit comments