test_pagerduty.py 5.4 KB

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