test_search.py 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. # -*- coding: utf-8 -*-
  2. from searx.testing import SearxTestCase
  3. from searx.preferences import Preferences
  4. from searx.engines import engines
  5. import searx.search
  6. SAFESEARCH = 0
  7. PAGENO = 1
  8. PUBLIC_ENGINE_NAME = 'general dummy'
  9. PRIVATE_ENGINE_NAME = 'general private offline'
  10. TEST_ENGINES = [
  11. {
  12. 'name': PUBLIC_ENGINE_NAME,
  13. 'engine': 'dummy',
  14. 'categories': 'general',
  15. 'shortcut': 'gd',
  16. 'timeout': 3.0,
  17. 'tokens': [],
  18. },
  19. {
  20. 'name': PRIVATE_ENGINE_NAME,
  21. 'engine': 'dummy-offline',
  22. 'categories': 'general',
  23. 'shortcut': 'do',
  24. 'timeout': 3.0,
  25. 'offline': True,
  26. 'tokens': ['my-token'],
  27. },
  28. ]
  29. class SearchTestCase(SearxTestCase):
  30. @classmethod
  31. def setUpClass(cls):
  32. searx.engines.initialize_engines(TEST_ENGINES)
  33. def test_timeout_simple(self):
  34. searx.search.max_request_timeout = None
  35. search_query = searx.query.SearchQuery('test', [{'category': 'general', 'name': PUBLIC_ENGINE_NAME}],
  36. ['general'], 'en-US', SAFESEARCH, PAGENO, None, None,
  37. preferences=Preferences(['oscar'], ['general'], engines, []))
  38. search = searx.search.Search(search_query)
  39. search.search()
  40. self.assertEquals(search.actual_timeout, 3.0)
  41. def test_timeout_query_above_default_nomax(self):
  42. searx.search.max_request_timeout = None
  43. search_query = searx.query.SearchQuery('test', [{'category': 'general', 'name': PUBLIC_ENGINE_NAME}],
  44. ['general'], 'en-US', SAFESEARCH, PAGENO, None, 5.0,
  45. preferences=Preferences(['oscar'], ['general'], engines, []))
  46. search = searx.search.Search(search_query)
  47. search.search()
  48. self.assertEquals(search.actual_timeout, 3.0)
  49. def test_timeout_query_below_default_nomax(self):
  50. searx.search.max_request_timeout = None
  51. search_query = searx.query.SearchQuery('test', [{'category': 'general', 'name': PUBLIC_ENGINE_NAME}],
  52. ['general'], 'en-US', SAFESEARCH, PAGENO, None, 1.0,
  53. preferences=Preferences(['oscar'], ['general'], engines, []))
  54. search = searx.search.Search(search_query)
  55. search.search()
  56. self.assertEquals(search.actual_timeout, 1.0)
  57. def test_timeout_query_below_max(self):
  58. searx.search.max_request_timeout = 10.0
  59. search_query = searx.query.SearchQuery('test', [{'category': 'general', 'name': PUBLIC_ENGINE_NAME}],
  60. ['general'], 'en-US', SAFESEARCH, PAGENO, None, 5.0,
  61. preferences=Preferences(['oscar'], ['general'], engines, []))
  62. search = searx.search.Search(search_query)
  63. search.search()
  64. self.assertEquals(search.actual_timeout, 5.0)
  65. def test_timeout_query_above_max(self):
  66. searx.search.max_request_timeout = 10.0
  67. search_query = searx.query.SearchQuery('test', [{'category': 'general', 'name': PUBLIC_ENGINE_NAME}],
  68. ['general'], 'en-US', SAFESEARCH, PAGENO, None, 15.0,
  69. preferences=Preferences(['oscar'], ['general'], engines, []))
  70. search = searx.search.Search(search_query)
  71. search.search()
  72. self.assertEquals(search.actual_timeout, 10.0)
  73. def test_query_private_engine_without_token(self):
  74. search_query = searx.query.SearchQuery('test', [{'category': 'general', 'name': PRIVATE_ENGINE_NAME}],
  75. ['general'], 'en-US', SAFESEARCH, PAGENO, None, 2.0,
  76. preferences=Preferences(['oscar'], ['general'], engines, []))
  77. search = searx.search.Search(search_query)
  78. results = search.search()
  79. self.assertEquals(results.results_length(), 0)
  80. def test_query_private_engine_with_incorrect_token(self):
  81. preferences_with_tokens = Preferences(['oscar'], ['general'], engines, [])
  82. preferences_with_tokens.parse_dict({'tokens': 'bad-token'})
  83. search_query = searx.query.SearchQuery('test', [{'category': 'general', 'name': PRIVATE_ENGINE_NAME}],
  84. ['general'], 'en-US', SAFESEARCH, PAGENO, None, 2.0,
  85. preferences=preferences_with_tokens)
  86. search = searx.search.Search(search_query)
  87. results = search.search()
  88. self.assertEquals(results.results_length(), 0)
  89. def test_query_private_engine_with_correct_token(self):
  90. preferences_with_tokens = Preferences(['oscar'], ['general'], engines, [])
  91. preferences_with_tokens.parse_dict({'tokens': 'my-token'})
  92. search_query = searx.query.SearchQuery('test', [{'category': 'general', 'name': PRIVATE_ENGINE_NAME}],
  93. ['general'], 'en-US', SAFESEARCH, PAGENO, None, 2.0,
  94. preferences=preferences_with_tokens)
  95. search = searx.search.Search(search_query)
  96. results = search.search()
  97. self.assertEquals(results.results_length(), 1)