diff options
Diffstat (limited to 'searx/testing.py')
| -rw-r--r-- | searx/testing.py | 45 |
1 files changed, 33 insertions, 12 deletions
diff --git a/searx/testing.py b/searx/testing.py index 0d17b2a08..f0e303e13 100644 --- a/searx/testing.py +++ b/searx/testing.py @@ -1,13 +1,14 @@ # -*- coding: utf-8 -*- +# SPDX-License-Identifier: AGPL-3.0-or-later """Shared testing code.""" +# pylint: disable=missing-function-docstring import os import subprocess import traceback - -from os.path import dirname, join, abspath +from os.path import dirname, join, abspath, realpath from splinter import Browser from unittest2 import TestCase @@ -18,21 +19,21 @@ class SearxTestLayer: __name__ = u'SearxTestLayer' + @classmethod def setUp(cls): pass - setUp = classmethod(setUp) + @classmethod def tearDown(cls): pass - tearDown = classmethod(tearDown) + @classmethod def testSetUp(cls): pass - testSetUp = classmethod(testSetUp) + @classmethod def testTearDown(cls): pass - testTearDown = classmethod(testTearDown) class SearxRobotLayer(): @@ -42,12 +43,18 @@ class SearxRobotLayer(): os.setpgrp() # create new process group, become its leader # get program paths - webapp = os.path.join( - os.path.abspath(os.path.dirname(os.path.realpath(__file__))), - 'webapp.py' - ) + webapp = join(abspath(dirname(realpath(__file__))), 'webapp.py') exe = 'python' + # The Flask app is started by Flask.run(...), don't enable Flask's debug + # mode, the debugger from Flask will cause wired process model, where + # the server never dies. Further read: + # + # - debug mode: https://flask.palletsprojects.com/quickstart/#debug-mode + # - Flask.run(..): https://flask.palletsprojects.com/api/#flask.Flask.run + + os.environ['SEARX_DEBUG'] = '0' + # set robot settings path os.environ['SEARX_SETTINGS_PATH'] = abspath( dirname(__file__) + '/settings_robot.yml') @@ -58,6 +65,8 @@ class SearxRobotLayer(): stdout=subprocess.PIPE, stderr=subprocess.STDOUT ) + if hasattr(self.server.stdout, 'read1'): + print(self.server.stdout.read1(1024).decode('utf-8')) def tearDown(self): os.kill(self.server.pid, 9) @@ -69,7 +78,7 @@ class SearxRobotLayer(): def run_robot_tests(tests): print('Running {0} tests'.format(len(tests))) for test in tests: - with Browser() as browser: + with Browser('firefox', headless=True) as browser: test(browser) @@ -78,6 +87,18 @@ class SearxTestCase(TestCase): layer = SearxTestLayer + def setattr4test(self, obj, attr, value): + """ + setattr(obj, attr, value) + but reset to the previous value in the cleanup. + """ + previous_value = getattr(obj, attr) + + def cleanup_patch(): + setattr(obj, attr, previous_value) + self.addCleanup(cleanup_patch) + setattr(obj, attr, value) + if __name__ == '__main__': import sys @@ -91,7 +112,7 @@ if __name__ == '__main__': try: test_layer.setUp() run_robot_tests([getattr(robot, x) for x in dir(robot) if x.startswith('test_')]) - except Exception: + except Exception: # pylint: disable=broad-except errors = True print('Error occured: {0}'.format(traceback.format_exc())) test_layer.tearDown() |