mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-15 01:37:53 +00:00
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:
parent
594b1259f9
commit
99561211e1
@ -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__':
|
||||
|
||||
|
@ -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')
|
||||
|
@ -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
|
||||
|
||||
|
@ -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')
|
||||
|
Loading…
Reference in New Issue
Block a user