@@ -18,6 +18,28 @@ class TransactionTest(unittest.TestCase):
1818 def setUp (self ):
1919 clear_memory_fs ()
2020
21+ def test_rollback_after_create_dir (self ):
22+ """See https://github.com/bcdev/zappend/issues/69"""
23+ test_root = FileObj ("memory://test" )
24+ test_root .mkdir ()
25+ target_dir = test_root / "target.zarr"
26+ try :
27+ with Transaction (target_dir , FileObj ("memory://temp" )) as rollback_cb :
28+ try :
29+ # create target directory
30+ target_dir .mkdir ()
31+ # and then suddenly fail
32+ raise OSError ("core meltdown" )
33+ finally :
34+ # assert target directory created
35+ self .assertTrue (target_dir .exists ())
36+ # notify this
37+ rollback_cb ("delete_dir" , "" , None )
38+ except OSError :
39+ # assert that it correctly rolled back
40+ # creating of target directory
41+ self .assertFalse (target_dir .exists ())
42+
2143 def test_transaction_success (self ):
2244 self ._run_transaction_test (fail = False , rollback = True )
2345
@@ -79,14 +101,14 @@ def create_test_folder(rollback_cb: Callable):
79101 if rollback :
80102 rollback_data = rollback_file .read (mode = "rt" )
81103 rollback_records = [
82- line .split ()[:2 ] for line in rollback_data .split ("\n " )
104+ line .split (";" )[:2 ] for line in rollback_data .split ("\n " )
83105 ]
84106 self .assertEqual (
85107 [
86108 ["replace_file" , "file-1.txt" ],
87109 ["delete_file" , "file-2.txt" ],
88110 ["delete_dir" , "folder" ],
89- [],
111+ ["" ],
90112 ],
91113 rollback_records ,
92114 )
0 commit comments