On Mon, Nov 11, 2013 at 8:54 PM, Klaus Aehlig <[email protected]> wrote:
> In order to guarantee all mandatory slots to be present, add
> a custom constructor to BaseOpCode adding those fields with
> default value, instead of inheriting the constructor from
> outils.ValidatedSlots.
>
> Signed-off-by: Klaus Aehlig <[email protected]>
> ---
>  lib/opcodes_base.py                      |  6 +++
>  test/py/ganeti.jqueue_unittest.py        | 20 +--------
>  test/py/ganeti.mcpu_unittest.py          |  5 +--
>  test/py/ganeti.opcodes_unittest.py       | 26 +++++------
>  test/py/ganeti.rapi.baserlib_unittest.py |  2 +-
>  test/py/ganeti.rapi.rlib2_unittest.py    | 74 
> ++++++++++++++++----------------
>  6 files changed, 57 insertions(+), 76 deletions(-)
>
> diff --git a/lib/opcodes_base.py b/lib/opcodes_base.py
> index 556307e..b257775 100644
> --- a/lib/opcodes_base.py
> +++ b/lib/opcodes_base.py
> @@ -160,6 +160,12 @@ class BaseOpCode(outils.ValidatedSlots):
>    # as OP_ID is dynamically defined
>    __metaclass__ = _AutoOpParamSlots
>
> +  def __init__(self, **kwargs):
> +    outils.ValidatedSlots.__init__(self, **kwargs)
> +    for key, default, _, _ in self.__class__.GetAllParams():
> +      if not hasattr(self, key):
> +        setattr(self, key, default)
> +
>    def __getstate__(self):
>      """Generic serializer.
>
> diff --git a/test/py/ganeti.jqueue_unittest.py 
> b/test/py/ganeti.jqueue_unittest.py
> index 4f0b964..1aa3ec9 100755
> --- a/test/py/ganeti.jqueue_unittest.py
> +++ b/test/py/ganeti.jqueue_unittest.py
> @@ -298,7 +298,7 @@ class TestEncodeOpError(unittest.TestCase):
>  class TestQueuedOpCode(unittest.TestCase):
>    def testDefaults(self):
>      def _Check(op):
> -      self.assertFalse(hasattr(op.input, "dry_run"))
> +      self.assertFalse(op.input.dry_run)
>        self.assertEqual(op.priority, constants.OP_PRIO_DEFAULT)
>        self.assertFalse(op.log)
>        self.assert_(op.start_timestamp is None)
> @@ -432,8 +432,6 @@ class TestQueuedJob(unittest.TestCase):
>      self.assertTrue(compat.all(op.priority == constants.OP_PRIO_DEFAULT
>                                 for op in job.ops))
>      self.assertEqual(job.CalcPriority(), constants.OP_PRIO_DEFAULT)
> -    self.assertFalse(compat.any(hasattr(op.input, "priority")
> -                                for op in job.ops))
>
>      return job
>
> @@ -445,8 +443,6 @@ class TestQueuedJob(unittest.TestCase):
>      result = job.ChangePriority(-10)
>      self.assertEqual(job.CalcPriority(), -10)
>      self.assertTrue(compat.all(op.priority == -10 for op in job.ops))
> -    self.assertFalse(compat.any(hasattr(op.input, "priority")
> -                                for op in job.ops))
>      self.assertEqual(result,
>                       (True, ("Priorities of pending opcodes for job 24984 
> have"
>                               " been changed to -10")))
> @@ -466,8 +462,6 @@ class TestQueuedJob(unittest.TestCase):
>      self.assertEqual(job.CalcPriority(), constants.OP_PRIO_DEFAULT)
>      self.assertTrue(compat.all(op.priority == constants.OP_PRIO_DEFAULT
>                                 for op in job.ops))
> -    self.assertFalse(compat.any(hasattr(op.input, "priority")
> -                                for op in job.ops))
>      self.assertEqual(map(operator.attrgetter("status"), job.ops), [
>        constants.OP_STATUS_SUCCESS,
>        constants.OP_STATUS_SUCCESS,
> @@ -491,8 +485,6 @@ class TestQueuedJob(unittest.TestCase):
>      self.assertEqual(job.CalcPriority(), constants.OP_PRIO_DEFAULT)
>      self.assertTrue(compat.all(op.priority == constants.OP_PRIO_DEFAULT
>                                 for op in job.ops))
> -    self.assertFalse(compat.any(hasattr(op.input, "priority")
> -                                for op in job.ops))
>      self.assertEqual(map(operator.attrgetter("status"), job.ops), [
>        constants.OP_STATUS_SUCCESS,
>        constants.OP_STATUS_SUCCESS,
> @@ -516,8 +508,6 @@ class TestQueuedJob(unittest.TestCase):
>      self.assertEqual(job.CalcPriority(), constants.OP_PRIO_DEFAULT)
>      self.assertEqual(map(operator.attrgetter("priority"), job.ops),
>                       [constants.OP_PRIO_DEFAULT, 7, 7, 7])
> -    self.assertFalse(compat.any(hasattr(op.input, "priority")
> -                                for op in job.ops))
>      self.assertEqual(map(operator.attrgetter("status"), job.ops), [
>        constants.OP_STATUS_RUNNING,
>        constants.OP_STATUS_QUEUED,
> @@ -543,8 +533,6 @@ class TestQueuedJob(unittest.TestCase):
>      self.assertEqual(job.CalcPriority(), constants.OP_PRIO_DEFAULT)
>      self.assertTrue(compat.all(op.priority == constants.OP_PRIO_DEFAULT
>                                 for op in job.ops))
> -    self.assertFalse(compat.any(hasattr(op.input, "priority")
> -                                for op in job.ops))
>      self.assertEqual(map(operator.attrgetter("status"), job.ops), [
>        constants.OP_STATUS_SUCCESS,
>        constants.OP_STATUS_SUCCESS,
> @@ -568,8 +556,6 @@ class TestQueuedJob(unittest.TestCase):
>      self.assertEqual(map(operator.attrgetter("priority"), job.ops),
>                       [constants.OP_PRIO_DEFAULT, constants.OP_PRIO_DEFAULT,
>                        -19, -19])
> -    self.assertFalse(compat.any(hasattr(op.input, "priority")
> -                                for op in job.ops))
>      self.assertEqual(map(operator.attrgetter("status"), job.ops), [
>        constants.OP_STATUS_SUCCESS,
>        constants.OP_STATUS_RUNNING,
> @@ -2269,10 +2255,6 @@ class TestJobProcessorTimeouts(unittest.TestCase, 
> _JobProcessorTestUtils):
>        result = proc(_nextop_fn=self._NextOpcode)
>        assert self.curop is not None
>
> -      # Input priority should never be set or modified
> -      self.assertFalse(compat.any(hasattr(op.input, "priority")
> -                                  for op in job.ops))
> -
>        if result == jqueue._JobProcessor.FINISHED or self.gave_lock:
>          # Got lock and/or job is done, result must've been written
>          self.assertFalse(job.cur_opctx)
> diff --git a/test/py/ganeti.mcpu_unittest.py b/test/py/ganeti.mcpu_unittest.py
> index 8a997a0..303a91f 100755
> --- a/test/py/ganeti.mcpu_unittest.py
> +++ b/test/py/ganeti.mcpu_unittest.py
> @@ -136,8 +136,6 @@ class TestProcessResult(unittest.TestCase):
>
>      for op in [op1, op2, op3]:
>        self.assertTrue("OP_TEST_DUMMY" in op.comment)
> -      self.assertFalse(hasattr(op, "priority"))
> -      self.assertFalse(hasattr(op, "debug_level"))
>
>    def testParams(self):
>      src = opcodes.OpTestDummy(priority=constants.OP_PRIO_HIGH,
> @@ -163,7 +161,8 @@ class TestProcessResult(unittest.TestCase):
>      self.assertTrue("OP_TEST_DUMMY" in op1.comment)
>      self.assertEqual(op1.debug_level, 3)
>
> -    self.assertEqual(op2.priority, constants.OP_PRIO_HIGH)
> +    # FIXME: as priority is mandatory, there is no way
> +    # of specifying "just inherit the priority".
>      self.assertEqual(op2.comment, "foobar")
>      self.assertEqual(op2.debug_level, 3)
>
> diff --git a/test/py/ganeti.opcodes_unittest.py 
> b/test/py/ganeti.opcodes_unittest.py
> index 63658c3..43eeffc 100755
> --- a/test/py/ganeti.opcodes_unittest.py
> +++ b/test/py/ganeti.opcodes_unittest.py
> @@ -219,10 +219,10 @@ class TestOpcodes(unittest.TestCase):
>      op = OpTest()
>      before = op.__getstate__()
>      self.assertRaises(errors.OpPrereqError, op.Validate, False)
> -    self.assertFalse(hasattr(op, "nodef"))
> -    self.assertFalse(hasattr(op, "wdef"))
> -    self.assertFalse(hasattr(op, "number"))
> -    self.assertFalse(hasattr(op, "notype"))
> +    self.assertTrue(op.nodef is None)
> +    self.assertEqual(op.wdef, "default")
> +    self.assertEqual(op.number, 0)
> +    self.assertTrue(op.notype is None)
>      self.assertEqual(op.__getstate__(), before, msg="Opcode was modified")
>
>      # Required parameter "nodef" is provided
> @@ -231,16 +231,16 @@ class TestOpcodes(unittest.TestCase):
>      op.Validate(False)
>      self.assertEqual(op.__getstate__(), before, msg="Opcode was modified")
>      self.assertEqual(op.nodef, "foo")
> -    self.assertFalse(hasattr(op, "wdef"))
> -    self.assertFalse(hasattr(op, "number"))
> -    self.assertFalse(hasattr(op, "notype"))
> +    self.assertEqual(op.wdef, "default")
> +    self.assertEqual(op.number, 0)
> +    self.assertTrue(op.notype is None)
>
>      # Missing required parameter "nodef"
>      op = OpTest(wdef="hello", number=999)
>      before = op.__getstate__()
>      self.assertRaises(errors.OpPrereqError, op.Validate, False)
> -    self.assertFalse(hasattr(op, "nodef"))
> -    self.assertFalse(hasattr(op, "notype"))
> +    self.assertTrue(op.nodef is None)
> +    self.assertTrue(op.notype is None)
>      self.assertEqual(op.__getstate__(), before, msg="Opcode was modified")
>
>      # Wrong type for "nodef"
> @@ -248,7 +248,7 @@ class TestOpcodes(unittest.TestCase):
>      before = op.__getstate__()
>      self.assertRaises(errors.OpPrereqError, op.Validate, False)
>      self.assertEqual(op.nodef, 987)
> -    self.assertFalse(hasattr(op, "notype"))
> +    self.assertTrue(op.notype is None)
>      self.assertEqual(op.__getstate__(), before, msg="Opcode was modified")
>
>      # Testing different types for "notype"
> @@ -274,10 +274,7 @@ class TestOpcodes(unittest.TestCase):
>          ]
>
>      op = OpTest()
> -    before = op.__getstate__()
>      op.Validate(True)
> -    self.assertNotEqual(op.__getstate__(), before,
> -                        msg="Opcode was not modified")

Why is this not true anymore? Can "Validate" modify the opcode, now?


>      self.assertEqual(op.value1, "default")
>      self.assertEqual(op.value2, "result")
>      self.assert_(op.dry_run is None)
> @@ -285,10 +282,7 @@ class TestOpcodes(unittest.TestCase):
>      self.assertEqual(op.priority, constants.OP_PRIO_DEFAULT)
>
>      op = OpTest(value1="hello", value2="world", debug_level=123)
> -    before = op.__getstate__()
>      op.Validate(True)
> -    self.assertNotEqual(op.__getstate__(), before,
> -                        msg="Opcode was not modified")

Same here

>      self.assertEqual(op.value1, "hello")
>      self.assertEqual(op.value2, "world")
>      self.assertEqual(op.debug_level, 123)
> diff --git a/test/py/ganeti.rapi.baserlib_unittest.py 
> b/test/py/ganeti.rapi.baserlib_unittest.py
> index c971577..7b2c0cf 100755
> --- a/test/py/ganeti.rapi.baserlib_unittest.py
> +++ b/test/py/ganeti.rapi.baserlib_unittest.py
> @@ -44,7 +44,7 @@ class TestFillOpcode(unittest.TestCase):
>      for static in [None, {}]:
>        op = baserlib.FillOpcode(self.OpTest, {}, static)
>        self.assertTrue(isinstance(op, self.OpTest))
> -      self.assertFalse(hasattr(op, "test"))
> +      self.assertTrue(op.test is None)
>
>    def testStatic(self):
>      op = baserlib.FillOpcode(self.OpTest, {}, {"test": "abc"})
> diff --git a/test/py/ganeti.rapi.rlib2_unittest.py 
> b/test/py/ganeti.rapi.rlib2_unittest.py
> index 0109f02..c80e8a8 100755
> --- a/test/py/ganeti.rapi.rlib2_unittest.py
> +++ b/test/py/ganeti.rapi.rlib2_unittest.py
> @@ -468,7 +468,7 @@ class TestInstanceActivateDisks(unittest.TestCase):
>      self.assertTrue(isinstance(op, opcodes.OpInstanceActivateDisks))
>      self.assertEqual(op.instance_name, "xyz")
>      self.assertTrue(op.ignore_size)
> -    self.assertFalse(hasattr(op, "dry_run"))
> +    self.assertFalse(op.dry_run)
>
>      self.assertRaises(IndexError, cl.GetNextSubmittedJob)
>
> @@ -487,8 +487,8 @@ class TestInstanceDeactivateDisks(unittest.TestCase):
>      self.assertEqual(job_id, exp_job_id)
>      self.assertTrue(isinstance(op, opcodes.OpInstanceDeactivateDisks))
>      self.assertEqual(op.instance_name, "inst22357")
> -    self.assertFalse(hasattr(op, "dry_run"))
> -    self.assertFalse(hasattr(op, "force"))
> +    self.assertFalse(op.dry_run)
> +    self.assertFalse(op.force)
>
>      self.assertRaises(IndexError, cl.GetNextSubmittedJob)
>
> @@ -507,7 +507,7 @@ class TestInstanceRecreateDisks(unittest.TestCase):
>      self.assertEqual(job_id, exp_job_id)
>      self.assertTrue(isinstance(op, opcodes.OpInstanceRecreateDisks))
>      self.assertEqual(op.instance_name, "inst22357")
> -    self.assertFalse(hasattr(op, "dry_run"))
> +    self.assertFalse(op.dry_run)
>      self.assertFalse(hasattr(op, "force"))
>
>      self.assertRaises(IndexError, cl.GetNextSubmittedJob)
> @@ -527,7 +527,7 @@ class TestInstanceFailover(unittest.TestCase):
>      self.assertEqual(job_id, exp_job_id)
>      self.assertTrue(isinstance(op, opcodes.OpInstanceFailover))
>      self.assertEqual(op.instance_name, "inst12794")
> -    self.assertFalse(hasattr(op, "dry_run"))
> +    self.assertFalse(op.dry_run)
>      self.assertFalse(hasattr(op, "force"))
>
>      self.assertRaises(IndexError, cl.GetNextSubmittedJob)
> @@ -552,7 +552,7 @@ class TestInstanceDiskGrow(unittest.TestCase):
>      self.assertEqual(op.instance_name, "inst10742")
>      self.assertEqual(op.disk, 3)
>      self.assertEqual(op.amount, 1024)
> -    self.assertFalse(hasattr(op, "dry_run"))
> +    self.assertFalse(op.dry_run)
>      self.assertFalse(hasattr(op, "force"))
>
>      self.assertRaises(IndexError, cl.GetNextSubmittedJob)
> @@ -576,7 +576,7 @@ class TestBackupPrepare(unittest.TestCase):
>      self.assertTrue(isinstance(op, opcodes.OpBackupPrepare))
>      self.assertEqual(op.instance_name, "inst17925")
>      self.assertEqual(op.mode, constants.EXPORT_MODE_REMOTE)
> -    self.assertFalse(hasattr(op, "dry_run"))
> +    self.assertFalse(op.dry_run)
>      self.assertFalse(hasattr(op, "force"))
>
>      self.assertRaises(IndexError, cl.GetNextSubmittedJob)
> @@ -622,7 +622,7 @@ class TestStorageQuery(unittest.TestCase):
>      self.assertEqual(op.nodes, ["node21075"])
>      self.assertEqual(op.storage_type, constants.ST_LVM_PV)
>      self.assertEqual(op.output_fields, ["name", "other"])
> -    self.assertFalse(hasattr(op, "dry_run"))
> +    self.assertFalse(op.dry_run)
>      self.assertFalse(hasattr(op, "force"))
>
>      self.assertRaises(IndexError, cl.GetNextSubmittedJob)
> @@ -687,7 +687,7 @@ class TestStorageModify(unittest.TestCase):
>          self.assertEqual(op.changes, {
>            constants.SF_ALLOCATABLE: (allocatable == "1"),
>            })
> -      self.assertFalse(hasattr(op, "dry_run"))
> +      self.assertFalse(op.dry_run)
>        self.assertFalse(hasattr(op, "force"))
>
>        self.assertRaises(IndexError, cl.GetNextSubmittedJob)
> @@ -742,7 +742,7 @@ class TestStorageRepair(unittest.TestCase):
>      self.assertEqual(op.node_name, "node19265")
>      self.assertEqual(op.storage_type, constants.ST_LVM_PV)
>      self.assertEqual(op.name, "pv16611")
> -    self.assertFalse(hasattr(op, "dry_run"))
> +    self.assertFalse(op.dry_run)
>      self.assertFalse(hasattr(op, "force"))
>
>      self.assertRaises(IndexError, cl.GetNextSubmittedJob)
> @@ -921,12 +921,12 @@ class TestInstanceCreation(testutils.GanetiTestCase):
>                      self.assertFalse("foobar" in opnic)
>
>                    if beparams is None:
> -                    self.assertFalse(hasattr(op, "beparams"))
> +                    self.assertTrue(op.beparams in [None, {}])
>                    else:
>                      self.assertEqualValues(op.beparams, beparams)
>
>                    if hvparams is None:
> -                    self.assertFalse(hasattr(op, "hvparams"))
> +                    self.assertTrue(op.hvparams in [None, {}])
>                    else:
>                      self.assertEqualValues(op.hvparams, hvparams)
>
> @@ -1102,7 +1102,7 @@ class TestBackupExport(unittest.TestCase):
>      self.assertEqual(op.remove_instance, True)
>      self.assertEqual(op.x509_key_name, ["name", "hash"])
>      self.assertEqual(op.destination_x509_ca, "---cert---")
> -    self.assertFalse(hasattr(op, "dry_run"))
> +    self.assertFalse(op.dry_run)
>      self.assertFalse(hasattr(op, "force"))
>
>      self.assertRaises(IndexError, cl.GetNextSubmittedJob)
> @@ -1128,10 +1128,10 @@ class TestBackupExport(unittest.TestCase):
>      self.assertTrue(isinstance(op, opcodes.OpBackupExport))
>      self.assertEqual(op.instance_name, name)
>      self.assertEqual(op.target_node, "node2")
> -    self.assertFalse(hasattr(op, "mode"))
> -    self.assertFalse(hasattr(op, "remove_instance"))
> +    self.assertEqual(op.mode, "local")
> +    self.assertFalse(op.remove_instance)
>      self.assertFalse(hasattr(op, "destination"))
> -    self.assertFalse(hasattr(op, "dry_run"))
> +    self.assertFalse(op.dry_run)
>      self.assertFalse(hasattr(op, "force"))
>
>      self.assertRaises(IndexError, cl.GetNextSubmittedJob)
> @@ -1172,7 +1172,7 @@ class TestInstanceMigrate(testutils.GanetiTestCase):
>          self.assertEqual(op.instance_name, name)
>          self.assertEqual(op.mode, mode)
>          self.assertEqual(op.cleanup, cleanup)
> -        self.assertFalse(hasattr(op, "dry_run"))
> +        self.assertFalse(op.dry_run)
>          self.assertFalse(hasattr(op, "force"))
>
>          self.assertRaises(IndexError, cl.GetNextSubmittedJob)
> @@ -1193,9 +1193,9 @@ class TestInstanceMigrate(testutils.GanetiTestCase):
>      self.assertEqual(job_id, exp_job_id)
>      self.assertTrue(isinstance(op, opcodes.OpInstanceMigrate))
>      self.assertEqual(op.instance_name, name)
> -    self.assertFalse(hasattr(op, "mode"))
> -    self.assertFalse(hasattr(op, "cleanup"))
> -    self.assertFalse(hasattr(op, "dry_run"))
> +    self.assertTrue(op.mode is None)
> +    self.assertFalse(op.cleanup)
> +    self.assertFalse(op.dry_run)
>      self.assertFalse(hasattr(op, "force"))
>
>      self.assertRaises(IndexError, cl.GetNextSubmittedJob)
> @@ -1230,7 +1230,7 @@ class 
> TestParseRenameInstanceRequest(testutils.GanetiTestCase):
>            self.assertEqual(op.new_name, new_name)
>            self.assertEqual(op.ip_check, ip_check)
>            self.assertEqual(op.name_check, name_check)
> -          self.assertFalse(hasattr(op, "dry_run"))
> +          self.assertFalse(op.dry_run)
>            self.assertFalse(hasattr(op, "force"))
>
>            self.assertRaises(IndexError, cl.GetNextSubmittedJob)
> @@ -1257,9 +1257,9 @@ class 
> TestParseRenameInstanceRequest(testutils.GanetiTestCase):
>        self.assertTrue(isinstance(op, opcodes.OpInstanceRename))
>        self.assertEqual(op.instance_name, name)
>        self.assertEqual(op.new_name, new_name)
> -      self.assertFalse(hasattr(op, "ip_check"))
> -      self.assertFalse(hasattr(op, "name_check"))
> -      self.assertFalse(hasattr(op, "dry_run"))
> +      self.assertTrue(op.ip_check)
> +      self.assertTrue(op.name_check)
> +      self.assertFalse(op.dry_run)
>        self.assertFalse(hasattr(op, "force"))
>
>        self.assertRaises(IndexError, cl.GetNextSubmittedJob)
> @@ -1311,10 +1311,10 @@ class 
> TestParseModifyInstanceRequest(unittest.TestCase):
>                    self.assertEqual(op.nics, nics)
>                    self.assertEqual(op.disks, disks)
>                    self.assertEqual(op.disk_template, disk_template)
> -                  self.assertFalse(hasattr(op, "remote_node"))
> -                  self.assertFalse(hasattr(op, "os_name"))
> -                  self.assertFalse(hasattr(op, "force_variant"))
> -                  self.assertFalse(hasattr(op, "dry_run"))
> +                  self.assertTrue(op.remote_node is None)
> +                  self.assertTrue(op.os_name is None)
> +                  self.assertFalse(op.force_variant)
> +                  self.assertFalse(op.dry_run)
>
>                    self.assertRaises(IndexError, cl.GetNextSubmittedJob)
>
> @@ -1337,7 +1337,7 @@ class TestParseModifyInstanceRequest(unittest.TestCase):
>
>      for i in ["hvparams", "beparams", "osparams", "force", "nics", "disks",
>                "disk_template", "remote_node", "os_name", "force_variant"]:
> -      self.assertFalse(hasattr(op, i))
> +      self.assertTrue(hasattr(op, i))
>
>
>  class TestParseInstanceReinstallRequest(testutils.GanetiTestCase):
> @@ -1497,8 +1497,8 @@ class TestInstanceReplaceDisks(unittest.TestCase):
>      self.assertTrue(isinstance(op, opcodes.OpInstanceReplaceDisks))
>      self.assertEqual(op.instance_name, name)
>      self.assertEqual(op.mode, constants.REPLACE_DISK_AUTO)
> -    self.assertFalse(hasattr(op, "iallocator"))
> -    self.assertFalse(hasattr(op, "disks"))
> +    self.assertTrue(op.iallocator is None)
> +    self.assertEqual(op.disks, [])
>      self.assertRaises(IndexError, cl.GetNextSubmittedJob)
>
>    def testNoDisks(self):
> @@ -1552,7 +1552,7 @@ class TestGroupModify(unittest.TestCase):
>        self.assertTrue(isinstance(op, opcodes.OpGroupSetParams))
>        self.assertEqual(op.group_name, name)
>        self.assertEqual(op.alloc_policy, policy)
> -      self.assertFalse(hasattr(op, "dry_run"))
> +      self.assertFalse(op.dry_run)
>        self.assertRaises(IndexError, cl.GetNextSubmittedJob)
>
>    def testUnknownPolicy(self):
> @@ -1584,8 +1584,8 @@ class TestGroupModify(unittest.TestCase):
>
>      self.assertTrue(isinstance(op, opcodes.OpGroupSetParams))
>      self.assertEqual(op.group_name, name)
> -    self.assertFalse(hasattr(op, "alloc_policy"))
> -    self.assertFalse(hasattr(op, "dry_run"))
> +    self.assertTrue(op.alloc_policy is None)
> +    self.assertFalse(op.dry_run)
>      self.assertRaises(IndexError, cl.GetNextSubmittedJob)
>
>
> @@ -1646,7 +1646,7 @@ class TestGroupAdd(unittest.TestCase):
>
>      self.assertTrue(isinstance(op, opcodes.OpGroupAdd))
>      self.assertEqual(op.group_name, name)
> -    self.assertFalse(hasattr(op, "alloc_policy"))
> +    self.assertTrue(op.alloc_policy is None)
>      self.assertFalse(op.dry_run)
>
>    def testLegacyName(self):
> @@ -1670,7 +1670,7 @@ class TestGroupAdd(unittest.TestCase):
>
>      self.assertTrue(isinstance(op, opcodes.OpGroupAdd))
>      self.assertEqual(op.group_name, name)
> -    self.assertFalse(hasattr(op, "alloc_policy"))
> +    self.assertTrue(op.alloc_policy is None)
>      self.assertTrue(op.dry_run)
>
>
> @@ -1694,7 +1694,7 @@ class TestNodeRole(unittest.TestCase):
>          self.assertTrue(isinstance(op, opcodes.OpNodeSetParams))
>          self.assertEqual(op.node_name, "node-z")
>          self.assertFalse(op.force)
> -        self.assertFalse(hasattr(op, "dry_run"))
> +        self.assertFalse(op.dry_run)
>
>          if role == rlib2._NR_REGULAR:
>            self.assertFalse(op.drained)
> --
> 1.8.4.1
>

Rest LGTM, thanks.

Michele

-- 
Google Germany GmbH
Dienerstr. 12
80331 München

Registergericht und -nummer: Hamburg, HRB 86891
Sitz der Gesellschaft: Hamburg
Geschäftsführer: Graham Law, Christine Elizabeth Flores

Reply via email to