~xubuntu-dev/ubiquity/lp1437180_feh

« back to all changes in this revision

Viewing changes to tests/test_osextras.py

  • Committer: Colin Watson
  • Date: 2012-04-30 23:38:41 UTC
  • mfrom: (5402 trunk)
  • mto: This revision was merged to the branch mainline in revision 5403.
  • Revision ID: cjwatson@canonical.com-20120430233841-xb0qsk46lnhski7m
merge trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#! /usr/bin/python
 
2
 
 
3
import errno
 
4
import os
 
5
import shutil
 
6
import tempfile
 
7
from test import test_support
 
8
import unittest
 
9
 
 
10
from ubiquity import osextras
 
11
 
 
12
class OsextrasTests(unittest.TestCase):
 
13
    def setUp(self):
 
14
        self.temp_dir = tempfile.mkdtemp()
 
15
        self.addCleanup(shutil.rmtree, self.temp_dir)
 
16
 
 
17
    def create_empty_file(self, path, mode=None):
 
18
        try:
 
19
            os.makedirs(os.path.dirname(path))
 
20
        except OSError, e:
 
21
            if e.errno != errno.EEXIST:
 
22
                raise
 
23
        with open(path, "w"):
 
24
            pass
 
25
        if mode is not None:
 
26
            os.chmod(path, mode)
 
27
 
 
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)
 
40
        self.assertEqual(
 
41
            inner_file, osextras.realpath_root(chroot, outer_link))
 
42
 
 
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"))
 
52
 
 
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))
 
59
 
 
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))
 
65
 
 
66
    def test_glob_root_resolves_relative_paths(self):
 
67
        inner_dir = os.path.join(self.temp_dir, "dir")
 
68
        expected_files = []
 
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))
 
72
        self.assertEqual(
 
73
            sorted(expected_files),
 
74
            sorted(osextras.glob_root(self.temp_dir, "/dir/*")))