summaryrefslogtreecommitdiff
path: root/searx/testing.py
diff options
context:
space:
mode:
Diffstat (limited to 'searx/testing.py')
-rw-r--r--searx/testing.py45
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()