Skip to content

Commit 6247ba4

Browse files
committed
tests: fixes
1 parent 0f0aa42 commit 6247ba4

File tree

1 file changed

+128
-13
lines changed

1 file changed

+128
-13
lines changed

tests/page.py

Lines changed: 128 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1212,6 +1212,15 @@ def test_multi_timeline_page(self):
12121212

12131213
node.safe_psql("postgres", "create extension pageinspect")
12141214

1215+
try:
1216+
node.safe_psql(
1217+
"postgres",
1218+
"create extension amcheck")
1219+
except QueryException as e:
1220+
node.safe_psql(
1221+
"postgres",
1222+
"create extension amcheck_next")
1223+
12151224
node.pgbench_init(scale=20)
12161225
full_id = self.backup_node(backup_dir, 'node', node)
12171226

@@ -1233,16 +1242,18 @@ def test_multi_timeline_page(self):
12331242
pgbench.wait()
12341243

12351244
# create timelines
1236-
for i in range(2, 6):
1245+
for i in range(2, 7):
12371246
node.cleanup()
12381247
self.restore_node(
1239-
backup_dir, 'node', node, backup_id=full_id,
1248+
backup_dir, 'node', node,
12401249
options=['--recovery-target-timeline={0}'.format(i)])
12411250
node.slow_start()
1242-
node.safe_psql("postgres", "CHECKPOINT")
1251+
1252+
# at this point there is i+1 timeline
12431253
pgbench = node.pgbench(options=['-T', '10', '-c', '1', '--no-vacuum'])
12441254
pgbench.wait()
12451255

1256+
# create backup at 2, 4 and 6 timeline
12461257
if i % 2 == 0:
12471258
self.backup_node(backup_dir, 'node', node, backup_type='page')
12481259

@@ -1252,8 +1263,8 @@ def test_multi_timeline_page(self):
12521263

12531264
pgdata = self.pgdata_content(node.data_dir)
12541265

1255-
# result = node.safe_psql(
1256-
# "postgres", "select * from pgbench_accounts")
1266+
result = node.safe_psql(
1267+
"postgres", "select * from pgbench_accounts")
12571268

12581269
node_restored = self.make_simple_node(
12591270
base_dir=os.path.join(module_name, fname, 'node_restored'))
@@ -1265,21 +1276,125 @@ def test_multi_timeline_page(self):
12651276
self.set_auto_conf(node_restored, {'port': node_restored.port})
12661277
node_restored.slow_start()
12671278

1268-
# result_new = node_restored.safe_psql(
1269-
# "postgres", "select * from pgbench_accounts")
1279+
result_new = node_restored.safe_psql(
1280+
"postgres", "select * from pgbench_accounts")
12701281

1271-
# self.assertEqual(result, result_new)
1282+
self.assertEqual(result, result_new)
12721283

12731284
self.compare_pgdata(pgdata, pgdata_restored)
12741285

1275-
show = self.show_archive(backup_dir)
1286+
self.checkdb_node(
1287+
backup_dir,
1288+
'node',
1289+
options=[
1290+
'--amcheck',
1291+
'-d', 'postgres', '-p', str(node.port)])
12761292

1277-
timelines = show[0]['timelines']
1293+
self.checkdb_node(
1294+
backup_dir,
1295+
'node',
1296+
options=[
1297+
'--amcheck',
1298+
'-d', 'postgres', '-p', str(node_restored.port)])
1299+
1300+
backup_list = self.show_pb(backup_dir, 'node')
12781301

1279-
# self.assertEqual()
12801302
self.assertEqual(
1281-
self.show_pb(backup_dir, 'node', page_id)['parent-backup-id'],
1282-
full_id)
1303+
backup_list[2]['parent-backup-id'],
1304+
backup_list[0]['id'])
1305+
1306+
self.assertEqual(
1307+
backup_list[3]['parent-backup-id'],
1308+
backup_list[2]['id'])
1309+
1310+
self.assertEqual(
1311+
backup_list[4]['parent-backup-id'],
1312+
backup_list[3]['id'])
1313+
1314+
self.assertEqual(
1315+
backup_list[5]['parent-backup-id'],
1316+
backup_list[4]['id'])
1317+
1318+
# Clean after yourself
1319+
self.del_test_dir(module_name, fname)
1320+
1321+
# @unittest.skip("skip")
1322+
# @unittest.expectedFailure
1323+
def test_multitimeline_page_1(self):
1324+
"""
1325+
Check that backup in PAGE mode choose
1326+
parent backup correctly:
1327+
t2 /---->
1328+
t1 -F--P---D->
1329+
1330+
P must have F as parent
1331+
"""
1332+
fname = self.id().split('.')[3]
1333+
backup_dir = os.path.join(self.tmp_path, module_name, fname, 'backup')
1334+
node = self.make_simple_node(
1335+
base_dir=os.path.join(module_name, fname, 'node'),
1336+
set_replication=True,
1337+
initdb_params=['--data-checksums'],
1338+
pg_options={'autovacuum': 'off', 'wal_log_hints': 'on'})
1339+
1340+
self.init_pb(backup_dir)
1341+
self.add_instance(backup_dir, 'node', node)
1342+
self.set_archiving(backup_dir, 'node', node)
1343+
node.slow_start()
1344+
1345+
node.safe_psql("postgres", "create extension pageinspect")
1346+
1347+
try:
1348+
node.safe_psql(
1349+
"postgres",
1350+
"create extension amcheck")
1351+
except QueryException as e:
1352+
node.safe_psql(
1353+
"postgres",
1354+
"create extension amcheck_next")
1355+
1356+
node.pgbench_init(scale=20)
1357+
full_id = self.backup_node(backup_dir, 'node', node)
1358+
1359+
pgbench = node.pgbench(options=['-T', '20', '-c', '1'])
1360+
pgbench.wait()
1361+
1362+
page1 = self.backup_node(backup_dir, 'node', node, backup_type='page')
1363+
1364+
pgbench = node.pgbench(options=['-T', '10', '-c', '1', '--no-vacuum'])
1365+
pgbench.wait()
1366+
1367+
page1 = self.backup_node(backup_dir, 'node', node, backup_type='delta')
1368+
1369+
node.cleanup()
1370+
self.restore_node(
1371+
backup_dir, 'node', node, backup_id=page1,
1372+
options=[
1373+
'--recovery-target=immediate',
1374+
'--recovery-target-action=promote'])
1375+
1376+
node.slow_start()
1377+
1378+
pgbench = node.pgbench(options=['-T', '20', '-c', '1', '--no-vacuum'])
1379+
pgbench.wait()
1380+
1381+
print(self.backup_node(
1382+
backup_dir, 'node', node, backup_type='page',
1383+
options=['--log-level-console=LOG'], return_id=False))
1384+
1385+
pgdata = self.pgdata_content(node.data_dir)
1386+
1387+
node_restored = self.make_simple_node(
1388+
base_dir=os.path.join(module_name, fname, 'node_restored'))
1389+
node_restored.cleanup()
1390+
1391+
self.restore_node(backup_dir, 'node', node_restored)
1392+
pgdata_restored = self.pgdata_content(node_restored.data_dir)
1393+
1394+
self.set_auto_conf(node_restored, {'port': node_restored.port})
1395+
node_restored.slow_start()
1396+
1397+
self.compare_pgdata(pgdata, pgdata_restored)
12831398

12841399
# Clean after yourself
12851400
self.del_test_dir(module_name, fname)

0 commit comments

Comments
 (0)