Skip to content
Snippets Groups Projects
Commit 94dd7a67 authored by Erik Reid's avatar Erik Reid
Browse files

updated router loading data test

parent 534843f8
No related branches found
No related tags found
No related merge requests found
...@@ -39,7 +39,7 @@ LINE_CARDS_LIST_SCHEMA = { ...@@ -39,7 +39,7 @@ LINE_CARDS_LIST_SCHEMA = {
'type': 'string', 'type': 'string',
# TODO: enum not really needed, but \ # TODO: enum not really needed, but \
# make it strict for now, during development # make it strict for now, during development
'enum': ['40GE', '4x10GE', '100GE', '4x25GE', '4x100GE', '400GE'] 'enum': ['10GE', '40GE', '4x10GE', '100GE', '4x25GE', '4x100GE', '400GE']
} }
}, },
'cable': {'type': 'string'}, 'cable': {'type': 'string'},
......
import re
from jsonschema import validate from jsonschema import validate
from lxml import etree
from resource_management.hardware.router \ from resource_management.hardware.router \
import load_line_cards, LINE_CARDS_LIST_SCHEMA import load_router_ports, LINE_CARDS_LIST_SCHEMA
def _remove_ns(xml):
# cf. https://stackoverflow.com/a/51972010
doc = etree.fromstring(xml)
for elem in doc.getiterator():
if hasattr(elem, 'tag'):
elem.tag = etree.QName(elem).localname
# Remove unused namespace declarations
etree.cleanup_namespaces(doc)
return doc
def test_load_line_cards(mocked_router, mocked_router_input_tables): # def _expected_fpcs(all_replies):
# # root rpc-replly element has complicated namespaces definitions
# # which mess up xpath queries ... strip these
# full_inventory_reply = etree.fromstring(all_replies['inventory'])
# chassis_inventory = full_inventory_reply[0][0]
# x = etree.tostring(chassis_inventory)
# return list(chassis_inventory.xpath(".//name[starts-with(.,'FPC')]/parent::*"))
def test_router_ports(mocked_router, netconf_rpc_replies):
ssh = { ssh = {
'username': 'bogus', 'username': 'bogus',
'private-key': 'no file' 'private-key': 'no file'
} }
fpcs = load_line_cards(hostname='bogus', ssh_config=ssh) fpcs = load_router_ports(hostname='bogus', ssh_config=ssh)
fpcs = list(fpcs) fpcs = list(fpcs)
validate(fpcs, LINE_CARDS_LIST_SCHEMA) validate(fpcs, LINE_CARDS_LIST_SCHEMA)
expected_line_cards = set(mocked_router_input_tables['FpcHwTable'].keys()) inventory = _remove_ns(netconf_rpc_replies['inventory'])
expected_ports = set(mocked_router_input_tables['PhyPortTable'].keys()) expected_fpcs = list(inventory.xpath(".//name[starts-with(.,'FPC')]/parent::*"))
assert len(expected_fpcs) == len(fpcs)
line_cards = {f['name'] for f in fpcs} def _slot_number(node):
ports = set() name = node.xpath('./name/text()')[0]
for f in fpcs: m = re.match(r'^(FPC|PIC) (\d+)$', name)
ports |= {p['name'] for p in f['ports']} assert m, f"can't parse fpc/pic name: {name}"
return int(m.group(2))
assert line_cards == expected_line_cards # not a strong test, maybe TODO: pre-compute the expected interfaces
assert ports == expected_ports # (but wait before trying this, since that
# would be hard to maintain against code changes)
assert set(map(_slot_number, expected_fpcs)) \
== {f['slot'] for f in fpcs}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment