diff test/test_demo.py @ 6324:3e33b22a3158

BAsic test of demo and server intialization. This needs more work. I exit the server by hacking serve_forever to raise a KeyboardInterrupt. Otherwise the test just hangs. I need a replacement that exits after one (or more configurable) connections and some way to background the server so the test can make the connections to the running server instance.
author John Rouillard <rouilj@ieee.org>
date Fri, 05 Feb 2021 00:09:08 -0500
parents
children 5a3a386aa8e7
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/test_demo.py	Fri Feb 05 00:09:08 2021 -0500
@@ -0,0 +1,64 @@
+import unittest
+import os, sys, shutil
+
+from roundup.demo import install_demo, run_demo
+
+import roundup.scripts.roundup_server
+
+# https://stackoverflow.com/questions/4219717/how-to-assert-output-with-nosetest-unittest-in-python
+# lightly modified
+from contextlib import contextmanager
+_py3 = sys.version_info[0] > 2
+if _py3:
+    from io import StringIO # py3
+else:
+    from StringIO import StringIO # py2
+@contextmanager
+def captured_output():
+    new_out, new_err = StringIO(), StringIO()
+    old_out, old_err = sys.stdout, sys.stderr
+    try:
+        sys.stdout, sys.stderr = new_out, new_err
+        yield sys.stdout, sys.stderr
+    finally:
+        sys.stdout, sys.stderr = old_out, old_err
+
+class TestDemo(unittest.TestCase):
+    def setUp(self):
+        self.home = os.path.abspath('_test_demo')
+
+    def tearDown(self):
+        try:
+            shutil.rmtree(self.home)
+        except FileNotFoundError:
+            pass
+        
+    def testDemo(self):
+        with captured_output() as (out, err):
+            install_demo(self.home, 'anydbm', 'classic')
+        output = out.getvalue().strip()
+        print(output)
+
+        # dummy up the return of get_server so the serve_forever method
+        # raises keyboard interrupt exiting the server so the test exits.
+        gs = roundup.scripts.roundup_server.ServerConfig.get_server
+        def raise_KeyboardInterrupt():
+            raise KeyboardInterrupt
+
+        def test_get_server(self):
+            httpd = gs(self)
+            httpd.serve_forever = raise_KeyboardInterrupt
+            return httpd
+
+        roundup.scripts.roundup_server.ServerConfig.get_server = test_get_server
+
+        # Run under context manager to capture output of startup text.
+        with captured_output() as (out, err):
+            run_demo(self.home)
+        output = out.getvalue().strip()
+        print(output)
+        # if the server installed and started this will be the
+        # last line in the output.
+        self.assertIn("Keyboard Interrupt: exiting", output.split('\n'))
+
+

Roundup Issue Tracker: http://roundup-tracker.org/