root / test / ganeti.backend_unittest-runasroot.py @ 1a2eb2dc
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 | 1a2eb2dc | Michael Hanselmann | class TestWriteFile(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 | 1a2eb2dc | Michael Hanselmann | (status, value) = backend._CommonRemoteCommandCheck(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 | 1a2eb2dc | Michael Hanselmann | (status, errmsg) = backend._CommonRemoteCommandCheck(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() |