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