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
|
#! /usr/bin/python3
import errno
import os
import shutil
import tempfile
from test.support import EnvironmentVarGuard
import unittest
from ubiquity import osextras
class OsextrasTests(unittest.TestCase):
def setUp(self):
self.temp_dir = tempfile.mkdtemp()
self.addCleanup(shutil.rmtree, self.temp_dir)
def create_empty_file(self, path, mode=None):
try:
os.makedirs(os.path.dirname(path))
except OSError as e:
if e.errno != errno.EEXIST:
raise
with open(path, "w"):
pass
if mode is not None:
os.chmod(path, mode)
def test_realpath_root_resolves_relative_paths(self):
outer_file = os.path.join(self.temp_dir, "outer-file")
outer_link = os.path.join(self.temp_dir, "link")
chroot = os.path.join(self.temp_dir, "chroot")
inner_dir = os.path.join(chroot, self.temp_dir[1:])
inner_file = os.path.join(inner_dir, "inner-file")
inner_file_relative = os.path.join(self.temp_dir, "inner-file")
inner_link = os.path.join(inner_dir, "link")
self.create_empty_file(outer_file)
os.symlink(outer_file, outer_link)
self.create_empty_file(inner_file)
os.symlink(inner_file_relative, inner_link)
self.assertEqual(
inner_file, osextras.realpath_root(chroot, outer_link))
def test_find_on_path_root_resolves_relative_paths(self):
outer_bin = os.path.join(self.temp_dir, "bin")
chroot = os.path.join(self.temp_dir, "chroot")
inner_bin = os.path.join(chroot, self.temp_dir[1:], "bin")
self.create_empty_file(os.path.join(outer_bin, "executable"), 0o755)
self.create_empty_file(os.path.join(inner_bin, "executable"), 0o755)
with EnvironmentVarGuard() as env:
env['PATH'] = outer_bin
self.assertTrue(osextras.find_on_path_root(chroot, "executable"))
def test_unlink_force_unlinks_existing(self):
path = os.path.join(self.temp_dir, "file")
self.create_empty_file(path)
self.assertTrue(os.path.exists(path))
osextras.unlink_force(path)
self.assertFalse(os.path.exists(path))
def test_unlink_force_ignores_missing(self):
path = os.path.join(self.temp_dir, "missing")
self.assertFalse(os.path.exists(path))
osextras.unlink_force(path)
self.assertFalse(os.path.exists(path))
def test_glob_root_resolves_relative_paths(self):
inner_dir = os.path.join(self.temp_dir, "dir")
expected_files = []
for inner_file in ("file1", "file2"):
expected_files.append(os.path.join("/dir", inner_file))
self.create_empty_file(os.path.join(inner_dir, inner_file))
self.assertEqual(
sorted(expected_files),
sorted(osextras.glob_root(self.temp_dir, "/dir/*")))
|