Skip to content

Commit f98c91b

Browse files
committed
tests: add slow_start() method to PostgresNode
1 parent 963eb2e commit f98c91b

File tree

10 files changed

+116
-221
lines changed

10 files changed

+116
-221
lines changed

tests/archive.py

Lines changed: 13 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -45,10 +45,7 @@ def test_pgpro434_1(self):
4545

4646
self.restore_node(
4747
backup_dir, 'node', node)
48-
node.start()
49-
while node.psql(
50-
"postgres", "select pg_is_in_recovery()")[0] != 0:
51-
sleep(1)
48+
node.slow_start()
5249

5350
# Recreate backup calagoue
5451
self.init_pb(backup_dir)
@@ -64,10 +61,7 @@ def test_pgpro434_1(self):
6461
self.restore_node(
6562
backup_dir, 'node', node,
6663
options=["--recovery-target-action=promote"])
67-
node.start()
68-
while node.psql(
69-
"postgres", "select pg_is_in_recovery()")[0] != 0:
70-
sleep(1)
64+
node.slow_start()
7165

7266
self.assertEqual(
7367
result, node.safe_psql("postgres", "SELECT * FROM t_heap"),
@@ -115,10 +109,8 @@ def test_pgpro434_2(self):
115109
self.restore_node(
116110
backup_dir, 'node', node,
117111
options=['--immediate', '--recovery-target-action=promote'])
118-
node.start()
119-
while node.psql(
120-
"postgres", "select pg_is_in_recovery()")[0] != 0:
121-
sleep(1)
112+
node.slow_start()
113+
122114
if self.verbose:
123115
print(node.safe_psql(
124116
"postgres",
@@ -149,10 +141,7 @@ def test_pgpro434_2(self):
149141
self.restore_node(
150142
backup_dir, 'node', node,
151143
options=['--immediate', '--recovery-target-action=promote'])
152-
node.start()
153-
while node.psql(
154-
"postgres", "select pg_is_in_recovery()")[0] != 0:
155-
sleep(1)
144+
node.slow_start()
156145

157146
if self.verbose:
158147
print(
@@ -180,10 +169,7 @@ def test_pgpro434_2(self):
180169
self.restore_node(
181170
backup_dir, 'node', node,
182171
options=['--immediate', '--recovery-target-action=promote'])
183-
node.start()
184-
while node.psql(
185-
"postgres", "select pg_is_in_recovery()")[0] != 0:
186-
sleep(1)
172+
node.slow_start()
187173

188174
if self.verbose:
189175
print('Fourth timeline')
@@ -196,10 +182,8 @@ def test_pgpro434_2(self):
196182
self.restore_node(
197183
backup_dir, 'node', node,
198184
options=['--immediate', '--recovery-target-action=promote'])
199-
node.start()
200-
while node.psql(
201-
"postgres", "select pg_is_in_recovery()")[0] != 0:
202-
sleep(1)
185+
node.slow_start()
186+
203187
if self.verbose:
204188
print('Fifth timeline')
205189
print(node.safe_psql(
@@ -211,10 +195,8 @@ def test_pgpro434_2(self):
211195
self.restore_node(
212196
backup_dir, 'node', node,
213197
options=['--immediate', '--recovery-target-action=promote'])
214-
node.start()
215-
while node.psql(
216-
"postgres", "select pg_is_in_recovery()")[0] != 0:
217-
sleep(1)
198+
node.slow_start()
199+
218200
if self.verbose:
219201
print('Sixth timeline')
220202
print(node.safe_psql(
@@ -459,7 +441,7 @@ def test_replica_archive(self):
459441
# Settings for Replica
460442
self.restore_node(backup_dir, 'master', replica)
461443
self.set_replica(master, replica, synchronous=True)
462-
exit(1)
444+
463445
self.add_instance(backup_dir, 'replica', replica)
464446
self.set_archiving(backup_dir, 'replica', replica, replica=True)
465447
replica.start()
@@ -768,10 +750,7 @@ def test_archive_pg_receivexlog(self):
768750
# Check data correctness
769751
node.cleanup()
770752
self.restore_node(backup_dir, 'node', node)
771-
node.start()
772-
while node.psql(
773-
"postgres", "select pg_is_in_recovery()")[0] != 0:
774-
sleep(1)
753+
node.slow_start()
775754

776755
self.assertEqual(
777756
result,
@@ -843,11 +822,7 @@ def test_archive_pg_receivexlog_compression_pg10(self):
843822
# Check data correctness
844823
node.cleanup()
845824
self.restore_node(backup_dir, 'node', node)
846-
node.start()
847-
848-
while node.psql(
849-
"postgres", "select pg_is_in_recovery()")[0] != 0:
850-
sleep(1)
825+
node.slow_start()
851826

852827
self.assertEqual(
853828
result, node.safe_psql("postgres", "SELECT * FROM t_heap"),

tests/compression.py

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,8 @@ def test_compression_stream_zlib(self):
8383
"--recovery-target-action=promote"]),
8484
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(
8585
repr(self.output), self.cmd))
86-
node.start()
86+
node.slow_start()
87+
8788
full_result_new = node.execute("postgres", "SELECT * FROM t_heap")
8889
self.assertEqual(full_result, full_result_new)
8990
node.cleanup()
@@ -98,7 +99,8 @@ def test_compression_stream_zlib(self):
9899
"--recovery-target-action=promote"]),
99100
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(
100101
repr(self.output), self.cmd))
101-
node.start()
102+
node.slow_start()
103+
102104
page_result_new = node.execute("postgres", "SELECT * FROM t_heap")
103105
self.assertEqual(page_result, page_result_new)
104106
node.cleanup()
@@ -113,7 +115,8 @@ def test_compression_stream_zlib(self):
113115
"--recovery-target-action=promote"]),
114116
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(
115117
repr(self.output), self.cmd))
116-
node.start()
118+
node.slow_start()
119+
117120
ptrack_result_new = node.execute("postgres", "SELECT * FROM t_heap")
118121
self.assertEqual(ptrack_result, ptrack_result_new)
119122
node.cleanup()
@@ -187,7 +190,8 @@ def test_compression_archive_zlib(self):
187190
"--recovery-target-action=promote"]),
188191
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(
189192
repr(self.output), self.cmd))
190-
node.start()
193+
node.slow_start()
194+
191195
full_result_new = node.execute("postgres", "SELECT * FROM t_heap")
192196
self.assertEqual(full_result, full_result_new)
193197
node.cleanup()
@@ -202,7 +206,8 @@ def test_compression_archive_zlib(self):
202206
"--recovery-target-action=promote"]),
203207
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(
204208
repr(self.output), self.cmd))
205-
node.start()
209+
node.slow_start()
210+
206211
page_result_new = node.execute("postgres", "SELECT * FROM t_heap")
207212
self.assertEqual(page_result, page_result_new)
208213
node.cleanup()
@@ -217,7 +222,8 @@ def test_compression_archive_zlib(self):
217222
"--recovery-target-action=promote"]),
218223
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(
219224
repr(self.output), self.cmd))
220-
node.start()
225+
node.slow_start()
226+
221227
ptrack_result_new = node.execute("postgres", "SELECT * FROM t_heap")
222228
self.assertEqual(ptrack_result, ptrack_result_new)
223229
node.cleanup()
@@ -294,7 +300,8 @@ def test_compression_stream_pglz(self):
294300
"--recovery-target-action=promote"]),
295301
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(
296302
repr(self.output), self.cmd))
297-
node.start()
303+
node.slow_start()
304+
298305
full_result_new = node.execute("postgres", "SELECT * FROM t_heap")
299306
self.assertEqual(full_result, full_result_new)
300307
node.cleanup()
@@ -309,7 +316,8 @@ def test_compression_stream_pglz(self):
309316
"--recovery-target-action=promote"]),
310317
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(
311318
repr(self.output), self.cmd))
312-
node.start()
319+
node.slow_start()
320+
313321
page_result_new = node.execute("postgres", "SELECT * FROM t_heap")
314322
self.assertEqual(page_result, page_result_new)
315323
node.cleanup()
@@ -324,7 +332,8 @@ def test_compression_stream_pglz(self):
324332
"--recovery-target-action=promote"]),
325333
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(
326334
repr(self.output), self.cmd))
327-
node.start()
335+
node.slow_start()
336+
328337
ptrack_result_new = node.execute("postgres", "SELECT * FROM t_heap")
329338
self.assertEqual(ptrack_result, ptrack_result_new)
330339
node.cleanup()
@@ -401,7 +410,8 @@ def test_compression_archive_pglz(self):
401410
"--recovery-target-action=promote"]),
402411
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(
403412
repr(self.output), self.cmd))
404-
node.start()
413+
node.slow_start()
414+
405415
full_result_new = node.execute("postgres", "SELECT * FROM t_heap")
406416
self.assertEqual(full_result, full_result_new)
407417
node.cleanup()
@@ -416,7 +426,8 @@ def test_compression_archive_pglz(self):
416426
"--recovery-target-action=promote"]),
417427
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(
418428
repr(self.output), self.cmd))
419-
node.start()
429+
node.slow_start()
430+
420431
page_result_new = node.execute("postgres", "SELECT * FROM t_heap")
421432
self.assertEqual(page_result, page_result_new)
422433
node.cleanup()
@@ -431,7 +442,8 @@ def test_compression_archive_pglz(self):
431442
"--recovery-target-action=promote"]),
432443
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(
433444
repr(self.output), self.cmd))
434-
node.start()
445+
node.slow_start()
446+
435447
ptrack_result_new = node.execute("postgres", "SELECT * FROM t_heap")
436448
self.assertEqual(ptrack_result, ptrack_result_new)
437449
node.cleanup()

tests/delta.py

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -508,10 +508,7 @@ def test_delta_multiple_segments(self):
508508
# START RESTORED NODE
509509
restored_node.append_conf(
510510
"postgresql.auto.conf", "port = {0}".format(restored_node.port))
511-
restored_node.start()
512-
while restored_node.safe_psql(
513-
"postgres", "select pg_is_in_recovery()") == 't\n':
514-
time.sleep(1)
511+
restored_node.slow_start()
515512

516513
result_new = restored_node.safe_psql(
517514
"postgres", "select * from pgbench_accounts")
@@ -946,11 +943,8 @@ def test_alter_table_set_tablespace_delta(self):
946943
# START RESTORED NODE
947944
node_restored.append_conf(
948945
'postgresql.auto.conf', 'port = {0}'.format(node_restored.port))
949-
node_restored.start()
946+
node_restored.slow_start()
950947

951-
while node_restored.safe_psql(
952-
"postgres", "select pg_is_in_recovery()") == 't\n':
953-
time.sleep(1)
954948
result_new = node_restored.safe_psql(
955949
"postgres", "select * from t_heap")
956950

tests/expected/option_help.out

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ pg_probackup - utility to manage backup/recovery of PostgreSQL database.
2525
[--replica-timeout=timeout]
2626

2727
pg_probackup show-config -B backup-dir --instance=instance_name
28+
[--format=format]
2829

2930
pg_probackup backup -B backup-path -b backup-mode --instance=instance_name
3031
[-C] [--stream [-S slot-name]] [--backup-pg-log]
@@ -61,10 +62,12 @@ pg_probackup - utility to manage backup/recovery of PostgreSQL database.
6162
pg_probackup validate -B backup-dir [--instance=instance_name]
6263
[-i backup-id] [--progress]
6364
[--time=time|--xid=xid [--inclusive=boolean]]
65+
[--recovery-target-name=target-name]
6466
[--timeline=timeline]
6567

6668
pg_probackup show -B backup-dir
6769
[--instance=instance_name [-i backup-id]]
70+
[--format=format]
6871

6972
pg_probackup delete -B backup-dir --instance=instance_name
7073
[--wal] [-i backup-id | --expired]

tests/false_positive.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -191,7 +191,7 @@ def test_ptrack_concurrent_get_and_clear_1(self):
191191
node.data_dir, ignore_ptrack=False)
192192
self.compare_pgdata(pgdata, pgdata_restored)
193193

194-
node.start()
194+
node.slow_start()
195195
# Logical comparison
196196
self.assertEqual(
197197
result,
@@ -290,7 +290,7 @@ def test_ptrack_concurrent_get_and_clear_2(self):
290290
node.data_dir, ignore_ptrack=False)
291291
self.compare_pgdata(pgdata, pgdata_restored)
292292

293-
node.start()
293+
node.slow_start()
294294
# Logical comparison
295295
self.assertEqual(
296296
result,

tests/helpers/ptrack_helpers.py

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,25 @@ def __str__(self):
112112
return '\n ERROR: {0}\n CMD: {1}'.format(repr(self.message), self.cmd)
113113

114114

115+
def slow_start(self):
116+
117+
# wait for https://github.com/postgrespro/testgres/pull/50
118+
# self.poll_query_until(
119+
# "postgres",
120+
# "SELECT not pg_is_in_recovery()",
121+
# raise_operational_error=False)
122+
123+
self.start()
124+
while True:
125+
try:
126+
self.poll_query_until(
127+
"postgres",
128+
"SELECT not pg_is_in_recovery()")
129+
break
130+
except Exception as e:
131+
continue
132+
133+
115134
class ProbackupTest(object):
116135
# Class attributes
117136
enterprise = is_enterprise()
@@ -205,6 +224,8 @@ def make_simple_node(
205224
os.makedirs(real_base_dir)
206225

207226
node = testgres.get_new_node('test', base_dir=real_base_dir)
227+
# bound method slow_start() to 'node' class instance
228+
node.slow_start = slow_start.__get__(node)
208229
node.should_rm_dirs = True
209230
node.init(
210231
initdb_params=initdb_params, allow_streaming=set_replication)

0 commit comments

Comments
 (0)