4 # Copyright (C) 2006, 2007, 2008 Google Inc.
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.
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.
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
22 """Script for unittesting the constants module"""
29 from ganeti import constants
30 from ganeti import locking
31 from ganeti import utils
36 class TestConstants(unittest.TestCase):
39 def testConfigVersion(self):
40 self.failUnless(constants.CONFIG_MAJOR >= 0 and
41 constants.CONFIG_MAJOR <= 99)
42 self.failUnless(constants.CONFIG_MINOR >= 0 and
43 constants.CONFIG_MINOR <= 99)
44 self.failUnless(constants.CONFIG_REVISION >= 0 and
45 constants.CONFIG_REVISION <= 9999)
46 self.failUnless(constants.CONFIG_VERSION >= 0 and
47 constants.CONFIG_VERSION <= 99999999)
49 self.failUnless(constants.BuildVersion(0, 0, 0) == 0)
50 self.failUnless(constants.BuildVersion(10, 10, 1010) == 10101010)
51 self.failUnless(constants.BuildVersion(12, 34, 5678) == 12345678)
52 self.failUnless(constants.BuildVersion(99, 99, 9999) == 99999999)
54 self.failUnless(constants.SplitVersion(00000000) == (0, 0, 0))
55 self.failUnless(constants.SplitVersion(10101010) == (10, 10, 1010))
56 self.failUnless(constants.SplitVersion(12345678) == (12, 34, 5678))
57 self.failUnless(constants.SplitVersion(99999999) == (99, 99, 9999))
58 self.failUnless(constants.SplitVersion(constants.CONFIG_VERSION) ==
59 (constants.CONFIG_MAJOR, constants.CONFIG_MINOR,
60 constants.CONFIG_REVISION))
62 def testDiskStatus(self):
63 self.failUnless(constants.LDS_OKAY < constants.LDS_UNKNOWN)
64 self.failUnless(constants.LDS_UNKNOWN < constants.LDS_FAULTY)
66 def testClockSkew(self):
67 self.failUnless(constants.NODE_MAX_CLOCK_SKEW <
68 (0.8 * constants.CONFD_MAX_CLOCK_SKEW))
70 def testSslCertExpiration(self):
71 self.failUnless(constants.SSL_CERT_EXPIRATION_ERROR <
72 constants.SSL_CERT_EXPIRATION_WARN)
74 def testOpCodePriority(self):
75 self.failUnless(constants.OP_PRIO_LOWEST > constants.OP_PRIO_LOW)
76 self.failUnless(constants.OP_PRIO_LOW > constants.OP_PRIO_NORMAL)
77 self.failUnlessEqual(constants.OP_PRIO_NORMAL, locking._DEFAULT_PRIORITY)
78 self.failUnlessEqual(constants.OP_PRIO_DEFAULT, locking._DEFAULT_PRIORITY)
79 self.failUnless(constants.OP_PRIO_NORMAL > constants.OP_PRIO_HIGH)
80 self.failUnless(constants.OP_PRIO_HIGH > constants.OP_PRIO_HIGHEST)
82 def testDiskDefaults(self):
83 self.failUnless(set(constants.DISK_LD_DEFAULTS.keys()) ==
84 constants.LOGICAL_DISK_TYPES)
85 self.failUnless(set(constants.DISK_DT_DEFAULTS.keys()) ==
86 constants.DISK_TEMPLATES)
89 class TestExportedNames(unittest.TestCase):
90 _VALID_NAME_RE = re.compile(r"^[A-Z][A-Z0-9_]+$")
91 _BUILTIN_NAME_RE = re.compile(r"^__\w+__$")
92 _EXCEPTIONS = frozenset([
99 set(itertools.ifilterfalse(self._BUILTIN_NAME_RE.match,
100 itertools.ifilterfalse(self._VALID_NAME_RE.match,
102 wrong -= self._EXCEPTIONS
103 self.assertFalse(wrong,
104 msg=("Invalid names exported from constants module: %s" %
105 utils.CommaJoin(sorted(wrong))))
108 class TestParameterNames(unittest.TestCase):
109 """HV/BE parameter tests"""
110 VALID_NAME = re.compile("^[a-zA-Z_][a-zA-Z0-9_]*$")
112 def testNoDashes(self):
113 for kind, source in [('hypervisor', constants.HVS_PARAMETER_TYPES),
114 ('backend', constants.BES_PARAMETER_TYPES),
115 ('nic', constants.NICS_PARAMETER_TYPES),
116 ("instdisk", constants.IDISK_PARAMS_TYPES),
117 ("instnic", constants.INIC_PARAMS_TYPES),
120 self.failUnless(self.VALID_NAME.match(key),
121 "The %s parameter '%s' contains invalid characters" %
125 class TestConfdConstants(unittest.TestCase):
126 """Test the confd constants"""
128 def testFourCc(self):
129 self.failUnlessEqual(len(constants.CONFD_MAGIC_FOURCC), 4,
130 "Invalid fourcc len, should be 4")
132 def _IsUniqueSequence(self, sequence):
134 for member in sequence:
141 self.failUnless(self._IsUniqueSequence(constants.CONFD_REQS),
142 "Duplicated confd request code")
144 def testReplStatuses(self):
145 self.failUnless(self._IsUniqueSequence(constants.CONFD_REPL_STATUSES),
146 "Duplicated confd reply status code")
149 if __name__ == '__main__':
150 testutils.GanetiTestProgram()