fix(logs): do not log the MongoDB credentials
DataManager logged the full connection string, user and password included, at startup. Log it through redact_uri (mongodb://***@host:port/...). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -1,9 +1,10 @@
|
||||
from unittest.mock import ANY, AsyncMock, MagicMock, patch
|
||||
|
||||
import pytest
|
||||
from pytest import fixture, mark
|
||||
from sientia_do.notifications.models import NotificationLevel
|
||||
|
||||
from ingestor.managers.data_manager import DataManager
|
||||
from ingestor.managers.data_manager import DataManager, redact_uri
|
||||
|
||||
metadata = {
|
||||
'metadata': {
|
||||
@@ -54,6 +55,48 @@ def test___init___success(mongodb_repository):
|
||||
assert data_manager.connection_string == 'mongodb://localhost:27017'
|
||||
|
||||
|
||||
@patch('ingestor.managers.data_manager.MongoDBRepository')
|
||||
def test___init___does_not_log_the_credentials(mongodb_repository):
|
||||
logger_mock = MagicMock()
|
||||
uri = 'mongodb://root:s3cr3t@mongodb.mongodb.svc.cluster.local:27017'
|
||||
|
||||
data_manager = DataManager(
|
||||
metadata=metadata['metadata'],
|
||||
mongo_connection_string=uri,
|
||||
mongo_database='sientia',
|
||||
logger=logger_mock,
|
||||
notification_handler=MagicMock(),
|
||||
metrics_controller=MagicMock(),
|
||||
)
|
||||
|
||||
logged = ' '.join(str(c) for c in logger_mock.info.call_args_list)
|
||||
assert 's3cr3t' not in logged
|
||||
assert 'root' not in logged
|
||||
logger_mock.info.assert_any_call(
|
||||
'DataManager initialized with MongoDB servers: '
|
||||
'mongodb://***@mongodb.mongodb.svc.cluster.local:27017'
|
||||
)
|
||||
assert data_manager.connection_string == uri
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
('uri', 'expected'),
|
||||
[
|
||||
('mongodb://localhost:27017', 'mongodb://localhost:27017'),
|
||||
(
|
||||
'mongodb://u:p@h1:27017,h2:27017/db?authSource=admin',
|
||||
'mongodb://***@h1:27017,h2:27017/db?authSource=admin',
|
||||
),
|
||||
('mongodb://u:p@h:27017?authSource=admin', 'mongodb://***@h:27017?authSource=admin'),
|
||||
('mongodb+srv://u@cluster.example.com', 'mongodb+srv://***@cluster.example.com'),
|
||||
('u:p@h:27017', '***@h:27017'),
|
||||
('mongodb://h:27017/db?x=a@b', 'mongodb://h:27017/db?x=a@b'),
|
||||
],
|
||||
)
|
||||
def test_redact_uri(uri, expected):
|
||||
assert redact_uri(uri) == expected
|
||||
|
||||
|
||||
def test_shutdown(data_manager):
|
||||
close_mock = MagicMock()
|
||||
data_manager.mongo_repository.close = close_mock
|
||||
|
||||
Reference in New Issue
Block a user