mirror of
https://github.com/searxng/searxng
synced 2024-01-01 18:24:07 +00:00
d14994dc73
settings.yml: * outgoing.networks: * can contains network definition * propertiers: enable_http, verify, http2, max_connections, max_keepalive_connections, keepalive_expiry, local_addresses, support_ipv4, support_ipv6, proxies, max_redirects, retries * retries: 0 by default, number of times searx retries to send the HTTP request (using different IP & proxy each time) * local_addresses can be "192.168.0.1/24" (it supports IPv6) * support_ipv4 & support_ipv6: both True by default see https://github.com/searx/searx/pull/1034 * each engine can define a "network" section: * either a full network description * either reference an existing network * all HTTP requests of engine use the same HTTP configuration (it was not the case before, see proxy configuration in master)
120 lines
3.1 KiB
Python
120 lines
3.1 KiB
Python
# -*- 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, realpath
|
|
|
|
from splinter import Browser
|
|
import aiounittest
|
|
|
|
|
|
class SearxTestLayer:
|
|
"""Base layer for non-robot tests."""
|
|
|
|
__name__ = 'SearxTestLayer'
|
|
|
|
@classmethod
|
|
def setUp(cls):
|
|
pass
|
|
|
|
@classmethod
|
|
def tearDown(cls):
|
|
pass
|
|
|
|
@classmethod
|
|
def testSetUp(cls):
|
|
pass
|
|
|
|
@classmethod
|
|
def testTearDown(cls):
|
|
pass
|
|
|
|
|
|
class SearxRobotLayer():
|
|
"""Searx Robot Test Layer"""
|
|
|
|
def setUp(self):
|
|
os.setpgrp() # create new process group, become its leader
|
|
|
|
# get program paths
|
|
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')
|
|
|
|
# run the server
|
|
self.server = subprocess.Popen(
|
|
[exe, webapp],
|
|
stdout=subprocess.PIPE,
|
|
stderr=subprocess.STDOUT
|
|
)
|
|
if hasattr(self.server.stdout, 'read1'):
|
|
print(self.server.stdout.read1(1024).decode())
|
|
|
|
def tearDown(self):
|
|
os.kill(self.server.pid, 9)
|
|
# remove previously set environment variable
|
|
del os.environ['SEARX_SETTINGS_PATH']
|
|
|
|
|
|
# SEARXROBOTLAYER = SearxRobotLayer()
|
|
def run_robot_tests(tests):
|
|
print('Running {0} tests'.format(len(tests)))
|
|
for test in tests:
|
|
with Browser('firefox', headless=True) as browser:
|
|
test(browser)
|
|
|
|
|
|
class SearxTestCase(aiounittest.AsyncTestCase):
|
|
"""Base test case for non-robot tests."""
|
|
|
|
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
|
|
# test cases
|
|
from tests import robot
|
|
|
|
base_dir = abspath(join(dirname(__file__), '../tests'))
|
|
if sys.argv[1] == 'robot':
|
|
test_layer = SearxRobotLayer()
|
|
errors = False
|
|
try:
|
|
test_layer.setUp()
|
|
run_robot_tests([getattr(robot, x) for x in dir(robot) if x.startswith('test_')])
|
|
except Exception: # pylint: disable=broad-except
|
|
errors = True
|
|
print('Error occured: {0}'.format(traceback.format_exc()))
|
|
test_layer.tearDown()
|
|
sys.exit(1 if errors else 0)
|