Statistics
| Branch: | Tag: | Revision:

root / test / py / ganeti.constants_unittest.py @ 91c17910

History | View | Annotate | Download (5.5 kB)

1 eeb1d86a Michael Hanselmann
#!/usr/bin/python
2 eeb1d86a Michael Hanselmann
#
3 eeb1d86a Michael Hanselmann
4 eeb1d86a Michael Hanselmann
# Copyright (C) 2006, 2007, 2008 Google Inc.
5 eeb1d86a Michael Hanselmann
#
6 eeb1d86a Michael Hanselmann
# This program is free software; you can redistribute it and/or modify
7 eeb1d86a Michael Hanselmann
# it under the terms of the GNU General Public License as published by
8 eeb1d86a Michael Hanselmann
# the Free Software Foundation; either version 2 of the License, or
9 eeb1d86a Michael Hanselmann
# (at your option) any later version.
10 eeb1d86a Michael Hanselmann
#
11 eeb1d86a Michael Hanselmann
# This program is distributed in the hope that it will be useful, but
12 eeb1d86a Michael Hanselmann
# WITHOUT ANY WARRANTY; without even the implied warranty of
13 eeb1d86a Michael Hanselmann
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 eeb1d86a Michael Hanselmann
# General Public License for more details.
15 eeb1d86a Michael Hanselmann
#
16 eeb1d86a Michael Hanselmann
# You should have received a copy of the GNU General Public License
17 eeb1d86a Michael Hanselmann
# along with this program; if not, write to the Free Software
18 eeb1d86a Michael Hanselmann
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 fd7b69c0 Michael Hanselmann
# 02110-1301, USA.
20 eeb1d86a Michael Hanselmann
21 eeb1d86a Michael Hanselmann
22 eeb1d86a Michael Hanselmann
"""Script for unittesting the constants module"""
23 eeb1d86a Michael Hanselmann
24 eeb1d86a Michael Hanselmann
25 eeb1d86a Michael Hanselmann
import unittest
26 67fc3042 Iustin Pop
import re
27 b8d51bb2 Michael Hanselmann
import itertools
28 eeb1d86a Michael Hanselmann
29 eeb1d86a Michael Hanselmann
from ganeti import constants
30 e5d8774b Michael Hanselmann
from ganeti import locking
31 b8d51bb2 Michael Hanselmann
from ganeti import utils
32 eeb1d86a Michael Hanselmann
33 25231ec5 Michael Hanselmann
import testutils
34 25231ec5 Michael Hanselmann
35 eeb1d86a Michael Hanselmann
36 eeb1d86a Michael Hanselmann
class TestConstants(unittest.TestCase):
37 eeb1d86a Michael Hanselmann
  """Constants tests"""
38 eeb1d86a Michael Hanselmann
39 eeb1d86a Michael Hanselmann
  def testConfigVersion(self):
40 eeb1d86a Michael Hanselmann
    self.failUnless(constants.CONFIG_MAJOR >= 0 and
41 eeb1d86a Michael Hanselmann
                    constants.CONFIG_MAJOR <= 99)
42 eeb1d86a Michael Hanselmann
    self.failUnless(constants.CONFIG_MINOR >= 0 and
43 eeb1d86a Michael Hanselmann
                    constants.CONFIG_MINOR <= 99)
44 eeb1d86a Michael Hanselmann
    self.failUnless(constants.CONFIG_REVISION >= 0 and
45 eeb1d86a Michael Hanselmann
                    constants.CONFIG_REVISION <= 9999)
46 eeb1d86a Michael Hanselmann
    self.failUnless(constants.CONFIG_VERSION >= 0 and
47 eeb1d86a Michael Hanselmann
                    constants.CONFIG_VERSION <= 99999999)
48 eeb1d86a Michael Hanselmann
49 1b45f4e5 Michael Hanselmann
    self.failUnless(constants.BuildVersion(0, 0, 0) == 0)
50 1b45f4e5 Michael Hanselmann
    self.failUnless(constants.BuildVersion(10, 10, 1010) == 10101010)
51 1b45f4e5 Michael Hanselmann
    self.failUnless(constants.BuildVersion(12, 34, 5678) == 12345678)
52 1b45f4e5 Michael Hanselmann
    self.failUnless(constants.BuildVersion(99, 99, 9999) == 99999999)
53 1b45f4e5 Michael Hanselmann
54 1b45f4e5 Michael Hanselmann
    self.failUnless(constants.SplitVersion(00000000) == (0, 0, 0))
55 1b45f4e5 Michael Hanselmann
    self.failUnless(constants.SplitVersion(10101010) == (10, 10, 1010))
56 1b45f4e5 Michael Hanselmann
    self.failUnless(constants.SplitVersion(12345678) == (12, 34, 5678))
57 1b45f4e5 Michael Hanselmann
    self.failUnless(constants.SplitVersion(99999999) == (99, 99, 9999))
58 1b45f4e5 Michael Hanselmann
    self.failUnless(constants.SplitVersion(constants.CONFIG_VERSION) ==
59 1b45f4e5 Michael Hanselmann
                    (constants.CONFIG_MAJOR, constants.CONFIG_MINOR,
60 1b45f4e5 Michael Hanselmann
                     constants.CONFIG_REVISION))
61 1b45f4e5 Michael Hanselmann
62 74f37195 Michael Hanselmann
  def testDiskStatus(self):
63 74f37195 Michael Hanselmann
    self.failUnless(constants.LDS_OKAY < constants.LDS_UNKNOWN)
64 74f37195 Michael Hanselmann
    self.failUnless(constants.LDS_UNKNOWN < constants.LDS_FAULTY)
65 74f37195 Michael Hanselmann
66 313b2dd4 Michael Hanselmann
  def testClockSkew(self):
67 313b2dd4 Michael Hanselmann
    self.failUnless(constants.NODE_MAX_CLOCK_SKEW <
68 313b2dd4 Michael Hanselmann
                    (0.8 * constants.CONFD_MAX_CLOCK_SKEW))
69 313b2dd4 Michael Hanselmann
70 b98bf262 Michael Hanselmann
  def testSslCertExpiration(self):
71 b98bf262 Michael Hanselmann
    self.failUnless(constants.SSL_CERT_EXPIRATION_ERROR <
72 b98bf262 Michael Hanselmann
                    constants.SSL_CERT_EXPIRATION_WARN)
73 b98bf262 Michael Hanselmann
74 e5d8774b Michael Hanselmann
  def testOpCodePriority(self):
75 e5d8774b Michael Hanselmann
    self.failUnless(constants.OP_PRIO_LOWEST > constants.OP_PRIO_LOW)
76 e5d8774b Michael Hanselmann
    self.failUnless(constants.OP_PRIO_LOW > constants.OP_PRIO_NORMAL)
77 e5d8774b Michael Hanselmann
    self.failUnlessEqual(constants.OP_PRIO_NORMAL, locking._DEFAULT_PRIORITY)
78 e5d8774b Michael Hanselmann
    self.failUnlessEqual(constants.OP_PRIO_DEFAULT, locking._DEFAULT_PRIORITY)
79 e5d8774b Michael Hanselmann
    self.failUnless(constants.OP_PRIO_NORMAL > constants.OP_PRIO_HIGH)
80 e5d8774b Michael Hanselmann
    self.failUnless(constants.OP_PRIO_HIGH > constants.OP_PRIO_HIGHEST)
81 e5d8774b Michael Hanselmann
82 bc5d0215 Andrea Spadaccini
  def testDiskDefaults(self):
83 bc5d0215 Andrea Spadaccini
    self.failUnless(set(constants.DISK_LD_DEFAULTS.keys()) ==
84 bc5d0215 Andrea Spadaccini
                    constants.LOGICAL_DISK_TYPES)
85 bc5d0215 Andrea Spadaccini
    self.failUnless(set(constants.DISK_DT_DEFAULTS.keys()) ==
86 bc5d0215 Andrea Spadaccini
                    constants.DISK_TEMPLATES)
87 bc5d0215 Andrea Spadaccini
88 1eaddbc6 Michael Hanselmann
  def testJobStatus(self):
89 1eaddbc6 Michael Hanselmann
    self.assertFalse(constants.JOBS_PENDING & constants.JOBS_FINALIZED)
90 1eaddbc6 Michael Hanselmann
    self.assertFalse(constants.JOBS_PENDING - constants.JOB_STATUS_ALL)
91 1eaddbc6 Michael Hanselmann
    self.assertFalse(constants.JOBS_FINALIZED - constants.JOB_STATUS_ALL)
92 1eaddbc6 Michael Hanselmann
93 eeb1d86a Michael Hanselmann
94 b8d51bb2 Michael Hanselmann
class TestExportedNames(unittest.TestCase):
95 b8d51bb2 Michael Hanselmann
  _VALID_NAME_RE = re.compile(r"^[A-Z][A-Z0-9_]+$")
96 b8d51bb2 Michael Hanselmann
  _BUILTIN_NAME_RE = re.compile(r"^__\w+__$")
97 b8d51bb2 Michael Hanselmann
  _EXCEPTIONS = frozenset([
98 b8d51bb2 Michael Hanselmann
    "SplitVersion",
99 b8d51bb2 Michael Hanselmann
    "BuildVersion",
100 b8d51bb2 Michael Hanselmann
    ])
101 b8d51bb2 Michael Hanselmann
102 b8d51bb2 Michael Hanselmann
  def test(self):
103 b8d51bb2 Michael Hanselmann
    wrong = \
104 b8d51bb2 Michael Hanselmann
      set(itertools.ifilterfalse(self._BUILTIN_NAME_RE.match,
105 b8d51bb2 Michael Hanselmann
            itertools.ifilterfalse(self._VALID_NAME_RE.match,
106 b8d51bb2 Michael Hanselmann
                                   dir(constants))))
107 b8d51bb2 Michael Hanselmann
    wrong -= self._EXCEPTIONS
108 b8d51bb2 Michael Hanselmann
    self.assertFalse(wrong,
109 b8d51bb2 Michael Hanselmann
                     msg=("Invalid names exported from constants module: %s" %
110 b8d51bb2 Michael Hanselmann
                          utils.CommaJoin(sorted(wrong))))
111 b8d51bb2 Michael Hanselmann
112 b8d51bb2 Michael Hanselmann
113 67fc3042 Iustin Pop
class TestParameterNames(unittest.TestCase):
114 67fc3042 Iustin Pop
  """HV/BE parameter tests"""
115 67fc3042 Iustin Pop
  VALID_NAME = re.compile("^[a-zA-Z_][a-zA-Z0-9_]*$")
116 67fc3042 Iustin Pop
117 67fc3042 Iustin Pop
  def testNoDashes(self):
118 8c114acd Michael Hanselmann
    for kind, source in [("hypervisor", constants.HVS_PARAMETER_TYPES),
119 8c114acd Michael Hanselmann
                         ("backend", constants.BES_PARAMETER_TYPES),
120 8c114acd Michael Hanselmann
                         ("nic", constants.NICS_PARAMETER_TYPES),
121 405241dc Michael Hanselmann
                         ("instdisk", constants.IDISK_PARAMS_TYPES),
122 405241dc Michael Hanselmann
                         ("instnic", constants.INIC_PARAMS_TYPES),
123 476ce612 Guido Trotter
                        ]:
124 67fc3042 Iustin Pop
      for key in source:
125 67fc3042 Iustin Pop
        self.failUnless(self.VALID_NAME.match(key),
126 67fc3042 Iustin Pop
                        "The %s parameter '%s' contains invalid characters" %
127 67fc3042 Iustin Pop
                        (kind, key))
128 67fc3042 Iustin Pop
129 74f37195 Michael Hanselmann
130 28a34a39 Guido Trotter
class TestConfdConstants(unittest.TestCase):
131 28a34a39 Guido Trotter
  """Test the confd constants"""
132 28a34a39 Guido Trotter
133 28a34a39 Guido Trotter
  def testFourCc(self):
134 7bb6e137 Michael Hanselmann
    self.assertEqual(len(constants.CONFD_MAGIC_FOURCC), 4,
135 7bb6e137 Michael Hanselmann
                     msg="Invalid fourcc len, should be 4")
136 28a34a39 Guido Trotter
137 28a34a39 Guido Trotter
  def testReqs(self):
138 7bb6e137 Michael Hanselmann
    self.assertFalse(utils.FindDuplicates(constants.CONFD_REQS),
139 7bb6e137 Michael Hanselmann
                     msg="Duplicated confd request code")
140 28a34a39 Guido Trotter
141 28a34a39 Guido Trotter
  def testReplStatuses(self):
142 7bb6e137 Michael Hanselmann
    self.assertFalse(utils.FindDuplicates(constants.CONFD_REPL_STATUSES),
143 7bb6e137 Michael Hanselmann
                     msg="Duplicated confd reply status code")
144 28a34a39 Guido Trotter
145 28a34a39 Guido Trotter
146 7bb6e137 Michael Hanselmann
if __name__ == "__main__":
147 25231ec5 Michael Hanselmann
  testutils.GanetiTestProgram()