test_pagerduty.py 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  1. from flexmock import flexmock
  2. from borgmatic.hooks.monitoring import pagerduty as module
  3. def test_initialize_monitor_creates_log_handler():
  4. monitoring_log_level = 1
  5. flexmock(module.borgmatic.hooks.monitoring.logs).should_receive(
  6. 'Forgetful_buffering_handler'
  7. ).once()
  8. flexmock(module.borgmatic.hooks.monitoring.logs).should_receive('add_handler')
  9. module.initialize_monitor({}, {}, 'test.yaml', monitoring_log_level, dry_run=False)
  10. def test_initialize_monitor_creates_log_handler_when_send_logs_true():
  11. flexmock(module.borgmatic.hooks.monitoring.logs).should_receive(
  12. 'Forgetful_buffering_handler'
  13. ).once()
  14. flexmock(module.borgmatic.hooks.monitoring.logs).should_receive('add_handler')
  15. module.initialize_monitor(
  16. {'send_logs': True}, {}, 'test.yaml', monitoring_log_level=1, dry_run=False
  17. )
  18. def test_initialize_monitor_bails_when_send_logs_false():
  19. flexmock(module.borgmatic.hooks.monitoring.logs).should_receive(
  20. 'Forgetful_buffering_handler'
  21. ).never()
  22. flexmock(module.borgmatic.hooks.monitoring.logs).should_receive('add_handler')
  23. module.initialize_monitor(
  24. {'send_logs': False}, {}, 'test.yaml', monitoring_log_level=1, dry_run=False
  25. )
  26. def test_ping_monitor_ignores_start_state():
  27. flexmock(module.borgmatic.hooks.credential.parse).should_receive(
  28. 'resolve_credential'
  29. ).replace_with(lambda value, config: value)
  30. flexmock(module.requests).should_receive('post').never()
  31. module.ping_monitor(
  32. {'integration_key': 'abc123'},
  33. {},
  34. 'config.yaml',
  35. module.monitor.State.START,
  36. monitoring_log_level=1,
  37. dry_run=False,
  38. )
  39. def test_ping_monitor_ignores_finish_state():
  40. flexmock(module.borgmatic.hooks.credential.parse).should_receive(
  41. 'resolve_credential'
  42. ).replace_with(lambda value, config: value)
  43. flexmock(module.requests).should_receive('post').never()
  44. module.ping_monitor(
  45. {'integration_key': 'abc123'},
  46. {},
  47. 'config.yaml',
  48. module.monitor.State.FINISH,
  49. monitoring_log_level=1,
  50. dry_run=False,
  51. )
  52. def test_ping_monitor_calls_api_for_fail_state():
  53. flexmock(module.borgmatic.hooks.credential.parse).should_receive(
  54. 'resolve_credential'
  55. ).replace_with(lambda value, config: value)
  56. flexmock(module.borgmatic.hooks.monitoring.logs).should_receive(
  57. 'format_buffered_logs_for_payload'
  58. ).and_return('loggy\nlogs')
  59. flexmock(module.requests).should_receive('post').and_return(flexmock(ok=True))
  60. module.ping_monitor(
  61. {'integration_key': 'abc123'},
  62. {},
  63. 'config.yaml',
  64. module.monitor.State.FAIL,
  65. monitoring_log_level=1,
  66. dry_run=False,
  67. )
  68. def test_ping_monitor_dry_run_does_not_call_api():
  69. flexmock(module.borgmatic.hooks.credential.parse).should_receive(
  70. 'resolve_credential'
  71. ).replace_with(lambda value, config: value)
  72. flexmock(module.borgmatic.hooks.monitoring.logs).should_receive(
  73. 'format_buffered_logs_for_payload'
  74. ).and_return('loggy\nlogs')
  75. flexmock(module.requests).should_receive('post').never()
  76. module.ping_monitor(
  77. {'integration_key': 'abc123'},
  78. {},
  79. 'config.yaml',
  80. module.monitor.State.FAIL,
  81. monitoring_log_level=1,
  82. dry_run=True,
  83. )
  84. def test_ping_monitor_with_connection_error_logs_warning():
  85. flexmock(module.borgmatic.hooks.credential.parse).should_receive(
  86. 'resolve_credential'
  87. ).replace_with(lambda value, config: value)
  88. flexmock(module.borgmatic.hooks.monitoring.logs).should_receive(
  89. 'format_buffered_logs_for_payload'
  90. ).and_return('loggy\nlogs')
  91. flexmock(module.requests).should_receive('post').and_raise(
  92. module.requests.exceptions.ConnectionError
  93. )
  94. flexmock(module.logger).should_receive('warning').once()
  95. module.ping_monitor(
  96. {'integration_key': 'abc123'},
  97. {},
  98. 'config.yaml',
  99. module.monitor.State.FAIL,
  100. monitoring_log_level=1,
  101. dry_run=False,
  102. )
  103. def test_ping_monitor_with_credential_error_logs_warning():
  104. flexmock(module.borgmatic.hooks.credential.parse).should_receive(
  105. 'resolve_credential'
  106. ).and_raise(ValueError)
  107. flexmock(module.requests).should_receive('post').never()
  108. flexmock(module.logger).should_receive('warning')
  109. module.ping_monitor(
  110. {'integration_key': 'abc123'},
  111. {},
  112. 'config.yaml',
  113. module.monitor.State.FAIL,
  114. monitoring_log_level=1,
  115. dry_run=False,
  116. )
  117. def test_ping_monitor_with_other_error_logs_warning():
  118. response = flexmock(ok=False)
  119. flexmock(module.borgmatic.hooks.credential.parse).should_receive(
  120. 'resolve_credential'
  121. ).replace_with(lambda value, config: value)
  122. flexmock(module.borgmatic.hooks.monitoring.logs).should_receive(
  123. 'format_buffered_logs_for_payload'
  124. ).and_return('loggy\nlogs')
  125. response.should_receive('raise_for_status').and_raise(
  126. module.requests.exceptions.RequestException
  127. )
  128. flexmock(module.requests).should_receive('post').and_return(response)
  129. flexmock(module.logger).should_receive('warning')
  130. module.ping_monitor(
  131. {'integration_key': 'abc123'},
  132. {},
  133. 'config.yaml',
  134. module.monitor.State.FAIL,
  135. monitoring_log_level=1,
  136. dry_run=False,
  137. )