Skip to content

Commit

Permalink
[show/tests] Add support for "show run isis"
Browse files Browse the repository at this point in the history
Signed-off-by: ideleon@microsoft.com
  • Loading branch information
isabelladeleon12 committed Apr 12, 2023
1 parent 7497c3f commit 4e9b561
Show file tree
Hide file tree
Showing 4 changed files with 142 additions and 2 deletions.
58 changes: 58 additions & 0 deletions show/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -1481,6 +1481,64 @@ def bgp(namespace, verbose):
print(output)


# 'isis' subcommand ("show runningconfiguration isis")
@runningconfiguration.command()
@click.option('--verbose', is_flag=True, help="Enable verbose output")
@click.option('--config_db', is_flag=True, help="Enable config DB output")
@click.option('--namespace', '-n', 'namespace', required=False, default=None, type=str, show_default=False,
help='Option needed for multi-asic only: provide namespace name',
callback=multi_asic_util.multi_asic_namespace_validation_callback)
def isis(namespace, config_db, verbose):
"""
Show ISIS running configuration
Note:
multi-asic can run 'show run isis' and show from all asics, or 'show run isis -n <ns>'
single-asic only run 'show run isis', '-n' is not available
"""

if multi_asic.is_multi_asic():
if namespace and namespace not in multi_asic.get_namespace_list():
ctx = click.get_current_context()
ctx.fail("invalid value for -n/--namespace option. provide namespace from list {}".format(multi_asic.get_namespace_list()))
if not multi_asic.is_multi_asic() and namespace:
ctx = click.get_current_context()
ctx.fail("-n/--namespace is not available for single asic")

if (config_db):
full_isis_conf = {}

cmd = "sonic-cfggen -d --var-json ISIS_GLOBAL"
global_output = run_command(cmd, return_cmd=True)

cmd = "sonic-cfggen -d --var-json ISIS_LEVEL"
level_output = run_command(cmd, return_cmd=True)

cmd = "sonic-cfggen -d --var-json ISIS_INTERFACE"
interface_output = run_command(cmd, return_cmd=True)

full_isis_conf["ISIS_GLOBAL"] = json.loads(global_output)
full_isis_conf["ISIS_LEVEL"] = json.loads(level_output)
full_isis_conf["ISIS_INTERFACE"] = json.loads(interface_output)

click.echo(json.dumps(full_isis_conf, indent=4))
else:
output = ""
cmd = "show running-config isis"
import utilities_common.bgp_util as bgp_util
if multi_asic.is_multi_asic():
if not namespace:
ns_list = multi_asic.get_namespace_list()
for ns in ns_list:
output += "\n------------Showing running config isis on {}------------\n".format(ns)
output += bgp_util.run_bgp_show_command(cmd, ns)
else:
output += "\n------------Showing running config isis on {}------------\n".format(namespace)
output += bgp_util.run_bgp_show_command(cmd, namespace)
else:
output += bgp_util.run_bgp_show_command(cmd)
click.echo(output.rstrip('\n'))


# 'interfaces' subcommand ("show runningconfiguration interfaces")
@runningconfiguration.command()
@click.argument('interfacename', required=False)
Expand Down
8 changes: 6 additions & 2 deletions tests/conftest.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@
mock_show_isis_neighbors,
mock_show_isis_database,
mock_show_isis_hostname,
mock_show_isis_interface
mock_show_isis_interface,
mock_show_run_isis
)
from . import config_int_ip_common
import utilities_common.constants as constants
Expand Down Expand Up @@ -395,7 +396,10 @@ def setup_single_isis_instance(request):
elif request.param.startswith('isis_interface') or \
request.param.startswith('isis_interface'):
bgp_util.run_bgp_command = mock.MagicMock(
return_value=mock_show_isis_interface(request))
return_value=mock_show_isis_interface(request))
elif request.param.startswith('show_run_isis'):
bgp_util.run_bgp_command = mock.MagicMock(
return_value=mock_show_run_isis(request))
yield

bgp_util.run_bgp_command = _old_run_bgp_command
Expand Down
57 changes: 57 additions & 0 deletions tests/isis_frr_input/isis_frr_test_vector.py
Original file line number Diff line number Diff line change
Expand Up @@ -452,6 +452,53 @@ def mock_show_isis_interface(request):
else:
return ""

show_run_isis_output = \
"""Building configuration...
Current configuration:
!
frr version 8.2.2
frr defaults traditional
hostname vlab-01
log syslog informational
log facility local4
no service integrated-vtysh-config
!
password zebra
enable password zebra
!
interface PortChannel101
ip router isis 1
ipv6 router isis 1
isis network point-to-point
exit
!
router isis 1
is-type level-2-only
net 49.0001.1720.1700.0002.00
lsp-mtu 1383
lsp-timers level-1 gen-interval 30 refresh-interval 900 max-lifetime 1200
lsp-timers level-2 gen-interval 30 refresh-interval 305 max-lifetime 900
log-adjacency-changes
exit
!
end
"""

show_run_isis_invalid_help_output = \
"""Usage: isis [OPTIONS]
Try "isis --help" for help.
Error: Got unexpected extra argument (?)
"""

def mock_show_run_isis(request):
if request.param == 'show_run_isis_output':
return show_run_isis_output
elif request.param == 'show_run_isis_invalid_help_output':
return show_run_isis_invalid_help_output
else:
return ""

testData = {
'isis_neighbors': {
Expand Down Expand Up @@ -554,4 +601,14 @@ def mock_show_isis_interface(request):
'rc': 2,
'rc_output': isis_interface_unknown_ifname_output
},
'show_run_isis': {
'args': [],
'rc': 0,
'rc_output': show_run_isis_output
},
'show_run_isis_invalid_help': {
'args': ['?'],
'rc': 2,
'rc_output': show_run_isis_invalid_help_output
},
}
21 changes: 21 additions & 0 deletions tests/isis_frr_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -125,3 +125,24 @@ def test_isis_interface(self,
show = setup_isis_commands
exec_cmd = show.cli.commands["isis"].commands["interface"]
executor(test_vector, show, exec_cmd)


class TestShowRunIsis(object):

@classmethod
def setup_class(cls):
print("SETUP")

@pytest.mark.parametrize('setup_single_isis_instance, test_vector',
[
('show_run_isis_output', 'show_run_isis'),
('show_run_isis_invalid_help_output', 'show_run_isis_invalid_help')
],
indirect=['setup_single_isis_instance'])
def test_show_run_isis(self,
setup_isis_commands,
setup_single_isis_instance,
test_vector):
show = setup_isis_commands
exec_cmd = show.cli.commands["runningconfiguration"].commands["isis"]
executor(test_vector, show, exec_cmd)

0 comments on commit 4e9b561

Please sign in to comment.