Statistics
| Branch: | Tag: | Revision:

root / test / py / ganeti.utils.io_unittest-runasroot.py @ cd3b4ff4

History | View | Annotate | Download (4.6 kB)

1 0d20cc42 Bernardo Dal Seno
#!/usr/bin/python
2 0d20cc42 Bernardo Dal Seno
#
3 0d20cc42 Bernardo Dal Seno
4 0d20cc42 Bernardo Dal Seno
# Copyright (C) 2006, 2007, 2010, 2011 Google Inc.
5 0d20cc42 Bernardo Dal Seno
#
6 0d20cc42 Bernardo Dal Seno
# This program is free software; you can redistribute it and/or modify
7 0d20cc42 Bernardo Dal Seno
# it under the terms of the GNU General Public License as published by
8 0d20cc42 Bernardo Dal Seno
# the Free Software Foundation; either version 2 of the License, or
9 0d20cc42 Bernardo Dal Seno
# (at your option) any later version.
10 0d20cc42 Bernardo Dal Seno
#
11 0d20cc42 Bernardo Dal Seno
# This program is distributed in the hope that it will be useful, but
12 0d20cc42 Bernardo Dal Seno
# WITHOUT ANY WARRANTY; without even the implied warranty of
13 0d20cc42 Bernardo Dal Seno
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 0d20cc42 Bernardo Dal Seno
# General Public License for more details.
15 0d20cc42 Bernardo Dal Seno
#
16 0d20cc42 Bernardo Dal Seno
# You should have received a copy of the GNU General Public License
17 0d20cc42 Bernardo Dal Seno
# along with this program; if not, write to the Free Software
18 0d20cc42 Bernardo Dal Seno
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 0d20cc42 Bernardo Dal Seno
# 02110-1301, USA.
20 0d20cc42 Bernardo Dal Seno
21 0d20cc42 Bernardo Dal Seno
22 0d20cc42 Bernardo Dal Seno
"""Script for testing ganeti.utils.io (tests that require root access)"""
23 0d20cc42 Bernardo Dal Seno
24 0d20cc42 Bernardo Dal Seno
import os
25 0d20cc42 Bernardo Dal Seno
import tempfile
26 0d20cc42 Bernardo Dal Seno
import shutil
27 0d20cc42 Bernardo Dal Seno
import errno
28 335c14dc Michele Tartara
import grp
29 335c14dc Michele Tartara
import pwd
30 335c14dc Michele Tartara
import stat
31 0d20cc42 Bernardo Dal Seno
32 0d20cc42 Bernardo Dal Seno
from ganeti import constants
33 0d20cc42 Bernardo Dal Seno
from ganeti import utils
34 0d20cc42 Bernardo Dal Seno
from ganeti import compat
35 0d20cc42 Bernardo Dal Seno
from ganeti import errors
36 0d20cc42 Bernardo Dal Seno
37 0d20cc42 Bernardo Dal Seno
import testutils
38 0d20cc42 Bernardo Dal Seno
39 0d20cc42 Bernardo Dal Seno
40 0d20cc42 Bernardo Dal Seno
class TestWriteFile(testutils.GanetiTestCase):
41 0d20cc42 Bernardo Dal Seno
  def setUp(self):
42 0d20cc42 Bernardo Dal Seno
    testutils.GanetiTestCase.setUp(self)
43 0d20cc42 Bernardo Dal Seno
    self.tmpdir = None
44 0d20cc42 Bernardo Dal Seno
    self.tfile = tempfile.NamedTemporaryFile()
45 0d20cc42 Bernardo Dal Seno
    self.did_pre = False
46 0d20cc42 Bernardo Dal Seno
    self.did_post = False
47 0d20cc42 Bernardo Dal Seno
    self.did_write = False
48 0d20cc42 Bernardo Dal Seno
49 0d20cc42 Bernardo Dal Seno
  def tearDown(self):
50 0d20cc42 Bernardo Dal Seno
    testutils.GanetiTestCase.tearDown(self)
51 0d20cc42 Bernardo Dal Seno
    if self.tmpdir:
52 0d20cc42 Bernardo Dal Seno
      shutil.rmtree(self.tmpdir)
53 0d20cc42 Bernardo Dal Seno
54 0d20cc42 Bernardo Dal Seno
  def testFileUid(self):
55 0d20cc42 Bernardo Dal Seno
    self.tmpdir = tempfile.mkdtemp()
56 0d20cc42 Bernardo Dal Seno
    target = utils.PathJoin(self.tmpdir, "target")
57 0d20cc42 Bernardo Dal Seno
    tuid = os.geteuid() + 1
58 0d20cc42 Bernardo Dal Seno
    utils.WriteFile(target, data="data", uid=tuid + 1)
59 0d20cc42 Bernardo Dal Seno
    self.assertFileUid(target, tuid + 1)
60 0d20cc42 Bernardo Dal Seno
    utils.WriteFile(target, data="data", uid=tuid)
61 0d20cc42 Bernardo Dal Seno
    self.assertFileUid(target, tuid)
62 0d20cc42 Bernardo Dal Seno
    utils.WriteFile(target, data="data", uid=tuid + 1,
63 0d20cc42 Bernardo Dal Seno
                    keep_perms=utils.KP_IF_EXISTS)
64 0d20cc42 Bernardo Dal Seno
    self.assertFileUid(target, tuid)
65 0d20cc42 Bernardo Dal Seno
    utils.WriteFile(target, data="data", keep_perms=utils.KP_ALWAYS)
66 0d20cc42 Bernardo Dal Seno
    self.assertFileUid(target, tuid)
67 0d20cc42 Bernardo Dal Seno
68 0d20cc42 Bernardo Dal Seno
  def testNewFileUid(self):
69 0d20cc42 Bernardo Dal Seno
    self.tmpdir = tempfile.mkdtemp()
70 0d20cc42 Bernardo Dal Seno
    target = utils.PathJoin(self.tmpdir, "target")
71 0d20cc42 Bernardo Dal Seno
    tuid = os.geteuid() + 1
72 0d20cc42 Bernardo Dal Seno
    utils.WriteFile(target, data="data", uid=tuid,
73 0d20cc42 Bernardo Dal Seno
                    keep_perms=utils.KP_IF_EXISTS)
74 0d20cc42 Bernardo Dal Seno
    self.assertFileUid(target, tuid)
75 0d20cc42 Bernardo Dal Seno
76 0d20cc42 Bernardo Dal Seno
  def testFileGid(self):
77 0d20cc42 Bernardo Dal Seno
    self.tmpdir = tempfile.mkdtemp()
78 0d20cc42 Bernardo Dal Seno
    target = utils.PathJoin(self.tmpdir, "target")
79 0d20cc42 Bernardo Dal Seno
    tgid = os.getegid() + 1
80 0d20cc42 Bernardo Dal Seno
    utils.WriteFile(target, data="data", gid=tgid + 1)
81 0d20cc42 Bernardo Dal Seno
    self.assertFileGid(target, tgid + 1)
82 0d20cc42 Bernardo Dal Seno
    utils.WriteFile(target, data="data", gid=tgid)
83 0d20cc42 Bernardo Dal Seno
    self.assertFileGid(target, tgid)
84 0d20cc42 Bernardo Dal Seno
    utils.WriteFile(target, data="data", gid=tgid + 1,
85 0d20cc42 Bernardo Dal Seno
                    keep_perms=utils.KP_IF_EXISTS)
86 0d20cc42 Bernardo Dal Seno
    self.assertFileGid(target, tgid)
87 0d20cc42 Bernardo Dal Seno
    utils.WriteFile(target, data="data", keep_perms=utils.KP_ALWAYS)
88 0d20cc42 Bernardo Dal Seno
    self.assertFileGid(target, tgid)
89 0d20cc42 Bernardo Dal Seno
90 0d20cc42 Bernardo Dal Seno
  def testNewFileGid(self):
91 0d20cc42 Bernardo Dal Seno
    self.tmpdir = tempfile.mkdtemp()
92 0d20cc42 Bernardo Dal Seno
    target = utils.PathJoin(self.tmpdir, "target")
93 0d20cc42 Bernardo Dal Seno
    tgid = os.getegid() + 1
94 0d20cc42 Bernardo Dal Seno
    utils.WriteFile(target, data="data", gid=tgid,
95 0d20cc42 Bernardo Dal Seno
                    keep_perms=utils.KP_IF_EXISTS)
96 0d20cc42 Bernardo Dal Seno
    self.assertFileGid(target, tgid)
97 0d20cc42 Bernardo Dal Seno
98 335c14dc Michele Tartara
class TestCanRead(testutils.GanetiTestCase):
99 335c14dc Michele Tartara
  def setUp(self):
100 335c14dc Michele Tartara
    testutils.GanetiTestCase.setUp(self)
101 335c14dc Michele Tartara
    self.tmpdir = tempfile.mkdtemp()
102 335c14dc Michele Tartara
    self.confdUid = pwd.getpwnam(constants.CONFD_USER).pw_uid
103 335c14dc Michele Tartara
    self.masterdUid = pwd.getpwnam(constants.MASTERD_USER).pw_uid
104 335c14dc Michele Tartara
    self.masterdGid = grp.getgrnam(constants.MASTERD_GROUP).gr_gid
105 335c14dc Michele Tartara
106 335c14dc Michele Tartara
  def tearDown(self):
107 335c14dc Michele Tartara
    testutils.GanetiTestCase.tearDown(self)
108 335c14dc Michele Tartara
    if self.tmpdir:
109 335c14dc Michele Tartara
      shutil.rmtree(self.tmpdir)
110 335c14dc Michele Tartara
111 335c14dc Michele Tartara
  def testUserCanRead(self):
112 335c14dc Michele Tartara
    target = utils.PathJoin(self.tmpdir, "target1")
113 335c14dc Michele Tartara
    f=open(target, "w")
114 335c14dc Michele Tartara
    f.close()
115 335c14dc Michele Tartara
    utils.EnforcePermission(target, 0400, uid=self.confdUid,
116 335c14dc Michele Tartara
                            gid=self.masterdGid)
117 335c14dc Michele Tartara
    self.assertTrue(utils.CanRead(constants.CONFD_USER, target))
118 335c14dc Michele Tartara
    if constants.CONFD_USER != constants.MASTERD_USER:
119 335c14dc Michele Tartara
      self.assertFalse(utils.CanRead(constants.MASTERD_USER, target))
120 335c14dc Michele Tartara
121 335c14dc Michele Tartara
  def testGroupCanRead(self):
122 335c14dc Michele Tartara
    target = utils.PathJoin(self.tmpdir, "target2")
123 335c14dc Michele Tartara
    f=open(target, "w")
124 335c14dc Michele Tartara
    f.close()
125 335c14dc Michele Tartara
    utils.EnforcePermission(target, 0040, uid=self.confdUid,
126 335c14dc Michele Tartara
                            gid=self.masterdGid)
127 335c14dc Michele Tartara
    self.assertFalse(utils.CanRead(constants.CONFD_USER, target))
128 335c14dc Michele Tartara
    if constants.CONFD_USER != constants.MASTERD_USER:
129 335c14dc Michele Tartara
      self.assertTrue(utils.CanRead(constants.MASTERD_USER, target))
130 335c14dc Michele Tartara
131 335c14dc Michele Tartara
    utils.EnforcePermission(target, 0040, uid=self.masterdUid+1,
132 335c14dc Michele Tartara
                            gid=self.masterdGid)
133 335c14dc Michele Tartara
    self.assertTrue(utils.CanRead(constants.MASTERD_USER, target))
134 335c14dc Michele Tartara
135 0d20cc42 Bernardo Dal Seno
136 0d20cc42 Bernardo Dal Seno
if __name__ == "__main__":
137 0d20cc42 Bernardo Dal Seno
  testutils.GanetiTestProgram()