Statistics
| Branch: | Tag: | Revision:

root / test / ganeti.mcpu_unittest.py @ 0b04b188

History | View | Annotate | Download (2.4 kB)

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

    
4
# Copyright (C) 2009, 2011 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

    
22
"""Script for unittesting the mcpu module"""
23

    
24

    
25
import unittest
26

    
27
from ganeti import mcpu
28
from ganeti import opcodes
29
from ganeti.constants import \
30
    LOCK_ATTEMPTS_TIMEOUT, \
31
    LOCK_ATTEMPTS_MAXWAIT, \
32
    LOCK_ATTEMPTS_MINWAIT
33

    
34
import testutils
35

    
36

    
37
class TestLockAttemptTimeoutStrategy(unittest.TestCase):
38
  def testConstants(self):
39
    tpa = mcpu.LockAttemptTimeoutStrategy._TIMEOUT_PER_ATTEMPT
40
    self.assert_(len(tpa) > LOCK_ATTEMPTS_TIMEOUT / LOCK_ATTEMPTS_MAXWAIT)
41
    self.assert_(sum(tpa) >= LOCK_ATTEMPTS_TIMEOUT)
42

    
43
    self.assertTrue(LOCK_ATTEMPTS_TIMEOUT >= 1800,
44
                    msg="Waiting less than half an hour per priority")
45
    self.assertTrue(LOCK_ATTEMPTS_TIMEOUT <= 3600,
46
                    msg="Waiting more than an hour per priority")
47

    
48
  def testSimple(self):
49
    strat = mcpu.LockAttemptTimeoutStrategy(_random_fn=lambda: 0.5,
50
                                            _time_fn=lambda: 0.0)
51

    
52
    prev = None
53
    for i in range(len(strat._TIMEOUT_PER_ATTEMPT)):
54
      timeout = strat.NextAttempt()
55
      self.assert_(timeout is not None)
56

    
57
      self.assert_(timeout <= LOCK_ATTEMPTS_MAXWAIT)
58
      self.assert_(timeout >= LOCK_ATTEMPTS_MINWAIT)
59
      self.assert_(prev is None or timeout >= prev)
60

    
61
      prev = timeout
62

    
63
    for _ in range(10):
64
      self.assert_(strat.NextAttempt() is None)
65

    
66

    
67
class TestDispatchTable(unittest.TestCase):
68
  def test(self):
69
    for opcls in opcodes.OP_MAPPING.values():
70
      if not opcls.WITH_LU:
71
        continue
72
      self.assertTrue(opcls in mcpu.Processor.DISPATCH_TABLE,
73
                      msg="%s missing handler class" % opcls)
74

    
75

    
76
if __name__ == "__main__":
77
  testutils.GanetiTestProgram()