Add a simple sanity test for pydot outputting

Depends-On: Ia633ccd1dca94f70b05ae4376a1c3a3f252a9923

Related-Bug: #1561656

Change-Id: I930a1ee9c1d17a12328d920bbe02ea0b77947295
This commit is contained in:
Joshua Harlow
2016-03-25 10:36:01 -07:00
parent 720ee3792d
commit 8c2d73bc23
3 changed files with 41 additions and 3 deletions

View File

@@ -98,6 +98,29 @@ class GraphTest(test.TestCase):
g3 = graph.merge_graphs(g, g2)
self.assertEqual(3, len(g3))
def test_pydot_output(self):
# NOTE(harlowja): ensure we use the ordered types here, otherwise
# the expected output will vary based on randomized hashing and then
# the test will fail randomly...
for graph_cls, kind, edge in [(graph.OrderedDiGraph, 'digraph', '->'),
(graph.OrderedGraph, 'graph', '--')]:
g = graph_cls(name='test')
g.add_node("a")
g.add_node("b")
g.add_node("c")
g.add_edge("a", "b")
g.add_edge("b", "c")
expected = """
strict %(kind)s "test" {
a;
b;
c;
a %(edge)s b;
b %(edge)s c;
}
""" % ({'kind': kind, 'edge': edge})
self.assertEqual(expected.lstrip(), g.export_to_dot())
def test_merge_edges(self):
g = graph.DiGraph()
g.add_node("a")

View File

@@ -115,7 +115,7 @@ class DiGraph(nx.DiGraph):
def export_to_dot(self):
"""Exports the graph to a dot format (requires pydot library)."""
return nx.to_pydot(self).to_string()
return nx_pydot.to_pydot(self).to_string()
def is_directed_acyclic(self):
"""Returns if this graph is a DAG or not."""
@@ -157,8 +157,20 @@ class DiGraph(nx.DiGraph):
class OrderedDiGraph(DiGraph):
"""A directed graph subclass with useful utility functions.
This derivative retains node, edge, insertation and iteration
ordering (so that the iteration order matches the insertation
This derivative retains node, edge, insertion and iteration
ordering (so that the iteration order matches the insertion
order).
"""
node_dict_factory = collections.OrderedDict
adjlist_dict_factory = collections.OrderedDict
edge_attr_dict_factory = collections.OrderedDict
class OrderedGraph(Graph):
"""A graph subclass with useful utility functions.
This derivative retains node, edge, insertion and iteration
ordering (so that the iteration order matches the insertion
order).
"""
node_dict_factory = collections.OrderedDict

View File

@@ -21,6 +21,9 @@ kazoo>=2.2 # Apache-2.0
# Used for testing redis jobboards
redis>=2.10.0 # MIT
# Used for making sure pydot is still working
pydotplus>=2.0.2 # MIT License
# Used for testing database persistence backends.
SQLAlchemy<1.1.0,>=1.0.10 # MIT
alembic>=0.8.0 # MIT