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
33 def __init__(self, uid=None, gid=None):
38 def _StubGetpwnam(user):
40 constants.MASTERD_USER: _EntStub(uid=0),
41 constants.CONFD_USER: _EntStub(uid=1),
42 constants.RAPI_USER: _EntStub(uid=2),
43 constants.NODED_USER: _EntStub(uid=3),
48 def _StubGetgrnam(group):
50 constants.MASTERD_GROUP: _EntStub(gid=0),
51 constants.CONFD_GROUP: _EntStub(gid=1),
52 constants.RAPI_GROUP: _EntStub(gid=2),
53 constants.DAEMONS_GROUP: _EntStub(gid=3),
54 constants.ADMIN_GROUP: _EntStub(gid=4),
55 constants.NODED_GROUP: _EntStub(gid=5),
60 def _RaisingStubGetpwnam(user):
61 raise KeyError("user not found")
64 def _RaisingStubGetgrnam(group):
65 raise KeyError("group not found")
68 class ResolverStubRaising(object):
70 raise errors.ConfigurationError("No entries")
73 class TestErrors(unittest.TestCase):
75 self.resolver = runtime.GetentResolver(_getpwnam=_StubGetpwnam,
76 _getgrnam=_StubGetgrnam)
78 def testEverythingSuccessful(self):
79 self.assertEqual(self.resolver.masterd_uid,
80 _StubGetpwnam(constants.MASTERD_USER).pw_uid)
81 self.assertEqual(self.resolver.masterd_gid,
82 _StubGetgrnam(constants.MASTERD_GROUP).gr_gid)
83 self.assertEqual(self.resolver.confd_uid,
84 _StubGetpwnam(constants.CONFD_USER).pw_uid)
85 self.assertEqual(self.resolver.confd_gid,
86 _StubGetgrnam(constants.CONFD_GROUP).gr_gid)
87 self.assertEqual(self.resolver.rapi_uid,
88 _StubGetpwnam(constants.RAPI_USER).pw_uid)
89 self.assertEqual(self.resolver.rapi_gid,
90 _StubGetgrnam(constants.RAPI_GROUP).gr_gid)
91 self.assertEqual(self.resolver.noded_uid,
92 _StubGetpwnam(constants.NODED_USER).pw_uid)
94 self.assertEqual(self.resolver.daemons_gid,
95 _StubGetgrnam(constants.DAEMONS_GROUP).gr_gid)
96 self.assertEqual(self.resolver.admin_gid,
97 _StubGetgrnam(constants.ADMIN_GROUP).gr_gid)
99 def testUserNotFound(self):
100 self.assertRaises(errors.ConfigurationError, runtime.GetentResolver,
101 _getpwnam=_RaisingStubGetpwnam, _getgrnam=_StubGetgrnam)
103 def testGroupNotFound(self):
104 self.assertRaises(errors.ConfigurationError, runtime.GetentResolver,
105 _getpwnam=_StubGetpwnam, _getgrnam=_RaisingStubGetgrnam)
107 def testUserNotFoundGetEnts(self):
108 self.assertRaises(errors.ConfigurationError, runtime.GetEnts,
109 resolver=ResolverStubRaising)
111 def testLookupForUser(self):
112 master_stub = _StubGetpwnam(constants.MASTERD_USER)
113 rapi_stub = _StubGetpwnam(constants.RAPI_USER)
114 self.assertEqual(self.resolver.LookupUid(master_stub.pw_uid),
115 constants.MASTERD_USER)
116 self.assertEqual(self.resolver.LookupUid(rapi_stub.pw_uid),
118 self.assertEqual(self.resolver.LookupUser(constants.MASTERD_USER),
120 self.assertEqual(self.resolver.LookupUser(constants.RAPI_USER),
123 def testLookupForGroup(self):
124 master_stub = _StubGetgrnam(constants.MASTERD_GROUP)
125 rapi_stub = _StubGetgrnam(constants.RAPI_GROUP)
126 self.assertEqual(self.resolver.LookupGid(master_stub.gr_gid),
127 constants.MASTERD_GROUP)
128 self.assertEqual(self.resolver.LookupGid(rapi_stub.gr_gid),
129 constants.RAPI_GROUP)
131 def testLookupForUserNotFound(self):
132 self.assertRaises(errors.ConfigurationError, self.resolver.LookupUid, 9999)
133 self.assertRaises(errors.ConfigurationError,
134 self.resolver.LookupUser, "does-not-exist-foo")
136 def testLookupForGroupNotFound(self):
137 self.assertRaises(errors.ConfigurationError, self.resolver.LookupGid, 9999)
138 self.assertRaises(errors.ConfigurationError,
139 self.resolver.LookupGroup, "does-not-exist-foo")
142 class TestArchInfo(unittest.TestCase):
144 ht.TAnd(ht.TIsLength(2),
151 self.assertTrue(runtime._arch is None)
156 def testNotInitialized(self):
157 self.assertRaises(errors.ProgrammerError, runtime.GetArchInfo)
159 def testInitializeMultiple(self):
160 runtime.InitArchInfo()
162 self.assertRaises(errors.ProgrammerError, runtime.InitArchInfo)
164 def testNormal(self):
165 runtime.InitArchInfo()
167 info = runtime.GetArchInfo()
169 self.assertTrue(self.EXP_TYPES(info),
170 msg=("Doesn't match expected type description: %s" %
174 if __name__ == "__main__":
175 testutils.GanetiTestProgram()