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 |
|
-
|