test_celeryd_detach.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. from __future__ import absolute_import
  2. from mock import Mock, patch
  3. from celery.platforms import IS_WINDOWS
  4. from celery.bin.celeryd_detach import (
  5. detach,
  6. detached_celeryd,
  7. main,
  8. )
  9. from celery.tests.case import AppCase, override_stdouts
  10. if not IS_WINDOWS:
  11. class test_detached(AppCase):
  12. @patch('celery.bin.celeryd_detach.detached')
  13. @patch('os.execv')
  14. @patch('celery.bin.celeryd_detach.logger')
  15. @patch('celery.app.log.Logging.setup_logging_subsystem')
  16. def test_execs(self, setup_logs, logger, execv, detached):
  17. context = detached.return_value = Mock()
  18. context.__enter__ = Mock()
  19. context.__exit__ = Mock()
  20. detach('/bin/boo', ['a', 'b', 'c'], logfile='/var/log',
  21. pidfile='/var/pid')
  22. detached.assert_called_with('/var/log', '/var/pid', None, None, 0,
  23. None, False)
  24. execv.assert_called_with('/bin/boo', ['/bin/boo', 'a', 'b', 'c'])
  25. execv.side_effect = Exception('foo')
  26. r = detach('/bin/boo', ['a', 'b', 'c'],
  27. logfile='/var/log', pidfile='/var/pid', app=self.app)
  28. context.__enter__.assert_called_with()
  29. self.assertTrue(logger.critical.called)
  30. setup_logs.assert_called_with('ERROR', '/var/log')
  31. self.assertEqual(r, 1)
  32. class test_PartialOptionParser(AppCase):
  33. def test_parser(self):
  34. x = detached_celeryd(self.app)
  35. p = x.Parser('celeryd_detach')
  36. options, values = p.parse_args(['--logfile=foo', '--fake', '--enable',
  37. 'a', 'b', '-c1', '-d', '2'])
  38. self.assertEqual(options.logfile, 'foo')
  39. self.assertEqual(values, ['a', 'b'])
  40. self.assertEqual(p.leftovers, ['--enable', '-c1', '-d', '2'])
  41. with override_stdouts():
  42. with self.assertRaises(SystemExit):
  43. p.parse_args(['--logfile'])
  44. p.get_option('--logfile').nargs = 2
  45. with self.assertRaises(SystemExit):
  46. p.parse_args(['--logfile=a'])
  47. with self.assertRaises(SystemExit):
  48. p.parse_args(['--fake=abc'])
  49. assert p.get_option('--logfile').nargs == 2
  50. p.parse_args(['--logfile=a', 'b'])
  51. p.get_option('--logfile').nargs = 1
  52. class test_Command(AppCase):
  53. argv = ['--autoscale=10,2', '-c', '1',
  54. '--logfile=/var/log', '-lDEBUG',
  55. '--', '.disable_rate_limits=1']
  56. def test_parse_options(self):
  57. x = detached_celeryd(app=self.app)
  58. o, v, l = x.parse_options('cd', self.argv)
  59. self.assertEqual(o.logfile, '/var/log')
  60. self.assertEqual(l, ['--autoscale=10,2', '-c', '1',
  61. '-lDEBUG', '--logfile=/var/log',
  62. '--pidfile=celeryd.pid'])
  63. x.parse_options('cd', []) # no args
  64. @patch('sys.exit')
  65. @patch('celery.bin.celeryd_detach.detach')
  66. def test_execute_from_commandline(self, detach, exit):
  67. x = detached_celeryd(app=self.app)
  68. x.execute_from_commandline(self.argv)
  69. self.assertTrue(exit.called)
  70. detach.assert_called_with(
  71. path=x.execv_path, uid=None, gid=None,
  72. umask=0, fake=False, logfile='/var/log', pidfile='celeryd.pid',
  73. argv=x.execv_argv + [
  74. '-c', '1', '-lDEBUG',
  75. '--logfile=/var/log', '--pidfile=celeryd.pid',
  76. '--', '.disable_rate_limits=1'
  77. ],
  78. app=self.app,
  79. )
  80. @patch('celery.bin.celeryd_detach.detached_celeryd')
  81. def test_main(self, command):
  82. c = command.return_value = Mock()
  83. main(self.app)
  84. c.execute_from_commandline.assert_called_with()