blob: 73f4143cc6d7ecff51f90498e99e88480def559f [file] [log] [blame]
#!/usr/bin/python
#
# Copyright (C) 2010 Google Inc.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 2 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful, but
# WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301, USA.
"""Script for testing ganeti.runtime"""
from ganeti import constants
from ganeti import errors
from ganeti import runtime
from ganeti import ht
import testutils
import unittest
class _EntStub:
def __init__(self, uid=None, gid=None):
self.pw_uid = uid
self.gr_gid = gid
def _StubGetpwnam(user):
users = {
constants.MASTERD_USER: _EntStub(uid=0),
constants.CONFD_USER: _EntStub(uid=1),
constants.RAPI_USER: _EntStub(uid=2),
constants.NODED_USER: _EntStub(uid=3),
}
return users[user]
def _StubGetgrnam(group):
groups = {
constants.MASTERD_GROUP: _EntStub(gid=0),
constants.CONFD_GROUP: _EntStub(gid=1),
constants.RAPI_GROUP: _EntStub(gid=2),
constants.DAEMONS_GROUP: _EntStub(gid=3),
constants.ADMIN_GROUP: _EntStub(gid=4),
constants.NODED_GROUP: _EntStub(gid=5),
}
return groups[group]
def _RaisingStubGetpwnam(user):
raise KeyError("user not found")
def _RaisingStubGetgrnam(group):
raise KeyError("group not found")
class ResolverStubRaising(object):
def __init__(self):
raise errors.ConfigurationError("No entries")
class TestErrors(unittest.TestCase):
def setUp(self):
self.resolver = runtime.GetentResolver(_getpwnam=_StubGetpwnam,
_getgrnam=_StubGetgrnam)
def testEverythingSuccessful(self):
self.assertEqual(self.resolver.masterd_uid,
_StubGetpwnam(constants.MASTERD_USER).pw_uid)
self.assertEqual(self.resolver.masterd_gid,
_StubGetgrnam(constants.MASTERD_GROUP).gr_gid)
self.assertEqual(self.resolver.confd_uid,
_StubGetpwnam(constants.CONFD_USER).pw_uid)
self.assertEqual(self.resolver.confd_gid,
_StubGetgrnam(constants.CONFD_GROUP).gr_gid)
self.assertEqual(self.resolver.rapi_uid,
_StubGetpwnam(constants.RAPI_USER).pw_uid)
self.assertEqual(self.resolver.rapi_gid,
_StubGetgrnam(constants.RAPI_GROUP).gr_gid)
self.assertEqual(self.resolver.noded_uid,
_StubGetpwnam(constants.NODED_USER).pw_uid)
self.assertEqual(self.resolver.daemons_gid,
_StubGetgrnam(constants.DAEMONS_GROUP).gr_gid)
self.assertEqual(self.resolver.admin_gid,
_StubGetgrnam(constants.ADMIN_GROUP).gr_gid)
def testUserNotFound(self):
self.assertRaises(errors.ConfigurationError, runtime.GetentResolver,
_getpwnam=_RaisingStubGetpwnam, _getgrnam=_StubGetgrnam)
def testGroupNotFound(self):
self.assertRaises(errors.ConfigurationError, runtime.GetentResolver,
_getpwnam=_StubGetpwnam, _getgrnam=_RaisingStubGetgrnam)
def testUserNotFoundGetEnts(self):
self.assertRaises(errors.ConfigurationError, runtime.GetEnts,
resolver=ResolverStubRaising)
def testLookupForUser(self):
master_stub = _StubGetpwnam(constants.MASTERD_USER)
rapi_stub = _StubGetpwnam(constants.RAPI_USER)
self.assertEqual(self.resolver.LookupUid(master_stub.pw_uid),
constants.MASTERD_USER)
self.assertEqual(self.resolver.LookupUid(rapi_stub.pw_uid),
constants.RAPI_USER)
self.assertEqual(self.resolver.LookupUser(constants.MASTERD_USER),
master_stub.pw_uid)
self.assertEqual(self.resolver.LookupUser(constants.RAPI_USER),
rapi_stub.pw_uid)
def testLookupForGroup(self):
master_stub = _StubGetgrnam(constants.MASTERD_GROUP)
rapi_stub = _StubGetgrnam(constants.RAPI_GROUP)
self.assertEqual(self.resolver.LookupGid(master_stub.gr_gid),
constants.MASTERD_GROUP)
self.assertEqual(self.resolver.LookupGid(rapi_stub.gr_gid),
constants.RAPI_GROUP)
def testLookupForUserNotFound(self):
self.assertRaises(errors.ConfigurationError, self.resolver.LookupUid, 9999)
self.assertRaises(errors.ConfigurationError,
self.resolver.LookupUser, "does-not-exist-foo")
def testLookupForGroupNotFound(self):
self.assertRaises(errors.ConfigurationError, self.resolver.LookupGid, 9999)
self.assertRaises(errors.ConfigurationError,
self.resolver.LookupGroup, "does-not-exist-foo")
class TestArchInfo(unittest.TestCase):
EXP_TYPES = \
ht.TAnd(ht.TIsLength(2),
ht.TItems([
ht.TNonEmptyString,
ht.TNonEmptyString,
]))
def setUp(self):
self.assertTrue(runtime._arch is None)
def tearDown(self):
runtime._arch = None
def testNotInitialized(self):
self.assertRaises(errors.ProgrammerError, runtime.GetArchInfo)
def testInitializeMultiple(self):
runtime.InitArchInfo()
self.assertRaises(errors.ProgrammerError, runtime.InitArchInfo)
def testNormal(self):
runtime.InitArchInfo()
info = runtime.GetArchInfo()
self.assertTrue(self.EXP_TYPES(info),
msg=("Doesn't match expected type description: %s" %
self.EXP_TYPES))
if __name__ == "__main__":
testutils.GanetiTestProgram()