summaryrefslogtreecommitdiff
path: root/src/leap/util/tests/test_fileutil.py
blob: f5131b3d992a0fb8831c639701944981154f4fd2 (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
94
95
96
97
98
99
100
import os
import platform
import shutil
import stat
import tempfile
import unittest

from leap.util import fileutil


class FileUtilTest(unittest.TestCase):
    """
    test our file utils
    """

    def setUp(self):
        self.system = platform.system()
        self.create_temp_dir()

    def tearDown(self):
        self.remove_temp_dir()

    #
    # helpers
    #

    def create_temp_dir(self):
        self.tmpdir = tempfile.mkdtemp()

    def remove_temp_dir(self):
        shutil.rmtree(self.tmpdir)

    def get_file_path(self, filename):
        return os.path.join(
            self.tmpdir,
            filename)

    def touch_exec_file(self):
        fp = self.get_file_path('testexec')
        open(fp, 'w').close()
        os.chmod(
            fp,
            stat.S_IRUSR | stat.S_IWUSR | stat.S_IXUSR)
        return fp

    def get_mode(self, fp):
        return stat.S_IMODE(os.stat(fp).st_mode)

    #
    # tests
    #

    def test_is_user_executable(self):
        """
        touch_exec_file creates in mode 700?
        """
        # XXX could check access X_OK

        fp = self.touch_exec_file()
        mode = self.get_mode(fp)
        self.assertEqual(mode, int('700', 8))

    def test_which(self):
        """
        which implementation ok?
        not a very reliable test,
        but I cannot think of anything smarter now
        I guess it's highly improbable that copy
        """
        # XXX yep, we can change the syspath
        # for the test... !

        if self.system == "Linux":
            self.assertEqual(
                fileutil.which('cp'),
                '/bin/cp')

    def test_mkdir_p(self):
        """
        our own mkdir -p implementation ok?
        """
        testdir = self.get_file_path(
            os.path.join('test', 'foo', 'bar'))
        self.assertEqual(os.path.isdir(testdir), False)
        fileutil.mkdir_p(testdir)
        self.assertEqual(os.path.isdir(testdir), True)

    def test_check_and_fix_urw_only(self):
        """
        ensure check_and_fix_urx_only ok?
        """
        fp = self.touch_exec_file()
        mode = self.get_mode(fp)
        self.assertEqual(mode, int('700', 8))
        fileutil.check_and_fix_urw_only(fp)
        mode = self.get_mode(fp)
        self.assertEqual(mode, int('600', 8))

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