@@ -112,7 +112,6 @@ def test_external_none(self):
112112# create directory in external_directory
113113self .init_pb (backup_dir )
114114self .add_instance (backup_dir ,'node' ,node )
115- self .set_archiving (backup_dir ,'node' ,node )
116115node .slow_start ()
117116
118117# FULL backup
@@ -134,7 +133,7 @@ def test_external_none(self):
134133# Delta backup without external directory
135134self .backup_node (
136135backup_dir ,'node' ,node ,backup_type = "delta" ,
137- options = ['--external-dirs=none' ])
136+ options = ['--external-dirs=none' , '--stream' ])
138137
139138shutil .rmtree (external_dir ,ignore_errors = True )
140139pgdata = self .pgdata_content (
@@ -153,6 +152,60 @@ def test_external_none(self):
153152# Clean after yourself
154153self .del_test_dir (module_name ,fname )
155154
155+ # @unittest.skip("skip")
156+ # @unittest.expectedFailure
157+ def test_external_dirs_overlapping (self ):
158+ """
159+ make node, create directory,
160+ take backup with two external directories pointing to
161+ the same directory, backup should fail
162+ """
163+ fname = self .id ().split ('.' )[3 ]
164+ node = self .make_simple_node (
165+ base_dir = os .path .join (module_name ,fname ,'node' ),
166+ initdb_params = ['--data-checksums' ],
167+ set_replication = True )
168+
169+ backup_dir = os .path .join (self .tmp_path ,module_name ,fname ,'backup' )
170+ external_dir1 = self .get_tblspace_path (node ,'external_dir1' )
171+ external_dir2 = self .get_tblspace_path (node ,'external_dir2' )
172+
173+ # create directory in external_directory
174+ self .init_pb (backup_dir )
175+ self .add_instance (backup_dir ,'node' ,node )
176+ node .slow_start ()
177+
178+ os .mkdir (external_dir1 )
179+ os .mkdir (external_dir2 )
180+
181+ # Full backup with external dirs
182+ try :
183+ self .backup_node (
184+ backup_dir ,'node' ,node ,
185+ options = [
186+ "-j" ,"4" ,"--stream" ,
187+ "-E" ,"{0}{1}{2}{1}{0}" .format (
188+ external_dir1 ,
189+ self .EXTERNAL_DIRECTORY_DELIMITER ,
190+ external_dir2 ,
191+ self .EXTERNAL_DIRECTORY_DELIMITER ,
192+ external_dir1 )])
193+ # we should die here because exception is what we expect to happen
194+ self .assertEqual (
195+ 1 ,0 ,
196+ "Expecting Error because tablespace mapping is incorrect"
197+ "\n Output: {0}\n CMD: {1}" .format (
198+ repr (self .output ),self .cmd ))
199+ except ProbackupException as e :
200+ self .assertTrue (
201+ 'ERROR: External directory path (-E option)' in e .message and
202+ 'contain another external directory' in e .message ,
203+ '\n Unexpected Error Message: {0}\n CMD: {1}' .format (
204+ repr (e .message ),self .cmd ))
205+
206+ # Clean after yourself
207+ self .del_test_dir (module_name ,fname )
208+
156209# @unittest.skip("skip")
157210def test_external_dir_mapping (self ):
158211"""