test_uptimekuma.py 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226
  1. from flexmock import flexmock
  2. import borgmatic.hooks.monitor
  3. from borgmatic.hooks import uptimekuma as module
  4. default_base_url = 'https://example.uptime.kuma'
  5. custom_base_url = 'https://uptime.example.com'
  6. push_code = 'abcd1234'
  7. def test_ping_monitor_hits_default_uptimekuma_on_fail():
  8. hook_config = {'push_code': push_code}
  9. flexmock(module.requests).should_receive('get').with_args(
  10. f'{default_base_url}/api/push/{push_code}?status=down&msg=fail&ping='
  11. ).and_return(flexmock(ok=True)).once()
  12. module.ping_monitor(
  13. hook_config,
  14. {},
  15. 'config.yaml',
  16. borgmatic.hooks.monitor.State.FAIL,
  17. monitoring_log_level=1,
  18. dry_run=False,
  19. )
  20. def test_ping_monitor_hits_custom_uptimekuma_on_fail():
  21. hook_config = {'server': custom_base_url, 'push_code': push_code}
  22. flexmock(module.requests).should_receive('get').with_args(
  23. f'{custom_base_url}/api/push/{push_code}?status=down&msg=fail&ping='
  24. ).and_return(flexmock(ok=True)).once()
  25. module.ping_monitor(
  26. hook_config,
  27. {},
  28. 'config.yaml',
  29. borgmatic.hooks.monitor.State.FAIL,
  30. monitoring_log_level=1,
  31. dry_run=False,
  32. )
  33. def test_ping_monitor_hits_default_uptimekuma_on_start():
  34. hook_config = {'push_code': push_code}
  35. flexmock(module.requests).should_receive('get').with_args(
  36. f'{default_base_url}/api/push/{push_code}?status=up&msg=start&ping='
  37. ).and_return(flexmock(ok=True)).once()
  38. module.ping_monitor(
  39. hook_config,
  40. {},
  41. 'config.yaml',
  42. borgmatic.hooks.monitor.State.START,
  43. monitoring_log_level=1,
  44. dry_run=False,
  45. )
  46. def test_ping_monitor_custom_uptimekuma_on_start():
  47. hook_config = {'server': custom_base_url, 'push_code': push_code}
  48. flexmock(module.requests).should_receive('get').with_args(
  49. f'{custom_base_url}/api/push/{push_code}?status=up&msg=start&ping='
  50. ).and_return(flexmock(ok=True)).once()
  51. module.ping_monitor(
  52. hook_config,
  53. {},
  54. 'config.yaml',
  55. borgmatic.hooks.monitor.State.START,
  56. monitoring_log_level=1,
  57. dry_run=False,
  58. )
  59. def test_ping_monitor_hits_default_uptimekuma_on_finish():
  60. hook_config = {'push_code': push_code}
  61. flexmock(module.requests).should_receive('get').with_args(
  62. f'{default_base_url}/api/push/{push_code}?status=up&msg=finish&ping='
  63. ).and_return(flexmock(ok=True)).once()
  64. module.ping_monitor(
  65. hook_config,
  66. {},
  67. 'config.yaml',
  68. borgmatic.hooks.monitor.State.FINISH,
  69. monitoring_log_level=1,
  70. dry_run=False,
  71. )
  72. def test_ping_monitor_custom_uptimekuma_on_finish():
  73. hook_config = {'server': custom_base_url, 'push_code': push_code}
  74. flexmock(module.requests).should_receive('get').with_args(
  75. f'{custom_base_url}/api/push/{push_code}?status=up&msg=finish&ping='
  76. ).and_return(flexmock(ok=True)).once()
  77. module.ping_monitor(
  78. hook_config,
  79. {},
  80. 'config.yaml',
  81. borgmatic.hooks.monitor.State.FINISH,
  82. monitoring_log_level=1,
  83. dry_run=False,
  84. )
  85. def test_ping_monitor_does_not_hit_default_uptimekuma_on_fail_dry_run():
  86. hook_config = {'push_code': push_code}
  87. flexmock(module.requests).should_receive('get').never()
  88. module.ping_monitor(
  89. hook_config,
  90. {},
  91. 'config.yaml',
  92. borgmatic.hooks.monitor.State.FAIL,
  93. monitoring_log_level=1,
  94. dry_run=True,
  95. )
  96. def test_ping_monitor_does_not_hit_custom_uptimekuma_on_fail_dry_run():
  97. hook_config = {'server': custom_base_url, 'push_code': push_code}
  98. flexmock(module.requests).should_receive('get').never()
  99. module.ping_monitor(
  100. hook_config,
  101. {},
  102. 'config.yaml',
  103. borgmatic.hooks.monitor.State.FAIL,
  104. monitoring_log_level=1,
  105. dry_run=True,
  106. )
  107. def test_ping_monitor_does_not_hit_default_uptimekuma_on_start_dry_run():
  108. hook_config = {'push_code': push_code}
  109. flexmock(module.requests).should_receive('get').never()
  110. module.ping_monitor(
  111. hook_config,
  112. {},
  113. 'config.yaml',
  114. borgmatic.hooks.monitor.State.START,
  115. monitoring_log_level=1,
  116. dry_run=True,
  117. )
  118. def test_ping_monitor_does_not_hit_custom_uptimekuma_on_start_dry_run():
  119. hook_config = {'server': custom_base_url, 'push_code': push_code}
  120. flexmock(module.requests).should_receive('get').never()
  121. module.ping_monitor(
  122. hook_config,
  123. {},
  124. 'config.yaml',
  125. borgmatic.hooks.monitor.State.START,
  126. monitoring_log_level=1,
  127. dry_run=True,
  128. )
  129. def test_ping_monitor_does_not_hit_default_uptimekuma_on_finish_dry_run():
  130. hook_config = {'push_code': push_code}
  131. flexmock(module.requests).should_receive('get').never()
  132. module.ping_monitor(
  133. hook_config,
  134. {},
  135. 'config.yaml',
  136. borgmatic.hooks.monitor.State.FINISH,
  137. monitoring_log_level=1,
  138. dry_run=True,
  139. )
  140. def test_ping_monitor_does_not_hit_custom_uptimekuma_on_finish_dry_run():
  141. hook_config = {'server': custom_base_url, 'push_code': push_code}
  142. flexmock(module.requests).should_receive('get').never()
  143. module.ping_monitor(
  144. hook_config,
  145. {},
  146. 'config.yaml',
  147. borgmatic.hooks.monitor.State.FINISH,
  148. monitoring_log_level=1,
  149. dry_run=True,
  150. )
  151. def test_ping_monitor_with_connection_error_logs_warning():
  152. hook_config = {'push_code': push_code}
  153. flexmock(module.requests).should_receive('get').with_args(
  154. f'{default_base_url}/api/push/{push_code}?status=down&msg=fail&ping='
  155. ).and_raise(module.requests.exceptions.ConnectionError)
  156. flexmock(module.logger).should_receive('warning').once()
  157. module.ping_monitor(
  158. hook_config,
  159. {},
  160. 'config.yaml',
  161. borgmatic.hooks.monitor.State.FAIL,
  162. monitoring_log_level=1,
  163. dry_run=False,
  164. )
  165. def test_ping_monitor_with_other_error_logs_warning():
  166. hook_config = {'push_code': push_code}
  167. response = flexmock(ok=False)
  168. response.should_receive('raise_for_status').and_raise(
  169. module.requests.exceptions.RequestException
  170. )
  171. flexmock(module.requests).should_receive('post').with_args(
  172. f'{default_base_url}/api/push/{push_code}?status=down&msg=fail&ping='
  173. ).and_return(response)
  174. flexmock(module.logger).should_receive('warning').once()
  175. module.ping_monitor(
  176. hook_config,
  177. {},
  178. 'config.yaml',
  179. borgmatic.hooks.monitor.State.FAIL,
  180. monitoring_log_level=1,
  181. dry_run=False,
  182. )