From: Rafael Zalamena Date: Wed, 28 Jun 2017 18:30:44 +0000 (-0300) Subject: topogen: added JSON output support for vtysh_cmd X-Git-Tag: frr-7.1-dev~151^2~297 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=a40daddc4c7c3e0f30f2a136a9ae9165e351bcdc;p=matthieu%2Ffrr.git 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'}) ``` --- diff --git a/tests/topotests/lib/topogen.py b/tests/topotests/lib/topogen.py index f437401517..97f006c59c 100644 --- a/tests/topotests/lib/topogen.py +++ b/tests/topotests/lib/topogen.py @@ -40,6 +40,7 @@ Basic usage instructions: import os import sys +import json from mininet.net import Mininet from mininet.log import setLogLevel @@ -388,7 +389,7 @@ class TopoRouter(TopoGear): """ return self.tgen.net[self.name].startRouter() - def vtysh_cmd(self, command): + def vtysh_cmd(self, command, isjson=False): """ Runs the provided command string in the vty shell and returns a string with the response. @@ -401,7 +402,11 @@ class TopoRouter(TopoGear): return self.vtysh_multicmd(command) vtysh_command = 'vtysh -c "{}" 2>/dev/null'.format(command) - return self.run(vtysh_command) + output = self.run(vtysh_command) + if isjson is False: + return output + + return json.loads(output) def vtysh_multicmd(self, commands, pretty_output=True): """