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