On Thu, Nov 06, 2014 at 12:30:52AM +0200, Alex Pyrgiotis wrote:
> Test if _ApplyContainerMods works properly in attach/detach scenarios.
>
> Signed-off-by: Alex Pyrgiotis <[email protected]>
>
> diff --git a/test/py/cmdlib/instance_unittest.py
b/test/py/cmdlib/instance_unittest.py
> index 902c070..a5f8c82 100644
> --- a/test/py/cmdlib/instance_unittest.py
> +++ b/test/py/cmdlib/instance_unittest.py
> @@ -1021,77 +1021,82 @@ class TestApplyContainerMods(unittest.TestCase):
>      self.assertEqual(container, [])
>      self.assertEqual(chgdesc, [])
>
> -  def testAdd(self):
> -    container = []
> -    chgdesc = []
> -    mods = instance_utils.PrepareContainerMods([
> -      (constants.DDM_ADD, -1, "Hello"),
> -      (constants.DDM_ADD, -1, "World"),
> -      (constants.DDM_ADD, 0, "Start"),
> -      (constants.DDM_ADD, -1, "End"),
> -      ], None)
> -instance_utils.ApplyContainerMods("test", container, chgdesc, mods,
> -                                  None, None, None, None, None)
> -    self.assertEqual(container, ["Start", "Hello", "World", "End"])
> -    self.assertEqual(chgdesc, [])
> -
> -    mods = instance_utils.PrepareContainerMods([
> -      (constants.DDM_ADD, 0, "zero"),
> -      (constants.DDM_ADD, 3, "Added"),
> -      (constants.DDM_ADD, 5, "four"),
> -      (constants.DDM_ADD, 7, "xyz"),
> -      ], None)
> -instance_utils.ApplyContainerMods("test", container, chgdesc, mods,
> -                                  None, None, None, None, None)
> -    self.assertEqual(container,
> -                     ["zero", "Start", "Hello", "Added", "World", "four",
> -                      "End", "xyz"])
> -    self.assertEqual(chgdesc, [])
> -
> -    for idx in [-2, len(container) + 1]:
> +  def testAddAttach(self):
> +    for op in (constants.DDM_ADD, constants.DDM_ATTACH):

Keep both tests separate - if you want to avoid repeating yourself (not
strictly necessary in tests), you can write a helper function that is
called from both tests.

> +      container = []
> +      chgdesc = []
>        mods = instance_utils.PrepareContainerMods([
> -        (constants.DDM_ADD, idx, "error"),
> +        (op, -1, "Hello"),
> +        (op, -1, "World"),
> +        (op, 0, "Start"),
> +        (op, -1, "End"),
>          ], None)
> -      self.assertRaises(IndexError, instance_utils.ApplyContainerMods,
> -                        "test", container, None, mods, None, None, None,
None,
> -                        None)
> +      instance_utils.ApplyContainerMods("test", container, chgdesc, mods,
> +                                   None, None, None, None, None)

This is misaligned.

> +      self.assertEqual(container, ["Start", "Hello", "World", "End"])
> +      self.assertEqual(chgdesc, [])
>
> -  def testRemoveError(self):
> +      mods = instance_utils.PrepareContainerMods([
> +        (op, 0, "zero"),
> +        (op, 3, "Added"),
> +        (op, 5, "four"),
> +        (op, 7, "xyz"),
> +        ], None)
> +      instance_utils.ApplyContainerMods("test", container, chgdesc, mods,
> +                                   None, None, None, None, None)

Same.

> +      self.assertEqual(container,
> +                       ["zero", "Start", "Hello", "Added", "World",
"four",
> +                        "End", "xyz"])
> +      self.assertEqual(chgdesc, [])
> +
> +      for idx in [-2, len(container) + 1]:
> +        mods = instance_utils.PrepareContainerMods([
> +          (op, idx, "error"),
> +          ], None)
> +        self.assertRaises(IndexError, instance_utils.ApplyContainerMods,
> +                          "test", container, None, mods, None, None,
None, None,
> +                          None)
> +
> +  def testRemoveDetachError(self):
>      for idx in [0, 1, 2, 100, -1, -4]:
> +      for op in (constants.DDM_REMOVE, constants.DDM_DETACH):

Keep them separate (as above). The current code doesn't do it, but the
less it happens, the better for the future.

> +        mods = instance_utils.PrepareContainerMods([
> +          (op, idx, None),
> +          ], None)
> +        self.assertRaises(IndexError, instance_utils.ApplyContainerMods,
> +                          "test", [], None, mods, None, None, None,
None, None)
> +
> +    for op in (constants.DDM_REMOVE, constants.DDM_DETACH):
>        mods = instance_utils.PrepareContainerMods([
> -        (constants.DDM_REMOVE, idx, None),
> +        (op, 0, object()),

Why `object`?

>          ], None)
> -      self.assertRaises(IndexError, instance_utils.ApplyContainerMods,
> -                        "test", [], None, mods, None, None, None, None,
None)
> -
> -    mods = instance_utils.PrepareContainerMods([
> -      (constants.DDM_REMOVE, 0, object()),
> -      ], None)
> -    self.assertRaises(AssertionError, instance_utils.ApplyContainerMods,
> -                      "test", [""], None, mods, None, None, None, None,
None)
> +      self.assertRaises(AssertionError, instance_utils.
ApplyContainerMods,
> +                        "test", [""], None, mods, None, None, None,
None, None)
>
> -  def testAddError(self):
> +  def testAddAttachError(self):
>      for idx in range(-100, -1) + [100]:
> +      for op in (constants.DDM_ADD, constants.DDM_ATTACH):

Split.

> +        mods = instance_utils.PrepareContainerMods([
> +          (op, idx, None),
> +          ], None)
> +        self.assertRaises(IndexError, instance_utils.ApplyContainerMods,
> +                          "test", [], None, mods, None, None, None,
None, None)
> +
> +  def testRemoveDetach(self):
> +    for op in (constants.DDM_REMOVE, constants.DDM_DETACH):

Split.

> +      container = ["item 1", "item 2"]
>        mods = instance_utils.PrepareContainerMods([
> -        (constants.DDM_ADD, idx, None),
> +        (constants.DDM_ADD, -1, "aaa"),
> +        (op, -1, None),
> +        (constants.DDM_ADD, -1, "bbb"),
>          ], None)
> -      self.assertRaises(IndexError, instance_utils.ApplyContainerMods,
> -                        "test", [], None, mods, None, None, None, None,
None)
> -
> -  def testRemove(self):
> -    container = ["item 1", "item 2"]
> -    mods = instance_utils.PrepareContainerMods([
> -      (constants.DDM_ADD, -1, "aaa"),
> -      (constants.DDM_REMOVE, -1, None),
> -      (constants.DDM_ADD, -1, "bbb"),
> -      ], None)
> -    chgdesc = []
> -instance_utils.ApplyContainerMods("test", container, chgdesc, mods,
> -                                  None, None, None, None, None)
> -    self.assertEqual(container, ["item 1", "item 2", "bbb"])
> -    self.assertEqual(chgdesc, [
> -      ("test/2", "remove"),
> -      ])
> +      chgdesc = []
> +      instance_utils.ApplyContainerMods("test", container, chgdesc, mods,
> +                                   None, None, None, None, None)

Alignment

> +      self.assertEqual(container, ["item 1", "item 2", "bbb"])
> +      self.assertEqual(chgdesc, [
> +        ("test/2", op),
> +        ])
>
>    def testModify(self):
>      container = ["item 1", "item 2"]
> @@ -1101,8 +1106,8 @@ instance_utils.ApplyContainerMods("test",
container, chgdesc, mods,
>        (constants.DDM_MODIFY, 1, "c"),
>        ], None)
>      chgdesc = []
> -instance_utils.ApplyContainerMods("test", container, chgdesc, mods,
> -                                  None, None, None, None, None)
> +    instance_utils.ApplyContainerMods("test", container, chgdesc, mods,
> +                                      None, None, None, None, None)
>      self.assertEqual(container, ["item 1", "item 2"])
>      self.assertEqual(chgdesc, [])
>
> @@ -1122,6 +1127,13 @@ instance_utils.ApplyContainerMods("test",
container, chgdesc, mods,
>        ])
>
>    @staticmethod
> +  def _AttachTestFn(idx, params, private):
> +    private.data = ("attach", idx, params)
> +    return ((100 * idx, params), [
> +      ("test/%s" % idx, hex(idx)),
> +      ])
> +
> +  @staticmethod
>    def _ModifyTestFn(idx, item, params, private):
>      private.data = ("modify", idx, params)
>      return [
> @@ -1132,6 +1144,10 @@ instance_utils.ApplyContainerMods("test",
container, chgdesc, mods,
>    def _RemoveTestFn(idx, item, private):
>      private.data = ("remove", idx, item)
>
> +  @staticmethod
> +  def _DetachTestFn(idx, item, private):
> +    private.data = ("detach", idx, item)
> +
>    def testAddWithCreateFunction(self):
>      container = []
>      chgdesc = []
> @@ -1144,14 +1160,17 @@ instance_utils.ApplyContainerMods("test",
container, chgdesc, mods,
>        (constants.DDM_MODIFY, -1, "foobar"),
>        (constants.DDM_REMOVE, 2, None),
>        (constants.DDM_ADD, 1, "More"),
> +      (constants.DDM_DETACH, -1, None),
> +      (constants.DDM_ATTACH, 0, "Hello"),
>        ], mock.Mock)
>      instance_utils.ApplyContainerMods("test", container, chgdesc, mods,
> -                                      self._CreateTestFn, None,
self._ModifyTestFn,
> -                                      self._RemoveTestFn, None)
> +                                      self._CreateTestFn,
self._AttachTestFn,
> +                                      self._ModifyTestFn,
self._RemoveTestFn,
> +                                      self._DetachTestFn)
>      self.assertEqual(container, [
> +      (000, "Hello"),
>        (000, "Start"),
>        (100, "More"),
> -      (000, "Hello"),
>        ])
>      self.assertEqual(chgdesc, [
>        ("test/0", "0x0"),
> @@ -1161,7 +1180,9 @@ instance_utils.ApplyContainerMods("test",
container, chgdesc, mods,
>        ("test/2", "remove"),
>        ("test/2", "modify foobar"),
>        ("test/2", "remove"),
> -      ("test/1", "0x1")
> +      ("test/1", "0x1"),
> +      ("test/2", "detach"),
> +      ("test/0", "0x0"),
>        ])
>      self.assertTrue(compat.all(op == private.data[0]
>                                 for (op, _, _, private) in mods))
> @@ -1174,6 +1195,8 @@ instance_utils.ApplyContainerMods("test",
container, chgdesc, mods,
>        ("modify", 2, "foobar"),
>        ("remove", 2, (300, "End")),
>        ("add", 1, "More"),
> +      ("detach", 2, (000, "Hello")),
> +      ("attach", 0, "Hello"),
>        ])
>
>
> --
> 1.7.10.4
>

--
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