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)
88 def testJobStatus(self):
89 self.assertFalse(constants.JOBS_PENDING & constants.JOBS_FINALIZED)
90 self.assertFalse(constants.JOBS_PENDING - constants.JOB_STATUS_ALL)
91 self.assertFalse(constants.JOBS_FINALIZED - constants.JOB_STATUS_ALL)
93 def testDefaultsForAllHypervisors(self):
94 self.assertEqual(frozenset(constants.HVC_DEFAULTS.keys()),
95 constants.HYPER_TYPES)
97 def testDefaultHypervisor(self):
98 self.assertTrue(constants.DEFAULT_ENABLED_HYPERVISOR in
99 constants.HYPER_TYPES)
102 class TestExportedNames(unittest.TestCase):
103 _VALID_NAME_RE = re.compile(r"^[A-Z][A-Z0-9_]+$")
104 _BUILTIN_NAME_RE = re.compile(r"^__\w+__$")
105 _EXCEPTIONS = frozenset([
112 set(itertools.ifilterfalse(self._BUILTIN_NAME_RE.match,
113 itertools.ifilterfalse(self._VALID_NAME_RE.match,
115 wrong -= self._EXCEPTIONS
116 self.assertFalse(wrong,
117 msg=("Invalid names exported from constants module: %s" %
118 utils.CommaJoin(sorted(wrong))))
121 class TestParameterNames(unittest.TestCase):
122 """HV/BE parameter tests"""
123 VALID_NAME = re.compile("^[a-zA-Z_][a-zA-Z0-9_]*$")
125 def testNoDashes(self):
126 for kind, source in [("hypervisor", constants.HVS_PARAMETER_TYPES),
127 ("backend", constants.BES_PARAMETER_TYPES),
128 ("nic", constants.NICS_PARAMETER_TYPES),
129 ("instdisk", constants.IDISK_PARAMS_TYPES),
130 ("instnic", constants.INIC_PARAMS_TYPES),
133 self.failUnless(self.VALID_NAME.match(key),
134 "The %s parameter '%s' contains invalid characters" %
138 class TestConfdConstants(unittest.TestCase):
139 """Test the confd constants"""
141 def testFourCc(self):
142 self.assertEqual(len(constants.CONFD_MAGIC_FOURCC), 4,
143 msg="Invalid fourcc len, should be 4")
146 self.assertFalse(utils.FindDuplicates(constants.CONFD_REQS),
147 msg="Duplicated confd request code")
149 def testReplStatuses(self):
150 self.assertFalse(utils.FindDuplicates(constants.CONFD_REPL_STATUSES),
151 msg="Duplicated confd reply status code")
154 if __name__ == "__main__":
155 testutils.GanetiTestProgram()