Added optional output for memleaks at the end of test. Enable them by setting the environment variable TOPOTESTS_CHECK_STDERR to some value

Signed-off-by: Martin Winter <mwinter@opensourcerouting.org>
This commit is contained in:
Martin Winter 2017-02-01 07:50:13 -08:00 committed by Donald Sharp
parent 594b1259f9
commit 99561211e1
4 changed files with 101 additions and 8 deletions

View File

@ -264,7 +264,6 @@ def test_bgp_routingTable():
thisDir = os.path.dirname(os.path.realpath(__file__))
# Verify OSPFv3 Routing Table
print("\n\n** Verifing BGP Routing Tables")
print("******************************************\n")
failures = 0
@ -309,6 +308,29 @@ def test_bgp_routingTable():
# For debugging after starting FRR/Quagga daemons, uncomment the next line
# CLI(net)
def test_shutdown_check_stderr():
global fatal_error
global net
# Skip if previous fatal error condition is raised
if (fatal_error != ""):
pytest.skip(fatal_error)
if os.environ.get('TOPOTESTS_CHECK_STDERR') is None:
pytest.skip('Skipping test for Stderr output and memory leaks')
thisDir = os.path.dirname(os.path.realpath(__file__))
print("\n\n** Verifing unexpected STDERR output from daemons")
print("******************************************\n")
net['r1'].stopRouter()
log = net['r1'].getStdErr('bgpd')
print("\nBGPd StdErr Log:\n" + log)
log = net['r1'].getStdErr('zebra')
print("\nZebra StdErr Log:\n" + log)
if __name__ == '__main__':

View File

@ -642,6 +642,33 @@ def test_linux_mpls_routes():
# CLI(net)
def test_shutdown_check_stderr():
global fatal_error
global net
# Skip if previous fatal error condition is raised
if (fatal_error != ""):
pytest.skip(fatal_error)
if os.environ.get('TOPOTESTS_CHECK_STDERR') is None:
pytest.skip('Skipping test for Stderr output and memory leaks')
thisDir = os.path.dirname(os.path.realpath(__file__))
print("\n\n** Verifing unexpected STDERR output from daemons")
print("******************************************\n")
for i in range(1, 5):
net['r%s' % i].stopRouter()
log = net['r%s' % i].getStdErr('ldpd')
print("\nRouter r%s LDPd StdErr Log:\n%s" % (i, log))
log = net['r%s' % i].getStdErr('ospfd')
print("\nRouter r%s OSPFd StdErr Log:\n%s" % (i, log))
log = net['r%s' % i].getStdErr('zebra')
print("\nRouter r%s Zebra StdErr Log:\n%s" % (i, log))
if __name__ == '__main__':
setLogLevel('info')

View File

@ -105,14 +105,22 @@ class Router(Node):
'ldpd': 0}
def terminate(self):
# Delete Running Quagga or FRR Daemons
rundaemons = self.cmd('ls -1 /var/run/%s/*.pid' % self.routertype)
for d in StringIO.StringIO(rundaemons):
self.cmd('kill -7 `cat %s`' % d.rstrip())
self.waitOutput()
self.stopRouter()
# rundaemons = self.cmd('ls -1 /var/run/%s/*.pid' % self.routertype)
# for d in StringIO.StringIO(rundaemons):
# self.cmd('kill -7 `cat %s`' % d.rstrip())
# self.waitOutput()
# Disable forwarding
self.cmd('sysctl net.ipv4.ip_forward=0')
self.cmd('sysctl net.ipv6.conf.all.forwarding=0')
super(Router, self).terminate()
def stopRouter(self):
# Stop Running Quagga or FRR Daemons
rundaemons = self.cmd('ls -1 /var/run/%s/*.pid' % self.routertype)
if rundaemons is not None:
for d in StringIO.StringIO(rundaemons):
self.cmd('kill -7 `cat %s`' % d.rstrip())
self.waitOutput()
def removeIPs(self):
for interface in self.intfNames():
self.cmd('ip address flush', interface)
@ -160,9 +168,15 @@ class Router(Node):
self.cmd('/sbin/modprobe mpls-router')
self.cmd('/sbin/modprobe mpls-iptunnel')
self.cmd('echo 100000 > /proc/sys/net/mpls/platform_labels')
# Init done - now restarting daemons
self.restartRouter()
return ""
def restartRouter(self):
# Starts actuall daemons without init (ie restart)
# Start Zebra first
if self.daemons['zebra'] == 1:
self.cmd('/usr/lib/%s/zebra -d' % self.routertype)
# self.cmd('/usr/lib/%s/zebra -d' % self.routertype)
self.cmd('/usr/lib/%s/zebra > /tmp/%s-zebra.out 2> /tmp/%s-zebra.err &' % (self.routertype, self.name, self.name))
self.waitOutput()
print('%s: %s zebra started' % (self, self.routertype))
sleep(1)
@ -172,10 +186,16 @@ class Router(Node):
# Now start all the other daemons
for daemon in self.daemons:
if (self.daemons[daemon] == 1) and (daemon != 'zebra'):
self.cmd('/usr/lib/%s/%s -d' % (self.routertype, daemon))
# self.cmd('/usr/lib/%s/%s -d' % (self.routertype, daemon))
self.cmd('/usr/lib/%s/%s > /tmp/%s-%s.out 2> /tmp/%s-%s.err &' % (self.routertype, daemon, self.name, daemon, self.name, daemon))
self.waitOutput()
print('%s: %s %s started' % (self, self.routertype, daemon))
return ""
def getStdErr(self, daemon):
return self.getLog('err', daemon)
def getStdOut(self, daemon):
return self.getLog('out', daemon)
def getLog(self, log, daemon):
return self.cmd('cat /tmp/%s-%s.%s' % (self.name, daemon, log) )
def checkRouterRunning(self):
global fatal_error

View File

@ -369,6 +369,30 @@ def test_linux_ipv6_kernel_routingTable():
# CLI(net)
def test_shutdown_check_stderr():
global fatal_error
global net
# Skip if previous fatal error condition is raised
if (fatal_error != ""):
pytest.skip(fatal_error)
if os.environ.get('TOPOTESTS_CHECK_STDERR') is None:
pytest.skip('Skipping test for Stderr output and memory leaks')
thisDir = os.path.dirname(os.path.realpath(__file__))
print("\n\n** Verifing unexpected STDERR output from daemons")
print("******************************************\n")
for i in range(1, 5):
net['r%s' % i].stopRouter()
log = net['r%s' % i].getStdErr('ospf6d')
print("\nRouter r%s OSPF6d StdErr Log:\n%s" % (i, log))
log = net['r%s' % i].getStdErr('zebra')
print("\nRouter r%s Zebra StdErr Log:\n%s" % (i, log))
if __name__ == '__main__':
setLogLevel('info')