1% Regression tests for graph 2 3+ Load general modules 4 5= Load contribution layer 6 7from scapy.contrib.automotive.scanner.graph import * 8import pickle 9import io 10 11+ Graph tests 12 13= Basic test 14 15g = Graph() 16g.add_edge(("1", "1")) 17g.add_edge(("1", "2")) 18g.add_edge(("2", "3")) 19g.add_edge(("3", "4")) 20g.add_edge(("4", "4")) 21 22assert "1" in g.nodes 23assert "2" in g.nodes 24assert "3" in g.nodes 25assert "4" in g.nodes 26assert len(g.nodes) == 4 27assert g.dijkstra(g, "1", "4") == ["1", "2", "3", "4"] 28 29= Shortest path test 30 31g = Graph() 32g.add_edge(("1", "1")) 33g.add_edge(("1", "2")) 34g.add_edge(("2", "3")) 35g.add_edge(("3", "4")) 36g.add_edge(("4", "4")) 37 38assert g.dijkstra(g, "1", "4") == ["1", "2", "3", "4"] 39 40g.add_edge(("1", "4")) 41 42assert g.dijkstra(g, "1", "4") == ["1", "4"] 43 44g.add_edge(("3", "5")) 45g.add_edge(("5", "6")) 46 47print(g.dijkstra(g, "1", "6")) 48 49assert g.dijkstra(g, "1", "6") == ["1", "2", "3", "5", "6"] or \ 50 g.dijkstra(g, "1", "6") == ['1', '4', '3', '5', '6'] 51 52g.add_edge(("2", "5")) 53 54print(g.dijkstra(g, "1", "6")) 55 56assert g.dijkstra(g, "1", "6") == ["1", "2", "5", "6"] 57 58= graph add transition function 59 60g.add_edge(("4", "6"), transition_function=(str, str)) 61 62assert g.dijkstra(g, "1", "6") == ["1", "4", "6"] 63 64= graph pickle 65 66f = io.BytesIO() 67 68pickle.dump(g, f) 69unp = pickle.loads(f.getvalue()) 70 71assert unp.dijkstra(g, "1", "6") == ["1", "4", "6"] 72 73f1, f2 = unp.get_transition_tuple_for_edge(("4", "6")) 74assert f1==f2 75assert "1" == f1(1) 76