@@ -110,3 +110,94 @@ def test_corrupt_2(self):
110110
111111 # Clean after yourself
112112 self .del_test_dir (module_name , fname )
113+
114+ # @unittest.skip("skip")
115+ def test_no_control_file (self ):
116+ """backup.control doesn't exist"""
117+ fname = self .id ().split ('.' )[3 ]
118+ backup_dir = os .path .join (self .tmp_path , module_name , fname , 'backup' )
119+ node = self .make_simple_node (
120+ base_dir = "{0}/{1}/node" .format (module_name , fname ),
121+ initdb_params = ['--data-checksums' ],
122+ pg_options = {'wal_level' : 'replica' }
123+ )
124+
125+ self .init_pb (backup_dir )
126+ self .add_instance (backup_dir , 'node' , node )
127+ self .set_archiving (backup_dir , 'node' , node )
128+ node .start ()
129+
130+ backup_id = self .backup_node (backup_dir , 'node' , node )
131+
132+ # delete backup.control file
133+ file = os .path .join (
134+ backup_dir , "backups" , "node" ,
135+ backup_id , "backup.control" )
136+ os .remove (file )
137+
138+ self .assertIn ('control file "{0}" doesn\' t exist' .format (file ), self .show_pb (backup_dir , 'node' , as_text = True ))
139+
140+ # Clean after yourself
141+ self .del_test_dir (module_name , fname )
142+
143+ # @unittest.skip("skip")
144+ def test_empty_control_file (self ):
145+ """backup.control is empty"""
146+ fname = self .id ().split ('.' )[3 ]
147+ backup_dir = os .path .join (self .tmp_path , module_name , fname , 'backup' )
148+ node = self .make_simple_node (
149+ base_dir = "{0}/{1}/node" .format (module_name , fname ),
150+ initdb_params = ['--data-checksums' ],
151+ pg_options = {'wal_level' : 'replica' }
152+ )
153+
154+ self .init_pb (backup_dir )
155+ self .add_instance (backup_dir , 'node' , node )
156+ self .set_archiving (backup_dir , 'node' , node )
157+ node .start ()
158+
159+ backup_id = self .backup_node (backup_dir , 'node' , node )
160+
161+ # truncate backup.control file
162+ file = os .path .join (
163+ backup_dir , "backups" , "node" ,
164+ backup_id , "backup.control" )
165+ fd = open (file , 'w' )
166+ fd .close ()
167+
168+ self .assertIn ('control file "{0}" is empty' .format (file ), self .show_pb (backup_dir , 'node' , as_text = True ))
169+
170+ # Clean after yourself
171+ self .del_test_dir (module_name , fname )
172+
173+ # @unittest.skip("skip")
174+ # @unittest.expectedFailure
175+ def test_corrupt_control_file (self ):
176+ """backup.control contains invalid option"""
177+ fname = self .id ().split ('.' )[3 ]
178+ backup_dir = os .path .join (self .tmp_path , module_name , fname , 'backup' )
179+ node = self .make_simple_node (
180+ base_dir = "{0}/{1}/node" .format (module_name , fname ),
181+ initdb_params = ['--data-checksums' ],
182+ pg_options = {'wal_level' : 'replica' }
183+ )
184+
185+ self .init_pb (backup_dir )
186+ self .add_instance (backup_dir , 'node' , node )
187+ self .set_archiving (backup_dir , 'node' , node )
188+ node .start ()
189+
190+ backup_id = self .backup_node (backup_dir , 'node' , node )
191+
192+ # corrupt backup.control file
193+ file = os .path .join (
194+ backup_dir , "backups" , "node" ,
195+ backup_id , "backup.control" )
196+ fd = open (file , 'a' )
197+ fd .write ("statuss = OK" )
198+ fd .close ()
199+
200+ self .assertIn ('invalid option "statuss" in file' .format (file ), self .show_pb (backup_dir , 'node' , as_text = True ))
201+
202+ # Clean after yourself
203+ self .del_test_dir (module_name , fname )
0 commit comments