]> git.puffer.fish Git - mirror/frr.git/commitdiff
lib: ltemplate add common ltemplateRtrCmd and ltemplateVersionCheck
authorLou Berger <lberger@labn.net>
Tue, 13 Feb 2018 15:37:23 +0000 (10:37 -0500)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 28 Nov 2018 01:22:13 +0000 (20:22 -0500)
Signed-off-by: Lou Berger <lberger@labn.net>
tests/topotests/lib/ltemplate.py

index 30ff2cd7f6e70dc8afdf278c2a0e48edd65d7048..7ca8828dfefe93bb476c2c0546ae5ad9a43b84e1 100644 (file)
@@ -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:]