@@ -412,12 +412,12 @@ def test_validate_corrupted_intermediate_backups(self):
412
412
self .del_test_dir (module_name , fname )
413
413
414
414
# @unittest.skip("skip")
415
- def test_validate_error_intermediate_backups (self ):
415
+ def test_validate_specific_error_intermediate_backups (self ):
416
416
"""
417
417
make archive node, take FULL, PAGE1, PAGE2 backups,
418
418
change backup status of FULL and PAGE1 to ERROR,
419
419
run validate on PAGE1
420
- purpouse of this test is to be sure that not only
420
+ purpose of this test is to be sure that not only
421
421
CORRUPT backup descendants can be orphanized
422
422
"""
423
423
fname = self .id ().split ('.' )[3 ]
@@ -450,8 +450,6 @@ def test_validate_error_intermediate_backups(self):
450
450
with open (control_path , 'r' ) as f :
451
451
actual_control = f .read ()
452
452
453
- print (actual_control )
454
-
455
453
new_control_file = ''
456
454
for line in actual_control .splitlines ():
457
455
new_control_file += line .replace (
@@ -463,9 +461,6 @@ def test_validate_error_intermediate_backups(self):
463
461
f .flush ()
464
462
f .close ()
465
463
466
- print ('HELLO' )
467
- print (new_control_file )
468
-
469
464
# Validate PAGE1
470
465
try :
471
466
self .validate_pb (
@@ -505,6 +500,91 @@ def test_validate_error_intermediate_backups(self):
505
500
# Clean after yourself
506
501
self .del_test_dir (module_name , fname )
507
502
503
+ # @unittest.skip("skip")
504
+ def test_validate_error_intermediate_backups (self ):
505
+ """
506
+ make archive node, take FULL, PAGE1, PAGE2 backups,
507
+ change backup status of FULL and PAGE1 to ERROR,
508
+ run validate on instance
509
+ purpose of this test is to be sure that not only
510
+ CORRUPT backup descendants can be orphanized
511
+ """
512
+ fname = self .id ().split ('.' )[3 ]
513
+ node = self .make_simple_node (
514
+ base_dir = os .path .join (module_name , fname , 'node' ),
515
+ initdb_params = ['--data-checksums' ],
516
+ pg_options = {'wal_level' : 'replica' }
517
+ )
518
+ backup_dir = os .path .join (self .tmp_path , module_name , fname , 'backup' )
519
+ self .init_pb (backup_dir )
520
+ self .add_instance (backup_dir , 'node' , node )
521
+ self .set_archiving (backup_dir , 'node' , node )
522
+ node .slow_start ()
523
+
524
+ # FULL
525
+ backup_id_1 = self .backup_node (backup_dir , 'node' , node )
526
+
527
+ # PAGE1
528
+ backup_id_2 = self .backup_node (
529
+ backup_dir , 'node' , node , backup_type = 'page' )
530
+
531
+ # PAGE2
532
+ backup_id_3 = self .backup_node (
533
+ backup_dir , 'node' , node , backup_type = 'page' )
534
+
535
+ # Change FULL backup status to ERROR
536
+ control_path = os .path .join (
537
+ backup_dir , 'backups' , 'node' , backup_id_1 , 'backup.control' )
538
+
539
+ with open (control_path , 'r' ) as f :
540
+ actual_control = f .read ()
541
+
542
+ new_control_file = ''
543
+ for line in actual_control .splitlines ():
544
+ new_control_file += line .replace (
545
+ 'status = OK' , 'status = ERROR' )
546
+ new_control_file += '\n '
547
+
548
+ with open (control_path , 'wt' ) as f :
549
+ f .write (new_control_file )
550
+ f .flush ()
551
+ f .close ()
552
+
553
+ # Validate instance
554
+ try :
555
+ self .validate_pb (backup_dir )
556
+ self .assertEqual (
557
+ 1 , 0 ,
558
+ "Expecting Error because backup has status ERROR.\n "
559
+ "Output: {0} \n CMD: {1}" .format (
560
+ repr (self .output ), self .cmd ))
561
+ except ProbackupException as e :
562
+ self .assertTrue (
563
+ "WARNING: Backup {0} is orphaned because "
564
+ "his parent {1} has status: ERROR" .format (
565
+ backup_id_2 , backup_id_1 ) in e .message and
566
+ 'WARNING: Backup {0} has status ERROR. Skip validation' .format (
567
+ backup_id_1 ) in e .message and
568
+ "WARNING: Some backups are not valid" in e .message ,
569
+ '\n Unexpected Error Message: {0}\n CMD: {1}' .format (
570
+ repr (e .message ), self .cmd ))
571
+
572
+ self .assertEqual (
573
+ 'ERROR' ,
574
+ self .show_pb (backup_dir , 'node' , backup_id_1 )['status' ],
575
+ 'Backup STATUS should be "ERROR"' )
576
+ self .assertEqual (
577
+ 'ORPHAN' ,
578
+ self .show_pb (backup_dir , 'node' , backup_id_2 )['status' ],
579
+ 'Backup STATUS should be "ORPHAN"' )
580
+ self .assertEqual (
581
+ 'ORPHAN' ,
582
+ self .show_pb (backup_dir , 'node' , backup_id_3 )['status' ],
583
+ 'Backup STATUS should be "ORPHAN"' )
584
+
585
+ # Clean after yourself
586
+ self .del_test_dir (module_name , fname )
587
+
508
588
# @unittest.skip("skip")
509
589
def test_validate_corrupted_intermediate_backups_1 (self ):
510
590
"""
0 commit comments