tests_multitenant: mock journald sender (#41250)

This commit is contained in:
Benjamin Dauvergne 2020-04-13 11:47:31 +02:00
parent 8605761621
commit 2b0474a2e9
1 changed files with 31 additions and 23 deletions

View File

@ -8,6 +8,16 @@ from tenant_schemas.utils import tenant_context
from django.contrib.auth.models import User
from hobo.journal import JournalHandler
class MockSender:
def __init__(self):
self.calls = []
def send(self, *args, **kwargs):
self.calls.append((args, kwargs))
def test_request_context_filter(caplog, settings, tenants, client):
root_logger = logging.getLogger()
@ -43,11 +53,15 @@ def test_request_context_filter(caplog, settings, tenants, client):
@pytest.fixture
def journald_handler():
from hobo.journal import JournalHandler
def sender():
yield MockSender()
@pytest.fixture
def journald_handler(sender):
root_logger = logging.getLogger()
journald_handler = JournalHandler()
journald_handler = JournalHandler(sender_function=sender.send)
journald_handler.addFilter(RequestContextFilter())
root_logger.handlers.append(journald_handler)
try:
yield journald_handler
@ -55,10 +69,9 @@ def journald_handler():
root_logger.handlers.remove(journald_handler)
def test_systemd(settings, tenants, client, journald_handler):
def test_systemd(settings, tenants, client, journald_handler, sender):
root_logger = logging.getLogger()
assert len(root_logger.handlers) == 2
journald_handler.addFilter(RequestContextFilter())
for tenant in tenants:
with tenant_context(tenant):
@ -75,21 +88,16 @@ def test_systemd(settings, tenants, client, journald_handler):
client.get('/', SERVER_NAME=tenant.domain_url,
HTTP_X_FORWARDED_FOR='99.99.99.99, 127.0.0.1')
from systemd.journal import Reader
import time
reader = Reader()
reader.seek_realtime(time.time() - 10)
records = [l for l in reader if l['MESSAGE'] == 'wat!']
assert len(records) == 2
for tenant, record in zip(tenants, records):
assert record['IP'] == '99.99.99.99'
assert record['TENANT'] == tenant.domain_url
assert record['PATH'] == '/'
assert record['REQUEST_ID'].startswith('r:')
assert record['USER'] == user.username
assert record['USER_EMAIL'] == user.email
assert record['USER_NAME'] == user.username
assert record['USER_DISPLAY_NAME'] == 'John Doe'
assert record['USER_UUID'] == 'ab' * 16
assert record['APPLICATION'] == 'fake-agent'
assert len(sender.calls) == 2
for tenant, (args, kwargs) in zip(tenants, sender.calls):
assert args == ('wat!',)
assert kwargs['IP'] == '99.99.99.99'
assert kwargs['TENANT'] == tenant.domain_url
assert kwargs['PATH'] == '/'
assert kwargs['REQUEST_ID'].startswith('r:')
assert kwargs['USER'] == user.username
assert kwargs['USER_EMAIL'] == user.email
assert kwargs['USER_NAME'] == user.username
assert kwargs['USER_DISPLAY_NAME'] == 'John Doe'
assert kwargs['USER_UUID'] == 'ab' * 16
assert kwargs['APPLICATION'] == 'fake-agent'