diff --git a/netdiff/utils.py b/netdiff/utils.py index 805855d..5ffc69f 100644 --- a/netdiff/utils.py +++ b/netdiff/utils.py @@ -20,14 +20,14 @@ def diff(old, new): changed_edges = _find_changed(old.graph, new.graph, in_both) # create netjson objects # or assign None if no changes - if added_nodes.nodes() and added_edges.edges(): + if added_nodes.nodes() or added_edges.edges(): added = _netjson_networkgraph(protocol, version, revision, metric, added_nodes.nodes(data=True), added_edges.edges(data=True), dict=True) else: added = None - if removed_nodes.nodes() and removed_edges.edges(): + if removed_nodes.nodes() or removed_edges.edges(): removed = _netjson_networkgraph(protocol, version, revision, metric, removed_nodes.nodes(data=True), removed_edges.edges(data=True), diff --git a/tests/test_utils.py b/tests/test_utils.py new file mode 100644 index 0000000..cf5cbb8 --- /dev/null +++ b/tests/test_utils.py @@ -0,0 +1,89 @@ +import os + +from netdiff import NetJsonParser +from netdiff import diff +from netdiff.tests import TestCase + + +CURRENT_DIR = os.path.dirname(os.path.realpath(__file__)) +links2 = '{0}/static/netjson-2-links.json'.format(CURRENT_DIR) + + +class TestUtils(TestCase): + """ tests for netdiff.utils """ + + def test_same_nodes_but_added_links(self): + """ + See issue 36: + https://github.com/ninuxorg/netdiff/issues/36 + """ + old = NetJsonParser({ + "type": "NetworkGraph", + "protocol": "OLSR", + "version": "0.6.6", + "revision": "5031a799fcbe17f61d57e387bc3806de", + "metric": "ETX", + "nodes": [ + { + "id": "10.150.0.3", + "local_addresses": ["192.168.1.3"], + "properties": {"hostname": "router.3nnx"} + }, + { + "id": "10.150.0.2", + "local_addresses": ["192.168.1.2"], + "properties": {"hostname": "router2.nnx"} + }, + { + "id": "10.150.0.4", + "local_addresses": ["192.168.1.3"], + "properties": {"hostname": "router4.nnx"} + } + ], + "links": [] + }) + new = NetJsonParser(links2) + result = diff(old, new) + self.assertIsNone(result['removed']) + self.assertIsNone(result['changed']) + self.assertIsNotNone(result['added']) + self.assertEqual(len(result['added']['links']), 2) + self.assertEqual(len(result['added']['nodes']), 0) + + def test_same_nodes_but_removed_links(self): + """ + See issue 36: + https://github.com/ninuxorg/netdiff/issues/36 + """ + old = NetJsonParser({ + "type": "NetworkGraph", + "protocol": "OLSR", + "version": "0.6.6", + "revision": "5031a799fcbe17f61d57e387bc3806de", + "metric": "ETX", + "nodes": [ + {"id": "10.150.0.3"}, + {"id": "10.150.0.2"} + ], + "links": [ + {"source": "10.150.0.3", "target": "10.150.0.2", "cost": 1} + ] + }) + new = NetJsonParser({ + "type": "NetworkGraph", + "protocol": "OLSR", + "version": "0.6.6", + "revision": "5031a799fcbe17f61d57e387bc3806de", + "metric": "ETX", + "nodes": [ + {"id": "10.150.0.3"}, + {"id": "10.150.0.2"} + ], + "links": [] + }) + result = diff(old, new) + self.assertIsNone(result['changed']) + self.assertIsNone(result['added']) + self.assertIsNotNone(result['removed']) + self.assertEqual(len(result['removed']['nodes']), 0) + self.assertEqual(len(result['removed']['links']), 1)