On 11/10/2014 06:22 PM, Aaron Karper wrote:
> 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] <mailto:[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.
>
ACK
>> + 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.
>
ACK
>> + 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.
>
ACK
>> + 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.
>
ACK
>> + 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`?
>
This line is utterly wrong and I'm not sure how it slipped into the
code. Good catch, I'll remove it.
>> ], 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.
>
ACK
>> + 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.
>
ACK
>> + 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
>
ACK
>> + 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
--
Alex | [email protected]