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 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133
|
from __future__ import print_function, unicode_literals
import unittest
from six import text_type
from fs.permissions import Permissions, make_mode
class TestPermissions(unittest.TestCase):
def test_make_mode(self):
self.assertEqual(make_mode(None), 0o777)
self.assertEqual(make_mode(0o755), 0o755)
self.assertEqual(make_mode(["u_r", "u_w", "u_x"]), 0o700)
self.assertEqual(make_mode(Permissions(user="rwx")), 0o700)
def test_parse(self):
self.assertEqual(Permissions.parse("---------").mode, 0)
self.assertEqual(Permissions.parse("rwxrw-r--").mode, 0o764)
def test_create(self):
self.assertEqual(Permissions.create(None).mode, 0o777)
self.assertEqual(Permissions.create(0o755).mode, 0o755)
self.assertEqual(Permissions.create(["u_r", "u_w", "u_x"]).mode, 0o700)
self.assertEqual(Permissions.create(Permissions(user="rwx")).mode, 0o700)
with self.assertRaises(ValueError):
Permissions.create("foo")
def test_constructor(self):
p = Permissions(names=["foo", "bar"])
self.assertIn("foo", p)
self.assertIn("bar", p)
self.assertNotIn("baz", p)
p = Permissions(user="r", group="w", other="x")
self.assertIn("u_r", p)
self.assertIn("g_w", p)
self.assertIn("o_x", p)
self.assertNotIn("sticky", p)
self.assertNotIn("setuid", p)
self.assertNotIn("setguid", p)
p = Permissions(
user="rwx", group="rwx", other="rwx", sticky=True, setuid=True, setguid=True
)
self.assertIn("sticky", p)
self.assertIn("setuid", p)
self.assertIn("setguid", p)
p = Permissions(mode=0o421)
self.assertIn("u_r", p)
self.assertIn("g_w", p)
self.assertIn("o_x", p)
self.assertNotIn("u_w", p)
self.assertNotIn("g_x", p)
self.assertNotIn("o_r", p)
self.assertNotIn("sticky", p)
self.assertNotIn("setuid", p)
self.assertNotIn("setguid", p)
def test_properties(self):
p = Permissions()
self.assertFalse(p.u_r)
self.assertNotIn("u_r", p)
p.u_r = True
self.assertIn("u_r", p)
self.assertTrue(p.u_r)
p.u_r = False
self.assertNotIn("u_r", p)
self.assertFalse(p.u_r)
self.assertFalse(p.u_w)
p.add("u_w")
self.assertTrue(p.u_w)
p.remove("u_w")
self.assertFalse(p.u_w)
def test_repr(self):
self.assertEqual(
repr(Permissions()), "Permissions(user='', group='', other='')"
)
self.assertEqual(repr(Permissions(names=["foo"])), "Permissions(names=['foo'])")
repr(Permissions(user="rwx", group="rw", other="r"))
repr(Permissions(user="rwx", group="rw", other="r", sticky=True))
repr(Permissions(user="rwx", group="rw", other="r", setuid=True))
repr(Permissions(user="rwx", group="rw", other="r", setguid=True))
def test_as_str(self):
p = Permissions(user="rwx", group="rwx", other="rwx")
self.assertEqual(p.as_str(), "rwxrwxrwx")
self.assertEqual(str(p), "rwxrwxrwx")
p = Permissions(mode=0o777, setuid=True, setguid=True, sticky=True)
self.assertEqual(p.as_str(), "rwsrwsrwt")
def test_mode(self):
p = Permissions(user="rwx", group="rw", other="")
self.assertEqual(p.mode, 0o760)
def test_serialize(self):
p = Permissions(names=["foo"])
self.assertEqual(p.dump(), ["foo"])
pp = Permissions.load(["foo"])
self.assertIn("foo", pp)
def test_iter(self):
iter_p = iter(Permissions(names=["foo"]))
self.assertEqual(list(iter_p), ["foo"])
def test_equality(self):
self.assertEqual(Permissions(mode=0o700), Permissions(user="rwx"))
self.assertNotEqual(Permissions(mode=0o500), Permissions(user="rwx"))
self.assertEqual(Permissions(mode=0o700), ["u_r", "u_w", "u_x"])
def test_copy(self):
p = Permissions(mode=0o700)
p_copy = p.copy()
self.assertIsNot(p, p_copy)
self.assertEqual(p, p_copy)
def test_check(self):
p = Permissions(user="rwx")
self.assertTrue(p.check("u_r"))
self.assertTrue(p.check("u_r", "u_w"))
self.assertTrue(p.check("u_r", "u_w", "u_x"))
self.assertFalse(p.check("u_r", "g_w"))
self.assertFalse(p.check("g_r", "g_w"))
self.assertFalse(p.check("foo"))
def test_mode_set(self):
p = Permissions(user="r")
self.assertEqual(text_type(p), "r--------")
p.mode = 0o700
self.assertEqual(text_type(p), "rwx------")
|