File: test_logs.py

package info (click to toggle)
borgmatic 2.0.11-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 4,752 kB
  • sloc: python: 58,506; sh: 150; makefile: 8; javascript: 5
file content (118 lines) | stat: -rw-r--r-- 4,268 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
import pytest
from flexmock import flexmock

from borgmatic.hooks.monitoring import logs as module


def test_forgetful_buffering_handler_emit_collects_log_records():
    handler = module.Forgetful_buffering_handler(identifier='test', byte_capacity=100, log_level=1)
    handler.emit(flexmock(getMessage=lambda: 'foo'))
    handler.emit(flexmock(getMessage=lambda: 'bar'))

    assert handler.buffer == ['foo\n', 'bar\n']
    assert not handler.forgot


def test_forgetful_buffering_handler_emit_collects_log_records_with_zero_byte_capacity():
    handler = module.Forgetful_buffering_handler(identifier='test', byte_capacity=0, log_level=1)
    handler.emit(flexmock(getMessage=lambda: 'foo'))
    handler.emit(flexmock(getMessage=lambda: 'bar'))

    assert handler.buffer == ['foo\n', 'bar\n']
    assert not handler.forgot


def test_forgetful_buffering_handler_emit_forgets_log_records_when_capacity_reached():
    handler = module.Forgetful_buffering_handler(
        identifier='test',
        byte_capacity=len('foo\nbar\n'),
        log_level=1,
    )
    handler.emit(flexmock(getMessage=lambda: 'foo'))
    assert handler.buffer == ['foo\n']
    handler.emit(flexmock(getMessage=lambda: 'bar'))
    assert handler.buffer == ['foo\n', 'bar\n']
    handler.emit(flexmock(getMessage=lambda: 'baz'))
    assert handler.buffer == ['bar\n', 'baz\n']
    handler.emit(flexmock(getMessage=lambda: 'quux'))
    assert handler.buffer == ['quux\n']
    assert handler.forgot


def test_add_handler_does_not_raise():
    logger = flexmock(handlers=[flexmock(level=0)])
    flexmock(module.logging).should_receive('getLogger').and_return(logger)
    flexmock(logger).should_receive('addHandler')
    flexmock(logger).should_receive('removeHandler')
    flexmock(logger).should_receive('setLevel')

    module.add_handler(flexmock())


def test_get_handler_matches_by_identifier():
    handlers = [
        flexmock(),
        flexmock(),
        module.Forgetful_buffering_handler(identifier='other', byte_capacity=100, log_level=1),
        module.Forgetful_buffering_handler(identifier='test', byte_capacity=100, log_level=1),
        flexmock(),
    ]
    flexmock(module.logging.getLogger(), handlers=handlers)

    assert module.get_handler('test') == handlers[3]


def test_get_handler_without_match_raises():
    handlers = [
        flexmock(),
        module.Forgetful_buffering_handler(identifier='other', byte_capacity=100, log_level=1),
    ]
    flexmock(module.logging.getLogger(), handlers=handlers)

    with pytest.raises(ValueError):
        assert module.get_handler('test')


def test_format_buffered_logs_for_payload_flattens_log_buffer():
    handler = module.Forgetful_buffering_handler(identifier='test', byte_capacity=100, log_level=1)
    handler.buffer = ['foo\n', 'bar\n']
    flexmock(module).should_receive('get_handler').and_return(handler)

    payload = module.format_buffered_logs_for_payload(identifier='test')

    assert payload == 'foo\nbar\n'


def test_format_buffered_logs_for_payload_inserts_truncation_indicator_when_logs_forgotten():
    handler = module.Forgetful_buffering_handler(identifier='test', byte_capacity=100, log_level=1)
    handler.buffer = ['foo\n', 'bar\n']
    handler.forgot = True
    flexmock(module).should_receive('get_handler').and_return(handler)

    payload = module.format_buffered_logs_for_payload(identifier='test')

    assert payload == '...\nfoo\nbar\n'


def test_format_buffered_logs_for_payload_without_handler_produces_empty_payload():
    flexmock(module).should_receive('get_handler').and_raise(ValueError)

    payload = module.format_buffered_logs_for_payload(identifier='test')

    assert payload == ''


def test_remove_handler_with_matching_handler_does_not_raise():
    flexmock(module).should_receive('get_handler').and_return(flexmock())
    logger = flexmock(handlers=[flexmock(level=0)])
    flexmock(module.logging).should_receive('getLogger').and_return(logger)
    flexmock(logger).should_receive('removeHandler')
    flexmock(logger).should_receive('setLevel')

    module.remove_handler('test')


def test_remove_handler_without_matching_handler_does_not_raise():
    flexmock(module).should_receive('get_handler').and_raise(ValueError)

    module.remove_handler('test')