4 # Copyright (C) 2010 Google Inc.
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.
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.
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
21 """Script for testing ganeti.runtime"""
23 from ganeti import constants
24 from ganeti import errors
25 from ganeti import runtime
32 def __init__(self, uid=None, gid=None):
37 def _StubGetpwnam(user):
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),
47 def _StubGetgrnam(group):
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),
59 def _RaisingStubGetpwnam(user):
60 raise KeyError("user not found")
63 def _RaisingStubGetgrnam(group):
64 raise KeyError("group not found")
67 class ResolverStubRaising(object):
69 raise errors.ConfigurationError("No entries")
72 class TestErrors(unittest.TestCase):
74 self.resolver = runtime.GetentResolver(_getpwnam=_StubGetpwnam,
75 _getgrnam=_StubGetgrnam)
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)
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)
98 def testUserNotFound(self):
99 self.assertRaises(errors.ConfigurationError, runtime.GetentResolver,
100 _getpwnam=_RaisingStubGetpwnam, _getgrnam=_StubGetgrnam)
102 def testGroupNotFound(self):
103 self.assertRaises(errors.ConfigurationError, runtime.GetentResolver,
104 _getpwnam=_StubGetpwnam, _getgrnam=_RaisingStubGetgrnam)
106 def testUserNotFoundGetEnts(self):
107 self.assertRaises(errors.ConfigurationError, runtime.GetEnts,
108 resolver=ResolverStubRaising)
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),
117 self.assertEqual(self.resolver.LookupUser(constants.MASTERD_USER),
119 self.assertEqual(self.resolver.LookupUser(constants.RAPI_USER),
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)
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")
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")
141 if __name__ == "__main__":
142 testutils.GanetiTestProgram()