TestGraph.test_update_nodes()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 14
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 11
nop 1
dl 0
loc 14
rs 9.85
c 0
b 0
f 0
1
"""Test Graph methods."""
2
from unittest import TestCase
3
from unittest.mock import call, patch
4
5
from napps.kytos.pathfinder.graph import KytosGraph
6
from tests.helpers import get_topology_mock
7
8
9
# pylint: disable=arguments-differ, protected-access
10
class TestGraph(TestCase):
11
    """Tests for the Main class."""
12
13
    @patch('networkx.Graph')
14
    def setUp(self, mock_graph):
15
        """Execute steps before each tests."""
16
        self.mock_graph = mock_graph.return_value
17
        self.kytos_graph = KytosGraph()
18
19
    def test_clear(self):
20
        """Test clear."""
21
        self.kytos_graph.clear()
22
23
        self.mock_graph.clear.assert_called()
24
25
    @patch('napps.kytos.pathfinder.graph.KytosGraph.update_links')
26
    @patch('napps.kytos.pathfinder.graph.KytosGraph.update_nodes')
27
    def test_update_topology(self, *args):
28
        """Test update topology."""
29
        (mock_update_nodes, mock_update_links) = args
30
        topology = get_topology_mock()
31
        self.kytos_graph.update_topology(topology)
32
33
        self.mock_graph.clear.assert_called()
34
        mock_update_nodes.assert_called_with(topology.switches)
35
        mock_update_links.assert_called_with(topology.links)
36
37
    def test_update_nodes(self):
38
        """Test update nodes."""
39
        topology = get_topology_mock()
40
        self.kytos_graph.update_nodes(topology.switches)
41
        switch = topology.switches["00:00:00:00:00:00:00:01"]
42
43
        calls = [call(switch.id)]
44
        calls += [call(interface.id)
45
                  for interface in switch.interfaces.values()]
46
        self.mock_graph.add_node.assert_has_calls(calls)
47
48
        calls = [call(switch.id, interface.id)
49
                 for interface in switch.interfaces.values()]
50
        self.mock_graph.add_edge.assert_has_calls(calls)
51
52
    @patch('napps.kytos.pathfinder.graph.KytosGraph._set_default_metadata')
53
    def test_update_links(self, mock_set_default_metadata):
54
        """Test update nodes."""
55
        topology = get_topology_mock()
56
        self.kytos_graph.update_links(topology.links)
57
58
        keys = []
59
        all_metadata = [link.metadata for link in topology.links.values()]
60
        for metadata in all_metadata:
61
            keys.extend(key for key in metadata.keys())
62
        mock_set_default_metadata.assert_called_with(keys)
63
64
    def test_remove_switch_hops(self):
65
        """Test remove switch hops."""
66
        circuit = {"hops": ["00:00:00:00:00:00:00:01:1",
67
                            "00:00:00:00:00:00:00:01",
68
                            "00:00:00:00:00:00:00:01:2"]}
69
70
        self.kytos_graph._remove_switch_hops(circuit)
71
72
        expected_circuit = {"hops": ["00:00:00:00:00:00:00:01:1",
73
                                     "00:00:00:00:00:00:00:01:2"]}
74
        self.assertEqual(circuit, expected_circuit)
75
76
    @patch('networkx.shortest_simple_paths', return_value=["any"])
77
    def test_shortest_paths(self, mock_shortest_simple_paths):
78
        """Test shortest paths."""
79
        source, dest = "00:00:00:00:00:00:00:01:1", "00:00:00:00:00:00:00:02:2"
80
        shortest_paths = self.kytos_graph.shortest_paths(source, dest)
81
82
        mock_shortest_simple_paths.assert_called_with(self.kytos_graph.graph,
83
                                                      source, dest, None)
84
        self.assertEqual(shortest_paths, ["any"])
85