Statistics
| Branch: | Tag: | Revision:

root / test / py / ganeti.runtime_unittest.py @ 201ef8b4

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 201ef8b4 Michele Tartara
    constants.LUXID_USER: _EntStub(uid=4),
45 f12e1736 René Nussbaumer
    }
46 f12e1736 René Nussbaumer
  return users[user]
47 f12e1736 René Nussbaumer
48 f12e1736 René Nussbaumer
49 f12e1736 René Nussbaumer
def _StubGetgrnam(group):
50 f12e1736 René Nussbaumer
  groups = {
51 f12e1736 René Nussbaumer
    constants.MASTERD_GROUP: _EntStub(gid=0),
52 f12e1736 René Nussbaumer
    constants.CONFD_GROUP: _EntStub(gid=1),
53 f12e1736 René Nussbaumer
    constants.RAPI_GROUP: _EntStub(gid=2),
54 f12e1736 René Nussbaumer
    constants.DAEMONS_GROUP: _EntStub(gid=3),
55 f12e1736 René Nussbaumer
    constants.ADMIN_GROUP: _EntStub(gid=4),
56 44fbd23b René Nussbaumer
    constants.NODED_GROUP: _EntStub(gid=5),
57 201ef8b4 Michele Tartara
    constants.LUXID_GROUP: _EntStub(gid=6),
58 f12e1736 René Nussbaumer
    }
59 f12e1736 René Nussbaumer
  return groups[group]
60 f12e1736 René Nussbaumer
61 f12e1736 René Nussbaumer
62 f12e1736 René Nussbaumer
def _RaisingStubGetpwnam(user):
63 f12e1736 René Nussbaumer
  raise KeyError("user not found")
64 f12e1736 René Nussbaumer
65 f12e1736 René Nussbaumer
66 f12e1736 René Nussbaumer
def _RaisingStubGetgrnam(group):
67 f12e1736 René Nussbaumer
  raise KeyError("group not found")
68 f12e1736 René Nussbaumer
69 f12e1736 René Nussbaumer
70 f12e1736 René Nussbaumer
class ResolverStubRaising(object):
71 f12e1736 René Nussbaumer
  def __init__(self):
72 f12e1736 René Nussbaumer
    raise errors.ConfigurationError("No entries")
73 f12e1736 René Nussbaumer
74 f12e1736 René Nussbaumer
75 44fbd23b René Nussbaumer
class TestErrors(unittest.TestCase):
76 44fbd23b René Nussbaumer
  def setUp(self):
77 44fbd23b René Nussbaumer
    self.resolver = runtime.GetentResolver(_getpwnam=_StubGetpwnam,
78 44fbd23b René Nussbaumer
                                           _getgrnam=_StubGetgrnam)
79 f12e1736 René Nussbaumer
80 44fbd23b René Nussbaumer
  def testEverythingSuccessful(self):
81 44fbd23b René Nussbaumer
    self.assertEqual(self.resolver.masterd_uid,
82 f12e1736 René Nussbaumer
                     _StubGetpwnam(constants.MASTERD_USER).pw_uid)
83 44fbd23b René Nussbaumer
    self.assertEqual(self.resolver.masterd_gid,
84 f12e1736 René Nussbaumer
                     _StubGetgrnam(constants.MASTERD_GROUP).gr_gid)
85 44fbd23b René Nussbaumer
    self.assertEqual(self.resolver.confd_uid,
86 f12e1736 René Nussbaumer
                     _StubGetpwnam(constants.CONFD_USER).pw_uid)
87 44fbd23b René Nussbaumer
    self.assertEqual(self.resolver.confd_gid,
88 f12e1736 René Nussbaumer
                     _StubGetgrnam(constants.CONFD_GROUP).gr_gid)
89 44fbd23b René Nussbaumer
    self.assertEqual(self.resolver.rapi_uid,
90 f12e1736 René Nussbaumer
                     _StubGetpwnam(constants.RAPI_USER).pw_uid)
91 44fbd23b René Nussbaumer
    self.assertEqual(self.resolver.rapi_gid,
92 f12e1736 René Nussbaumer
                     _StubGetgrnam(constants.RAPI_GROUP).gr_gid)
93 44fbd23b René Nussbaumer
    self.assertEqual(self.resolver.noded_uid,
94 f12e1736 René Nussbaumer
                     _StubGetpwnam(constants.NODED_USER).pw_uid)
95 f12e1736 René Nussbaumer
96 44fbd23b René Nussbaumer
    self.assertEqual(self.resolver.daemons_gid,
97 f12e1736 René Nussbaumer
                     _StubGetgrnam(constants.DAEMONS_GROUP).gr_gid)
98 44fbd23b René Nussbaumer
    self.assertEqual(self.resolver.admin_gid,
99 f12e1736 René Nussbaumer
                     _StubGetgrnam(constants.ADMIN_GROUP).gr_gid)
100 f12e1736 René Nussbaumer
101 f12e1736 René Nussbaumer
  def testUserNotFound(self):
102 f12e1736 René Nussbaumer
    self.assertRaises(errors.ConfigurationError, runtime.GetentResolver,
103 f12e1736 René Nussbaumer
                      _getpwnam=_RaisingStubGetpwnam, _getgrnam=_StubGetgrnam)
104 f12e1736 René Nussbaumer
105 f12e1736 René Nussbaumer
  def testGroupNotFound(self):
106 f12e1736 René Nussbaumer
    self.assertRaises(errors.ConfigurationError, runtime.GetentResolver,
107 f12e1736 René Nussbaumer
                      _getpwnam=_StubGetpwnam, _getgrnam=_RaisingStubGetgrnam)
108 f12e1736 René Nussbaumer
109 f12e1736 René Nussbaumer
  def testUserNotFoundGetEnts(self):
110 f12e1736 René Nussbaumer
    self.assertRaises(errors.ConfigurationError, runtime.GetEnts,
111 f12e1736 René Nussbaumer
                      resolver=ResolverStubRaising)
112 f12e1736 René Nussbaumer
113 44fbd23b René Nussbaumer
  def testLookupForUser(self):
114 44fbd23b René Nussbaumer
    master_stub = _StubGetpwnam(constants.MASTERD_USER)
115 44fbd23b René Nussbaumer
    rapi_stub = _StubGetpwnam(constants.RAPI_USER)
116 44fbd23b René Nussbaumer
    self.assertEqual(self.resolver.LookupUid(master_stub.pw_uid),
117 44fbd23b René Nussbaumer
                     constants.MASTERD_USER)
118 44fbd23b René Nussbaumer
    self.assertEqual(self.resolver.LookupUid(rapi_stub.pw_uid),
119 44fbd23b René Nussbaumer
                     constants.RAPI_USER)
120 44fbd23b René Nussbaumer
    self.assertEqual(self.resolver.LookupUser(constants.MASTERD_USER),
121 44fbd23b René Nussbaumer
                     master_stub.pw_uid)
122 44fbd23b René Nussbaumer
    self.assertEqual(self.resolver.LookupUser(constants.RAPI_USER),
123 44fbd23b René Nussbaumer
                     rapi_stub.pw_uid)
124 44fbd23b René Nussbaumer
125 44fbd23b René Nussbaumer
  def testLookupForGroup(self):
126 44fbd23b René Nussbaumer
    master_stub = _StubGetgrnam(constants.MASTERD_GROUP)
127 44fbd23b René Nussbaumer
    rapi_stub = _StubGetgrnam(constants.RAPI_GROUP)
128 44fbd23b René Nussbaumer
    self.assertEqual(self.resolver.LookupGid(master_stub.gr_gid),
129 44fbd23b René Nussbaumer
                     constants.MASTERD_GROUP)
130 44fbd23b René Nussbaumer
    self.assertEqual(self.resolver.LookupGid(rapi_stub.gr_gid),
131 44fbd23b René Nussbaumer
                     constants.RAPI_GROUP)
132 44fbd23b René Nussbaumer
133 44fbd23b René Nussbaumer
  def testLookupForUserNotFound(self):
134 44fbd23b René Nussbaumer
    self.assertRaises(errors.ConfigurationError, self.resolver.LookupUid, 9999)
135 44fbd23b René Nussbaumer
    self.assertRaises(errors.ConfigurationError,
136 44fbd23b René Nussbaumer
                      self.resolver.LookupUser, "does-not-exist-foo")
137 44fbd23b René Nussbaumer
138 44fbd23b René Nussbaumer
  def testLookupForGroupNotFound(self):
139 44fbd23b René Nussbaumer
    self.assertRaises(errors.ConfigurationError, self.resolver.LookupGid, 9999)
140 44fbd23b René Nussbaumer
    self.assertRaises(errors.ConfigurationError,
141 44fbd23b René Nussbaumer
                      self.resolver.LookupGroup, "does-not-exist-foo")
142 44fbd23b René Nussbaumer
143 f12e1736 René Nussbaumer
144 a20e4768 Michael Hanselmann
class TestArchInfo(unittest.TestCase):
145 a20e4768 Michael Hanselmann
  EXP_TYPES = \
146 a20e4768 Michael Hanselmann
    ht.TAnd(ht.TIsLength(2),
147 a20e4768 Michael Hanselmann
            ht.TItems([
148 a20e4768 Michael Hanselmann
              ht.TNonEmptyString,
149 a20e4768 Michael Hanselmann
              ht.TNonEmptyString,
150 a20e4768 Michael Hanselmann
              ]))
151 a20e4768 Michael Hanselmann
152 a20e4768 Michael Hanselmann
  def setUp(self):
153 a20e4768 Michael Hanselmann
    self.assertTrue(runtime._arch is None)
154 a20e4768 Michael Hanselmann
155 a20e4768 Michael Hanselmann
  def tearDown(self):
156 a20e4768 Michael Hanselmann
    runtime._arch = None
157 a20e4768 Michael Hanselmann
158 a20e4768 Michael Hanselmann
  def testNotInitialized(self):
159 a20e4768 Michael Hanselmann
    self.assertRaises(errors.ProgrammerError, runtime.GetArchInfo)
160 a20e4768 Michael Hanselmann
161 a20e4768 Michael Hanselmann
  def testInitializeMultiple(self):
162 a20e4768 Michael Hanselmann
    runtime.InitArchInfo()
163 a20e4768 Michael Hanselmann
164 a20e4768 Michael Hanselmann
    self.assertRaises(errors.ProgrammerError, runtime.InitArchInfo)
165 a20e4768 Michael Hanselmann
166 a20e4768 Michael Hanselmann
  def testNormal(self):
167 a20e4768 Michael Hanselmann
    runtime.InitArchInfo()
168 a20e4768 Michael Hanselmann
169 a20e4768 Michael Hanselmann
    info = runtime.GetArchInfo()
170 a20e4768 Michael Hanselmann
171 a20e4768 Michael Hanselmann
    self.assertTrue(self.EXP_TYPES(info),
172 a20e4768 Michael Hanselmann
                    msg=("Doesn't match expected type description: %s" %
173 a20e4768 Michael Hanselmann
                         self.EXP_TYPES))
174 a20e4768 Michael Hanselmann
175 a20e4768 Michael Hanselmann
176 f12e1736 René Nussbaumer
if __name__ == "__main__":
177 f12e1736 René Nussbaumer
  testutils.GanetiTestProgram()