test_borgmatic.py 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. import subprocess
  2. from flexmock import flexmock
  3. import borgmatic.hooks.command
  4. from borgmatic.commands import borgmatic as module
  5. def test_borgmatic_version_matches_news_version():
  6. flexmock(module.collect).should_receive('get_default_config_paths').and_return(['default'])
  7. borgmatic_version = subprocess.check_output(('borgmatic', '--version')).decode('ascii')
  8. news_version = open('NEWS').readline()
  9. assert borgmatic_version == news_version
  10. def test_run_configuration_without_error_pings_monitoring_hooks_start_and_finish():
  11. config = {'repositories': [{'path': 'foo'}]}
  12. arguments = {'global': flexmock(monitoring_verbosity=1, dry_run=False), 'create': flexmock()}
  13. flexmock(module.borg_version).should_receive('local_borg_version').and_return(flexmock())
  14. flexmock(module).should_receive('run_actions').and_return([])
  15. flexmock(module.dispatch).should_receive('call_hooks')
  16. flexmock(module.dispatch).should_receive('call_hooks').with_args(
  17. 'ping_monitor',
  18. config,
  19. module.dispatch.Hook_type.MONITORING,
  20. 'test.yaml',
  21. module.monitor.State.START,
  22. object,
  23. object,
  24. ).once()
  25. flexmock(module.dispatch).should_receive('call_hooks').with_args(
  26. 'ping_monitor',
  27. config,
  28. module.dispatch.Hook_type.MONITORING,
  29. 'test.yaml',
  30. module.monitor.State.FINISH,
  31. object,
  32. object,
  33. ).once()
  34. list(module.run_configuration('test.yaml', config, ['/tmp/test.yaml'], arguments))
  35. def test_run_configuration_with_borg_version_error_pings_after_command_hook_with_fail_state():
  36. config = {
  37. 'repositories': [{'path': 'foo'}],
  38. 'commands': ({'after': 'configuration', 'run': ['echo after'], 'states': ['fail']},),
  39. }
  40. arguments = {'global': flexmock(monitoring_verbosity=1, dry_run=False), 'create': flexmock()}
  41. flexmock(module.borg_version).should_receive('local_borg_version').and_raise(ValueError)
  42. flexmock(module).should_receive('run_actions').and_return([])
  43. flexmock(module.dispatch).should_receive('call_hooks')
  44. flexmock(borgmatic.hooks.command).should_receive('execute_hooks')
  45. flexmock(borgmatic.hooks.command).should_receive('execute_hooks').with_args(
  46. config['commands'],
  47. umask=object,
  48. working_directory=object,
  49. dry_run=False,
  50. log_file=object,
  51. configuration_filename=object,
  52. ).once()
  53. list(module.run_configuration('test.yaml', config, ['/tmp/test.yaml'], arguments))
  54. def test_run_configuration_with_action_error_pings_monioring_hooks_start_and_fail():
  55. config = {'repositories': [{'path': 'foo'}]}
  56. arguments = {'global': flexmock(monitoring_verbosity=1, dry_run=False), 'create': flexmock()}
  57. flexmock(module.borg_version).should_receive('local_borg_version').and_return(flexmock())
  58. flexmock(module).should_receive('run_actions').and_raise(OSError)
  59. flexmock(module.dispatch).should_receive('call_hooks')
  60. flexmock(module.dispatch).should_receive('call_hooks').with_args(
  61. 'ping_monitor',
  62. config,
  63. module.dispatch.Hook_type.MONITORING,
  64. 'test.yaml',
  65. module.monitor.State.START,
  66. object,
  67. object,
  68. ).once()
  69. flexmock(module.dispatch).should_receive('call_hooks').with_args(
  70. 'ping_monitor',
  71. config,
  72. module.dispatch.Hook_type.MONITORING,
  73. 'test.yaml',
  74. module.monitor.State.FAIL,
  75. object,
  76. object,
  77. ).once()
  78. list(module.run_configuration('test.yaml', config, ['/tmp/test.yaml'], arguments))