]> git.puffer.fish Git - mirror/frr.git/commitdiff
Added optional output for memleaks at the end of test. Enable them by setting the...
authorMartin Winter <mwinter@opensourcerouting.org>
Wed, 1 Feb 2017 15:50:13 +0000 (07:50 -0800)
committerDonald Sharp <sharpd@cumulusnetworks.com>
Wed, 28 Nov 2018 01:22:11 +0000 (20:22 -0500)
Signed-off-by: Martin Winter <mwinter@opensourcerouting.org>
tests/topotests/bgp_multiview_topo1/test_bgp_multiview_topo1.py
tests/topotests/ldp-topo1/test_ldp_topo1.py
tests/topotests/lib/topotest.py
tests/topotests/ospf6-topo1/test_ospf6_topo1.py

index 4836e2ba0623f63053325fb0e154e7330066e500..9ada8422cc4b0ec639b5e98065937f5280ffb849 100755 (executable)
@@ -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__':
 
index 88b01d6dbbab311be4053d5e942e802a931a01cb..2db7cbe5f48921170f82cbf999956e695b906970 100755 (executable)
@@ -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')
index 175edf4ab74ab003854f2d43857796b496f59642..015705510a9c2dbd160e6ead212cc25e16e109c0 100644 (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
 
index 7b3eeb9549657c920b08fe9518bb2109bdc3c892..6da2e89780f8e888966676e378dd7684ced8bcb7 100755 (executable)
@@ -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')