reload_config_tests.py 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. """Tests for cement.ext.ext_reload_config."""
  2. import platform
  3. from cement.utils import test
  4. system = platform.system()
  5. if not system in ['Linux']:
  6. raise test.SkipTest('ext_reload_config not supported on %s' % system)
  7. import os
  8. import shutil
  9. import signal
  10. from time import sleep
  11. from cement.utils.misc import rando
  12. from cement.ext import ext_reload_config
  13. APP = rando()[:12]
  14. CONFIG1 = """
  15. [%s]
  16. foo = bar1
  17. """ % APP
  18. CONFIG2 = """
  19. [%s]
  20. foo = bar2
  21. """ % APP
  22. PLUGIN_CONFIG1 = """
  23. [bogus]
  24. enable_plugin = false
  25. """
  26. def bogus_hook_func(app):
  27. pass
  28. class ReloadConfigExtTestCase(test.CementExtTestCase):
  29. def setUp(self):
  30. super(ReloadConfigExtTestCase, self).setUp()
  31. f = open(self.tmp_file, 'w')
  32. f.write(CONFIG1)
  33. f.close()
  34. f = open(os.path.join(self.tmp_dir, 'bogus.conf'), 'w')
  35. f.write(PLUGIN_CONFIG1)
  36. f.close()
  37. self.app = self.make_app(APP,
  38. extensions=['reload_config'],
  39. config_files=[self.tmp_file],
  40. plugin_config_dirs=[self.tmp_dir],
  41. )
  42. def test_reload_config(self):
  43. self.app.setup()
  44. self.app.hook.register('pre_reload_config', bogus_hook_func)
  45. self.app.hook.register('post_reload_config', bogus_hook_func)
  46. self.app.run()
  47. self.eq(self.app.config.get(APP, 'foo'), 'bar1')
  48. f = open(self.tmp_file, 'w')
  49. f.write(CONFIG2)
  50. f.close()
  51. sleep(1)
  52. try:
  53. self.eq(self.app.config.get(APP, 'foo'), 'bar2')
  54. finally:
  55. self.app.close()
  56. def test_no_plugin_dir(self):
  57. # coverage.. remove the plugin config dir
  58. shutil.rmtree(self.tmp_dir)
  59. self.app.setup()
  60. self.app.run()
  61. self.app.close()
  62. def test_signal_handling(self):
  63. self.app.setup()
  64. self.app.hook.register('pre_reload_config', bogus_hook_func)
  65. self.app.hook.register('post_reload_config', bogus_hook_func)
  66. self.app.run()
  67. sleep(1)
  68. try:
  69. ext_reload_config.signal_handler(self.app, signal.SIGINT, None)
  70. finally:
  71. self.app.close()