@@ -1659,3 +1659,62 @@ def test_validate_corrupted_full_1(self):
1659
1659
1660
1660
# Clean after yourself
1661
1661
self .del_test_dir (module_name , fname )
1662
+
1663
+ def test_file_size_corruption_no_validate (self ):
1664
+
1665
+ fname = self .id ().split ('.' )[3 ]
1666
+ node = self .make_simple_node (
1667
+ base_dir = "{0}/{1}/node" .format (module_name , fname ),
1668
+ # initdb_params=['--data-checksums'],
1669
+ pg_options = {'wal_level' : 'replica' }
1670
+ )
1671
+
1672
+ backup_dir = os .path .join (self .tmp_path , module_name , fname , 'backup' )
1673
+
1674
+ self .init_pb (backup_dir )
1675
+ self .add_instance (backup_dir , 'node' , node )
1676
+ self .set_archiving (backup_dir , 'node' , node )
1677
+
1678
+ node .start ()
1679
+
1680
+ node .safe_psql (
1681
+ "postgres" ,
1682
+ "create table t_heap as select 1 as id, md5(i::text) as text, "
1683
+ "md5(repeat(i::text,10))::tsvector as tsvector "
1684
+ "from generate_series(0,1000) i" )
1685
+ node .safe_psql (
1686
+ "postgres" ,
1687
+ "CHECKPOINT;" )
1688
+
1689
+ heap_path = node .safe_psql (
1690
+ "postgres" ,
1691
+ "select pg_relation_filepath('t_heap')" ).rstrip ()
1692
+ heap_size = node .safe_psql (
1693
+ "postgres" ,
1694
+ "select pg_relation_size('t_heap')" )
1695
+
1696
+ backup_id = self .backup_node (
1697
+ backup_dir , 'node' , node , backup_type = "full" ,
1698
+ options = ["-j" , "4" ], async = False , gdb = False )
1699
+
1700
+ node .stop ()
1701
+ node .cleanup ()
1702
+
1703
+ # Let`s do file corruption
1704
+ with open (os .path .join (backup_dir , "backups" , 'node' , backup_id , "database" , heap_path ), "rb+" , 0 ) as f :
1705
+ f .truncate (int (heap_size ) - 4096 )
1706
+ f .flush ()
1707
+ f .close
1708
+
1709
+ node .cleanup ()
1710
+
1711
+ try :
1712
+ self .restore_node (
1713
+ backup_dir , 'node' , node ,
1714
+ options = ["--no-validate" ])
1715
+ except ProbackupException as e :
1716
+ self .assertTrue ("ERROR: Data files restoring failed" in e .message , repr (e .message ))
1717
+ print "\n Expected error: \n " + e .message
1718
+
1719
+ # Clean after yourself
1720
+ self .del_test_dir (module_name , fname )
0 commit comments