Statistics
| Branch: | Tag: | Revision:

root / test / py / ganeti.constants_unittest.py @ 880ab678

History | View | Annotate | Download (6.4 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 880ab678 Helga Velroyen
    self.failUnless(
84 880ab678 Helga Velroyen
        set(constants.DISK_LD_DEFAULTS.keys()) ==
85 880ab678 Helga Velroyen
        set(constants.DISK_TEMPLATES) - set([constants.DT_DISKLESS]))
86 bc5d0215 Andrea Spadaccini
    self.failUnless(set(constants.DISK_DT_DEFAULTS.keys()) ==
87 bc5d0215 Andrea Spadaccini
                    constants.DISK_TEMPLATES)
88 bc5d0215 Andrea Spadaccini
89 1eaddbc6 Michael Hanselmann
  def testJobStatus(self):
90 1eaddbc6 Michael Hanselmann
    self.assertFalse(constants.JOBS_PENDING & constants.JOBS_FINALIZED)
91 1eaddbc6 Michael Hanselmann
    self.assertFalse(constants.JOBS_PENDING - constants.JOB_STATUS_ALL)
92 1eaddbc6 Michael Hanselmann
    self.assertFalse(constants.JOBS_FINALIZED - constants.JOB_STATUS_ALL)
93 1eaddbc6 Michael Hanselmann
94 5fee2c83 Michael Hanselmann
  def testDefaultsForAllHypervisors(self):
95 5fee2c83 Michael Hanselmann
    self.assertEqual(frozenset(constants.HVC_DEFAULTS.keys()),
96 5fee2c83 Michael Hanselmann
                     constants.HYPER_TYPES)
97 5fee2c83 Michael Hanselmann
98 5fee2c83 Michael Hanselmann
  def testDefaultHypervisor(self):
99 5fee2c83 Michael Hanselmann
    self.assertTrue(constants.DEFAULT_ENABLED_HYPERVISOR in
100 5fee2c83 Michael Hanselmann
                    constants.HYPER_TYPES)
101 5fee2c83 Michael Hanselmann
102 a8828704 Michele Tartara
  def testExtraLogfiles(self):
103 a8828704 Michele Tartara
    for daemon in constants.DAEMONS_EXTRA_LOGBASE:
104 a8828704 Michele Tartara
      self.assertTrue(daemon in constants.DAEMONS)
105 a8828704 Michele Tartara
      for log_reason in constants.DAEMONS_EXTRA_LOGBASE[daemon]:
106 a8828704 Michele Tartara
        self.assertTrue(log_reason in constants.VALID_EXTRA_LOGREASONS)
107 a8828704 Michele Tartara
108 eeb1d86a Michael Hanselmann
109 b8d51bb2 Michael Hanselmann
class TestExportedNames(unittest.TestCase):
110 b8d51bb2 Michael Hanselmann
  _VALID_NAME_RE = re.compile(r"^[A-Z][A-Z0-9_]+$")
111 b8d51bb2 Michael Hanselmann
  _BUILTIN_NAME_RE = re.compile(r"^__\w+__$")
112 b8d51bb2 Michael Hanselmann
  _EXCEPTIONS = frozenset([
113 b8d51bb2 Michael Hanselmann
    "SplitVersion",
114 b8d51bb2 Michael Hanselmann
    "BuildVersion",
115 b8d51bb2 Michael Hanselmann
    ])
116 b8d51bb2 Michael Hanselmann
117 b8d51bb2 Michael Hanselmann
  def test(self):
118 b8d51bb2 Michael Hanselmann
    wrong = \
119 b8d51bb2 Michael Hanselmann
      set(itertools.ifilterfalse(self._BUILTIN_NAME_RE.match,
120 b8d51bb2 Michael Hanselmann
            itertools.ifilterfalse(self._VALID_NAME_RE.match,
121 b8d51bb2 Michael Hanselmann
                                   dir(constants))))
122 b8d51bb2 Michael Hanselmann
    wrong -= self._EXCEPTIONS
123 b8d51bb2 Michael Hanselmann
    self.assertFalse(wrong,
124 b8d51bb2 Michael Hanselmann
                     msg=("Invalid names exported from constants module: %s" %
125 b8d51bb2 Michael Hanselmann
                          utils.CommaJoin(sorted(wrong))))
126 b8d51bb2 Michael Hanselmann
127 b8d51bb2 Michael Hanselmann
128 67fc3042 Iustin Pop
class TestParameterNames(unittest.TestCase):
129 67fc3042 Iustin Pop
  """HV/BE parameter tests"""
130 67fc3042 Iustin Pop
  VALID_NAME = re.compile("^[a-zA-Z_][a-zA-Z0-9_]*$")
131 67fc3042 Iustin Pop
132 67fc3042 Iustin Pop
  def testNoDashes(self):
133 8c114acd Michael Hanselmann
    for kind, source in [("hypervisor", constants.HVS_PARAMETER_TYPES),
134 8c114acd Michael Hanselmann
                         ("backend", constants.BES_PARAMETER_TYPES),
135 8c114acd Michael Hanselmann
                         ("nic", constants.NICS_PARAMETER_TYPES),
136 405241dc Michael Hanselmann
                         ("instdisk", constants.IDISK_PARAMS_TYPES),
137 405241dc Michael Hanselmann
                         ("instnic", constants.INIC_PARAMS_TYPES),
138 476ce612 Guido Trotter
                        ]:
139 67fc3042 Iustin Pop
      for key in source:
140 67fc3042 Iustin Pop
        self.failUnless(self.VALID_NAME.match(key),
141 67fc3042 Iustin Pop
                        "The %s parameter '%s' contains invalid characters" %
142 67fc3042 Iustin Pop
                        (kind, key))
143 67fc3042 Iustin Pop
144 74f37195 Michael Hanselmann
145 28a34a39 Guido Trotter
class TestConfdConstants(unittest.TestCase):
146 28a34a39 Guido Trotter
  """Test the confd constants"""
147 28a34a39 Guido Trotter
148 28a34a39 Guido Trotter
  def testFourCc(self):
149 7bb6e137 Michael Hanselmann
    self.assertEqual(len(constants.CONFD_MAGIC_FOURCC), 4,
150 7bb6e137 Michael Hanselmann
                     msg="Invalid fourcc len, should be 4")
151 28a34a39 Guido Trotter
152 28a34a39 Guido Trotter
  def testReqs(self):
153 7bb6e137 Michael Hanselmann
    self.assertFalse(utils.FindDuplicates(constants.CONFD_REQS),
154 7bb6e137 Michael Hanselmann
                     msg="Duplicated confd request code")
155 28a34a39 Guido Trotter
156 28a34a39 Guido Trotter
  def testReplStatuses(self):
157 7bb6e137 Michael Hanselmann
    self.assertFalse(utils.FindDuplicates(constants.CONFD_REPL_STATUSES),
158 7bb6e137 Michael Hanselmann
                     msg="Duplicated confd reply status code")
159 28a34a39 Guido Trotter
160 0b6c56bb Helga Velroyen
class TestDiskTemplateConstants(unittest.TestCase):
161 0b6c56bb Helga Velroyen
162 0b6c56bb Helga Velroyen
  def testPreference(self):
163 0b6c56bb Helga Velroyen
    self.assertEqual(set(constants.DISK_TEMPLATE_PREFERENCE),
164 0b6c56bb Helga Velroyen
                     set(constants.DISK_TEMPLATES))
165 0b6c56bb Helga Velroyen
166 0b6c56bb Helga Velroyen
  def testMapToStorageTypes(self):
167 0b6c56bb Helga Velroyen
    for disk_template in constants.DISK_TEMPLATES:
168 0b6c56bb Helga Velroyen
      self.assertTrue(
169 0b6c56bb Helga Velroyen
          constants.MAP_DISK_TEMPLATE_STORAGE_TYPE[disk_template] is not None)
170 0b6c56bb Helga Velroyen
171 28a34a39 Guido Trotter
172 7bb6e137 Michael Hanselmann
if __name__ == "__main__":
173 25231ec5 Michael Hanselmann
  testutils.GanetiTestProgram()