test_signals.py 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import pytest
  2. from flexmock import flexmock
  3. from borgmatic import signals as module
  4. def test_handle_signal_forwards_to_subprocesses():
  5. signal_number = 100
  6. frame = flexmock(f_back=flexmock(f_code=flexmock(co_name='something')))
  7. process_group = flexmock()
  8. flexmock(module.os).should_receive('getpgrp').and_return(process_group)
  9. flexmock(module.os).should_receive('killpg').with_args(process_group, signal_number).once()
  10. module.handle_signal(signal_number, frame)
  11. def test_handle_signal_bails_on_recursion():
  12. signal_number = 100
  13. frame = flexmock(f_back=flexmock(f_code=flexmock(co_name='handle_signal')))
  14. flexmock(module.os).should_receive('getpgrp').never()
  15. flexmock(module.os).should_receive('killpg').never()
  16. module.handle_signal(signal_number, frame)
  17. def test_handle_signal_exits_on_sigterm():
  18. signal_number = module.signal.SIGTERM
  19. frame = flexmock(f_back=flexmock(f_code=flexmock(co_name='something')))
  20. flexmock(module.os).should_receive('getpgrp').and_return(flexmock)
  21. flexmock(module.os).should_receive('killpg')
  22. flexmock(module.sys).should_receive('exit').with_args(
  23. module.EXIT_CODE_FROM_SIGNAL + signal_number
  24. ).once()
  25. module.handle_signal(signal_number, frame)
  26. def test_handle_signal_raises_on_sigint():
  27. signal_number = module.signal.SIGINT
  28. frame = flexmock(f_back=flexmock(f_code=flexmock(co_name='something')))
  29. flexmock(module.os).should_receive('getpgrp').and_return(flexmock)
  30. flexmock(module.os).should_receive('killpg')
  31. flexmock(module.sys).should_receive('exit').never()
  32. with pytest.raises(KeyboardInterrupt):
  33. module.handle_signal(signal_number, frame)
  34. def test_configure_signals_installs_signal_handlers():
  35. flexmock(module.signal).should_receive('signal').at_least().once()
  36. module.configure_signals()