diff options
Diffstat (limited to 'tests/topotests/lib/topogen.py')
| -rw-r--r-- | tests/topotests/lib/topogen.py | 56 |
1 files changed, 52 insertions, 4 deletions
diff --git a/tests/topotests/lib/topogen.py b/tests/topotests/lib/topogen.py index 0e685a97b0..4d935b9538 100644 --- a/tests/topotests/lib/topogen.py +++ b/tests/topotests/lib/topogen.py @@ -84,7 +84,7 @@ def get_exabgp_cmd(commander=None): """Return the command to use for ExaBGP version < 4.""" if commander is None: - commander = Commander("topogen") + commander = Commander("exabgp", logger=logging.getLogger("exabgp")) def exacmd_version_ok(exacmd): logger.debug("checking %s for exabgp < version 4", exacmd) @@ -107,7 +107,7 @@ def get_exabgp_cmd(commander=None): exacmd = py2_path + " -m exabgp" if exacmd_version_ok(exacmd): return exacmd - py2_path = commander.get_exec_path("python") + py2_path = commander.get_exec_path("python") if py2_path: exacmd = py2_path + " -m exabgp" if exacmd_version_ok(exacmd): @@ -209,7 +209,11 @@ class Topogen(object): # Mininet(Micronet) to build the actual topology. assert not inspect.isclass(topodef) - self.net = Mininet(rundir=self.logdir, pytestconfig=topotest.g_pytest_config) + self.net = Mininet( + rundir=self.logdir, + pytestconfig=topotest.g_pytest_config, + logger=topolog.get_logger("mu", log_level="debug"), + ) # Adjust the parent namespace topotest.fix_netns_limits(self.net) @@ -359,6 +363,15 @@ class Topogen(object): self.peern += 1 return self.gears[name] + def add_bmp_server(self, name, ip, defaultRoute, port=1789): + """Add the bmp collector gear""" + if name in self.gears: + raise KeyError("The bmp server already exists") + + self.gears[name] = TopoBMPCollector( + self, name, ip=ip, defaultRoute=defaultRoute, port=port + ) + def add_link(self, node1, node2, ifname1=None, ifname2=None): """ Creates a connection between node1 and node2. The nodes can be the @@ -421,6 +434,13 @@ class Topogen(object): """ return self.get_gears(TopoExaBGP) + def get_bmp_servers(self): + """ + Retruns the bmp servers dictionnary (the key is the bmp server the + value is the bmp server object itself). + """ + return self.get_gears(TopoBMPCollector) + def start_topology(self): """Starts the topology class.""" logger.info("starting topology: {}".format(self.modname)) @@ -1090,8 +1110,9 @@ class TopoSwitch(TopoGear): # pylint: disable=too-few-public-methods def __init__(self, tgen, name, **params): + logger = topolog.get_logger(name, log_level="debug") super(TopoSwitch, self).__init__(tgen, name, **params) - tgen.net.add_switch(name) + tgen.net.add_switch(name, logger=logger) def __str__(self): gear = super(TopoSwitch, self).__str__() @@ -1199,6 +1220,33 @@ class TopoExaBGP(TopoHost): return "" +class TopoBMPCollector(TopoHost): + PRIVATE_DIRS = [ + "/var/log", + ] + + def __init__(self, tgen, name, **params): + params["private_mounts"] = self.PRIVATE_DIRS + self.port = params["port"] + self.ip = params["ip"] + super(TopoBMPCollector, self).__init__(tgen, name, **params) + + def __str__(self): + gear = super(TopoBMPCollector, self).__str__() + gear += " TopoBMPCollector<>".format() + return gear + + def start(self): + self.run( + "{}/bmp_collector/bmpserver -a {} -p {}&".format(CWD, self.ip, self.port), + stdout=None, + ) + + def stop(self): + self.run("pkill -9 -f bmpserver") + return "" + + # # Diagnostic function # |
