mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-08-15 05:18:47 +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__))
|
thisDir = os.path.dirname(os.path.realpath(__file__))
|
||||||
|
|
||||||
# Verify OSPFv3 Routing Table
|
|
||||||
print("\n\n** Verifing BGP Routing Tables")
|
print("\n\n** Verifing BGP Routing Tables")
|
||||||
print("******************************************\n")
|
print("******************************************\n")
|
||||||
failures = 0
|
failures = 0
|
||||||
@ -309,6 +308,29 @@ def test_bgp_routingTable():
|
|||||||
# For debugging after starting FRR/Quagga daemons, uncomment the next line
|
# For debugging after starting FRR/Quagga daemons, uncomment the next line
|
||||||
# CLI(net)
|
# 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__':
|
if __name__ == '__main__':
|
||||||
|
|
||||||
|
@ -642,6 +642,33 @@ def test_linux_mpls_routes():
|
|||||||
# CLI(net)
|
# 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__':
|
if __name__ == '__main__':
|
||||||
|
|
||||||
setLogLevel('info')
|
setLogLevel('info')
|
||||||
|
@ -105,14 +105,22 @@ class Router(Node):
|
|||||||
'ldpd': 0}
|
'ldpd': 0}
|
||||||
def terminate(self):
|
def terminate(self):
|
||||||
# Delete Running Quagga or FRR Daemons
|
# Delete Running Quagga or FRR Daemons
|
||||||
rundaemons = self.cmd('ls -1 /var/run/%s/*.pid' % self.routertype)
|
self.stopRouter()
|
||||||
for d in StringIO.StringIO(rundaemons):
|
# rundaemons = self.cmd('ls -1 /var/run/%s/*.pid' % self.routertype)
|
||||||
self.cmd('kill -7 `cat %s`' % d.rstrip())
|
# for d in StringIO.StringIO(rundaemons):
|
||||||
self.waitOutput()
|
# self.cmd('kill -7 `cat %s`' % d.rstrip())
|
||||||
|
# self.waitOutput()
|
||||||
# Disable forwarding
|
# Disable forwarding
|
||||||
self.cmd('sysctl net.ipv4.ip_forward=0')
|
self.cmd('sysctl net.ipv4.ip_forward=0')
|
||||||
self.cmd('sysctl net.ipv6.conf.all.forwarding=0')
|
self.cmd('sysctl net.ipv6.conf.all.forwarding=0')
|
||||||
super(Router, self).terminate()
|
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):
|
def removeIPs(self):
|
||||||
for interface in self.intfNames():
|
for interface in self.intfNames():
|
||||||
self.cmd('ip address flush', interface)
|
self.cmd('ip address flush', interface)
|
||||||
@ -160,9 +168,15 @@ class Router(Node):
|
|||||||
self.cmd('/sbin/modprobe mpls-router')
|
self.cmd('/sbin/modprobe mpls-router')
|
||||||
self.cmd('/sbin/modprobe mpls-iptunnel')
|
self.cmd('/sbin/modprobe mpls-iptunnel')
|
||||||
self.cmd('echo 100000 > /proc/sys/net/mpls/platform_labels')
|
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
|
# Start Zebra first
|
||||||
if self.daemons['zebra'] == 1:
|
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()
|
self.waitOutput()
|
||||||
print('%s: %s zebra started' % (self, self.routertype))
|
print('%s: %s zebra started' % (self, self.routertype))
|
||||||
sleep(1)
|
sleep(1)
|
||||||
@ -172,10 +186,16 @@ class Router(Node):
|
|||||||
# Now start all the other daemons
|
# Now start all the other daemons
|
||||||
for daemon in self.daemons:
|
for daemon in self.daemons:
|
||||||
if (self.daemons[daemon] == 1) and (daemon != 'zebra'):
|
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()
|
self.waitOutput()
|
||||||
print('%s: %s %s started' % (self, self.routertype, daemon))
|
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):
|
def checkRouterRunning(self):
|
||||||
global fatal_error
|
global fatal_error
|
||||||
|
|
||||||
|
@ -369,6 +369,30 @@ def test_linux_ipv6_kernel_routingTable():
|
|||||||
# CLI(net)
|
# 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__':
|
if __name__ == '__main__':
|
||||||
|
|
||||||
setLogLevel('info')
|
setLogLevel('info')
|
||||||
|
Loading…
Reference in New Issue
Block a user