Statistics
| Branch: | Tag: | Revision:

root / test / py / ganeti.backend_unittest-runasroot.py @ 91c17910

History | View | Annotate | Download (2 kB)

1 1a2eb2dc Michael Hanselmann
#!/usr/bin/python
2 1a2eb2dc Michael Hanselmann
#
3 1a2eb2dc Michael Hanselmann
4 1a2eb2dc Michael Hanselmann
# Copyright (C) 2012 Google Inc.
5 1a2eb2dc Michael Hanselmann
#
6 1a2eb2dc Michael Hanselmann
# This program is free software; you can redistribute it and/or modify
7 1a2eb2dc Michael Hanselmann
# it under the terms of the GNU General Public License as published by
8 1a2eb2dc Michael Hanselmann
# the Free Software Foundation; either version 2 of the License, or
9 1a2eb2dc Michael Hanselmann
# (at your option) any later version.
10 1a2eb2dc Michael Hanselmann
#
11 1a2eb2dc Michael Hanselmann
# This program is distributed in the hope that it will be useful, but
12 1a2eb2dc Michael Hanselmann
# WITHOUT ANY WARRANTY; without even the implied warranty of
13 1a2eb2dc Michael Hanselmann
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 1a2eb2dc Michael Hanselmann
# General Public License for more details.
15 1a2eb2dc Michael Hanselmann
#
16 1a2eb2dc Michael Hanselmann
# You should have received a copy of the GNU General Public License
17 1a2eb2dc Michael Hanselmann
# along with this program; if not, write to the Free Software
18 1a2eb2dc Michael Hanselmann
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 1a2eb2dc Michael Hanselmann
# 02110-1301, USA.
20 1a2eb2dc Michael Hanselmann
21 1a2eb2dc Michael Hanselmann
22 1a2eb2dc Michael Hanselmann
"""Script for testing ganeti.backend (tests requiring root access)"""
23 1a2eb2dc Michael Hanselmann
24 1a2eb2dc Michael Hanselmann
import os
25 1a2eb2dc Michael Hanselmann
import tempfile
26 1a2eb2dc Michael Hanselmann
import shutil
27 1a2eb2dc Michael Hanselmann
import errno
28 1a2eb2dc Michael Hanselmann
29 1a2eb2dc Michael Hanselmann
from ganeti import constants
30 1a2eb2dc Michael Hanselmann
from ganeti import utils
31 1a2eb2dc Michael Hanselmann
from ganeti import compat
32 1a2eb2dc Michael Hanselmann
from ganeti import backend
33 1a2eb2dc Michael Hanselmann
34 1a2eb2dc Michael Hanselmann
import testutils
35 1a2eb2dc Michael Hanselmann
36 1a2eb2dc Michael Hanselmann
37 6ec28bc6 Michael Hanselmann
class TestCommonRestrictedCmdCheck(testutils.GanetiTestCase):
38 1a2eb2dc Michael Hanselmann
  def setUp(self):
39 1a2eb2dc Michael Hanselmann
    self.tmpdir = tempfile.mkdtemp()
40 1a2eb2dc Michael Hanselmann
41 1a2eb2dc Michael Hanselmann
  def tearDown(self):
42 1a2eb2dc Michael Hanselmann
    shutil.rmtree(self.tmpdir)
43 1a2eb2dc Michael Hanselmann
44 1a2eb2dc Michael Hanselmann
  def _PrepareTest(self):
45 1a2eb2dc Michael Hanselmann
    tmpname = utils.PathJoin(self.tmpdir, "foobar")
46 1a2eb2dc Michael Hanselmann
    os.mkdir(tmpname)
47 1a2eb2dc Michael Hanselmann
    os.chmod(tmpname, 0700)
48 1a2eb2dc Michael Hanselmann
    return tmpname
49 1a2eb2dc Michael Hanselmann
50 1a2eb2dc Michael Hanselmann
  def testCorrectOwner(self):
51 1a2eb2dc Michael Hanselmann
    tmpname = self._PrepareTest()
52 1a2eb2dc Michael Hanselmann
53 1a2eb2dc Michael Hanselmann
    os.chown(tmpname, 0, 0)
54 405bffe2 Michael Hanselmann
    (status, value) = backend._CommonRestrictedCmdCheck(tmpname, None)
55 1a2eb2dc Michael Hanselmann
    self.assertTrue(status)
56 1a2eb2dc Michael Hanselmann
    self.assertTrue(value)
57 1a2eb2dc Michael Hanselmann
58 1a2eb2dc Michael Hanselmann
  def testWrongOwner(self):
59 1a2eb2dc Michael Hanselmann
    tmpname = self._PrepareTest()
60 1a2eb2dc Michael Hanselmann
61 1a2eb2dc Michael Hanselmann
    tests = [
62 1a2eb2dc Michael Hanselmann
      (1, 0),
63 1a2eb2dc Michael Hanselmann
      (0, 1),
64 1a2eb2dc Michael Hanselmann
      (100, 50),
65 1a2eb2dc Michael Hanselmann
      ]
66 1a2eb2dc Michael Hanselmann
67 1a2eb2dc Michael Hanselmann
    for (uid, gid) in tests:
68 1a2eb2dc Michael Hanselmann
      self.assertFalse(uid == os.getuid() and gid == os.getgid())
69 1a2eb2dc Michael Hanselmann
      os.chown(tmpname, uid, gid)
70 1a2eb2dc Michael Hanselmann
71 405bffe2 Michael Hanselmann
      (status, errmsg) = backend._CommonRestrictedCmdCheck(tmpname, None)
72 1a2eb2dc Michael Hanselmann
      self.assertFalse(status)
73 1a2eb2dc Michael Hanselmann
      self.assertTrue("foobar' is not owned by " in errmsg)
74 1a2eb2dc Michael Hanselmann
75 1a2eb2dc Michael Hanselmann
76 1a2eb2dc Michael Hanselmann
if __name__ == "__main__":
77 1a2eb2dc Michael Hanselmann
  testutils.GanetiTestProgram()