| % Regression tests for graph |
| |
| + Load general modules |
| |
| = Load contribution layer |
| |
| from scapy.contrib.automotive.scanner.graph import * |
| import pickle |
| import io |
| |
| + Graph tests |
| |
| = Basic test |
| |
| g = Graph() |
| g.add_edge(("1", "1")) |
| g.add_edge(("1", "2")) |
| g.add_edge(("2", "3")) |
| g.add_edge(("3", "4")) |
| g.add_edge(("4", "4")) |
| |
| assert "1" in g.nodes |
| assert "2" in g.nodes |
| assert "3" in g.nodes |
| assert "4" in g.nodes |
| assert len(g.nodes) == 4 |
| assert g.dijkstra(g, "1", "4") == ["1", "2", "3", "4"] |
| |
| = Shortest path test |
| |
| g = Graph() |
| g.add_edge(("1", "1")) |
| g.add_edge(("1", "2")) |
| g.add_edge(("2", "3")) |
| g.add_edge(("3", "4")) |
| g.add_edge(("4", "4")) |
| |
| assert g.dijkstra(g, "1", "4") == ["1", "2", "3", "4"] |
| |
| g.add_edge(("1", "4")) |
| |
| assert g.dijkstra(g, "1", "4") == ["1", "4"] |
| |
| g.add_edge(("3", "5")) |
| g.add_edge(("5", "6")) |
| |
| print(g.dijkstra(g, "1", "6")) |
| |
| assert g.dijkstra(g, "1", "6") == ["1", "2", "3", "5", "6"] or \ |
| g.dijkstra(g, "1", "6") == ['1', '4', '3', '5', '6'] |
| |
| g.add_edge(("2", "5")) |
| |
| print(g.dijkstra(g, "1", "6")) |
| |
| assert g.dijkstra(g, "1", "6") == ["1", "2", "5", "6"] |
| |
| = graph add transition function |
| |
| g.add_edge(("4", "6"), transition_function=(str, str)) |
| |
| assert g.dijkstra(g, "1", "6") == ["1", "4", "6"] |
| |
| = graph pickle |
| |
| f = io.BytesIO() |
| |
| pickle.dump(g, f) |
| unp = pickle.loads(f.getvalue()) |
| |
| assert unp.dijkstra(g, "1", "6") == ["1", "4", "6"] |
| |
| f1, f2 = unp.get_transition_tuple_for_edge(("4", "6")) |
| assert f1==f2 |
| assert "1" == f1(1) |