2 Library for the robot based system test tool of the OpenDaylight project.
3 Authors: Baohua Yang@IBM, Denghui Huang@IBM
7 from robot.libraries.BuiltIn import BuiltIn
11 class Topologynew(object):
13 Topology class provide topology database and provide many method to get property of topology.
15 node_boilerplate = {u'type': u'MD_SAL', u'id': u'openflow:%d'}
20 [{"type": "MD_SAL", "id": "openflow:1"}],
22 {"type": "MD_SAL", "id": "openflow:1"},
23 {"type": "MD_SAL", "id": "openflow:2"},
24 {"type": "MD_SAL", "id": "openflow:3"},
29 self.builtin = BuiltIn()
31 def get_nodes_from_topology(self, topo_level):
33 get nodes from topology database by topology tree level
35 if isinstance(topo_level, str) or isinstance(topo_level, unicode):
36 if topo_level.isdigit():
37 topo_level = int(topo_level)
40 return self.topo_nodes_db[topo_level]
43 elif isinstance(topo_level, int):
46 return self.topo_nodes_db[topo_level]
50 def get_nodes_from_tree_topo(self, topo, exceptroot="0"):
52 This function generates a dictionary that contains type and id of each node.
53 It follows tree level topology.
54 @parameter topo: either an interer (in this case, depth is set and fanout will be 2)
55 or a string in format of "(a,b)" (a and b are integers and they
56 stands for depth and fanout respectively)
57 @return array of dicitonary objects that contains info about each node
61 if isinstance(topo, str) or isinstance(topo, unicode):
62 t = tuple(int(v) for v in re.findall("[0-9]+", topo))
69 return None # topology consists of two parameters: depth and fanout
70 elif isinstance(topo, int):
73 return None # topo parameter is not given in a desired way
75 num_nodes = Common.num_of_nodes(depth, fanout)
77 for i in xrange(1, num_nodes + 1):
78 temp = {"id": "00:00:00:00:00:00:00:%s" % format(i, "02x"), "type": "OF"}
84 def get_ids_of_leaf_nodes(self, fanout, depth):
86 For a tree structure, it numerates leaf nodes
87 by following depth-first strategy
88 @parameter fanout: fanout of tree
89 @parameter depth: total depth of a tree
90 @return leafnodes: list of ids of leaf nodes
93 self._enumerate_nodes(0, 1, 1, fanout, depth - 1, leafnodes)
97 self, currentdepth, nodeid, currentbranch, fanout, depth, leafnodes
99 if currentdepth == depth:
100 leafnodes.append("00:00:00:00:00:00:00:%s" % format(nodeid, "02x"))
103 for i in xrange(1, fanout + 1):
104 nodes += self._enumerate_nodes(
105 currentdepth + 1, nodeid + nodes, i, fanout, depth, leafnodes
110 if __name__ == "__main__":
111 topologynew = Topologynew()
112 print(topologynew.get_nodes_from_tree_topo("(2,3)"))