Commit Graph

49 Commits

Author SHA1 Message Date
Donald Sharp
af99f19eb2 topotests: Cleanup diagnose_env to allow thought about multi-platforms
Start the cleanup of diagnose_env to allow the running of topotests
on platforms besides linux.

So we split up diagnose_env into linux and freebsd variants.
At this point in time freebsd doesn't have any special code.
To be determined in the future.

Signed-off-by: Donald Sharp <sharpd@cumulusnetworks.com>
2018-12-15 10:49:59 -05:00
Rafael Zalamena
4d45d6d3b0 topogen/topotest: add support for BFDd
Allow BFDd to be configured and used.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2018-11-27 20:22:14 -05:00
Philippe Guibert
0ab7733f7f lib: topogen support for link_enable on other netns
In the case where vrf backend is based on NETNS, the link enable command
switches from context so as to perform the command.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-11-27 20:22:14 -05:00
Christian Franke
f2d6ce41ca lib: check presence of mpls modules, not exitcode of modprobe
Signed-off-by: Christian Franke <nobody@nowhere.ws>
2018-11-27 20:22:14 -05:00
Martin Winter
a2a1134c77 lib: Add support for staticd
Signed-off-by: Martin Winter <mwinter@opensourcerouting.org>
2018-11-27 20:22:14 -05:00
Lou Berger
fb80b81b26 lib: add and use Router.checkRouterVersion (based on bdpd version)
Signed-off-by: Lou Berger <lberger@labn.net>
2018-11-27 20:22:14 -05:00
Lou Berger
95460a6b7e lib: collect and report shutdown errors across whole topology
Signed-off-by: Lou Berger <lberger@labn.net>
2018-11-27 20:22:14 -05:00
Lou Berger
b0f0d980b5 lib: allow all rw access to /tmp/topotests (for package support and debug)
Signed-off-by: Lou Berger <lberger@labn.net>
2018-11-27 20:22:14 -05:00
Lou Berger
deb4cef09a lib: log to start/local (per node) dir, log commands
Signed-off-by: Lou Berger <lberger@labn.net>
2018-11-27 20:22:14 -05:00
Lou Berger
e1dfa45e1b lib: convert to directories per node
Signed-off-by: Lou Berger <lberger@labn.net>
2018-11-27 20:22:14 -05:00
Lou Berger
87d5e16a45 lib: TopoExaBGP.start - report unexpected exabgp output
Signed-off-by: Lou Berger <lberger@labn.net>
2018-11-27 20:22:13 -05:00
Philippe Guibert
8dd5077d81 lib: zebra support for vrfwnetns parameter
topotest library is being added a new parameter when preparing the
configurationof each daemon. This parameter will be used to call the
daemon with some extra parameters. The -n parameter for zebra is taken
into account.
Also, when a extra parameter is given for calling zebra, a check is done to
see if it is possible to run zebra daemon with that option. This is the
case for vrfwnetns option. If not available, an error message is sent
back.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
2018-11-27 20:22:13 -05:00
Lou Berger
9711fc7e0b lib: add tgen level mpls init and hasmpls flag
Signed-off-by: Lou Berger <lberger@labn.net>
2018-11-27 20:22:13 -05:00
Lou Berger
447f2d5a16 lib: add router.has_mpls check
Signed-off-by: Lou Berger <lberger@labn.net>
2018-11-27 20:22:13 -05:00
Rafael Zalamena
46325763aa topogen: fix assertion on routers_have_failure
`errors != ''` is never going to be false so the assert was never being
triggered.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2018-11-27 20:22:13 -05:00
Rafael Zalamena
0e17ee9e03 topogen: import pytest assert function
Use the pytest assert function to be able to report to pytest failures
that happened inside the API.

Signed-off-by: Rafael Zalamena <rzalamena@opensourcerouting.org>
2018-11-27 20:22:13 -05:00
Lou Berger
3a568b9ca6 lib: speed up router shutdown stopRouter: report when a process is being killed only sleep if actually killed a process add option to not sleep or conduct -7 kill topogen stop: add wait parameter (defaults to old/wait) when stopping routers, first stop all without waiting then do a second pass where will wait if needed
Signed-off-by: Lou Berger <lberger@labn.net>
2018-11-27 20:22:12 -05:00
Rafael Zalamena
222ea88b2a topotest/topogen: demote some messages level
The messages level of this commit were downgraded because some of them
happen on 'non-error' situations. This should help diminish the error
log verbosity on the CI-system run.
2018-11-27 20:22:12 -05:00
Rafael Zalamena
fcfbc7696b topogen: fix diagnostics failure
Don't try to log to file if directory doesn't exist.
2018-11-27 20:22:12 -05:00
Rafael Zalamena
d34f613477 topogen: save zebra version output
Keep the zebra version output for later problem diagnostics.
2018-11-27 20:22:12 -05:00
Rafael Zalamena
7547ebd8cd topogen: log diagnostics to file 2018-11-27 20:22:12 -05:00
Rafael Zalamena
c267e5b112 topogen: add support for eigrpd and nhrp 2018-11-27 20:22:12 -05:00
Rafael Zalamena
57c5075b7b topogen: router startup failure triggers errors
Makes `router_have_failure()` detect frr startup errors.
2018-11-27 20:22:12 -05:00
Rafael Zalamena
b3b1b1d16c topogen: treat some corner cases on vtysh failure
Don't throw unneeded tracebacks when 'show version' doesn't show us what
we expect, instead gracefully fail.
2018-11-27 20:22:12 -05:00
Rafael Zalamena
1eb633c012 topogen: show pretty output for skipped messages
Format them properly instead of printing a dictionary.
2018-11-27 20:22:12 -05:00
Martin Winter
c11c4cc7d3 lib: add check for mpls kernel modules to diagnose_env()
Signed-off-by: Martin Winter <mwinter@opensourcerouting.org>
2018-11-27 20:22:12 -05:00
Rafael Zalamena
f9b48d8b42 topogen: allow daemon spec in vtysh_cmd
Allow commands to be run per-daemon basis. While here make daemon
logging file configuration per-daemon.
2018-11-27 20:22:12 -05:00
Rafael Zalamena
812e38a94d topotests: make 'quagga' check optional
Only check for quagga directories and binaries when we don't find FRR.
Also fix a copy-paste error in warning message.
2018-11-27 20:22:12 -05:00
Rafael Zalamena
007e731324 topotest: implement environment diagnostics
Run environment diagnostics on topotest start, report all detected
problems and abort if an error condition is met.
2018-11-27 20:22:12 -05:00
Rafael Zalamena
6ca2411e86 topogen: add equipment version handling
Added helper functions to TopoRouter to test equipment version and type.
2018-11-27 20:22:11 -05:00
Rafael Zalamena
7b093d84e0 topogen: handle JSON decode failures
Instead of raise()ing, return a empty dictionary.
2018-11-27 20:22:11 -05:00
Rafael Zalamena
78ed61230c topogen: implement router check method
Use a standard function to do 'router running checks' instead of having
to duplicate the code in every test.
2018-11-27 20:22:11 -05:00
Rafael Zalamena
e84692970b topogen: fix topogen memleak activation
When memleak_path is present in the configuration file it means that it is
activated.
2018-11-27 20:22:11 -05:00
Rafael Zalamena
19ccab570b topogen: add support for ExaBGP peers
Implemented basic support for ExaBGP peers.
2018-11-27 20:22:11 -05:00
Rafael Zalamena
393ca0fa16 topogen: add error functions
Store errors and error code in topogen so other tests can look up for
failures and skip tests.
2018-11-27 20:22:11 -05:00
Rafael Zalamena
4cfdff1a86 topogen: implement start/stop methods for TopoGear
Having a generic start/stop methods for TopoGear allows TopoGen to call
start/stop for all equipments. This allows us to reduce the teardown
code by removing the necessity of having to always remember to call
each equipment clean up function.
2018-11-27 20:22:11 -05:00
Rafael Zalamena
f6899d4dd4 topogen: configure daemon logging files
Auto configure daemon logging files to the appropriated place. This
removes the responsibility from the test developer to set this in the
daemon configuration.
2018-11-27 20:22:11 -05:00
Rafael Zalamena
13e1fc493b topogen: add per router logging
TopoRouters now create a logger (which logs to /tmp/{router_name}.log)
on start to record all commands and events that it goes through. All log
messages contain timestamps that may be used in the future to:
(1) correlate commands call with events
(2) benchmark/time command speed
2018-11-27 20:22:11 -05:00
Rafael Zalamena
36d1dc45eb topolog: implement a logging abstraction
The default logger (root) is already being used by Mininet, so to allow
customizing logging output and configuring log files Topolog was
created. Topolog is no more than a thin layer abstraction to call
logging functions without using the 'root' logger.
2018-11-27 20:22:11 -05:00
Rafael Zalamena
c540096e86 topogen: add memory leak report configuration
Allow memory leak to be configured from the configuration file.
2018-11-27 20:22:11 -05:00
Rafael Zalamena
edd2bdf6de topogen: support configuration file
Use a configuration file for casual settings like:

* Verbosity level (helps when debugging mininet issues)
* Custom daemon directory (in order to support running different daemon
  binaries without touching tests)
* Daemon type switch: allow running quagga without touching any test
  files

Also fix the add_router() documentation to include all options.
2018-11-27 20:22:11 -05:00
Rafael Zalamena
a40daddc4c topogen: added JSON output support for vtysh_cmd
Allow vtysh_cmd() to convert JSON output to Python data structures.
This feature will be used to get vtysh JSON outputs for tests
comparsions.

Usage example:

```py
router = get_topogen().gears['r1']
json_output = router.vtysh_cmd('show ip ospf json', isjson=True)
json_cmp(json_output, {'important_key': 'important_value'})
```
2018-11-27 20:22:11 -05:00
Rafael Zalamena
31bfa9df79 topogen: use shorter names for equipments
After some feedback from mwinter@, the names of equipments are now
shorter to make it easier to type them and to keep consistency with
mininet documentation. While here, update the template and make it use
optional name parameters for clarity.
2018-11-27 20:22:11 -05:00
Rafael Zalamena
7326ea11c0 topogen: implement __str__ for TopoGear objects
Print TopoGear name, links and type (currently TopoRouter and Switch
don't have any other useful attributes).
2018-11-27 20:22:11 -05:00
Rafael Zalamena
38c3993248 topogen: implement memory leak test call
This is a shortcut for the memory leak test, it should be used in the
new tests in order to avoid boilerplate code.
2018-11-27 20:22:11 -05:00
Rafael Zalamena
8c3fdf62a9 topogen: add support for setting link state
This commit changes how topology links are made in order to support
discovering who and what link is the node interface connected to. After
that, the implementation of the link state change functions were trivial
as calling a command in the node shell.

The method run() was moved from TopoRouter to TopoGear so all equipment
types can benefit from this code.
2018-11-27 20:22:11 -05:00
Rafael Zalamena
d9ea1cda81 Topogen: document new options
We can now add routers to the topology using different daemon binaries
path. This will allow us to run tests with different daemon versions and
types.
2018-11-27 20:22:11 -05:00
Rafael Zalamena
2ab8553078 topotest: parameterize daemon's path
This diff is a code cleanup that will allow us more flexibility when
defining and using the daemon binaries path, it also fixes a few pylint
warnings.
2018-11-27 20:22:11 -05:00
Rafael Zalamena
1fca63c1e4 topogen: first code import
Topogen (Topology Generator) is a helper that wraps around Topotest to
simplify some of the boilerplate code. This abstraction will help the
development of new tests and new APIs without breaking the existing
ones. It also makes the relation of objects clearer, since we no longer
touch the Mininet API directly, which in turn also makes us less
vulnerable to external API changes.
2018-11-27 20:22:11 -05:00