Statistics
| Branch: | Tag: | Revision:

root / test / ganeti.runtime_unittest.py @ 44fbd23b

History | View | Annotate | Download (5 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

    
27
import testutils
28
import unittest
29

    
30

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

    
36

    
37
def _StubGetpwnam(user):
38
  users = {
39
    constants.MASTERD_USER: _EntStub(uid=0),
40
    constants.CONFD_USER: _EntStub(uid=1),
41
    constants.RAPI_USER: _EntStub(uid=2),
42
    constants.NODED_USER: _EntStub(uid=3),
43
    }
44
  return users[user]
45

    
46

    
47
def _StubGetgrnam(group):
48
  groups = {
49
    constants.MASTERD_GROUP: _EntStub(gid=0),
50
    constants.CONFD_GROUP: _EntStub(gid=1),
51
    constants.RAPI_GROUP: _EntStub(gid=2),
52
    constants.DAEMONS_GROUP: _EntStub(gid=3),
53
    constants.ADMIN_GROUP: _EntStub(gid=4),
54
    constants.NODED_GROUP: _EntStub(gid=5),
55
    }
56
  return groups[group]
57

    
58

    
59
def _RaisingStubGetpwnam(user):
60
  raise KeyError("user not found")
61

    
62

    
63
def _RaisingStubGetgrnam(group):
64
  raise KeyError("group not found")
65

    
66

    
67
class ResolverStubRaising(object):
68
  def __init__(self):
69
    raise errors.ConfigurationError("No entries")
70

    
71

    
72
class TestErrors(unittest.TestCase):
73
  def setUp(self):
74
    self.resolver = runtime.GetentResolver(_getpwnam=_StubGetpwnam,
75
                                           _getgrnam=_StubGetgrnam)
76

    
77
  def testEverythingSuccessful(self):
78
    self.assertEqual(self.resolver.masterd_uid,
79
                     _StubGetpwnam(constants.MASTERD_USER).pw_uid)
80
    self.assertEqual(self.resolver.masterd_gid,
81
                     _StubGetgrnam(constants.MASTERD_GROUP).gr_gid)
82
    self.assertEqual(self.resolver.confd_uid,
83
                     _StubGetpwnam(constants.CONFD_USER).pw_uid)
84
    self.assertEqual(self.resolver.confd_gid,
85
                     _StubGetgrnam(constants.CONFD_GROUP).gr_gid)
86
    self.assertEqual(self.resolver.rapi_uid,
87
                     _StubGetpwnam(constants.RAPI_USER).pw_uid)
88
    self.assertEqual(self.resolver.rapi_gid,
89
                     _StubGetgrnam(constants.RAPI_GROUP).gr_gid)
90
    self.assertEqual(self.resolver.noded_uid,
91
                     _StubGetpwnam(constants.NODED_USER).pw_uid)
92

    
93
    self.assertEqual(self.resolver.daemons_gid,
94
                     _StubGetgrnam(constants.DAEMONS_GROUP).gr_gid)
95
    self.assertEqual(self.resolver.admin_gid,
96
                     _StubGetgrnam(constants.ADMIN_GROUP).gr_gid)
97

    
98
  def testUserNotFound(self):
99
    self.assertRaises(errors.ConfigurationError, runtime.GetentResolver,
100
                      _getpwnam=_RaisingStubGetpwnam, _getgrnam=_StubGetgrnam)
101

    
102
  def testGroupNotFound(self):
103
    self.assertRaises(errors.ConfigurationError, runtime.GetentResolver,
104
                      _getpwnam=_StubGetpwnam, _getgrnam=_RaisingStubGetgrnam)
105

    
106
  def testUserNotFoundGetEnts(self):
107
    self.assertRaises(errors.ConfigurationError, runtime.GetEnts,
108
                      resolver=ResolverStubRaising)
109

    
110
  def testLookupForUser(self):
111
    master_stub = _StubGetpwnam(constants.MASTERD_USER)
112
    rapi_stub = _StubGetpwnam(constants.RAPI_USER)
113
    self.assertEqual(self.resolver.LookupUid(master_stub.pw_uid),
114
                     constants.MASTERD_USER)
115
    self.assertEqual(self.resolver.LookupUid(rapi_stub.pw_uid),
116
                     constants.RAPI_USER)
117
    self.assertEqual(self.resolver.LookupUser(constants.MASTERD_USER),
118
                     master_stub.pw_uid)
119
    self.assertEqual(self.resolver.LookupUser(constants.RAPI_USER),
120
                     rapi_stub.pw_uid)
121

    
122
  def testLookupForGroup(self):
123
    master_stub = _StubGetgrnam(constants.MASTERD_GROUP)
124
    rapi_stub = _StubGetgrnam(constants.RAPI_GROUP)
125
    self.assertEqual(self.resolver.LookupGid(master_stub.gr_gid),
126
                     constants.MASTERD_GROUP)
127
    self.assertEqual(self.resolver.LookupGid(rapi_stub.gr_gid),
128
                     constants.RAPI_GROUP)
129

    
130
  def testLookupForUserNotFound(self):
131
    self.assertRaises(errors.ConfigurationError, self.resolver.LookupUid, 9999)
132
    self.assertRaises(errors.ConfigurationError,
133
                      self.resolver.LookupUser, "does-not-exist-foo")
134

    
135
  def testLookupForGroupNotFound(self):
136
    self.assertRaises(errors.ConfigurationError, self.resolver.LookupGid, 9999)
137
    self.assertRaises(errors.ConfigurationError,
138
                      self.resolver.LookupGroup, "does-not-exist-foo")
139

    
140

    
141
if __name__ == "__main__":
142
  testutils.GanetiTestProgram()