From 89b9abd97e787773b35f9a54c4de514a4888ad4b Mon Sep 17 00:00:00 2001 From: Lou Berger Date: Tue, 13 Feb 2018 10:37:23 -0500 Subject: [PATCH] lib: ltemplate add common ltemplateRtrCmd and ltemplateVersionCheck Signed-off-by: Lou Berger --- tests/topotests/lib/ltemplate.py | 106 +++++++++++++++++++++++++++++-- 1 file changed, 102 insertions(+), 4 deletions(-) diff --git a/tests/topotests/lib/ltemplate.py b/tests/topotests/lib/ltemplate.py index 30ff2cd7f6..7ca8828dfe 100644 --- a/tests/topotests/lib/ltemplate.py +++ b/tests/topotests/lib/ltemplate.py @@ -27,6 +27,7 @@ ltemplate.py: LabN template for FRR tests. import os import sys +import platform import pytest import imp @@ -47,6 +48,9 @@ class LTemplate(): testdir = None scriptdir = None logdir = None + prestarthooksuccess = True + poststarthooksuccess = True + iproute2Ver = None def __init__(self, test, testdir): global customize @@ -66,8 +70,8 @@ class LTemplate(): logger.info('Topology started') try: - customize.ltemplatePreRouterStartHook() - except NameError: + self.prestarthooksuccess = customize.ltemplatePreRouterStartHook() + except AttributeError: #not defined logger.debug("ltemplatePreRouterStartHook() not defined") @@ -94,8 +98,8 @@ class LTemplate(): logger.info('Starting routers') tgen.start_router() try: - customize.ltemplatePostRouterStartHook() - except NameError: + self.poststarthooksuccess = customize.ltemplatePostRouterStartHook() + except AttributeError: #not defined logger.debug("ltemplatePostRouterStartHook() not defined") luStart(baseScriptDir=self.scriptdir, baseLogDir=self.logdir, net=tgen.net) @@ -174,6 +178,100 @@ def test_memory_leak(): tgen.report_memory_leaks() +class ltemplateRtrCmd(): + def __init__(self): + self.resetCounts() + + def doCmd(self, tgen, rtr, cmd, checkstr = None): + output = tgen.net[rtr].cmd(cmd).strip() + if len(output): + self.output += 1 + if checkstr != None: + ret = re.search(checkstr, output) + if ret == None: + self.nomatch += 1 + else: + self.match += 1 + return ret + logger.info('command: {} {}'.format(rtr, cmd)) + logger.info('output: ' + output) + self.none += 1 + return None + + def resetCounts(self): + self.match = 0 + self.nomatch = 0 + self.output = 0 + self.none = 0 + + def getMatch(self): + return self.match + + def getNoMatch(self): + return self.nomatch + + def getOutput(self): + return self.output + + def getNone(self): + return self.none + +def ltemplateVersionCheck(vstr, rname='r1', compstr='<',cli=False, kernel='4.9', iproute2=None, mpls=True): + tgen = get_topogen() + router = tgen.gears[rname] + + if cli: + logger.info('calling mininet CLI') + tgen.mininet_cli() + logger.info('exited mininet CLI') + + if _lt == None: + ret = 'Template not initialized' + return ret + + if _lt.prestarthooksuccess != True: + ret = 'ltemplatePreRouterStartHook failed' + return ret + + if _lt.poststarthooksuccess != True: + ret = 'ltemplatePostRouterStartHook failed' + return ret + + if mpls == True and tgen.hasmpls != True: + ret = 'MPLS not initialized' + return ret + + if kernel != None: + krel = platform.release() + if topotest.version_cmp(krel, kernel) < 0: + ret = 'Skipping tests, old kernel ({} < {})'.format(krel, kernel) + return ret + + if iproute2 != None: + if _lt.iproute2Ver == None: + #collect/log info on iproute2 + cc = ltemplateRtrCmd() + found = cc.doCmd(tgen, 'r2', 'apt-cache policy iproute2', 'Installed: ([\d\.]*)') + if found != None: + iproute2Ver = found.group(1) + else: + iproute2Ver = '0-unknown' + logger.info('Have iproute2 version=' + iproute2Ver) + + if topotest.version_cmp(iproute2Ver, iproute2) < 0: + ret = 'Skipping tests, old iproute2 ({} < {})'.format(iproute2Ver, iproute2) + return ret + + ret = True + try: + if router.has_version(compstr, vstr): + ret = 'Skipping tests, old FRR version {} {}'.format(compstr, vstr) + return ret + except: + ret = True + + return ret + #for testing if __name__ == '__main__': args = ["-s"] + sys.argv[1:] -- 2.39.5