test_loki.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. import json
  2. import requests
  3. from flexmock import flexmock
  4. from borgmatic.hooks.monitoring import loki as module
  5. def test_loki_log_buffer_add_value_gets_raw():
  6. '''
  7. Assert that adding values to the log buffer increases it's length.
  8. '''
  9. buffer = module.Loki_log_buffer(flexmock(), False)
  10. assert len(buffer) == 0
  11. buffer.add_value('Some test log line')
  12. assert len(buffer) == 1
  13. buffer.add_value('Another test log line')
  14. assert len(buffer) == 2
  15. def test_loki_log_buffer_json_serializes_empty_buffer():
  16. '''
  17. Assert that the buffer correctly serializes when empty.
  18. '''
  19. buffer = module.Loki_log_buffer(flexmock(), False)
  20. assert json.loads(buffer.to_request()) == json.loads('{"streams":[{"stream":{},"values":[]}]}')
  21. def test_loki_log_buffer_json_serializes_labels():
  22. '''
  23. Assert that the buffer correctly serializes with labels.
  24. '''
  25. buffer = module.Loki_log_buffer(flexmock(), False)
  26. buffer.add_label('test', 'label')
  27. assert json.loads(buffer.to_request()) == json.loads(
  28. '{"streams":[{"stream":{"test": "label"},"values":[]}]}'
  29. )
  30. def test_loki_log_buffer_json_serializes_log_lines():
  31. '''
  32. Assert that log lines end up in the correct place in the log buffer.
  33. '''
  34. buffer = module.Loki_log_buffer(flexmock(), False)
  35. buffer.add_value('Some test log line')
  36. assert json.loads(buffer.to_request())['streams'][0]['values'][0][1] == 'Some test log line'
  37. def test_loki_log_handler_add_label_gets_labels():
  38. '''
  39. Assert that adding labels works.
  40. '''
  41. buffer = module.Loki_log_buffer(flexmock(), False)
  42. buffer.add_label('test', 'label')
  43. assert buffer.root['streams'][0]['stream']['test'] == 'label'
  44. buffer.add_label('test2', 'label2')
  45. assert buffer.root['streams'][0]['stream']['test2'] == 'label2'
  46. def test_loki_log_handler_emit_gets_log_messages():
  47. '''
  48. Assert that adding log records works.
  49. '''
  50. handler = module.Loki_log_handler(flexmock(), False)
  51. handler.emit(flexmock(getMessage=lambda: 'Some test log line'))
  52. assert len(handler.buffer) == 1
  53. def test_loki_log_handler_raw_posts_to_server():
  54. '''
  55. Assert that the flush function sends a post request after a certain limit.
  56. '''
  57. handler = module.Loki_log_handler(flexmock(), False)
  58. flexmock(module.requests).should_receive('post').and_return(
  59. flexmock(raise_for_status=lambda: '')
  60. ).once()
  61. for num in range(int(module.MAX_BUFFER_LINES * 1.5)):
  62. handler.raw(num)
  63. def test_loki_log_handler_raw_post_failure_does_not_raise():
  64. '''
  65. Assert that the flush function catches request exceptions.
  66. '''
  67. handler = module.Loki_log_handler(flexmock(), False)
  68. flexmock(module.requests).should_receive('post').and_return(
  69. flexmock(raise_for_status=lambda: (_ for _ in ()).throw(requests.RequestException()))
  70. ).once()
  71. for num in range(int(module.MAX_BUFFER_LINES * 1.5)):
  72. handler.raw(num)
  73. def test_loki_log_handler_flush_with_empty_buffer_does_not_raise():
  74. '''
  75. Test that flushing an empty buffer does indeed nothing.
  76. '''
  77. handler = module.Loki_log_handler(flexmock(), False)
  78. handler.flush()