1import unittest 2from commontest import BackupRestoreSeries 3from rdiff_backup import rpath, metadata, Globals 4"""***NOTE*** 5 6None of these tests should work unless your system supports resource 7forks. So basically these tests should only be run on Mac OS X. 8 9""" 10 11Globals.read_resource_forks = Globals.write_resource_forks = 1 12 13 14class ResourceForkTest(unittest.TestCase): 15 """Test dealing with Mac OS X style resource forks""" 16 tempdir = rpath.RPath(Globals.local_connection, 'testfiles/output') 17 rf_testdir1 = rpath.RPath(Globals.local_connection, 18 'testfiles/resource_fork_test1') 19 rf_testdir2 = rpath.RPath(Globals.local_connection, 20 'testfiles/resource_fork_test2') 21 22 def make_temp(self): 23 """Make temp directory testfiles/resource_fork_test""" 24 if self.tempdir.lstat(): 25 self.tempdir.delete() 26 self.tempdir.mkdir() 27 28 def testBasic(self): 29 """Test basic reading and writing of resource forks""" 30 self.make_temp() 31 rp = self.tempdir.append('test') 32 rp.touch() 33 assert rp.get_resource_fork() == '', rp.get_resource_fork() 34 35 s = 'new resource fork data' 36 rp.write_resource_fork(s) 37 assert rp.get_resource_fork() == s, rp.get_resource_fork() 38 39 rp2 = self.tempdir.append('test') 40 assert rp2.isreg() 41 assert rp2.get_resource_fork() == s, rp2.get_resource_fork() 42 43 def testRecord(self): 44 """Test reading, writing, and comparing of records with rforks""" 45 self.make_temp() 46 rp = self.tempdir.append('test') 47 rp.touch() 48 rp.set_resource_fork('hello') 49 50 record = metadata.RORP2Record(rp) 51 rorp_out = metadata.Record2RORP(record) 52 assert rorp_out == rp, (rorp_out, rp) 53 assert rorp_out.get_resource_fork() == 'hello' 54 55 def make_backup_dirs(self): 56 """Create testfiles/resource_fork_test[12] dirs for testing""" 57 if self.rf_testdir1.lstat(): 58 self.rf_testdir1.delete() 59 if self.rf_testdir2.lstat(): 60 self.rf_testdir2.delete() 61 self.rf_testdir1.mkdir() 62 rp1_1 = self.rf_testdir1.append('1') 63 rp1_2 = self.rf_testdir1.append('2') 64 rp1_3 = self.rf_testdir1.append('3') 65 rp1_1.touch() 66 rp1_2.touch() 67 rp1_3.symlink('foo') 68 rp1_1.write_resource_fork('This should appear in resource fork') 69 rp1_1.chmod(0o400) # test for bug changing resource forks after perms 70 rp1_2.write_resource_fork('Data for the resource fork 2') 71 72 self.rf_testdir2.mkdir() 73 rp2_1 = self.rf_testdir2.append('1') 74 rp2_2 = self.rf_testdir2.append('2') 75 rp2_3 = self.rf_testdir2.append('3') 76 rp2_1.touch() 77 rp2_2.touch() 78 rp2_3.touch() 79 rp2_1.write_resource_fork('New data for resource fork 1') 80 rp2_1.chmod(0o400) 81 rp2_3.write_resource_fork('New fork') 82 83 def testSeriesLocal(self): 84 """Test backing up and restoring directories with ACLs locally""" 85 Globals.read_resource_forks = Globals.write_resource_forks = 1 86 self.make_backup_dirs() 87 dirlist = [ 88 'testfiles/resource_fork_test1', 'testfiles/empty', 89 'testfiles/resource_fork_test2', 'testfiles/resource_fork_test1' 90 ] 91 # BackupRestoreSeries(1, 1, dirlist, compare_resource_forks = 1) 92 BackupRestoreSeries(1, 1, dirlist) 93 94 def testSeriesRemote(self): 95 """Test backing up and restoring directories with ACLs locally""" 96 Globals.read_resource_forks = Globals.write_resource_forks = 1 97 self.make_backup_dirs() 98 dirlist = [ 99 'testfiles/resource_fork_test1', 'testfiles/resource_fork_test2', 100 'testfiles/empty', 'testfiles/resource_fork_test1' 101 ] 102 # BackupRestoreSeries(1, 1, dirlist, compare_resource_forks = 1) 103 BackupRestoreSeries(1, 1, dirlist) 104 105 106if __name__ == "__main__": 107 unittest.main() 108