testing.py 1.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. # -*- coding: utf-8 -*-
  2. """Shared testing code."""
  3. from plone.testing import Layer
  4. from unittest2 import TestCase
  5. import os
  6. import subprocess
  7. class SearxTestLayer:
  8. """Base layer for non-robot tests."""
  9. __name__ = u'SearxTestLayer'
  10. def setUp(cls):
  11. pass
  12. setUp = classmethod(setUp)
  13. def tearDown(cls):
  14. pass
  15. tearDown = classmethod(tearDown)
  16. def testSetUp(cls):
  17. pass
  18. testSetUp = classmethod(testSetUp)
  19. def testTearDown(cls):
  20. pass
  21. testTearDown = classmethod(testTearDown)
  22. class SearxRobotLayer(Layer):
  23. """Searx Robot Test Layer"""
  24. def setUp(self):
  25. os.setpgrp() # create new process group, become its leader
  26. # get program paths
  27. webapp = os.path.join(
  28. os.path.abspath(os.path.dirname(os.path.realpath(__file__))),
  29. 'webapp.py'
  30. )
  31. exe = os.path.abspath(os.path.dirname(__file__) + '/../bin/py')
  32. # set robot settings path
  33. os.environ['SEARX_SETTINGS_PATH'] = os.path.abspath(
  34. os.path.dirname(__file__) + '/settings_robot.yml')
  35. # run the server
  36. self.server = subprocess.Popen(
  37. [exe, webapp],
  38. stdout=subprocess.PIPE,
  39. stderr=subprocess.STDOUT
  40. )
  41. def tearDown(self):
  42. # send TERM signal to all processes in my group, to stop subprocesses
  43. os.killpg(os.getpgid(self.server.pid), 15)
  44. # remove previously set environment variable
  45. del os.environ['SEARX_SETTINGS_PATH']
  46. SEARXROBOTLAYER = SearxRobotLayer()
  47. class SearxTestCase(TestCase):
  48. """Base test case for non-robot tests."""
  49. layer = SearxTestLayer