7
from test import test_support
10
from ubiquity import osextras
12
class OsextrasTests(unittest.TestCase):
14
self.temp_dir = tempfile.mkdtemp()
15
self.addCleanup(shutil.rmtree, self.temp_dir)
17
def create_empty_file(self, path, mode=None):
19
os.makedirs(os.path.dirname(path))
21
if e.errno != errno.EEXIST:
28
def test_realpath_root_resolves_relative_paths(self):
29
outer_file = os.path.join(self.temp_dir, "outer-file")
30
outer_link = os.path.join(self.temp_dir, "link")
31
chroot = os.path.join(self.temp_dir, "chroot")
32
inner_dir = os.path.join(chroot, self.temp_dir[1:])
33
inner_file = os.path.join(inner_dir, "inner-file")
34
inner_file_relative = os.path.join(self.temp_dir, "inner-file")
35
inner_link = os.path.join(inner_dir, "link")
36
self.create_empty_file(outer_file)
37
os.symlink(outer_file, outer_link)
38
self.create_empty_file(inner_file)
39
os.symlink(inner_file_relative, inner_link)
41
inner_file, osextras.realpath_root(chroot, outer_link))
43
def test_find_on_path_root_resolves_relative_paths(self):
44
outer_bin = os.path.join(self.temp_dir, "bin")
45
chroot = os.path.join(self.temp_dir, "chroot")
46
inner_bin = os.path.join(chroot, self.temp_dir[1:], "bin")
47
self.create_empty_file(os.path.join(outer_bin, "executable"), 0o755)
48
self.create_empty_file(os.path.join(inner_bin, "executable"), 0o755)
49
with test_support.EnvironmentVarGuard() as env:
50
env['PATH'] = outer_bin
51
self.assertTrue(osextras.find_on_path_root(chroot, "executable"))
53
def test_unlink_force_unlinks_existing(self):
54
path = os.path.join(self.temp_dir, "file")
55
self.create_empty_file(path)
56
self.assertTrue(os.path.exists(path))
57
osextras.unlink_force(path)
58
self.assertFalse(os.path.exists(path))
60
def test_unlink_force_ignores_missing(self):
61
path = os.path.join(self.temp_dir, "missing")
62
self.assertFalse(os.path.exists(path))
63
osextras.unlink_force(path)
64
self.assertFalse(os.path.exists(path))
66
def test_glob_root_resolves_relative_paths(self):
67
inner_dir = os.path.join(self.temp_dir, "dir")
69
for inner_file in ("file1", "file2"):
70
expected_files.append(os.path.join("/dir", inner_file))
71
self.create_empty_file(os.path.join(inner_dir, inner_file))
73
sorted(expected_files),
74
sorted(osextras.glob_root(self.temp_dir, "/dir/*")))