Revision 1cbef6d8 test/ganeti.opcodes_unittest.py
b/test/ganeti.opcodes_unittest.py | ||
---|---|---|
28 | 28 |
from ganeti import utils |
29 | 29 |
from ganeti import opcodes |
30 | 30 |
from ganeti import ht |
31 |
from ganeti import constants |
|
32 |
from ganeti import errors |
|
31 | 33 |
|
32 | 34 |
import testutils |
33 | 35 |
|
... | ... | |
131 | 133 |
self.assertFalse(callable(aval()), |
132 | 134 |
msg="Default value returned by function is callable") |
133 | 135 |
|
136 |
def testValidateNoModification(self): |
|
137 |
class _TestOp(opcodes.OpCode): |
|
138 |
OP_ID = "OP_TEST" |
|
139 |
OP_PARAMS = [ |
|
140 |
("nodef", ht.NoDefault, ht.TMaybeString), |
|
141 |
("wdef", "default", ht.TMaybeString), |
|
142 |
("number", 0, ht.TInt), |
|
143 |
("notype", None, ht.NoType), |
|
144 |
] |
|
145 |
|
|
146 |
# Missing required parameter "nodef" |
|
147 |
op = _TestOp() |
|
148 |
before = op.__getstate__() |
|
149 |
self.assertRaises(errors.OpPrereqError, op.Validate, False) |
|
150 |
self.assertFalse(hasattr(op, "nodef")) |
|
151 |
self.assertFalse(hasattr(op, "wdef")) |
|
152 |
self.assertFalse(hasattr(op, "number")) |
|
153 |
self.assertFalse(hasattr(op, "notype")) |
|
154 |
self.assertEqual(op.__getstate__(), before, msg="Opcode was modified") |
|
155 |
|
|
156 |
# Required parameter "nodef" is provided |
|
157 |
op = _TestOp(nodef="foo") |
|
158 |
before = op.__getstate__() |
|
159 |
op.Validate(False) |
|
160 |
self.assertEqual(op.__getstate__(), before, msg="Opcode was modified") |
|
161 |
self.assertEqual(op.nodef, "foo") |
|
162 |
self.assertFalse(hasattr(op, "wdef")) |
|
163 |
self.assertFalse(hasattr(op, "number")) |
|
164 |
self.assertFalse(hasattr(op, "notype")) |
|
165 |
|
|
166 |
# Missing required parameter "nodef" |
|
167 |
op = _TestOp(wdef="hello", number=999) |
|
168 |
before = op.__getstate__() |
|
169 |
self.assertRaises(errors.OpPrereqError, op.Validate, False) |
|
170 |
self.assertFalse(hasattr(op, "nodef")) |
|
171 |
self.assertFalse(hasattr(op, "notype")) |
|
172 |
self.assertEqual(op.__getstate__(), before, msg="Opcode was modified") |
|
173 |
|
|
174 |
# Wrong type for "nodef" |
|
175 |
op = _TestOp(nodef=987) |
|
176 |
before = op.__getstate__() |
|
177 |
self.assertRaises(errors.OpPrereqError, op.Validate, False) |
|
178 |
self.assertEqual(op.nodef, 987) |
|
179 |
self.assertFalse(hasattr(op, "notype")) |
|
180 |
self.assertEqual(op.__getstate__(), before, msg="Opcode was modified") |
|
181 |
|
|
182 |
# Testing different types for "notype" |
|
183 |
op = _TestOp(nodef="foo", notype=[1, 2, 3]) |
|
184 |
before = op.__getstate__() |
|
185 |
op.Validate(False) |
|
186 |
self.assertEqual(op.nodef, "foo") |
|
187 |
self.assertEqual(op.notype, [1, 2, 3]) |
|
188 |
self.assertEqual(op.__getstate__(), before, msg="Opcode was modified") |
|
189 |
|
|
190 |
op = _TestOp(nodef="foo", notype="Hello World") |
|
191 |
before = op.__getstate__() |
|
192 |
op.Validate(False) |
|
193 |
self.assertEqual(op.nodef, "foo") |
|
194 |
self.assertEqual(op.notype, "Hello World") |
|
195 |
self.assertEqual(op.__getstate__(), before, msg="Opcode was modified") |
|
196 |
|
|
197 |
def testValidateSetDefaults(self): |
|
198 |
class _TestOp(opcodes.OpCode): |
|
199 |
OP_ID = "OP_TEST" |
|
200 |
OP_PARAMS = [ |
|
201 |
# Static default value |
|
202 |
("value1", "default", ht.TMaybeString), |
|
203 |
|
|
204 |
# Default value callback |
|
205 |
("value2", lambda: "result", ht.TMaybeString), |
|
206 |
] |
|
207 |
|
|
208 |
op = _TestOp() |
|
209 |
before = op.__getstate__() |
|
210 |
op.Validate(True) |
|
211 |
self.assertNotEqual(op.__getstate__(), before, |
|
212 |
msg="Opcode was not modified") |
|
213 |
self.assertEqual(op.value1, "default") |
|
214 |
self.assertEqual(op.value2, "result") |
|
215 |
self.assert_(op.dry_run is None) |
|
216 |
self.assert_(op.debug_level is None) |
|
217 |
self.assertEqual(op.priority, constants.OP_PRIO_DEFAULT) |
|
218 |
|
|
219 |
op = _TestOp(value1="hello", value2="world", debug_level=123) |
|
220 |
before = op.__getstate__() |
|
221 |
op.Validate(True) |
|
222 |
self.assertNotEqual(op.__getstate__(), before, |
|
223 |
msg="Opcode was not modified") |
|
224 |
self.assertEqual(op.value1, "hello") |
|
225 |
self.assertEqual(op.value2, "world") |
|
226 |
self.assertEqual(op.debug_level, 123) |
|
227 |
|
|
134 | 228 |
|
135 | 229 |
if __name__ == "__main__": |
136 | 230 |
testutils.GanetiTestProgram() |
Also available in: Unified diff