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]

Reply via email to