From: Martin Winter Date: Wed, 1 Feb 2017 15:50:13 +0000 (-0800) Subject: Added optional output for memleaks at the end of test. Enable them by setting the... X-Git-Tag: frr-7.1-dev~151^2~353 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=99561211e1d7581e22eab450999e7cd04ed919e4;p=matthieu%2Ffrr.git 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 --- diff --git a/tests/topotests/bgp_multiview_topo1/test_bgp_multiview_topo1.py b/tests/topotests/bgp_multiview_topo1/test_bgp_multiview_topo1.py index 4836e2ba06..9ada8422cc 100755 --- a/tests/topotests/bgp_multiview_topo1/test_bgp_multiview_topo1.py +++ b/tests/topotests/bgp_multiview_topo1/test_bgp_multiview_topo1.py @@ -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__': diff --git a/tests/topotests/ldp-topo1/test_ldp_topo1.py b/tests/topotests/ldp-topo1/test_ldp_topo1.py index 88b01d6dbb..2db7cbe5f4 100755 --- a/tests/topotests/ldp-topo1/test_ldp_topo1.py +++ b/tests/topotests/ldp-topo1/test_ldp_topo1.py @@ -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') diff --git a/tests/topotests/lib/topotest.py b/tests/topotests/lib/topotest.py index 175edf4ab7..015705510a 100644 --- a/tests/topotests/lib/topotest.py +++ b/tests/topotests/lib/topotest.py @@ -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 diff --git a/tests/topotests/ospf6-topo1/test_ospf6_topo1.py b/tests/topotests/ospf6-topo1/test_ospf6_topo1.py index 7b3eeb9549..6da2e89780 100755 --- a/tests/topotests/ospf6-topo1/test_ospf6_topo1.py +++ b/tests/topotests/ospf6-topo1/test_ospf6_topo1.py @@ -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')