Skip to content

Commit 23532e8

Browse files
committed
[Issue #183] test coverage
1 parent 765bba4 commit 23532e8

File tree

3 files changed

+151
-2
lines changed

3 files changed

+151
-2
lines changed

tests/helpers/ptrack_helpers.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -870,7 +870,8 @@ def merge_backup(
870870

871871
def restore_node(
872872
self, backup_dir, instance, node=False,
873-
data_dir=None, backup_id=None, old_binary=False, options=[]
873+
data_dir=None, backup_id=None, old_binary=False, options=[],
874+
gdb=False
874875
):
875876

876877
if data_dir is None:
@@ -895,7 +896,7 @@ def restore_node(
895896
if not old_binary:
896897
cmd_list += ['--no-sync']
897898

898-
return self.run_pb(cmd_list + options, old_binary=old_binary)
899+
return self.run_pb(cmd_list + options, gdb=gdb, old_binary=old_binary)
899900

900901
def show_pb(
901902
self, backup_dir, instance=None, backup_id=None,

tests/locking.py

+98
Original file line numberDiff line numberDiff line change
@@ -440,3 +440,101 @@ def test_locking_concurrent_validate_and_backup(self):
440440

441441
# Clean after yourself
442442
self.del_test_dir(module_name, fname)
443+
444+
def test_locking_concurren_restore_and_delete(self):
445+
"""
446+
make node, take full backup, launch restore
447+
and stop it in the middle, delete full backup.
448+
Expect it to fail.
449+
"""
450+
fname = self.id().split('.')[3]
451+
node = self.make_simple_node(
452+
base_dir=os.path.join(module_name, fname, 'node'),
453+
initdb_params=['--data-checksums'])
454+
455+
backup_dir = os.path.join(self.tmp_path, module_name, fname, 'backup')
456+
self.init_pb(backup_dir)
457+
self.add_instance(backup_dir, 'node', node)
458+
self.set_archiving(backup_dir, 'node', node)
459+
node.slow_start()
460+
461+
# FULL
462+
full_id = self.backup_node(backup_dir, 'node', node)
463+
464+
node.cleanup()
465+
gdb = self.restore_node(backup_dir, 'node', node, gdb=True)
466+
467+
gdb.set_breakpoint('create_data_directories')
468+
gdb.run_until_break()
469+
470+
# This PAGE backup is expected to be successfull
471+
try:
472+
self.delete_pb(backup_dir, 'node', full_id)
473+
self.assertEqual(
474+
1, 0,
475+
"Expecting Error because backup is locked\n "
476+
"Output: {0} \n CMD: {1}".format(
477+
repr(self.output), self.cmd))
478+
except ProbackupException as e:
479+
self.assertIn(
480+
"ERROR: Cannot lock backup {0} directory".format(full_id),
481+
e.message,
482+
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(
483+
repr(e.message), self.cmd))
484+
485+
# Clean after yourself
486+
self.del_test_dir(module_name, fname)
487+
488+
def test_backup_directory_name(self):
489+
"""
490+
"""
491+
fname = self.id().split('.')[3]
492+
node = self.make_simple_node(
493+
base_dir=os.path.join(module_name, fname, 'node'),
494+
initdb_params=['--data-checksums'])
495+
496+
backup_dir = os.path.join(self.tmp_path, module_name, fname, 'backup')
497+
self.init_pb(backup_dir)
498+
self.add_instance(backup_dir, 'node', node)
499+
self.set_archiving(backup_dir, 'node', node)
500+
node.slow_start()
501+
502+
# FULL
503+
full_id_1 = self.backup_node(backup_dir, 'node', node)
504+
page_id_1 = self.backup_node(backup_dir, 'node', node, backup_type='page')
505+
506+
full_id_2 = self.backup_node(backup_dir, 'node', node)
507+
page_id_2 = self.backup_node(backup_dir, 'node', node, backup_type='page')
508+
509+
node.cleanup()
510+
511+
old_path = os.path.join(backup_dir, 'backups', 'node', full_id_1)
512+
new_path = os.path.join(backup_dir, 'backups', 'node', 'hello_kitty')
513+
514+
os.rename(old_path, new_path)
515+
516+
# This PAGE backup is expected to be successfull
517+
self.show_pb(backup_dir, 'node', full_id_1)
518+
519+
self.validate_pb(backup_dir)
520+
self.validate_pb(backup_dir, 'node')
521+
self.validate_pb(backup_dir, 'node', full_id_1)
522+
523+
self.restore_node(backup_dir, 'node', node, backup_id=full_id_1)
524+
525+
self.delete_pb(backup_dir, 'node', full_id_1)
526+
527+
old_path = os.path.join(backup_dir, 'backups', 'node', full_id_2)
528+
new_path = os.path.join(backup_dir, 'backups', 'node', 'hello_kitty')
529+
530+
self.set_backup(
531+
backup_dir, 'node', full_id_2, options=['--note=hello'])
532+
533+
self.merge_backup(backup_dir, 'node', page_id_2, options=["-j", "4"])
534+
535+
self.assertNotIn(
536+
'note',
537+
self.show_pb(backup_dir, 'node', page_id_2))
538+
539+
# Clean after yourself
540+
self.del_test_dir(module_name, fname)

tests/merge.py

+50
Original file line numberDiff line numberDiff line change
@@ -2437,5 +2437,55 @@ def test_merge_correct_inheritance(self):
24372437

24382438
self.del_test_dir(module_name, fname)
24392439

2440+
def test_merge_correct_inheritance_1(self):
2441+
"""
2442+
Make sure that backup metainformation fields
2443+
'note' and 'expire-time' are correctly inherited
2444+
during merge
2445+
"""
2446+
fname = self.id().split('.')[3]
2447+
backup_dir = os.path.join(self.tmp_path, module_name, fname, 'backup')
2448+
node = self.make_simple_node(
2449+
base_dir=os.path.join(module_name, fname, 'node'),
2450+
set_replication=True,
2451+
initdb_params=['--data-checksums'],
2452+
pg_options={'autovacuum': 'off'})
2453+
2454+
self.init_pb(backup_dir)
2455+
self.add_instance(backup_dir, 'node', node)
2456+
self.set_archiving(backup_dir, 'node', node)
2457+
node.slow_start()
2458+
2459+
# add database
2460+
node.safe_psql(
2461+
'postgres',
2462+
'CREATE DATABASE testdb')
2463+
2464+
# take FULL backup
2465+
self.backup_node(
2466+
backup_dir, 'node', node,
2467+
options=['--stream', '--note=hello', '--ttl=20d'])
2468+
2469+
# create database
2470+
node.safe_psql(
2471+
'postgres',
2472+
'create DATABASE testdb1')
2473+
2474+
# take PAGE backup
2475+
page_id = self.backup_node(
2476+
backup_dir, 'node', node, backup_type='page')
2477+
2478+
self.merge_backup(backup_dir, 'node', page_id)
2479+
2480+
self.assertNotIn(
2481+
'note',
2482+
self.show_pb(backup_dir, 'node', page_id))
2483+
2484+
self.assertNotIn(
2485+
'expire-time',
2486+
self.show_pb(backup_dir, 'node', page_id))
2487+
2488+
self.del_test_dir(module_name, fname)
2489+
24402490
# 1. Need new test with corrupted FULL backup
24412491
# 2. different compression levels

0 commit comments

Comments
 (0)