Projet

Général

Profil

0001-tests_multitenant-mock-journald-sender-41250.patch

Benjamin Dauvergne, 13 avril 2020 14:18

Télécharger (3,59 ko)

Voir les différences:

Subject: [PATCH] tests_multitenant: mock journald sender (#41250)

 .../test_request_context_filter.py            | 54 +++++++++++--------
 1 file changed, 31 insertions(+), 23 deletions(-)
tests_multitenant/test_request_context_filter.py
8 8

  
9 9
from django.contrib.auth.models import User
10 10

  
11
from hobo.journal import JournalHandler
12

  
13

  
14
class MockSender:
15
    def __init__(self):
16
        self.calls = []
17

  
18
    def send(self, *args, **kwargs):
19
        self.calls.append((args, kwargs))
20

  
11 21

  
12 22
def test_request_context_filter(caplog, settings, tenants, client):
13 23
    root_logger = logging.getLogger()
......
43 53

  
44 54

  
45 55
@pytest.fixture
46
def journald_handler():
47
    from hobo.journal import JournalHandler
56
def sender():
57
    yield MockSender()
58

  
48 59

  
60
@pytest.fixture
61
def journald_handler(sender):
49 62
    root_logger = logging.getLogger()
50
    journald_handler = JournalHandler()
63
    journald_handler = JournalHandler(sender_function=sender.send)
64
    journald_handler.addFilter(RequestContextFilter())
51 65
    root_logger.handlers.append(journald_handler)
52 66
    try:
53 67
        yield journald_handler
......
55 69
        root_logger.handlers.remove(journald_handler)
56 70

  
57 71

  
58
def test_systemd(settings, tenants, client, journald_handler):
72
def test_systemd(settings, tenants, client, journald_handler, sender):
59 73
    root_logger = logging.getLogger()
60 74
    assert len(root_logger.handlers) == 2
61
    journald_handler.addFilter(RequestContextFilter())
62 75

  
63 76
    for tenant in tenants:
64 77
        with tenant_context(tenant):
......
75 88
        client.get('/', SERVER_NAME=tenant.domain_url,
76 89
                   HTTP_X_FORWARDED_FOR='99.99.99.99, 127.0.0.1')
77 90

  
78
    from systemd.journal import Reader
79
    import time
80

  
81
    reader = Reader()
82
    reader.seek_realtime(time.time() - 10)
83
    records = [l for l in reader if l['MESSAGE'] == 'wat!']
84
    assert len(records) == 2
85
    for tenant, record in zip(tenants, records):
86
        assert record['IP'] == '99.99.99.99'
87
        assert record['TENANT'] == tenant.domain_url
88
        assert record['PATH'] == '/'
89
        assert record['REQUEST_ID'].startswith('r:')
90
        assert record['USER'] == user.username
91
        assert record['USER_EMAIL'] == user.email
92
        assert record['USER_NAME'] == user.username
93
        assert record['USER_DISPLAY_NAME'] == 'John Doe'
94
        assert record['USER_UUID'] == 'ab' * 16
95
        assert record['APPLICATION'] == 'fake-agent'
91
    assert len(sender.calls) == 2
92
    for tenant, (args, kwargs) in zip(tenants, sender.calls):
93
        assert args == ('wat!',)
94
        assert kwargs['IP'] == '99.99.99.99'
95
        assert kwargs['TENANT'] == tenant.domain_url
96
        assert kwargs['PATH'] == '/'
97
        assert kwargs['REQUEST_ID'].startswith('r:')
98
        assert kwargs['USER'] == user.username
99
        assert kwargs['USER_EMAIL'] == user.email
100
        assert kwargs['USER_NAME'] == user.username
101
        assert kwargs['USER_DISPLAY_NAME'] == 'John Doe'
102
        assert kwargs['USER_UUID'] == 'ab' * 16
103
        assert kwargs['APPLICATION'] == 'fake-agent'
96
-