Statistics
| Branch: | Tag: | Revision:

root / test / ganeti.ht_unittest.py @ a30b473c

History | View | Annotate | Download (8.5 kB)

1 ecdf0398 Michael Hanselmann
#!/usr/bin/python
2 ecdf0398 Michael Hanselmann
#
3 ecdf0398 Michael Hanselmann
4 ecdf0398 Michael Hanselmann
# Copyright (C) 2011 Google Inc.
5 ecdf0398 Michael Hanselmann
#
6 ecdf0398 Michael Hanselmann
# This program is free software; you can redistribute it and/or modify
7 ecdf0398 Michael Hanselmann
# it under the terms of the GNU General Public License as published by
8 ecdf0398 Michael Hanselmann
# the Free Software Foundation; either version 2 of the License, or
9 ecdf0398 Michael Hanselmann
# (at your option) any later version.
10 ecdf0398 Michael Hanselmann
#
11 ecdf0398 Michael Hanselmann
# This program is distributed in the hope that it will be useful, but
12 ecdf0398 Michael Hanselmann
# WITHOUT ANY WARRANTY; without even the implied warranty of
13 ecdf0398 Michael Hanselmann
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 ecdf0398 Michael Hanselmann
# General Public License for more details.
15 ecdf0398 Michael Hanselmann
#
16 ecdf0398 Michael Hanselmann
# You should have received a copy of the GNU General Public License
17 ecdf0398 Michael Hanselmann
# along with this program; if not, write to the Free Software
18 ecdf0398 Michael Hanselmann
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 ecdf0398 Michael Hanselmann
# 02110-1301, USA.
20 ecdf0398 Michael Hanselmann
21 ecdf0398 Michael Hanselmann
22 ecdf0398 Michael Hanselmann
"""Script for testing ganeti.ht"""
23 ecdf0398 Michael Hanselmann
24 ecdf0398 Michael Hanselmann
import unittest
25 ecdf0398 Michael Hanselmann
26 ecdf0398 Michael Hanselmann
from ganeti import ht
27 ecdf0398 Michael Hanselmann
28 ecdf0398 Michael Hanselmann
import testutils
29 ecdf0398 Michael Hanselmann
30 ecdf0398 Michael Hanselmann
31 ecdf0398 Michael Hanselmann
class TestTypeChecks(unittest.TestCase):
32 ecdf0398 Michael Hanselmann
  def testNone(self):
33 ecdf0398 Michael Hanselmann
    self.assertFalse(ht.TNotNone(None))
34 ecdf0398 Michael Hanselmann
    self.assertTrue(ht.TNone(None))
35 ecdf0398 Michael Hanselmann
36 ecdf0398 Michael Hanselmann
    for val in [0, True, "", "Hello World", [], range(5)]:
37 ecdf0398 Michael Hanselmann
      self.assertTrue(ht.TNotNone(val))
38 ecdf0398 Michael Hanselmann
      self.assertFalse(ht.TNone(val))
39 ecdf0398 Michael Hanselmann
40 ecdf0398 Michael Hanselmann
  def testBool(self):
41 ecdf0398 Michael Hanselmann
    self.assertTrue(ht.TBool(True))
42 ecdf0398 Michael Hanselmann
    self.assertTrue(ht.TBool(False))
43 ecdf0398 Michael Hanselmann
44 ecdf0398 Michael Hanselmann
    for val in [0, None, "", [], "Hello"]:
45 ecdf0398 Michael Hanselmann
      self.assertFalse(ht.TBool(val))
46 ecdf0398 Michael Hanselmann
47 ecdf0398 Michael Hanselmann
    for val in [True, -449, 1, 3, "x", "abc", [1, 2]]:
48 ecdf0398 Michael Hanselmann
      self.assertTrue(ht.TTrue(val))
49 ecdf0398 Michael Hanselmann
50 ecdf0398 Michael Hanselmann
    for val in [False, 0, None, []]:
51 ecdf0398 Michael Hanselmann
      self.assertFalse(ht.TTrue(val))
52 ecdf0398 Michael Hanselmann
53 ecdf0398 Michael Hanselmann
  def testInt(self):
54 ecdf0398 Michael Hanselmann
    for val in [-100, -3, 0, 16, 128, 923874]:
55 ecdf0398 Michael Hanselmann
      self.assertTrue(ht.TInt(val))
56 697f49d5 Michael Hanselmann
      self.assertTrue(ht.TNumber(val))
57 ecdf0398 Michael Hanselmann
58 ecdf0398 Michael Hanselmann
    for val in [False, True, None, "", [], "Hello", 0.0, 0.23, -3818.163]:
59 ecdf0398 Michael Hanselmann
      self.assertFalse(ht.TInt(val))
60 ecdf0398 Michael Hanselmann
61 ecdf0398 Michael Hanselmann
    for val in range(0, 100, 4):
62 ecdf0398 Michael Hanselmann
      self.assertTrue(ht.TPositiveInt(val))
63 ecdf0398 Michael Hanselmann
      neg = -(val + 1)
64 ecdf0398 Michael Hanselmann
      self.assertFalse(ht.TPositiveInt(neg))
65 ecdf0398 Michael Hanselmann
      self.assertFalse(ht.TStrictPositiveInt(neg))
66 ecdf0398 Michael Hanselmann
67 ecdf0398 Michael Hanselmann
      self.assertFalse(ht.TPositiveInt(0.1 + val))
68 ecdf0398 Michael Hanselmann
      self.assertFalse(ht.TStrictPositiveInt(0.1 + val))
69 ecdf0398 Michael Hanselmann
70 ecdf0398 Michael Hanselmann
    for val in [0, 0.1, 0.9, -0.3]:
71 ecdf0398 Michael Hanselmann
      self.assertFalse(ht.TStrictPositiveInt(val))
72 ecdf0398 Michael Hanselmann
73 ecdf0398 Michael Hanselmann
    for val in range(1, 100, 4):
74 ecdf0398 Michael Hanselmann
      self.assertTrue(ht.TStrictPositiveInt(val))
75 ecdf0398 Michael Hanselmann
      self.assertFalse(ht.TStrictPositiveInt(0.1 + val))
76 ecdf0398 Michael Hanselmann
77 ecdf0398 Michael Hanselmann
  def testFloat(self):
78 ecdf0398 Michael Hanselmann
    for val in [-100.21, -3.0, 0.0, 16.12, 128.3433, 923874.928]:
79 ecdf0398 Michael Hanselmann
      self.assertTrue(ht.TFloat(val))
80 697f49d5 Michael Hanselmann
      self.assertTrue(ht.TNumber(val))
81 ecdf0398 Michael Hanselmann
82 ecdf0398 Michael Hanselmann
    for val in [False, True, None, "", [], "Hello", 0, 28, -1, -3281]:
83 ecdf0398 Michael Hanselmann
      self.assertFalse(ht.TFloat(val))
84 ecdf0398 Michael Hanselmann
85 697f49d5 Michael Hanselmann
  def testNumber(self):
86 697f49d5 Michael Hanselmann
    for val in [-100, -3, 0, 16, 128, 923874,
87 697f49d5 Michael Hanselmann
                -100.21, -3.0, 0.0, 16.12, 128.3433, 923874.928]:
88 697f49d5 Michael Hanselmann
      self.assertTrue(ht.TNumber(val))
89 697f49d5 Michael Hanselmann
90 697f49d5 Michael Hanselmann
    for val in [False, True, None, "", [], "Hello", "1"]:
91 697f49d5 Michael Hanselmann
      self.assertFalse(ht.TNumber(val))
92 697f49d5 Michael Hanselmann
93 ecdf0398 Michael Hanselmann
  def testString(self):
94 ecdf0398 Michael Hanselmann
    for val in ["", "abc", "Hello World", "123",
95 ecdf0398 Michael Hanselmann
                u"", u"\u272C", u"abc"]:
96 ecdf0398 Michael Hanselmann
      self.assertTrue(ht.TString(val))
97 ecdf0398 Michael Hanselmann
98 ecdf0398 Michael Hanselmann
    for val in [False, True, None, [], 0, 1, 5, -193, 93.8582]:
99 ecdf0398 Michael Hanselmann
      self.assertFalse(ht.TString(val))
100 ecdf0398 Michael Hanselmann
101 ecdf0398 Michael Hanselmann
  def testElemOf(self):
102 ecdf0398 Michael Hanselmann
    fn = ht.TElemOf(range(10))
103 ecdf0398 Michael Hanselmann
    self.assertTrue(fn(0))
104 ecdf0398 Michael Hanselmann
    self.assertTrue(fn(3))
105 ecdf0398 Michael Hanselmann
    self.assertTrue(fn(9))
106 ecdf0398 Michael Hanselmann
    self.assertFalse(fn(-1))
107 ecdf0398 Michael Hanselmann
    self.assertFalse(fn(100))
108 ecdf0398 Michael Hanselmann
109 ecdf0398 Michael Hanselmann
    fn = ht.TElemOf([])
110 ecdf0398 Michael Hanselmann
    self.assertFalse(fn(0))
111 ecdf0398 Michael Hanselmann
    self.assertFalse(fn(100))
112 ecdf0398 Michael Hanselmann
    self.assertFalse(fn(True))
113 ecdf0398 Michael Hanselmann
114 ecdf0398 Michael Hanselmann
    fn = ht.TElemOf(["Hello", "World"])
115 ecdf0398 Michael Hanselmann
    self.assertTrue(fn("Hello"))
116 ecdf0398 Michael Hanselmann
    self.assertTrue(fn("World"))
117 ecdf0398 Michael Hanselmann
    self.assertFalse(fn("e"))
118 ecdf0398 Michael Hanselmann
119 ecdf0398 Michael Hanselmann
  def testList(self):
120 ecdf0398 Michael Hanselmann
    for val in [[], range(10), ["Hello", "World", "!"]]:
121 ecdf0398 Michael Hanselmann
      self.assertTrue(ht.TList(val))
122 ecdf0398 Michael Hanselmann
123 ecdf0398 Michael Hanselmann
    for val in [False, True, None, {}, 0, 1, 5, -193, 93.8582]:
124 ecdf0398 Michael Hanselmann
      self.assertFalse(ht.TList(val))
125 ecdf0398 Michael Hanselmann
126 ecdf0398 Michael Hanselmann
  def testDict(self):
127 ecdf0398 Michael Hanselmann
    for val in [{}, dict.fromkeys(range(10)), {"Hello": [], "World": "!"}]:
128 ecdf0398 Michael Hanselmann
      self.assertTrue(ht.TDict(val))
129 ecdf0398 Michael Hanselmann
130 ecdf0398 Michael Hanselmann
    for val in [False, True, None, [], 0, 1, 5, -193, 93.8582]:
131 ecdf0398 Michael Hanselmann
      self.assertFalse(ht.TDict(val))
132 ecdf0398 Michael Hanselmann
133 ecdf0398 Michael Hanselmann
  def testIsLength(self):
134 ecdf0398 Michael Hanselmann
    fn = ht.TIsLength(10)
135 ecdf0398 Michael Hanselmann
    self.assertTrue(fn(range(10)))
136 ecdf0398 Michael Hanselmann
    self.assertFalse(fn(range(1)))
137 ecdf0398 Michael Hanselmann
    self.assertFalse(fn(range(100)))
138 ecdf0398 Michael Hanselmann
139 ecdf0398 Michael Hanselmann
  def testAnd(self):
140 ecdf0398 Michael Hanselmann
    fn = ht.TAnd(ht.TNotNone, ht.TString)
141 ecdf0398 Michael Hanselmann
    self.assertTrue(fn(""))
142 ecdf0398 Michael Hanselmann
    self.assertFalse(fn(1))
143 ecdf0398 Michael Hanselmann
    self.assertFalse(fn(None))
144 ecdf0398 Michael Hanselmann
145 ecdf0398 Michael Hanselmann
  def testOr(self):
146 ecdf0398 Michael Hanselmann
    fn = ht.TOr(ht.TNone, ht.TAnd(ht.TString, ht.TIsLength(5)))
147 ecdf0398 Michael Hanselmann
    self.assertTrue(fn("12345"))
148 ecdf0398 Michael Hanselmann
    self.assertTrue(fn(None))
149 ecdf0398 Michael Hanselmann
    self.assertFalse(fn(1))
150 ecdf0398 Michael Hanselmann
    self.assertFalse(fn(""))
151 ecdf0398 Michael Hanselmann
    self.assertFalse(fn("abc"))
152 ecdf0398 Michael Hanselmann
153 ecdf0398 Michael Hanselmann
  def testMap(self):
154 ecdf0398 Michael Hanselmann
    self.assertTrue(ht.TMap(str, ht.TString)(123))
155 ecdf0398 Michael Hanselmann
    self.assertTrue(ht.TMap(int, ht.TInt)("9999"))
156 ecdf0398 Michael Hanselmann
    self.assertFalse(ht.TMap(lambda x: x + 100, ht.TString)(123))
157 ecdf0398 Michael Hanselmann
158 ecdf0398 Michael Hanselmann
  def testNonEmptyString(self):
159 ecdf0398 Michael Hanselmann
    self.assertTrue(ht.TNonEmptyString("xyz"))
160 ecdf0398 Michael Hanselmann
    self.assertTrue(ht.TNonEmptyString("Hello World"))
161 ecdf0398 Michael Hanselmann
    self.assertFalse(ht.TNonEmptyString(""))
162 ecdf0398 Michael Hanselmann
    self.assertFalse(ht.TNonEmptyString(None))
163 ecdf0398 Michael Hanselmann
    self.assertFalse(ht.TNonEmptyString([]))
164 ecdf0398 Michael Hanselmann
165 ecdf0398 Michael Hanselmann
  def testMaybeString(self):
166 ecdf0398 Michael Hanselmann
    self.assertTrue(ht.TMaybeString("xyz"))
167 ecdf0398 Michael Hanselmann
    self.assertTrue(ht.TMaybeString("Hello World"))
168 ecdf0398 Michael Hanselmann
    self.assertTrue(ht.TMaybeString(None))
169 ecdf0398 Michael Hanselmann
    self.assertFalse(ht.TMaybeString(""))
170 ecdf0398 Michael Hanselmann
    self.assertFalse(ht.TMaybeString([]))
171 ecdf0398 Michael Hanselmann
172 ecdf0398 Michael Hanselmann
  def testMaybeBool(self):
173 ecdf0398 Michael Hanselmann
    self.assertTrue(ht.TMaybeBool(False))
174 ecdf0398 Michael Hanselmann
    self.assertTrue(ht.TMaybeBool(True))
175 ecdf0398 Michael Hanselmann
    self.assertTrue(ht.TMaybeBool(None))
176 ecdf0398 Michael Hanselmann
    self.assertFalse(ht.TMaybeBool([]))
177 ecdf0398 Michael Hanselmann
    self.assertFalse(ht.TMaybeBool("0"))
178 ecdf0398 Michael Hanselmann
    self.assertFalse(ht.TMaybeBool("False"))
179 ecdf0398 Michael Hanselmann
180 ecdf0398 Michael Hanselmann
  def testListOf(self):
181 ecdf0398 Michael Hanselmann
    fn = ht.TListOf(ht.TNonEmptyString)
182 ecdf0398 Michael Hanselmann
    self.assertTrue(fn([]))
183 ecdf0398 Michael Hanselmann
    self.assertTrue(fn(["x"]))
184 ecdf0398 Michael Hanselmann
    self.assertTrue(fn(["Hello", "World"]))
185 ecdf0398 Michael Hanselmann
    self.assertFalse(fn(None))
186 ecdf0398 Michael Hanselmann
    self.assertFalse(fn(False))
187 ecdf0398 Michael Hanselmann
    self.assertFalse(fn(range(3)))
188 ecdf0398 Michael Hanselmann
    self.assertFalse(fn(["x", None]))
189 ecdf0398 Michael Hanselmann
190 ecdf0398 Michael Hanselmann
  def testDictOf(self):
191 ecdf0398 Michael Hanselmann
    fn = ht.TDictOf(ht.TNonEmptyString, ht.TInt)
192 ecdf0398 Michael Hanselmann
    self.assertTrue(fn({}))
193 ecdf0398 Michael Hanselmann
    self.assertTrue(fn({"x": 123, "y": 999}))
194 ecdf0398 Michael Hanselmann
    self.assertFalse(fn(None))
195 ecdf0398 Michael Hanselmann
    self.assertFalse(fn({1: "x"}))
196 ecdf0398 Michael Hanselmann
    self.assertFalse(fn({"x": ""}))
197 ecdf0398 Michael Hanselmann
    self.assertFalse(fn({"x": None}))
198 ecdf0398 Michael Hanselmann
    self.assertFalse(fn({"": 8234}))
199 ecdf0398 Michael Hanselmann
200 a464ce71 Michael Hanselmann
  def testStrictDictRequireAllExclusive(self):
201 a464ce71 Michael Hanselmann
    fn = ht.TStrictDict(True, True, { "a": ht.TInt, })
202 a464ce71 Michael Hanselmann
    self.assertFalse(fn(1))
203 a464ce71 Michael Hanselmann
    self.assertFalse(fn(None))
204 a464ce71 Michael Hanselmann
    self.assertFalse(fn({}))
205 a464ce71 Michael Hanselmann
    self.assertFalse(fn({"a": "Hello", }))
206 a464ce71 Michael Hanselmann
    self.assertFalse(fn({"unknown": 999,}))
207 a464ce71 Michael Hanselmann
    self.assertFalse(fn({"unknown": None,}))
208 a464ce71 Michael Hanselmann
209 a464ce71 Michael Hanselmann
    self.assertTrue(fn({"a": 123, }))
210 a464ce71 Michael Hanselmann
    self.assertTrue(fn({"a": -5, }))
211 a464ce71 Michael Hanselmann
212 a464ce71 Michael Hanselmann
    fn = ht.TStrictDict(True, True, { "a": ht.TInt, "x": ht.TString, })
213 a464ce71 Michael Hanselmann
    self.assertFalse(fn({}))
214 a464ce71 Michael Hanselmann
    self.assertFalse(fn({"a": -5, }))
215 a464ce71 Michael Hanselmann
    self.assertTrue(fn({"a": 123, "x": "", }))
216 a464ce71 Michael Hanselmann
    self.assertFalse(fn({"a": 123, "x": None, }))
217 a464ce71 Michael Hanselmann
218 a464ce71 Michael Hanselmann
  def testStrictDictExclusive(self):
219 a464ce71 Michael Hanselmann
    fn = ht.TStrictDict(False, True, { "a": ht.TInt, "b": ht.TList, })
220 a464ce71 Michael Hanselmann
    self.assertTrue(fn({}))
221 a464ce71 Michael Hanselmann
    self.assertTrue(fn({"a": 123, }))
222 a464ce71 Michael Hanselmann
    self.assertTrue(fn({"b": range(4), }))
223 a464ce71 Michael Hanselmann
    self.assertFalse(fn({"b": 123, }))
224 a464ce71 Michael Hanselmann
225 a464ce71 Michael Hanselmann
    self.assertFalse(fn({"foo": {}, }))
226 a464ce71 Michael Hanselmann
    self.assertFalse(fn({"bar": object(), }))
227 a464ce71 Michael Hanselmann
228 a464ce71 Michael Hanselmann
  def testStrictDictRequireAll(self):
229 a464ce71 Michael Hanselmann
    fn = ht.TStrictDict(True, False, { "a": ht.TInt, "m": ht.TInt, })
230 a464ce71 Michael Hanselmann
    self.assertTrue(fn({"a": 1, "m": 2, "bar": object(), }))
231 a464ce71 Michael Hanselmann
    self.assertFalse(fn({}))
232 a464ce71 Michael Hanselmann
    self.assertFalse(fn({"a": 1, "bar": object(), }))
233 a464ce71 Michael Hanselmann
    self.assertFalse(fn({"a": 1, "m": [], "bar": object(), }))
234 a464ce71 Michael Hanselmann
235 a464ce71 Michael Hanselmann
  def testStrictDict(self):
236 a464ce71 Michael Hanselmann
    fn = ht.TStrictDict(False, False, { "a": ht.TInt, })
237 a464ce71 Michael Hanselmann
    self.assertTrue(fn({}))
238 a464ce71 Michael Hanselmann
    self.assertFalse(fn({"a": ""}))
239 a464ce71 Michael Hanselmann
    self.assertTrue(fn({"a": 11}))
240 a464ce71 Michael Hanselmann
    self.assertTrue(fn({"other": 11}))
241 a464ce71 Michael Hanselmann
    self.assertTrue(fn({"other": object()}))
242 a464ce71 Michael Hanselmann
243 8620f50e Michael Hanselmann
  def testJobId(self):
244 8620f50e Michael Hanselmann
    for i in [0, 1, 4395, 2347625220]:
245 8620f50e Michael Hanselmann
      self.assertTrue(ht.TJobId(i))
246 8620f50e Michael Hanselmann
      self.assertTrue(ht.TJobId(str(i)))
247 8620f50e Michael Hanselmann
      self.assertFalse(ht.TJobId(-(i + 1)))
248 8620f50e Michael Hanselmann
249 8620f50e Michael Hanselmann
    for i in ["", "-", ".", ",", "a", "99j", "job-123", "\t", " 83 ",
250 8620f50e Michael Hanselmann
              None, [], {}, object()]:
251 8620f50e Michael Hanselmann
      self.assertFalse(ht.TJobId(i))
252 8620f50e Michael Hanselmann
253 8620f50e Michael Hanselmann
  def testItems(self):
254 8620f50e Michael Hanselmann
    self.assertRaises(AssertionError, ht.TItems, [])
255 8620f50e Michael Hanselmann
256 8620f50e Michael Hanselmann
    fn = ht.TItems([ht.TString])
257 8620f50e Michael Hanselmann
    self.assertFalse(fn([0]))
258 8620f50e Michael Hanselmann
    self.assertFalse(fn([None]))
259 8620f50e Michael Hanselmann
    self.assertTrue(fn(["Hello"]))
260 8620f50e Michael Hanselmann
    self.assertTrue(fn(["Hello", "World"]))
261 8620f50e Michael Hanselmann
    self.assertTrue(fn(["Hello", 0, 1, 2, "anything"]))
262 8620f50e Michael Hanselmann
263 8620f50e Michael Hanselmann
    fn = ht.TItems([ht.TAny, ht.TInt, ht.TAny])
264 8620f50e Michael Hanselmann
    self.assertTrue(fn(["Hello", 0, []]))
265 8620f50e Michael Hanselmann
    self.assertTrue(fn(["Hello", 893782]))
266 8620f50e Michael Hanselmann
    self.assertTrue(fn([{}, -938210858947, None]))
267 8620f50e Michael Hanselmann
    self.assertFalse(fn(["Hello", []]))
268 8620f50e Michael Hanselmann
269 ecdf0398 Michael Hanselmann
270 ecdf0398 Michael Hanselmann
if __name__ == "__main__":
271 ecdf0398 Michael Hanselmann
  testutils.GanetiTestProgram()