def test_no_changes(self): old = CnmlParser(cnml1) new = CnmlParser(cnml1) result = diff(old, new) self.assertIsInstance(result, dict) self.assertIsNone(result['added']) self.assertIsNone(result['removed'])
def test_no_changes(self): old = BatmanParser(iulinet) new = BatmanParser(iulinet) result = diff(old, new) self.assertIsInstance(result, dict) self.assertIsNone(result['added']) self.assertIsNone(result['removed'])
def test_no_changes(self): old = NetJsonParser(links2) new = NetJsonParser(links2) result = diff(old, new) self.assertIsInstance(result, dict) self.assertIsNone(result['added']) self.assertIsNone(result['removed'])
def test_simple_diff(self): old = OlsrParser(links3) new = OlsrParser(links5) result = diff(old, new) self.assertIsNone(result['changed']) # ensure there are differences self.assertEqual(len(result['added']['links']), 3) self.assertEqual(len(result['removed']['links']), 1) self.assertEqual(len(result['added']['nodes']), 2) self.assertEqual(len(result['removed']['nodes']), 1) # ensure 3 links added self._test_expected_links( graph=result['added'], expected_links=[ ('10.150.0.3', '10.150.0.7'), ('10.150.0.3', '10.150.0.6'), ('10.150.0.7', '10.150.0.6'), ], ) self._test_expected_links(graph=result['removed'], expected_links=[('10.150.0.5', '10.150.0.4') ]) added_nodes = [node['id'] for node in result['added']['nodes']] self.assertIn('10.150.0.6', added_nodes) self.assertIn('10.150.0.7', added_nodes) self.assertIn('10.150.0.5', result['removed']['nodes'][0].values())
def test_no_changes(self): old = Bmx6Parser(topo) new = Bmx6Parser(topo) result = diff(old, new) self.assertIsInstance(result, dict) self.assertIsNone(result['added']) self.assertIsNone(result['removed'])
def test_changed_3_nodes(self): old = NetJsonParser(nodes1) new = NetJsonParser(nodes2) result = diff(old, new) # nodes whose properties have changed self.assertEqual(len(result['changed']['nodes']), 3) node = result['changed']['nodes'][0] self.assertEqual(node['id'], '10.150.0.2') self.assertEqual(node['label'], '') self.assertEqual(node['local_addresses'], []) self.assertEqual(node['properties'], {}) node = result['changed']['nodes'][1] self.assertEqual(node['id'], '10.150.0.3') self.assertEqual(node['label'], 'nodeA2') self.assertEqual(node['local_addresses'], []) self.assertEqual( node['properties'], { 'hostname': 'router.2nnx', 'contact': '*****@*****.**', 'input_octets': 85331213, 'output_octets': 4358710, }, ) node = result['changed']['nodes'][2] self.assertEqual(node['id'], '10.150.0.4') self.assertEqual(node['label'], '') self.assertEqual(node['local_addresses'], ['192.168.1.3']) self.assertEqual(node['properties'], {'hostname': 'router4.nnx'})
def test_simple_diff(self): old = OlsrParser(links3) new = OlsrParser(links5) result = diff(old, new) self.assertEqual(result['changed']['nodes'], []) self.assertEqual(len(result['changed']['links']), 1) link = result['changed']['links'][0] self.assertEqual(link['source'], '10.150.0.3') self.assertEqual(link['target'], '10.150.0.2') self.assertEqual(link['cost'], 27.669) self.assertEqual(link['cost_text'], '') self.assertEqual( link['properties'], {'neighbor_link_quality': 0.184, 'link_quality': 0.195} ) # ensure there are differences self.assertEqual(len(result['added']['links']), 3) self.assertEqual(len(result['removed']['links']), 1) self.assertEqual(len(result['added']['nodes']), 2) self.assertEqual(len(result['removed']['nodes']), 1) # ensure 3 links added self._test_expected_links( graph=result['added'], expected_links=[ ('10.150.0.3', '10.150.0.7'), ('10.150.0.3', '10.150.0.6'), ('10.150.0.7', '10.150.0.6'), ], ) self._test_expected_links( graph=result['removed'], expected_links=[('10.150.0.5', '10.150.0.4')] ) added_nodes = [node['id'] for node in result['added']['nodes']] self.assertIn('10.150.0.6', added_nodes) self.assertIn('10.150.0.7', added_nodes) self.assertIn('10.150.0.5', result['removed']['nodes'][0].values())
def test_diff_format(self): old = OlsrParser(links3) new = OlsrParser(links5) result = diff(old, new) data = result['added'] self.assertEqual(data['type'], 'NetworkGraph') self.assertEqual(data['protocol'], 'OLSR') self.assertEqual(data['version'], '0.8') self.assertEqual(data['revision'], None) self.assertEqual(data['metric'], 'ETX') self.assertIsInstance(data['nodes'], list) self.assertIsInstance(data['links'], list) data = result['removed'] self.assertEqual(data['type'], 'NetworkGraph') self.assertEqual(data['protocol'], 'OLSR') self.assertEqual(data['version'], '0.8') self.assertEqual(data['revision'], None) self.assertEqual(data['metric'], 'ETX') self.assertIsInstance(data['nodes'], list) self.assertIsInstance(data['links'], list) data = result['changed'] self.assertEqual(data['type'], 'NetworkGraph') self.assertEqual(data['protocol'], 'OLSR') self.assertEqual(data['version'], '0.8') self.assertEqual(data['revision'], None) self.assertEqual(data['metric'], 'ETX') self.assertIsInstance(data['nodes'], list) self.assertIsInstance(data['links'], list)
def test_removed_1_link(self): old = OlsrParser(links3) new = OlsrParser(links2) result = diff(old, new) self.assertIsNone(result['added']) self.assertEqual(len(result['changed']['links']), 1) link = result['changed']['links'][0] self.assertEqual(link['source'], '10.150.0.2') self.assertEqual(link['target'], '10.150.0.3') self.assertEqual(link['cost'], 27.669921875) self.assertEqual(link['cost_text'], '') self.assertEqual(link['properties'], { 'link_quality': 0.195, 'neighbor_link_quality': 0.184 }) self.assertIsInstance(result, dict) self.assertTrue(type(result['removed']['links']) is list) # ensure there are differences self.assertEqual(len(result['removed']['links']), 1) self.assertEqual(len(result['removed']['nodes']), 1) # ensure correct link removed self.assertIn('10.150.0.5', result['removed']['links'][0].values()) self.assertIn('10.150.0.4', result['removed']['links'][0].values()) # ensure correct node removed self.assertIn('10.150.0.5', result['removed']['nodes'][0].values())
def test_simple_diff(self): old = OlsrParser(links3) new = OlsrParser(links5) result = diff(old, new) self.assertIsNone(result['changed']) # ensure there are differences self.assertEqual(len(result['added']['links']), 3) self.assertEqual(len(result['removed']['links']), 1) self.assertEqual(len(result['added']['nodes']), 2) self.assertEqual(len(result['removed']['nodes']), 1) # ensure 3 links added self._test_expected_links( graph=result['added'], expected_links=[ ('10.150.0.3', '10.150.0.7'), ('10.150.0.3', '10.150.0.6'), ('10.150.0.7', '10.150.0.6'), ] ) self._test_expected_links( graph=result['removed'], expected_links=[('10.150.0.5', '10.150.0.4')] ) added_nodes = [node['id'] for node in result['added']['nodes']] self.assertIn('10.150.0.6', added_nodes) self.assertIn('10.150.0.7', added_nodes) self.assertIn('10.150.0.5', result['removed']['nodes'][0].values())
def test_added_1_link(self): old = CnmlParser(cnml1) new = CnmlParser(cnml2) result = diff(old, new) self.assertIsNone(result["removed"]) # ensure there are differences self.assertEqual(len(result["added"]["links"]), 1) # ensure 1 link added self.assertIn("10.228.172.97", result["added"]["links"][0].values()) self.assertIn("10.228.172.101", result["added"]["links"][0].values())
def test_no_changes(self): old = OlsrParser(links2) new = OlsrParser(links2) result = diff(old, new) self.assertTrue(type(result) is dict) self.assertTrue(type(result['added']) is list) self.assertTrue(type(result['removed']) is list) # ensure there are no differences self.assertEqual(len(result['added']), 0) self.assertEqual(len(result['removed']), 0)
def diff(self, data=None): """ shortcut to netdiff.diff """ # if we get an instance of ``self.parser_class`` it means # ``self.get_topology_data`` has already been executed by ``receive`` if isinstance(data, self.parser_class): latest = data else: latest = self.get_topology_data(data) current = NetJsonParser(self.json(dict=True, omit_down=True)) return diff(current, latest)
def test_no_changes(self): old = NetJsonParser(links2) new = NetJsonParser(links2) result = diff(old, new) self.assertTrue(type(result) is dict) self.assertTrue(type(result['added']) is list) self.assertTrue(type(result['removed']) is list) # ensure there are no differences self.assertEqual(len(result['added']), 0) self.assertEqual(len(result['removed']), 0)
def test_added_1_link(self): old = CnmlParser(cnml1) new = CnmlParser(cnml2) result = diff(old, new) self.assertIsNone(result['removed']) # ensure there are differences self.assertEqual(len(result['added']['links']), 1) # ensure 1 link added self.assertIn('10.228.172.97', result['added']['links'][0].values()) self.assertIn('10.228.172.101', result['added']['links'][0].values())
def test_added_1_link(self): old = OlsrParser(links2) new = OlsrParser(links3) result = diff(old, new) # ensure there are differences self.assertEqual(len(result['added']), 1) self.assertEqual(len(result['removed']), 0) # ensure 1 link added self.assertIn('10.150.0.5', result['added'][0]) self.assertIn('10.150.0.4', result['added'][0])
def test_added_1_link(self): old = NetJsonParser(links2) new = NetJsonParser(links3) result = diff(old, new) # ensure there are no differences self.assertEqual(len(result['added']), 1) self.assertEqual(len(result['removed']), 0) # ensure 1 link added self.assertIn('10.150.0.5', result['added'][0]) self.assertIn('10.150.0.4', result['added'][0])
def test_removed_1_link(self): old = CnmlParser(cnml2) new = CnmlParser(cnml1) result = diff(old, new) self.assertIsInstance(result, dict) self.assertIsNone(result['added']) self.assertTrue(type(result['removed']['links']) is list) # ensure there are differences self.assertEqual(len(result['removed']['links']), 1) # ensure 1 link removed self.assertIn('10.228.172.97', result['removed']['links'][0].values()) self.assertIn('10.228.172.101', result['removed']['links'][0].values())
def test_cost_changes_1(self): old = OlsrParser(links2) new = OlsrParser(links2_cost) result = diff(old, new) self.assertIsNone(result['added']) self.assertIsNone(result['removed']) self.assertIsInstance(result['changed'], dict) links = result['changed']['links'] self.assertTrue(type(links) is list) self.assertEqual(len(links), 2) # ensure results are correct self.assertTrue(1.302734375 in (links[0]['cost'], links[1]['cost'])) self.assertTrue(1.0234375 in (links[0]['cost'], links[1]['cost']))
def test_added_1_link(self): old = NetJsonParser(links2) new = NetJsonParser(links3) result = diff(old, new) self.assertIsNone(result['removed']) # ensure there are no differences self.assertEqual(len(result['added']['links']), 1) self.assertEqual(len(result['added']['nodes']), 1) # ensure correct link added self.assertIn('10.150.0.5', result['added']['links'][0].values()) self.assertIn('10.150.0.4', result['added']['links'][0].values()) # ensure correct node added self.assertIn('10.150.0.5', result['added']['nodes'][0].values())
def test_added_1_link(self): old = OlsrParser(links2) new = OlsrParser(links3) result = diff(old, new) self.assertEqual(result['changed']['links'], []) # ensure there are differences self.assertEqual(len(result['added']['links']), 1) self.assertEqual(len(result['added']['nodes']), 1) # ensure correct link added self.assertIn('10.150.0.5', result['added']['links'][0].values()) self.assertIn('10.150.0.4', result['added']['links'][0].values()) # ensure correct node added self.assertIn('10.150.0.5', result['added']['nodes'][0].values())
def test_removed_1_link(self): old = NetJsonParser(links3) new = NetJsonParser(links2) result = diff(old, new) self.assertTrue(type(result) is dict) self.assertTrue(type(result['added']) is list) self.assertTrue(type(result['removed']) is list) # ensure there are no differences self.assertEqual(len(result['added']), 0) self.assertEqual(len(result['removed']), 1) # ensure 1 link removed self.assertIn('10.150.0.5', result['removed'][0]) self.assertIn('10.150.0.4', result['removed'][0])
def test_removed_1_link(self): old = OlsrParser(links3) new = OlsrParser(links2) result = diff(old, new) self.assertTrue(type(result) is dict) self.assertTrue(type(result['added']) is list) self.assertTrue(type(result['removed']) is list) # ensure there are differences self.assertEqual(len(result['added']), 0) self.assertEqual(len(result['removed']), 1) # ensure 1 link removed self.assertIn('10.150.0.5', result['removed'][0]) self.assertIn('10.150.0.4', result['removed'][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)
def test_label_diff_added(self): old = OpenvpnParser({}) new = OpenvpnParser(links5_tap) result = diff(old, new) labels = [] for node in result['added']['nodes']: if 'label' in node: labels.append(node['label']) self.assertEqual(len(labels), 5) self.assertIn('nodeA', labels) self.assertIn('nodeB', labels) self.assertIn('nodeC', labels) self.assertIn('nodeD', labels) self.assertIn('nodeE', labels)
def test_cost_changes_1(self): old = OlsrParser(links2) new = OlsrParser(links2_cost) result = diff(old, new) self.assertIsNone(result['added']) self.assertIsNone(result['removed']) self.assertIsInstance(result['changed'], dict) self.assertEqual(len(result['changed']['nodes']), 3) self.assertIsInstance(result['changed']['links'], list) self.assertEqual(len(result['changed']['links']), 2) links = result['changed']['links'] # ensure results are correct self.assertTrue(links[0]['cost'], 1.302) self.assertTrue(links[1]['cost'], 1.023)
def test_changed_links(self): old = OlsrParser(links2) new = OlsrParser(links3) result = diff(old, new) self.assertEqual(len(result['changed']['links']), 1) link = result['changed']['links'][0] self.assertEqual(link['source'], '10.150.0.3') self.assertEqual(link['target'], '10.150.0.2') self.assertEqual(link['cost'], 27.669921875) self.assertEqual(link['cost_text'], '') self.assertEqual(link['properties'], { 'link_quality': 0.195, 'neighbor_link_quality': 0.184 })
def test_added_1_node(self): old = NetJsonParser(nodes1) new = NetJsonParser(nodes2) result = diff(old, new) self.assertIsNone(result['removed']) self.assertIsInstance(result, dict) # ensure node addedly added with properties self.assertEqual(len(result['added']['nodes']), 1) node = result['added']['nodes'][0] self.assertEqual(node['id'], '10.150.0.5') self.assertEqual(node['label'], 'node5') self.assertEqual(node['local_addresses'], []) self.assertEqual(node['properties'], {}) self.assertIn('10.150.0.5', result['added']['nodes'][0].values())
def test_cost_changes_1(self): old = OlsrParser(links2) new = OlsrParser(links2_cost) result = diff(old, new) self.assertIsNone(result['added']) self.assertIsNone(result['removed']) self.assertIsInstance(result['changed'], dict) self.assertEqual(len(result['changed']['nodes']), 0) links = result['changed']['links'] self.assertTrue(type(links) is list) self.assertEqual(len(links), 2) # ensure results are correct self.assertTrue(1.302 in (links[0]['cost'], links[1]['cost'])) self.assertTrue(1.023 in (links[0]['cost'], links[1]['cost']))
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.assertEqual(len(result['changed']['nodes']), 2) self.assertEqual(len(result['changed']['links']), 0) self.assertIsNotNone(result['added']) self.assertEqual(len(result['added']['links']), 2) self.assertEqual(len(result['added']['nodes']), 0)
def test_cost_changes_2(self): old = OlsrParser(links5) new = OlsrParser(links5_cost) result = diff(old, new) self.assertIsNone(result['added']) self.assertIsNone(result['removed']) self.assertIsInstance(result['changed'], dict) self.assertEqual(len(result['changed']['nodes']), 0) links = result['changed']['links'] self.assertEqual(len(links), 4) costs = [link['cost'] for link in links] self.assertIn(1.0, costs) self.assertIn(2.0, costs) self.assertIn(1.50390625, costs) self.assertIn(3.515625, costs)
def test_cost_changes_2(self): old = OlsrParser(links5) new = OlsrParser(links5_cost) result = diff(old, new) self.assertIsNone(result['added']) self.assertIsNone(result['removed']) self.assertIsInstance(result['changed'], dict) self.assertEqual(len(result['changed']['nodes']), 0) links = result['changed']['links'] self.assertEqual(len(links), 4) weights = [link['weight'] for link in links] self.assertIn(1.0, weights) self.assertIn(2.0, weights) self.assertIn(1.50390625, weights) self.assertIn(3.515625, weights)
def test_added_1_link(self): old = NetJsonParser(links2) new = NetJsonParser(links3) result = diff(old, new) self.assertIsNone(result['removed']) # ensure there are no differences self.assertEqual(len(result['added']['links']), 1) self.assertEqual(len(result['added']['nodes']), 1) # ensure correct link added self.assertIn('10.150.0.5', result['added']['links'][0].values()) self.assertIn('10.150.0.4', result['added']['links'][0].values()) # ensure correct node added self.assertIn('10.150.0.5', result['added']['nodes'][0].values()) # ensure changed value is correct self.assertIn('10.150.0.3', result['changed']['links'][0].values()) self.assertEqual(result['changed']['links'][0]['cost'], 1048)
def test_added_removed_1_node(self): old = BatmanParser(iulinet) new = BatmanParser(iulinet2) result = diff(old, new) self.assertIsInstance(result, dict) self.assertTrue(type(result['added']['links']) is list) self.assertTrue(type(result['removed']['links']) is list) # ensure there are no differences self.assertEqual(len(result['added']['links']), 1) self.assertEqual(len(result['removed']['links']), 1) self._test_expected_links(graph=result['added'], expected_links=[('a0:f3:c1:96:94:10', '90:f6:52:f2:8c:2c')]) self._test_expected_links(graph=result['removed'], expected_links=[('a0:f3:c1:96:94:06', '90:f6:52:f2:8c:2c')])
def test_removed_1_link(self): old = OlsrParser(links3) new = OlsrParser(links2) result = diff(old, new) self.assertIsNone(result['added']) self.assertIsNone(result['changed']) self.assertIsInstance(result, dict) self.assertTrue(type(result['removed']['links']) is list) # ensure there are differences self.assertEqual(len(result['removed']['links']), 1) self.assertEqual(len(result['removed']['nodes']), 1) # ensure correct link removed self.assertIn('10.150.0.5', result['removed']['links'][0].values()) self.assertIn('10.150.0.4', result['removed']['links'][0].values()) # ensure correct node removed self.assertIn('10.150.0.5', result['removed']['nodes'][0].values())
def test_added_removed_1_node(self): old = Bmx6Parser(topo) new = Bmx6Parser(topo2) result = diff(old, new) self.assertIsInstance(result, dict) self.assertTrue(type(result['added']['links']) is list) self.assertTrue(type(result['removed']['links']) is list) # ensure there are no differences self.assertEqual(len(result['added']['links']), 1) self.assertEqual(len(result['removed']['links']), 1) self._test_expected_links(graph=result['added'], expected_links=[('P9SFCiutatGranada73-68f5', 'P9SFDrTruetaa183-b715')]) self._test_expected_links(graph=result['removed'], expected_links=[('P9SFCiutatGranada73-68f5', 'P9SFDrTruetaa183-b713')])
def test_simple_diff(self): old = OlsrParser(links3) new = OlsrParser(links5) result = diff(old, new) # ensure there are differences self.assertEqual(len(result['added']), 3) self.assertEqual(len(result['removed']), 1) # ensure 3 links added self._test_expected_links(links=result['added'], expected_links=[ ('10.150.0.3', '10.150.0.7'), ('10.150.0.3', '10.150.0.6'), ('10.150.0.7', '10.150.0.6'), ]) self._test_expected_links(links=result['removed'], expected_links=[('10.150.0.5', '10.150.0.4') ])
def test_simple_diff(self): old = CnmlParser(cnml1) new = CnmlParser(cnml3) result = diff(old, new) # ensure there are differences self.assertEqual(len(result["added"]["links"]), 2) self.assertEqual(len(result["removed"]["links"]), 2) # ensure 2 links added self._test_expected_links( graph=result["added"], expected_links=[("10.228.172.97", "10.228.172.101"), ("10.228.172.194", "10.228.172.193")], ) # ensure 2 links removed self._test_expected_links( graph=result["removed"], expected_links=[("10.228.172.33", "10.228.172.34"), ("10.228.172.33", "10.228.172.36")], )
def test_changed_2_links(self): old = NetJsonParser(nodes1) new = NetJsonParser(nodes2) result = diff(old, new) self.assertEqual(len(result['changed']['links']), 2) link = result['changed']['links'][0] self.assertEqual(link['source'], '10.150.0.3') self.assertEqual(link['target'], '10.150.0.2') self.assertEqual(link['cost'], 28334) self.assertEqual(link['cost_text'], 'Fast link') self.assertEqual(link['properties'], {"custom_property": True, "foo": "bar"}) link = result['changed']['links'][1] self.assertEqual(link['source'], '10.150.0.3') self.assertEqual(link['target'], '10.150.0.4') self.assertEqual(link['cost'], 1048) self.assertEqual(link['cost_text'], '') self.assertEqual(link['properties'], {})
def update_topology(): for topology in Topology.objects.all(): module = importlib.import_module(topology.backend) parser_class_name = topology.backend.split('.')[-1] classparsr = getattr(module, parser_class_name) njparser = NetJsonParser(to_netjson(topology)) parser = classparser(topology.url) graph_diff = diff(njparser, parser) for link in graph_diff['added']: if_a, if_b = get_ifs(topology, link) Link.objects.create(interface_a=if_a, interface_b=if_b, metric_value=link[2]['weight']) for link in graph_diff['removed']: if_a, if_b = get_ifs(topology, link) try: l = Link.objects.get(interface_a=if_a, interface_b=if_b) l.delete() except Link.DoesNotExist: pass
def test_diff_format(self): old = OlsrParser(links3) new = OlsrParser(links5) result = diff(old, new) data = result['added'] self.assertEqual(data['type'], 'NetworkGraph') self.assertEqual(data['protocol'], 'OLSR') self.assertEqual(data['version'], '0.8') self.assertEqual(data['revision'], None) self.assertEqual(data['metric'], 'ETX') self.assertIsInstance(data['nodes'], list) self.assertIsInstance(data['links'], list) data = result['removed'] self.assertEqual(data['type'], 'NetworkGraph') self.assertEqual(data['protocol'], 'OLSR') self.assertEqual(data['version'], '0.8') self.assertEqual(data['revision'], None) self.assertEqual(data['metric'], 'ETX') self.assertIsInstance(data['nodes'], list) self.assertIsInstance(data['links'], list)
def test_simple_diff(self): old = OlsrParser(links3) new = OlsrParser(links5) result = diff(old, new) # ensure there are differences self.assertEqual(len(result['added']), 3) self.assertEqual(len(result['removed']), 1) # ensure 3 links added self._test_expected_links( links=result['added'], expected_links=[ ('10.150.0.3', '10.150.0.7'), ('10.150.0.3', '10.150.0.6'), ('10.150.0.7', '10.150.0.6'), ] ) self._test_expected_links( links=result['removed'], expected_links=[('10.150.0.5', '10.150.0.4')] )
def test_added_removed_1_node(self): old = BatmanParser(iulinet) new = BatmanParser(iulinet2) result = diff(old, new) self.assertTrue(type(result) is dict) self.assertTrue(type(result['added']) is list) self.assertTrue(type(result['removed']) is list) # ensure there are no differences self.assertEqual(len(result['added']), 1) self.assertEqual(len(result['removed']), 1) self._test_expected_links( links=result['added'], expected_links=[ ('a0:f3:c1:96:94:10', '90:f6:52:f2:8c:2c') ] ) self._test_expected_links( links=result['removed'], expected_links=[ ('a0:f3:c1:96:94:06', '90:f6:52:f2:8c:2c') ] )
def test_added_removed_1_node(self): old = Bmx6Parser(topo) new = Bmx6Parser(topo2) result = diff(old, new) self.assertIsInstance(result, dict) self.assertTrue(type(result['added']['links']) is list) self.assertTrue(type(result['removed']['links']) is list) # ensure there are no differences self.assertEqual(len(result['added']['links']), 1) self.assertEqual(len(result['removed']['links']), 1) self._test_expected_links( graph=result['added'], expected_links=[ ('P9SFCiutatGranada73-68f5', 'P9SFDrTruetaa183-b715') ] ) self._test_expected_links( graph=result['removed'], expected_links=[ ('P9SFCiutatGranada73-68f5', 'P9SFDrTruetaa183-b713') ] )
def test_simple_diff(self): old = CnmlParser(cnml1) new = CnmlParser(cnml3) result = diff(old, new) # ensure there are differences self.assertEqual(len(result['added']['links']), 2) self.assertEqual(len(result['removed']['links']), 2) # ensure 2 links added self._test_expected_links( graph=result['added'], expected_links=[ ('10.228.172.97', '10.228.172.101'), ('10.228.172.194', '10.228.172.193'), ] ) # ensure 2 links removed self._test_expected_links( graph=result['removed'], expected_links=[ ('10.228.172.33', '10.228.172.34'), ('10.228.172.33', '10.228.172.36'), ] )
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)
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 update(request, slug): # Fetch the data using netdiff and update the db # Fetch old_topolog from DB # perform diff and update DB island = Island.objects.get(slug=slug) protocol = island.get_protocol_display() graph = '' if protocol == 'OLSRv1': parser = OlsrParser(island.url) elif protocol == 'Batman': parser = BatmanParser(island.url) elif protocol == 'BMX6': parser = Bmx6Parser(island.url) elif protocol == 'NetJson': parser = NetJsonParser(island.url) elif protocol == 'CNML': parser = CnmlParser(island.url) njparser = NetJsonParser(to_netjson(island=island)) graph_diff = diff(njparser, parser) for link in graph_diff['added']: node_a, created = Node.objects.get_or_create(address=link[0], island=island) node_b, created = Node.objects.get_or_create(address=link[1], island=island) if len(link) == 2: Link.objects.create(node_a=node_a, node_b=node_b) else: Link.objects.create(node_a=node_a, node_b=node_b, weight=link[2]['weight']) for link in graph_diff['removed']: try: l = Link.objects.get(node_a__address=link[0], node_b__address=link[1]) l.delete() except Link.DoesNotExist: pass return HttpResponse("Done")
def diff(self): """ shortcut to netdiff.diff """ latest = self.latest current = NetJsonParser(self.json()) return diff(current, latest)