Update default instance kernel version
[ganeti-local] / test / ganeti.runtime_unittest.py
1 #!/usr/bin/python
2 #
3
4 # Copyright (C) 2010 Google Inc.
5 #
6 # This program is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 2 of the License, or
9 # (at your option) any later version.
10 #
11 # This program is distributed in the hope that it will be useful, but
12 # WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 # General Public License for more details.
15 #
16 # You should have received a copy of the GNU General Public License
17 # along with this program; if not, write to the Free Software
18 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 # 02110-1301, USA.
20
21 """Script for testing ganeti.runtime"""
22
23 from ganeti import constants
24 from ganeti import errors
25 from ganeti import runtime
26
27 import testutils
28 import unittest
29
30
31 class _EntStub:
32   def __init__(self, uid=None, gid=None):
33     self.pw_uid = uid
34     self.gr_gid = gid
35
36
37 def _StubGetpwnam(user):
38   users = {
39     constants.MASTERD_USER: _EntStub(uid=0),
40     constants.CONFD_USER: _EntStub(uid=1),
41     constants.RAPI_USER: _EntStub(uid=2),
42     constants.NODED_USER: _EntStub(uid=3),
43     }
44   return users[user]
45
46
47 def _StubGetgrnam(group):
48   groups = {
49     constants.MASTERD_GROUP: _EntStub(gid=0),
50     constants.CONFD_GROUP: _EntStub(gid=1),
51     constants.RAPI_GROUP: _EntStub(gid=2),
52     constants.DAEMONS_GROUP: _EntStub(gid=3),
53     constants.ADMIN_GROUP: _EntStub(gid=4),
54     constants.NODED_GROUP: _EntStub(gid=5),
55     }
56   return groups[group]
57
58
59 def _RaisingStubGetpwnam(user):
60   raise KeyError("user not found")
61
62
63 def _RaisingStubGetgrnam(group):
64   raise KeyError("group not found")
65
66
67 class ResolverStubRaising(object):
68   def __init__(self):
69     raise errors.ConfigurationError("No entries")
70
71
72 class TestErrors(unittest.TestCase):
73   def setUp(self):
74     self.resolver = runtime.GetentResolver(_getpwnam=_StubGetpwnam,
75                                            _getgrnam=_StubGetgrnam)
76
77   def testEverythingSuccessful(self):
78     self.assertEqual(self.resolver.masterd_uid,
79                      _StubGetpwnam(constants.MASTERD_USER).pw_uid)
80     self.assertEqual(self.resolver.masterd_gid,
81                      _StubGetgrnam(constants.MASTERD_GROUP).gr_gid)
82     self.assertEqual(self.resolver.confd_uid,
83                      _StubGetpwnam(constants.CONFD_USER).pw_uid)
84     self.assertEqual(self.resolver.confd_gid,
85                      _StubGetgrnam(constants.CONFD_GROUP).gr_gid)
86     self.assertEqual(self.resolver.rapi_uid,
87                      _StubGetpwnam(constants.RAPI_USER).pw_uid)
88     self.assertEqual(self.resolver.rapi_gid,
89                      _StubGetgrnam(constants.RAPI_GROUP).gr_gid)
90     self.assertEqual(self.resolver.noded_uid,
91                      _StubGetpwnam(constants.NODED_USER).pw_uid)
92
93     self.assertEqual(self.resolver.daemons_gid,
94                      _StubGetgrnam(constants.DAEMONS_GROUP).gr_gid)
95     self.assertEqual(self.resolver.admin_gid,
96                      _StubGetgrnam(constants.ADMIN_GROUP).gr_gid)
97
98   def testUserNotFound(self):
99     self.assertRaises(errors.ConfigurationError, runtime.GetentResolver,
100                       _getpwnam=_RaisingStubGetpwnam, _getgrnam=_StubGetgrnam)
101
102   def testGroupNotFound(self):
103     self.assertRaises(errors.ConfigurationError, runtime.GetentResolver,
104                       _getpwnam=_StubGetpwnam, _getgrnam=_RaisingStubGetgrnam)
105
106   def testUserNotFoundGetEnts(self):
107     self.assertRaises(errors.ConfigurationError, runtime.GetEnts,
108                       resolver=ResolverStubRaising)
109
110   def testLookupForUser(self):
111     master_stub = _StubGetpwnam(constants.MASTERD_USER)
112     rapi_stub = _StubGetpwnam(constants.RAPI_USER)
113     self.assertEqual(self.resolver.LookupUid(master_stub.pw_uid),
114                      constants.MASTERD_USER)
115     self.assertEqual(self.resolver.LookupUid(rapi_stub.pw_uid),
116                      constants.RAPI_USER)
117     self.assertEqual(self.resolver.LookupUser(constants.MASTERD_USER),
118                      master_stub.pw_uid)
119     self.assertEqual(self.resolver.LookupUser(constants.RAPI_USER),
120                      rapi_stub.pw_uid)
121
122   def testLookupForGroup(self):
123     master_stub = _StubGetgrnam(constants.MASTERD_GROUP)
124     rapi_stub = _StubGetgrnam(constants.RAPI_GROUP)
125     self.assertEqual(self.resolver.LookupGid(master_stub.gr_gid),
126                      constants.MASTERD_GROUP)
127     self.assertEqual(self.resolver.LookupGid(rapi_stub.gr_gid),
128                      constants.RAPI_GROUP)
129
130   def testLookupForUserNotFound(self):
131     self.assertRaises(errors.ConfigurationError, self.resolver.LookupUid, 9999)
132     self.assertRaises(errors.ConfigurationError,
133                       self.resolver.LookupUser, "does-not-exist-foo")
134
135   def testLookupForGroupNotFound(self):
136     self.assertRaises(errors.ConfigurationError, self.resolver.LookupGid, 9999)
137     self.assertRaises(errors.ConfigurationError,
138                       self.resolver.LookupGroup, "does-not-exist-foo")
139
140
141 if __name__ == "__main__":
142   testutils.GanetiTestProgram()