Example #1
0
 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'])
Example #2
0
 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'])
Example #3
0
 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'])
Example #4
0
 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())
Example #5
0
 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'])
Example #6
0
 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'})
Example #7
0
 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'])
Example #8
0
 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'])
Example #9
0
 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())
Example #10
0
 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)
Example #11
0
 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'])
Example #12
0
 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'])
Example #13
0
 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())
Example #14
0
 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())
Example #15
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())
Example #16
0
 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)
Example #18
0
 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)
Example #19
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())
Example #20
0
 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])
Example #21
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])
Example #22
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)
Example #23
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())
Example #24
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())
Example #25
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())
Example #26
0
 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']))
Example #27
0
 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())
Example #28
0
 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())
Example #29
0
 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])
Example #30
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])
Example #31
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)
Example #32
0
 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)
Example #33
0
 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)
Example #34
0
 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)
Example #35
0
 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
     })
Example #36
0
 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())
Example #37
0
 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']))
Example #38
0
 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)
Example #39
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)
Example #40
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)
     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)
Example #41
0
 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)
Example #42
0
 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')])
Example #43
0
 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())
Example #44
0
 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')])
Example #45
0
 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())
Example #46
0
 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')
                                               ])
Example #47
0
 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")],
     )
Example #48
0
 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'], {})
Example #49
0
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
Example #50
0
 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)
Example #51
0
 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')]
     )
Example #52
0
 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')
         ]
     )
Example #53
0
 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')
         ]
     )
Example #54
0
 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'),
         ]
     )
Example #55
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)
Example #56
0
 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)
Example #57
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")
Example #58
0
 def diff(self):
     """ shortcut to netdiff.diff """
     latest = self.latest
     current = NetJsonParser(self.json())
     return diff(current, latest)