Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit454eeac

Browse files
committed
tests: added validate.ValidateTest.test_partial_validate_exclude and validate.ValidateTest.test_partial_validate_include
1 parentdc76fb1 commit454eeac

File tree

2 files changed

+199
-43
lines changed

2 files changed

+199
-43
lines changed

‎tests/restore.py

Lines changed: 0 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -2360,49 +2360,6 @@ def test_lost_non_data_file(self):
23602360
# Clean after yourself
23612361
self.del_test_dir(module_name,fname)
23622362

2363-
@unittest.skip("skip")
2364-
deftest_restore_specific_database_proof_of_concept(self):
2365-
""""""
2366-
fname=self.id().split('.')[3]
2367-
backup_dir=os.path.join(self.tmp_path,module_name,fname,'backup')
2368-
node=self.make_simple_node(
2369-
base_dir=os.path.join(module_name,fname,'node'),
2370-
initdb_params=['--data-checksums'],
2371-
pg_options={
2372-
'autovacuum':'off',
2373-
'shared_buffers':'512MB'})
2374-
2375-
self.init_pb(backup_dir)
2376-
self.add_instance(backup_dir,'node',node)
2377-
self.set_archiving(backup_dir,'node',node)
2378-
node.slow_start()
2379-
2380-
node.pgbench_init(scale=200)
2381-
2382-
exit(1)
2383-
2384-
# FULL backup
2385-
backup_id=self.backup_node(backup_dir,'node',node)
2386-
2387-
pgbench=node.pgbench(
2388-
stdout=subprocess.PIPE,stderr=subprocess.STDOUT,
2389-
options=['-T','100','-c8','-j2','--no-vacuum'])
2390-
2391-
pgbench.wait()
2392-
pgbench.stdout.close()
2393-
2394-
node_restored=self.make_simple_node(
2395-
base_dir=os.path.join(module_name,fname,'node_restored'))
2396-
node_restored.cleanup()
2397-
2398-
self.restore_node(backup_dir,'node',node_restored)
2399-
2400-
node_restored.append_conf(
2401-
"postgresql.auto.conf","port = {0}".format(node_restored.port))
2402-
2403-
# Clean after yourself
2404-
self.del_test_dir(module_name,fname)
2405-
24062363
deftest_partial_restore_exclude(self):
24072364
""""""
24082365
fname=self.id().split('.')[3]

‎tests/validate.py

Lines changed: 199 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3443,6 +3443,9 @@ def test_validate_corrupt_tablespace_map(self):
34433443
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(
34443444
repr(e.message),self.cmd))
34453445

3446+
# Clean after yourself
3447+
self.del_test_dir(module_name,fname)
3448+
34463449
# @unittest.expectedFailure
34473450
# @unittest.skip("skip")
34483451
deftest_validate_target_lsn(self):
@@ -3497,6 +3500,9 @@ def test_validate_target_lsn(self):
34973500
'--recovery-target-timeline=2',
34983501
'--recovery-target-lsn={0}'.format(target_lsn)])
34993502

3503+
# Clean after yourself
3504+
self.del_test_dir(module_name,fname)
3505+
35003506
# @unittest.expectedFailure
35013507
# @unittest.skip("skip")
35023508
deftest_recovery_target_time_backup_victim(self):
@@ -3555,6 +3561,9 @@ def test_recovery_target_time_backup_victim(self):
35553561
backup_dir,'node',
35563562
options=['--recovery-target-time={0}'.format(target_time)])
35573563

3564+
# Clean after yourself
3565+
self.del_test_dir(module_name,fname)
3566+
35583567
# @unittest.expectedFailure
35593568
# @unittest.skip("skip")
35603569
deftest_recovery_target_lsn_backup_victim(self):
@@ -3611,6 +3620,196 @@ def test_recovery_target_lsn_backup_victim(self):
36113620
backup_dir,'node',
36123621
options=['--recovery-target-lsn={0}'.format(target_lsn)])
36133622

3623+
# Clean after yourself
3624+
self.del_test_dir(module_name,fname)
3625+
3626+
deftest_partial_validate_empty_and_mangled_database_map(self):
3627+
"""
3628+
"""
3629+
fname=self.id().split('.')[3]
3630+
backup_dir=os.path.join(self.tmp_path,module_name,fname,'backup')
3631+
node=self.make_simple_node(
3632+
base_dir=os.path.join(module_name,fname,'node'),
3633+
set_replication=True,
3634+
initdb_params=['--data-checksums'])
3635+
3636+
self.init_pb(backup_dir)
3637+
self.add_instance(backup_dir,'node',node)
3638+
3639+
node.slow_start()
3640+
3641+
# create databases
3642+
foriinrange(1,10,1):
3643+
node.safe_psql(
3644+
'postgres',
3645+
'CREATE database db{0}'.format(i))
3646+
3647+
# FULL backup with database_map
3648+
backup_id=self.backup_node(
3649+
backup_dir,'node',node,options=['--stream'])
3650+
pgdata=self.pgdata_content(node.data_dir)
3651+
3652+
# truncate database_map
3653+
path=os.path.join(
3654+
backup_dir,'backups','node',
3655+
backup_id,'database','database_map')
3656+
withopen(path,"w")asf:
3657+
f.close()
3658+
3659+
try:
3660+
self.validate_pb(
3661+
backup_dir,'node',
3662+
options=["--db-include=db1",'--no-validate'])
3663+
self.assertEqual(
3664+
1,0,
3665+
"Expecting Error because database_map is empty.\n "
3666+
"Output: {0}\n CMD: {1}".format(
3667+
self.output,self.cmd))
3668+
exceptProbackupExceptionase:
3669+
self.assertIn(
3670+
"WARNING: Backup {0} data files are corrupted".format(
3671+
backup_id),e.message,
3672+
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(
3673+
repr(e.message),self.cmd))
3674+
3675+
# mangle database_map
3676+
withopen(path,"w")asf:
3677+
f.write("42")
3678+
f.close()
3679+
3680+
try:
3681+
self.validate_pb(
3682+
backup_dir,'node',
3683+
options=["--db-include=db1",'--no-validate'])
3684+
self.assertEqual(
3685+
1,0,
3686+
"Expecting Error because database_map is empty.\n "
3687+
"Output: {0}\n CMD: {1}".format(
3688+
self.output,self.cmd))
3689+
exceptProbackupExceptionase:
3690+
self.assertIn(
3691+
"WARNING: Backup {0} data files are corrupted".format(
3692+
backup_id),e.message,
3693+
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(
3694+
repr(e.message),self.cmd))
3695+
3696+
# Clean after yourself
3697+
self.del_test_dir(module_name,fname)
3698+
3699+
deftest_partial_validate_exclude(self):
3700+
""""""
3701+
fname=self.id().split('.')[3]
3702+
backup_dir=os.path.join(self.tmp_path,module_name,fname,'backup')
3703+
node=self.make_simple_node(
3704+
base_dir=os.path.join(module_name,fname,'node'),
3705+
initdb_params=['--data-checksums'])
3706+
3707+
self.init_pb(backup_dir)
3708+
self.add_instance(backup_dir,'node',node)
3709+
self.set_archiving(backup_dir,'node',node)
3710+
node.slow_start()
3711+
3712+
foriinrange(1,10,1):
3713+
node.safe_psql(
3714+
'postgres',
3715+
'CREATE database db{0}'.format(i))
3716+
3717+
# FULL backup
3718+
backup_id=self.backup_node(backup_dir,'node',node)
3719+
3720+
try:
3721+
self.validate_pb(
3722+
backup_dir,'node',
3723+
options=[
3724+
"--db-include=db1",
3725+
"--db-exclude=db2"])
3726+
self.assertEqual(
3727+
1,0,
3728+
"Expecting Error because of 'db-exclude' and 'db-include'.\n "
3729+
"Output: {0}\n CMD: {1}".format(
3730+
self.output,self.cmd))
3731+
exceptProbackupExceptionase:
3732+
self.assertIn(
3733+
"ERROR: You cannot specify '--db-include' "
3734+
"and '--db-exclude' together",e.message,
3735+
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(
3736+
repr(e.message),self.cmd))
3737+
3738+
output=self.validate_pb(
3739+
backup_dir,'node',
3740+
options=[
3741+
"--db-exclude=db1",
3742+
"--db-exclude=db5",
3743+
"--log-level-console=verbose"])
3744+
3745+
self.assertIn(
3746+
"VERBOSE: Skip file validation due to partial restore",output)
3747+
3748+
# Clean after yourself
3749+
self.del_test_dir(module_name,fname)
3750+
3751+
deftest_partial_validate_include(self):
3752+
"""
3753+
"""
3754+
fname=self.id().split('.')[3]
3755+
backup_dir=os.path.join(self.tmp_path,module_name,fname,'backup')
3756+
node=self.make_simple_node(
3757+
base_dir=os.path.join(module_name,fname,'node'),
3758+
initdb_params=['--data-checksums'])
3759+
3760+
self.init_pb(backup_dir)
3761+
self.add_instance(backup_dir,'node',node)
3762+
self.set_archiving(backup_dir,'node',node)
3763+
node.slow_start()
3764+
3765+
foriinrange(1,10,1):
3766+
node.safe_psql(
3767+
'postgres',
3768+
'CREATE database db{0}'.format(i))
3769+
3770+
# FULL backup
3771+
backup_id=self.backup_node(backup_dir,'node',node)
3772+
3773+
try:
3774+
self.validate_pb(
3775+
backup_dir,'node',
3776+
options=[
3777+
"--db-include=db1",
3778+
"--db-exclude=db2"])
3779+
self.assertEqual(
3780+
1,0,
3781+
"Expecting Error because of 'db-exclude' and 'db-include'.\n "
3782+
"Output: {0}\n CMD: {1}".format(
3783+
self.output,self.cmd))
3784+
exceptProbackupExceptionase:
3785+
self.assertIn(
3786+
"ERROR: You cannot specify '--db-include' "
3787+
"and '--db-exclude' together",e.message,
3788+
'\n Unexpected Error Message: {0}\n CMD: {1}'.format(
3789+
repr(e.message),self.cmd))
3790+
3791+
output=self.validate_pb(
3792+
backup_dir,'node',
3793+
options=[
3794+
"--db-include=db1",
3795+
"--db-include=db5",
3796+
"--db-include=postgres",
3797+
"--log-level-console=verbose"])
3798+
3799+
self.assertIn(
3800+
"VERBOSE: Skip file validation due to partial restore",output)
3801+
3802+
output=self.validate_pb(
3803+
backup_dir,'node',
3804+
options=[
3805+
"--log-level-console=verbose"])
3806+
3807+
self.assertNotIn(
3808+
"VERBOSE: Skip file validation due to partial restore",output)
3809+
3810+
# Clean after yourself
3811+
self.del_test_dir(module_name,fname)
3812+
36143813
# validate empty backup list
36153814
# page from future during validate
36163815
# page from future during backup

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp