|
1 | 1 | importunittest
|
2 | 2 | importos
|
3 |
| -fromtimeimportsleep |
| 3 | +fromtimeimportsleep,time |
4 | 4 | from .helpers.ptrack_helpersimportProbackupTest,ProbackupException
|
5 | 5 | importshutil
|
6 | 6 | fromdistutils.dir_utilimportcopy_tree
|
@@ -3400,3 +3400,372 @@ def test_pg_stop_backup_missing_permissions(self):
|
3400 | 3400 |
|
3401 | 3401 | # Clean after yourself
|
3402 | 3402 | 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) |