summaryrefslogtreecommitdiff
path: root/rdiff-backup/testing/fs_abilitiestest.py
blob: 4f265d27a23fb3d8043df261fb39836ba1792667 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import unittest, os, time
from commontest import *
from rdiff_backup import Globals, rpath, fs_abilities

class FSAbilitiesTest(unittest.TestCase):
	"""Test testing of file system abilities

	Some of these tests assume that the actual file system tested has
	the given abilities.  If the file system this is run on differs
	from the original test system, this test may/should fail. Change
	the expected values below.

	"""
	# Describes standard linux file system without acls/eas
	dir_to_test = "testfiles"
	eas = acls = 1
	chars_to_quote = ""
	extended_filenames = 1
	case_sensitive = 1
	ownership = (os.getuid() == 0)
	hardlinks = fsync_dirs = 1
	dir_inc_perms = 1
	resource_forks = 0
	carbonfile = 0
	high_perms = 1

	# Describes MS-Windows style file system
	#dir_to_test = "/mnt/fat"
	#eas = acls = 0
	#extended_filenames = 0
	#chars_to_quote = "^a-z0-9_ -"
	#ownership = hardlinks = 0
	#fsync_dirs = 1
	#dir_inc_perms = 0
	#resource_forks = 0
	#carbonfile = 0
	
	# A case insensitive directory (a cdrom mount on my system!)
	case_insensitive_path = "/media/cdrecorder"

	def testReadOnly(self):
		"""Test basic querying read only"""
		base_dir = rpath.RPath(Globals.local_connection, self.dir_to_test)
		fsa = fs_abilities.FSAbilities('read-only').init_readonly(base_dir)
		print fsa
		assert fsa.read_only == 1, fsa.read_only
		assert fsa.eas == self.eas, fsa.eas
		assert fsa.acls == self.acls, fsa.acls
		assert fsa.resource_forks == self.resource_forks, fsa.resource_forks
		assert fsa.carbonfile == self.carbonfile, fsa.carbonfile
		assert fsa.case_sensitive == self.case_sensitive, fsa.case_sensitive

	def testReadWrite(self):
		"""Test basic querying read/write"""
		base_dir = rpath.RPath(Globals.local_connection, self.dir_to_test)
		new_dir = base_dir.append("fs_abilitiestest")
		if new_dir.lstat(): Myrm(new_dir.path)
		new_dir.setdata()
		new_dir.mkdir()
		t = time.time()
		fsa = fs_abilities.FSAbilities('read/write').init_readwrite(new_dir)
		print "Time elapsed = ", time.time() - t
		print fsa
		assert fsa.read_only == 0, fsa.read_only
		assert fsa.eas == self.eas, fsa.eas
		assert fsa.acls == self.acls, fsa.acls
		assert fsa.ownership == self.ownership, fsa.ownership
		assert fsa.hardlinks == self.hardlinks, fsa.hardlinks
		assert fsa.fsync_dirs == self.fsync_dirs, fsa.fsync_dirs
		assert fsa.dir_inc_perms == self.dir_inc_perms, fsa.dir_inc_perms
		assert fsa.resource_forks == self.resource_forks, fsa.resource_forks
		assert fsa.carbonfile == self.carbonfile, fsa.carbonfile
		assert fsa.high_perms == self.high_perms, fsa.high_perms
		assert fsa.extended_filenames == self.extended_filenames
		
		#ctq_rp = new_dir.append("chars_to_quote")
		#assert ctq_rp.lstat()
		#fp = ctq_rp.open('rb')
		#chars_to_quote = fp.read()
		#assert not fp.close()
		#assert chars_to_quote == self.chars_to_quote, chars_to_quote

		new_dir.delete()

	def test_case_sensitive(self):
		"""Test a read-only case-INsensitive directory"""
		rp = rpath.RPath(Globals.local_connection, self.case_insensitive_path)
		fsa = fs_abilities.FSAbilities('read-only')
		fsa.set_case_sensitive_readonly(rp)
		assert fsa.case_sensitive == 0, fsa.case_sensitive

if __name__ == "__main__": unittest.main()