Test instance NIC and disk parameter names
[ganeti-local] / test / ganeti.constants_unittest.py
1 #!/usr/bin/python
2 #
3
4 # Copyright (C) 2006, 2007, 2008 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 # 0.0510-1301, USA.
20
21
22 """Script for unittesting the constants module"""
23
24
25 import unittest
26 import re
27
28 from ganeti import constants
29
30 import testutils
31
32
33 class TestConstants(unittest.TestCase):
34   """Constants tests"""
35
36   def testConfigVersion(self):
37     self.failUnless(constants.CONFIG_MAJOR >= 0 and
38                     constants.CONFIG_MAJOR <= 99)
39     self.failUnless(constants.CONFIG_MINOR >= 0 and
40                     constants.CONFIG_MINOR <= 99)
41     self.failUnless(constants.CONFIG_REVISION >= 0 and
42                     constants.CONFIG_REVISION <= 9999)
43     self.failUnless(constants.CONFIG_VERSION >= 0 and
44                     constants.CONFIG_VERSION <= 99999999)
45
46     self.failUnless(constants.BuildVersion(0, 0, 0) == 0)
47     self.failUnless(constants.BuildVersion(10, 10, 1010) == 10101010)
48     self.failUnless(constants.BuildVersion(12, 34, 5678) == 12345678)
49     self.failUnless(constants.BuildVersion(99, 99, 9999) == 99999999)
50
51     self.failUnless(constants.SplitVersion(00000000) == (0, 0, 0))
52     self.failUnless(constants.SplitVersion(10101010) == (10, 10, 1010))
53     self.failUnless(constants.SplitVersion(12345678) == (12, 34, 5678))
54     self.failUnless(constants.SplitVersion(99999999) == (99, 99, 9999))
55     self.failUnless(constants.SplitVersion(constants.CONFIG_VERSION) ==
56                     (constants.CONFIG_MAJOR, constants.CONFIG_MINOR,
57                      constants.CONFIG_REVISION))
58
59   def testDiskStatus(self):
60     self.failUnless(constants.LDS_OKAY < constants.LDS_UNKNOWN)
61     self.failUnless(constants.LDS_UNKNOWN < constants.LDS_FAULTY)
62
63   def testClockSkew(self):
64     self.failUnless(constants.NODE_MAX_CLOCK_SKEW <
65                     (0.8 * constants.CONFD_MAX_CLOCK_SKEW))
66
67   def testSslCertExpiration(self):
68     self.failUnless(constants.SSL_CERT_EXPIRATION_ERROR <
69                     constants.SSL_CERT_EXPIRATION_WARN)
70
71
72 class TestParameterNames(unittest.TestCase):
73   """HV/BE parameter tests"""
74   VALID_NAME = re.compile("^[a-zA-Z_][a-zA-Z0-9_]*$")
75
76   def testNoDashes(self):
77     for kind, source in [('hypervisor', constants.HVS_PARAMETER_TYPES),
78                          ('backend', constants.BES_PARAMETER_TYPES),
79                          ('nic', constants.NICS_PARAMETER_TYPES),
80                          ("instdisk", constants.IDISK_PARAMS_TYPES),
81                          ("instnic", constants.INIC_PARAMS_TYPES),
82                         ]:
83       for key in source:
84         self.failUnless(self.VALID_NAME.match(key),
85                         "The %s parameter '%s' contains invalid characters" %
86                         (kind, key))
87
88
89 class TestConfdConstants(unittest.TestCase):
90   """Test the confd constants"""
91
92   def testFourCc(self):
93     self.failUnlessEqual(len(constants.CONFD_MAGIC_FOURCC), 4,
94                          "Invalid fourcc len, should be 4")
95
96   def _IsUniqueSequence(self, sequence):
97     seen = set()
98     for member in sequence:
99       if member in seen:
100         return False
101       seen.add(member)
102     return True
103
104   def testReqs(self):
105     self.failUnless(self._IsUniqueSequence(constants.CONFD_REQS),
106                     "Duplicated confd request code")
107
108   def testReplStatuses(self):
109     self.failUnless(self._IsUniqueSequence(constants.CONFD_REPL_STATUSES),
110                     "Duplicated confd reply status code")
111
112
113 if __name__ == '__main__':
114   testutils.GanetiTestProgram()