import os
import sys
+import platform
import pytest
import imp
testdir = None
scriptdir = None
logdir = None
+ prestarthooksuccess = True
+ poststarthooksuccess = True
+ iproute2Ver = None
def __init__(self, test, testdir):
global customize
logger.info('Topology started')
try:
- customize.ltemplatePreRouterStartHook()
- except NameError:
+ self.prestarthooksuccess = customize.ltemplatePreRouterStartHook()
+ except AttributeError:
#not defined
logger.debug("ltemplatePreRouterStartHook() not defined")
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)
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:]