Statistics
| Branch: | Tag: | Revision:

root / test / py / ganeti.runtime_unittest.py @ fb0fa957

History | View | Annotate | Download (6.2 kB)

1
#!/usr/bin/python
2
#
3

    
4
# Copyright (C) 2010 Google Inc.
5
#
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.
10
#
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.
15
#
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
19
# 02110-1301, USA.
20

    
21
"""Script for testing ganeti.runtime"""
22

    
23
from ganeti import constants
24
from ganeti import errors
25
from ganeti import runtime
26
from ganeti import ht
27

    
28
import testutils
29
import unittest
30

    
31

    
32
class _EntStub:
33
  def __init__(self, uid=None, gid=None):
34
    self.pw_uid = uid
35
    self.gr_gid = gid
36

    
37

    
38
def _StubGetpwnam(user):
39
  users = {
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),
44
    constants.LUXID_USER: _EntStub(uid=4),
45
    constants.WCONFD_USER: _EntStub(uid=5),
46
    }
47
  return users[user]
48

    
49

    
50
def _StubGetgrnam(group):
51
  groups = {
52
    constants.MASTERD_GROUP: _EntStub(gid=0),
53
    constants.CONFD_GROUP: _EntStub(gid=1),
54
    constants.RAPI_GROUP: _EntStub(gid=2),
55
    constants.DAEMONS_GROUP: _EntStub(gid=3),
56
    constants.ADMIN_GROUP: _EntStub(gid=4),
57
    constants.NODED_GROUP: _EntStub(gid=5),
58
    constants.LUXID_GROUP: _EntStub(gid=6),
59
    constants.WCONFD_GROUP: _EntStub(gid=7),
60
    }
61
  return groups[group]
62

    
63

    
64
def _RaisingStubGetpwnam(user):
65
  raise KeyError("user not found")
66

    
67

    
68
def _RaisingStubGetgrnam(group):
69
  raise KeyError("group not found")
70

    
71

    
72
class ResolverStubRaising(object):
73
  def __init__(self):
74
    raise errors.ConfigurationError("No entries")
75

    
76

    
77
class TestErrors(unittest.TestCase):
78
  def setUp(self):
79
    self.resolver = runtime.GetentResolver(_getpwnam=_StubGetpwnam,
80
                                           _getgrnam=_StubGetgrnam)
81

    
82
  def testEverythingSuccessful(self):
83
    self.assertEqual(self.resolver.masterd_uid,
84
                     _StubGetpwnam(constants.MASTERD_USER).pw_uid)
85
    self.assertEqual(self.resolver.masterd_gid,
86
                     _StubGetgrnam(constants.MASTERD_GROUP).gr_gid)
87
    self.assertEqual(self.resolver.confd_uid,
88
                     _StubGetpwnam(constants.CONFD_USER).pw_uid)
89
    self.assertEqual(self.resolver.confd_gid,
90
                     _StubGetgrnam(constants.CONFD_GROUP).gr_gid)
91
    self.assertEqual(self.resolver.wconfd_uid,
92
                     _StubGetpwnam(constants.WCONFD_USER).pw_uid)
93
    self.assertEqual(self.resolver.wconfd_gid,
94
                     _StubGetgrnam(constants.WCONFD_GROUP).gr_gid)
95
    self.assertEqual(self.resolver.rapi_uid,
96
                     _StubGetpwnam(constants.RAPI_USER).pw_uid)
97
    self.assertEqual(self.resolver.rapi_gid,
98
                     _StubGetgrnam(constants.RAPI_GROUP).gr_gid)
99
    self.assertEqual(self.resolver.noded_uid,
100
                     _StubGetpwnam(constants.NODED_USER).pw_uid)
101

    
102
    self.assertEqual(self.resolver.daemons_gid,
103
                     _StubGetgrnam(constants.DAEMONS_GROUP).gr_gid)
104
    self.assertEqual(self.resolver.admin_gid,
105
                     _StubGetgrnam(constants.ADMIN_GROUP).gr_gid)
106

    
107
  def testUserNotFound(self):
108
    self.assertRaises(errors.ConfigurationError, runtime.GetentResolver,
109
                      _getpwnam=_RaisingStubGetpwnam, _getgrnam=_StubGetgrnam)
110

    
111
  def testGroupNotFound(self):
112
    self.assertRaises(errors.ConfigurationError, runtime.GetentResolver,
113
                      _getpwnam=_StubGetpwnam, _getgrnam=_RaisingStubGetgrnam)
114

    
115
  def testUserNotFoundGetEnts(self):
116
    self.assertRaises(errors.ConfigurationError, runtime.GetEnts,
117
                      resolver=ResolverStubRaising)
118

    
119
  def testLookupForUser(self):
120
    master_stub = _StubGetpwnam(constants.MASTERD_USER)
121
    rapi_stub = _StubGetpwnam(constants.RAPI_USER)
122
    self.assertEqual(self.resolver.LookupUid(master_stub.pw_uid),
123
                     constants.MASTERD_USER)
124
    self.assertEqual(self.resolver.LookupUid(rapi_stub.pw_uid),
125
                     constants.RAPI_USER)
126
    self.assertEqual(self.resolver.LookupUser(constants.MASTERD_USER),
127
                     master_stub.pw_uid)
128
    self.assertEqual(self.resolver.LookupUser(constants.RAPI_USER),
129
                     rapi_stub.pw_uid)
130

    
131
  def testLookupForGroup(self):
132
    master_stub = _StubGetgrnam(constants.MASTERD_GROUP)
133
    rapi_stub = _StubGetgrnam(constants.RAPI_GROUP)
134
    self.assertEqual(self.resolver.LookupGid(master_stub.gr_gid),
135
                     constants.MASTERD_GROUP)
136
    self.assertEqual(self.resolver.LookupGid(rapi_stub.gr_gid),
137
                     constants.RAPI_GROUP)
138

    
139
  def testLookupForUserNotFound(self):
140
    self.assertRaises(errors.ConfigurationError, self.resolver.LookupUid, 9999)
141
    self.assertRaises(errors.ConfigurationError,
142
                      self.resolver.LookupUser, "does-not-exist-foo")
143

    
144
  def testLookupForGroupNotFound(self):
145
    self.assertRaises(errors.ConfigurationError, self.resolver.LookupGid, 9999)
146
    self.assertRaises(errors.ConfigurationError,
147
                      self.resolver.LookupGroup, "does-not-exist-foo")
148

    
149

    
150
class TestArchInfo(unittest.TestCase):
151
  EXP_TYPES = \
152
    ht.TAnd(ht.TIsLength(2),
153
            ht.TItems([
154
              ht.TNonEmptyString,
155
              ht.TNonEmptyString,
156
              ]))
157

    
158
  def setUp(self):
159
    self.assertTrue(runtime._arch is None)
160

    
161
  def tearDown(self):
162
    runtime._arch = None
163

    
164
  def testNotInitialized(self):
165
    self.assertRaises(errors.ProgrammerError, runtime.GetArchInfo)
166

    
167
  def testInitializeMultiple(self):
168
    runtime.InitArchInfo()
169

    
170
    self.assertRaises(errors.ProgrammerError, runtime.InitArchInfo)
171

    
172
  def testNormal(self):
173
    runtime.InitArchInfo()
174

    
175
    info = runtime.GetArchInfo()
176

    
177
    self.assertTrue(self.EXP_TYPES(info),
178
                    msg=("Doesn't match expected type description: %s" %
179
                         self.EXP_TYPES))
180

    
181

    
182
if __name__ == "__main__":
183
  testutils.GanetiTestProgram()