def test_get_diff_when_root_have_no_children_and_added_candidate(self): running = etree.fromstring('<vr><vrId>1</vrId></vr>') candidate = etree.fromstring('<vr><vrId>1</vrId><vrId>2</vrId></vr>') block = Block(running, candidate) expected = b'<vr><same><vrId>1</vrId></same><added><vrId>2</vrId></added></vr>' actual = etree.tostring(block.get_diff()) self.assertEqual(expected, actual)
def test_get_diff_when_elements_same(self): running = self._get_element('vr', 'vrId', '1') candidate = self._get_element('vr', 'vrId', '1') block = Block(running, candidate) self.assertEqual(b'<vr><same><vrId>1</vrId></same></vr>', etree.tostring(block.get_diff()))
def test_get_diff_when_running_is_none(self): candidate = self._get_element('vr', 'Interface', 'Interface text') block = Block(None, candidate) added_element = etree.Element('added') added_element.append(candidate) expected = etree.tostring(added_element) self.assertEqual(expected, etree.tostring(block.get_diff()))
def test_get_diff_when_candidate_is_none(self): running = self._get_element('vr', 'Interface', 'Interface text') block = Block(running, None) added_element = etree.Element('removed') added_element.append(running) expected = etree.tostring(added_element) self.assertEqual(expected, etree.tostring(block.get_diff()))
def test_get_diff_when_candidate_has_deep_new_elements(self): running = etree.fromstring('<vr><vrId><mac>1</mac></vrId></vr>') candidate = etree.fromstring( '<vr><vrId><mac>1</mac></vrId><vrId><mac>3</mac></vrId></vr>') block = Block(running, candidate) expected = b'<vr><same><vrId><mac>1</mac></vrId></same><added><vrId><mac>3</mac></vrId></added></vr>' actual = etree.tostring(block.get_diff()) self.assertEqual(expected, actual)
def test_get_diff_when_root_have_no_children_and_new_ele_in_candidate( self): running = etree.fromstring('<vr><vrId>1</vrId></vr>') candidate = etree.fromstring('<vr><vrId>1</vrId><vrId>2</vrId></vr>') block = Block(running, candidate) self.assertEqual( b'<vr><same><vrId>1</vrId></same><added><vrId>2</vrId></added></vr>', etree.tostring(block.get_diff()))
def test_get_diff_when_elements_moved(self): running = etree.fromstring('<vr><vrId>1</vrId><vrId>2</vrId></vr>') candidate = etree.fromstring('<vr><vrId>2</vrId><vrId>1</vrId></vr>') block = Block(running, candidate) self.assertEqual( b'<vr><moved><vrId>1</vrId></moved><moved><vrId>2</vrId></moved></vr>', etree.tostring(block.get_diff()))
def test_get_diff_element_with_two_children_and_moved(self): running = etree.fromstring( '<a><b><n>r1</n><c>true</c></b><b><n>r2</n><c>true</c></b></a>') candidate = etree.fromstring( '<a><b><n>r2</n><c>true</c></b><b><n>r1</n><c>true</c></b></a>') block = Block(running, candidate) expected = b'<a><moved><b><n>r1</n><c>true</c></b></moved><moved><b><n>r2</n><c>true</c></b></moved></a>' actual = etree.tostring(block.get_diff()) self.assertEqual(expected, actual)
def test_get_diff_when_text_changed(self): running = etree.fromstring( '<logging_cli><logging>false</logging></logging_cli>') candidate = etree.fromstring( '<logging_cli><logging>true</logging></logging_cli>') block = Block(running, candidate) expected = (b'<logging_cli><removed><logging>false</logging></removed>' b'<added><logging>true</logging></added></logging_cli>') actual = etree.tostring(block.get_diff()) self.assertEqual(expected, actual)
def test_get_diff_when_root_have_no_children(self): running = etree.fromstring( '<vr><vrId><name>1</name></vrId><vrId><name>3</name></vrId></vr>') candidate = etree.fromstring( '<vr><vrId><name>2</name></vrId><vrId><name>4</name></vrId></vr>') block = Block(running, candidate) expected = ( b'<vr><vrId><removed><name>1</name></removed><added><name>2</name></added></vrId>' b'<vrId><removed><name>3</name></removed><added><name>4</name></added></vrId></vr>' ) actual = etree.tostring(block.get_diff()) self.assertEqual(expected, actual)
def test_get_diff_with_multiple_children_changed(self): running_string = """ <vr> <interface> <ifName>lo.management</ifName> <vrfName>management</vrfName> <ipAddr>127.0.0.1/9</ipAddr> <mtu>1501</mtu> <ipv6Addr> <ipv6Addr>::1/128</ipv6Addr> </ipv6Addr> </interface> </vr> """ candidate_string = """ <vr> <interface> <ifName>lo.management</ifName> <vrfName>management</vrfName> <ipAddr>127.0.0.1/10</ipAddr> <mtu>1500</mtu> <ipv6Addr> <ipv6Addr>::1/129</ipv6Addr> </ipv6Addr> </interface> </vr> """ running = etree.fromstring(running_string) candidate = etree.fromstring(candidate_string) block = Block(running, candidate) expected = (b'<vr>' b'<interface>' b'<ipv6Addr>' b'<removed><ipv6Addr>::1/128</ipv6Addr></removed>' b'<added><ipv6Addr>::1/129</ipv6Addr></added>' b'</ipv6Addr>' b'<same><ifName>lo.management</ifName></same>' b'<same><vrfName>management</vrfName></same>' b'<removed><ipAddr>127.0.0.1/9</ipAddr></removed>' b'<added><ipAddr>127.0.0.1/10</ipAddr></added>' b'<removed><mtu>1501</mtu></removed>' b'<added><mtu>1500</mtu></added>' b'</interface>' b'</vr>') actual = etree.tostring(block.get_diff()) self.assertEqual(expected, actual)
def test_get_diff_when_text_changed_but_have_other_children(self): running = etree.fromstring( '<nsmsnmp><enabled>false</enabled><vrfName>management</vrfName></nsmsnmp>' ) candidate = etree.fromstring( '<nsmsnmp><enabled>true</enabled><vrfName>management</vrfName></nsmsnmp>' ) block = Block(running, candidate) expected = (b'<nsmsnmp>' b'<same><vrfName>management</vrfName></same>' b'<removed><enabled>false</enabled></removed>' b'<added><enabled>true</enabled></added>' b'</nsmsnmp>') actual = etree.tostring(block.get_diff()) self.assertEqual(expected, actual)
def test_get_diff_with_deep_children_and_formatted(self): running_string = """ <vr> <vrId>0</vrId> <vrId>1</vrId> <vrId>2</vrId> <vrf> <vrfName>FOO_THREE</vrfName> <macVrf>true</macVrf> </vrf> <vrf> <vrfName>FOO_TWO</vrfName> <macVrf>true</macVrf> </vrf> </vr>""" candidate_string = """ <vr> <vrId>0</vrId> <vrId>1</vrId> <vrf> <vrfName>FOO_TWO</vrfName> <macVrf>true</macVrf> </vrf> <vrf> <vrfName>FOO_THREE</vrfName> <macVrf>true</macVrf> </vrf> </vr>""" running = etree.fromstring(running_string) candidate = etree.fromstring(candidate_string) block = Block(running, candidate) actual = block.get_diff() self.assertEqual(actual.tag, 'vr') actual_as_string = etree.tostring(actual).decode('utf-8') self.assertTrue('<same><vrId>0</vrId></same>' in actual_as_string) self.assertTrue('<same><vrId>1</vrId></same>' in actual_as_string) self.assertTrue( '<moved><vrf><vrfName>FOO_THREE</vrfName><macVrf>true</macVrf></vrf></moved>' in actual_as_string) self.assertTrue( '<moved><vrf><vrfName>FOO_TWO</vrfName><macVrf>true</macVrf></vrf></moved>' in actual_as_string) self.assertTrue( '<removed><vrId>2</vrId></removed>' in actual_as_string)