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

Commit1b75b4e

Browse files
committed
Add tests for --start-time option on the one and few nodes
1 parentc81c54b commit1b75b4e

File tree

2 files changed

+374
-2
lines changed

2 files changed

+374
-2
lines changed

‎tests/backup.py

Lines changed: 370 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
importunittest
22
importos
3-
fromtimeimportsleep
3+
fromtimeimportsleep,time
44
from .helpers.ptrack_helpersimportProbackupTest,ProbackupException
55
importshutil
66
fromdistutils.dir_utilimportcopy_tree
@@ -3400,3 +3400,372 @@ def test_pg_stop_backup_missing_permissions(self):
34003400

34013401
# Clean after yourself
34023402
self.del_test_dir(module_name,fname)
3403+
3404+
# @unittest.skip("skip")
3405+
deftest_start_time(self):
3406+
3407+
fname=self.id().split('.')[3]
3408+
node=self.make_simple_node(
3409+
base_dir=os.path.join(module_name,fname,'node'),
3410+
ptrack_enable=self.ptrack,
3411+
initdb_params=['--data-checksums'])
3412+
3413+
backup_dir=os.path.join(self.tmp_path,module_name,fname,'backup')
3414+
self.init_pb(backup_dir)
3415+
self.add_instance(backup_dir,'node',node)
3416+
self.set_archiving(backup_dir,'node',node)
3417+
node.slow_start()
3418+
3419+
# FULL backup
3420+
startTime=int(time())
3421+
self.backup_node(
3422+
backup_dir,'node',node,backup_type="full",
3423+
options=['--stream','--start-time',str(startTime)])
3424+
3425+
# DELTA backup
3426+
startTime=int(time())
3427+
self.backup_node(
3428+
backup_dir,'node',node,backup_type="delta",
3429+
options=['--stream','--start-time',str(startTime)])
3430+
3431+
# PAGE backup
3432+
startTime=int(time())
3433+
self.backup_node(
3434+
backup_dir,'node',node,backup_type="page",
3435+
options=['--stream','--start-time',str(startTime)])
3436+
3437+
ifself.ptrackandnode.major_version>11:
3438+
node.safe_psql(
3439+
"postgres",
3440+
"create extension ptrack")
3441+
3442+
# PTRACK backup
3443+
startTime=int(time())
3444+
self.backup_node(
3445+
backup_dir,'node',node,backup_type="ptrack",
3446+
options=['--stream','--start-time',str(startTime)])
3447+
3448+
# Clean after yourself
3449+
self.del_test_dir(module_name,fname)
3450+
3451+
# @unittest.skip("skip")
3452+
deftest_start_time_incorrect_time(self):
3453+
3454+
fname=self.id().split('.')[3]
3455+
node=self.make_simple_node(
3456+
base_dir=os.path.join(module_name,fname,'node'),
3457+
ptrack_enable=self.ptrack,
3458+
initdb_params=['--data-checksums'])
3459+
3460+
backup_dir=os.path.join(self.tmp_path,module_name,fname,'backup')
3461+
self.init_pb(backup_dir)
3462+
self.add_instance(backup_dir,'node',node)
3463+
self.set_archiving(backup_dir,'node',node)
3464+
node.slow_start()
3465+
3466+
startTime=int(time())
3467+
#backup with correct start time
3468+
self.backup_node(
3469+
backup_dir,'node',node,
3470+
options=['--stream','--start-time',str(startTime)])
3471+
#backups with incorrect start time
3472+
try:
3473+
self.backup_node(
3474+
backup_dir,'node',node,backup_type="full",
3475+
options=['--stream','--start-time',str(startTime-10000)])
3476+
# we should die here because exception is what we expect to happen
3477+
self.assertEqual(
3478+
1,0,
3479+
"Expecting Error because start time for new backup must be newer "
3480+
"\n Output: {0}\n CMD: {1}".format(
3481+
repr(self.output),self.cmd))
3482+
exceptProbackupExceptionase:
3483+
self.assertRegex(
3484+
e.message,
3485+
"ERROR: Cannot create directory for older backup",
3486+
"\n Unexpected Error Message: {0}\n CMD: {1}".format(
3487+
repr(e.message),self.cmd))
3488+
3489+
try:
3490+
self.backup_node(
3491+
backup_dir,'node',node,backup_type="delta",
3492+
options=['--stream','--start-time',str(startTime-10000)])
3493+
# we should die here because exception is what we expect to happen
3494+
self.assertEqual(
3495+
1,0,
3496+
"Expecting Error because start time for new backup must be newer "
3497+
"\n Output: {0}\n CMD: {1}".format(
3498+
repr(self.output),self.cmd))
3499+
exceptProbackupExceptionase:
3500+
self.assertRegex(
3501+
e.message,
3502+
"ERROR: Cannot create directory for older backup",
3503+
"\n Unexpected Error Message: {0}\n CMD: {1}".format(
3504+
repr(e.message),self.cmd))
3505+
3506+
try:
3507+
self.backup_node(
3508+
backup_dir,'node',node,backup_type="page",
3509+
options=['--stream','--start-time',str(startTime-10000)])
3510+
# we should die here because exception is what we expect to happen
3511+
self.assertEqual(
3512+
1,0,
3513+
"Expecting Error because start time for new backup must be newer "
3514+
"\n Output: {0}\n CMD: {1}".format(
3515+
repr(self.output),self.cmd))
3516+
exceptProbackupExceptionase:
3517+
self.assertRegex(
3518+
e.message,
3519+
"ERROR: Cannot create directory for older backup",
3520+
"\n Unexpected Error Message: {0}\n CMD: {1}".format(
3521+
repr(e.message),self.cmd))
3522+
3523+
ifself.ptrackandnode.major_version>11:
3524+
node.safe_psql(
3525+
"postgres",
3526+
"create extension ptrack")
3527+
3528+
try:
3529+
self.backup_node(
3530+
backup_dir,'node',node,backup_type="page",
3531+
options=['--stream','--start-time',str(startTime-10000)])
3532+
# we should die here because exception is what we expect to happen
3533+
self.assertEqual(
3534+
1,0,
3535+
"Expecting Error because start time for new backup must be newer "
3536+
"\n Output: {0}\n CMD: {1}".format(
3537+
repr(self.output),self.cmd))
3538+
exceptProbackupExceptionase:
3539+
self.assertRegex(
3540+
e.message,
3541+
"ERROR: Cannot create directory for older backup",
3542+
"\n Unexpected Error Message: {0}\n CMD: {1}".format(
3543+
repr(e.message),self.cmd))
3544+
3545+
# Clean after yourself
3546+
self.del_test_dir(module_name,fname)
3547+
3548+
# @unittest.skip("skip")
3549+
deftest_start_time_few_nodes(self):
3550+
3551+
fname=self.id().split('.')[3]
3552+
node1=self.make_simple_node(
3553+
base_dir=os.path.join(module_name,fname,'node1'),
3554+
ptrack_enable=self.ptrack,
3555+
initdb_params=['--data-checksums'])
3556+
3557+
backup_dir1=os.path.join(self.tmp_path,module_name,fname,'backup1')
3558+
self.init_pb(backup_dir1)
3559+
self.add_instance(backup_dir1,'node1',node1)
3560+
self.set_archiving(backup_dir1,'node1',node1)
3561+
node1.slow_start()
3562+
3563+
node2=self.make_simple_node(
3564+
base_dir=os.path.join(module_name,fname,'node2'),
3565+
ptrack_enable=self.ptrack,
3566+
initdb_params=['--data-checksums'])
3567+
3568+
backup_dir2=os.path.join(self.tmp_path,module_name,fname,'backup2')
3569+
self.init_pb(backup_dir2)
3570+
self.add_instance(backup_dir2,'node2',node2)
3571+
self.set_archiving(backup_dir2,'node2',node2)
3572+
node2.slow_start()
3573+
3574+
# FULL backup
3575+
startTime=int(time())
3576+
self.backup_node(
3577+
backup_dir1,'node1',node1,backup_type="full",
3578+
options=['--stream','--start-time',str(startTime)])
3579+
self.backup_node(
3580+
backup_dir2,'node2',node2,backup_type="full",
3581+
options=['--stream','--start-time',str(startTime)])
3582+
3583+
show_backup1=self.show_pb(backup_dir1,'node1')[0]
3584+
show_backup2=self.show_pb(backup_dir2,'node2')[0]
3585+
self.assertEqual(show_backup1['id'],show_backup2['id'])
3586+
3587+
# DELTA backup
3588+
startTime=int(time())
3589+
self.backup_node(
3590+
backup_dir1,'node1',node1,backup_type="delta",
3591+
options=['--stream','--start-time',str(startTime)])
3592+
self.backup_node(
3593+
backup_dir2,'node2',node2,backup_type="delta",
3594+
options=['--stream','--start-time',str(startTime)])
3595+
show_backup1=self.show_pb(backup_dir1,'node1')[1]
3596+
show_backup2=self.show_pb(backup_dir2,'node2')[1]
3597+
self.assertEqual(show_backup1['id'],show_backup2['id'])
3598+
3599+
# PAGE backup
3600+
startTime=int(time())
3601+
self.backup_node(
3602+
backup_dir1,'node1',node1,backup_type="page",
3603+
options=['--stream','--start-time',str(startTime)])
3604+
self.backup_node(
3605+
backup_dir2,'node2',node2,backup_type="page",
3606+
options=['--stream','--start-time',str(startTime)])
3607+
show_backup1=self.show_pb(backup_dir1,'node1')[2]
3608+
show_backup2=self.show_pb(backup_dir2,'node2')[2]
3609+
self.assertEqual(show_backup1['id'],show_backup2['id'])
3610+
3611+
# PTRACK backup
3612+
startTime=int(time())
3613+
ifself.ptrackandnode1.major_version>11:
3614+
node1.safe_psql(
3615+
"postgres",
3616+
"create extension ptrack")
3617+
self.backup_node(
3618+
backup_dir1,'node1',node1,backup_type="ptrack",
3619+
options=['--stream','--start-time',str(startTime)])
3620+
3621+
ifself.ptrackandnode2.major_version>11:
3622+
node2.safe_psql(
3623+
"postgres",
3624+
"create extension ptrack")
3625+
self.backup_node(
3626+
backup_dir2,'node2',node2,backup_type="ptrack",
3627+
options=['--stream','--start-time',str(startTime)])
3628+
show_backup1=self.show_pb(backup_dir1,'node1')[3]
3629+
show_backup2=self.show_pb(backup_dir2,'node2')[3]
3630+
self.assertEqual(show_backup1['id'],show_backup2['id'])
3631+
3632+
# Clean after yourself
3633+
self.del_test_dir(module_name,fname)
3634+
3635+
# @unittest.skip("skip")
3636+
deftest_start_time_few_nodes_incorrect_time(self):
3637+
3638+
fname=self.id().split('.')[3]
3639+
node1=self.make_simple_node(
3640+
base_dir=os.path.join(module_name,fname,'node1'),
3641+
ptrack_enable=self.ptrack,
3642+
initdb_params=['--data-checksums'])
3643+
3644+
backup_dir1=os.path.join(self.tmp_path,module_name,fname,'backup1')
3645+
self.init_pb(backup_dir1)
3646+
self.add_instance(backup_dir1,'node1',node1)
3647+
self.set_archiving(backup_dir1,'node1',node1)
3648+
node1.slow_start()
3649+
3650+
node2=self.make_simple_node(
3651+
base_dir=os.path.join(module_name,fname,'node2'),
3652+
ptrack_enable=self.ptrack,
3653+
initdb_params=['--data-checksums'])
3654+
3655+
backup_dir2=os.path.join(self.tmp_path,module_name,fname,'backup2')
3656+
self.init_pb(backup_dir2)
3657+
self.add_instance(backup_dir2,'node2',node2)
3658+
self.set_archiving(backup_dir2,'node2',node2)
3659+
node2.slow_start()
3660+
3661+
# FULL backup
3662+
startTime=int(time())
3663+
self.backup_node(
3664+
backup_dir1,'node1',node1,backup_type="full",
3665+
options=['--stream','--start-time',str(startTime)])
3666+
self.backup_node(
3667+
backup_dir2,'node2',node2,backup_type="full",
3668+
options=['--stream','--start-time',str(startTime-10000)])
3669+
3670+
show_backup1=self.show_pb(backup_dir1,'node1')[0]
3671+
show_backup2=self.show_pb(backup_dir2,'node2')[0]
3672+
self.assertGreater(show_backup1['id'],show_backup2['id'])
3673+
3674+
# DELTA backup
3675+
startTime=int(time())
3676+
self.backup_node(
3677+
backup_dir1,'node1',node1,backup_type="delta",
3678+
options=['--stream','--start-time',str(startTime)])
3679+
# make backup with start time definitelly earlier, than existing
3680+
try:
3681+
self.backup_node(
3682+
backup_dir2,'node2',node2,backup_type="delta",
3683+
options=['--stream','--start-time',str(10000)])
3684+
self.assertEqual(
3685+
1,0,
3686+
"Expecting Error because start time for new backup must be newer "
3687+
"\n Output: {0}\n CMD: {1}".format(
3688+
repr(self.output),self.cmd))
3689+
exceptProbackupExceptionase:
3690+
self.assertRegex(
3691+
e.message,
3692+
"ERROR: Cannot create directory for older backup",
3693+
"\n Unexpected Error Message: {0}\n CMD: {1}".format(
3694+
repr(e.message),self.cmd))
3695+
3696+
show_backup1=self.show_pb(backup_dir1,'node1')[1]
3697+
show_backup2=self.show_pb(backup_dir2,'node2')[0]
3698+
self.assertGreater(show_backup1['id'],show_backup2['id'])
3699+
3700+
# PAGE backup
3701+
startTime=int(time())
3702+
self.backup_node(
3703+
backup_dir1,'node1',node1,backup_type="page",
3704+
options=['--stream','--start-time',str(startTime)])
3705+
# make backup with start time definitelly earlier, than existing
3706+
try:
3707+
self.backup_node(
3708+
backup_dir2,'node2',node2,backup_type="page",
3709+
options=['--stream','--start-time',str(10000)])
3710+
self.assertEqual(
3711+
1,0,
3712+
"Expecting Error because start time for new backup must be newer "
3713+
"\n Output: {0}\n CMD: {1}".format(
3714+
repr(self.output),self.cmd))
3715+
exceptProbackupExceptionase:
3716+
self.assertRegex(
3717+
e.message,
3718+
"ERROR: Cannot create directory for older backup",
3719+
"\n Unexpected Error Message: {0}\n CMD: {1}".format(
3720+
repr(e.message),self.cmd))
3721+
3722+
show_backup1=self.show_pb(backup_dir1,'node1')[2]
3723+
show_backup2=self.show_pb(backup_dir2,'node2')[0]
3724+
self.assertGreater(show_backup1['id'],show_backup2['id'])
3725+
3726+
# PTRACK backup
3727+
startTime=int(time())
3728+
ifself.ptrackandnode1.major_version>11:
3729+
node1.safe_psql(
3730+
"postgres",
3731+
"create extension ptrack")
3732+
self.backup_node(
3733+
backup_dir1,'node1',node1,backup_type="ptrack",
3734+
options=['--stream','--start-time',str(startTime)])
3735+
3736+
ifself.ptrackandnode2.major_version>11:
3737+
node2.safe_psql(
3738+
"postgres",
3739+
"create extension ptrack")
3740+
# make backup with start time definitelly earlier, than existing
3741+
try:
3742+
self.backup_node(
3743+
backup_dir2,'node2',node2,backup_type="ptrack",
3744+
options=['--stream','--start-time',str(10000)])
3745+
self.assertEqual(
3746+
1,0,
3747+
"Expecting Error because start time for new backup must be newer "
3748+
"\n Output: {0}\n CMD: {1}".format(
3749+
repr(self.output),self.cmd))
3750+
exceptProbackupExceptionase:
3751+
self.assertRegex(
3752+
e.message,
3753+
"ERROR: Cannot create directory for older backup",
3754+
"\n Unexpected Error Message: {0}\n CMD: {1}".format(
3755+
repr(e.message),self.cmd))
3756+
3757+
# FULL backup
3758+
startTime=int(time())
3759+
self.backup_node(
3760+
backup_dir1,'node1',node1,backup_type="full",
3761+
options=['--stream','--start-time',str(startTime)])
3762+
self.backup_node(
3763+
backup_dir2,'node2',node2,backup_type="full",
3764+
options=['--stream','--start-time',str(startTime)])
3765+
3766+
show_backup1=self.show_pb(backup_dir1,'node1')[4]
3767+
show_backup2=self.show_pb(backup_dir2,'node2')[1]
3768+
self.assertEqual(show_backup1['id'],show_backup2['id'])
3769+
3770+
# Clean after yourself
3771+
self.del_test_dir(module_name,fname)

‎tests/helpers/ptrack_helpers.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -938,7 +938,7 @@ def backup_node(
938938
backup_type='full',datname=False,options=[],
939939
asynchronous=False,gdb=False,
940940
old_binary=False,return_id=True,no_remote=False,
941-
env=None
941+
env=None,startTime=None
942942
):
943943
ifnotnodeandnotdata_dir:
944944
print('You must provide ether node or data_dir for backup')
@@ -971,6 +971,9 @@ def backup_node(
971971
ifnotold_binary:
972972
cmd_list+= ['--no-sync']
973973

974+
ifstartTime:
975+
cmd_list+= ['--start-time',startTime]
976+
974977
returnself.run_pb(cmd_list+options,asynchronous,gdb,old_binary,return_id,env=env)
975978

976979
defcheckdb_node(

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp