Statistics
| Branch: | Tag: | Revision:

root / test / py / ganeti.runtime_unittest.py @ 7352d33b

History | View | Annotate | Download (5.8 kB)

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