2
0

test_pagerduty.py 5.3 KB

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