1
0
mirror of https://github.com/quay/quay.git synced 2026-01-27 18:42:52 +03:00
Files
quay/data/model/test/test_log.py
Daniel Messer 99d571a4a6 logs: allow without strict logging (PROJQUAY-7116) (#2846)
* allow to disable strict logging in general

Signed-off-by: dmesser <dmesser@redhat.com>

* add strict logging exceptions for log kinds during reads

Signed-off-by: dmesser <dmesser@redhat.com>

* add strict logging exceptions for log kinds during reads

Signed-off-by: dmesser <dmesser@redhat.com>

* formatting

Signed-off-by: dmesser <dmesser@redhat.com>

---------

Signed-off-by: dmesser <dmesser@redhat.com>
2024-06-17 21:17:39 +02:00

112 lines
3.3 KiB
Python

import pytest
from mock import DEFAULT, Mock, patch, sentinel
from peewee import PeeweeException
from data.database import LogEntry3, User
from data.model import config as _config
from data.model.log import log_action
@pytest.fixture(scope="function")
def app_config():
with patch.dict(_config.app_config, {}, clear=True):
yield _config.app_config
@pytest.fixture()
def logentry_kind():
kinds = {"pull_repo": "pull_repo_kind", "push_repo": "push_repo_kind"}
with patch("data.model.log.get_log_entry_kinds", return_value=kinds, spec=True):
yield kinds
@pytest.fixture()
def logentry(logentry_kind):
with patch("data.database.LogEntry3.create", spec=True):
yield LogEntry3
@pytest.fixture()
def user():
with patch.multiple(
"data.database.User", username=DEFAULT, get=DEFAULT, select=DEFAULT
) as user:
user["get"].return_value = Mock(id="mock_user_id")
user["select"].return_value.tuples.return_value.get.return_value = ["default_user_id"]
yield User
@pytest.mark.parametrize("action_kind", [("pull"), ("oops")])
def test_log_action_unknown_action(action_kind):
"""
test unknown action types throw an exception when logged.
"""
with pytest.raises(Exception):
log_action(action_kind, None)
@pytest.mark.parametrize(
"user_or_org_name,account_id,account",
[
("my_test_org", "N/A", "mock_user_id"),
(None, "test_account_id", "test_account_id"),
(None, None, "default_user_id"),
],
)
@pytest.mark.parametrize(
"unlogged_ok,unlogged_pulls_ok,action_kind,db_exception,throws",
[
(False, False, "pull_repo", None, False),
(False, False, "push_repo", None, False),
(False, False, "pull_repo", PeeweeException, True),
(False, False, "push_repo", PeeweeException, True),
(False, True, "pull_repo", PeeweeException, False),
(False, True, "push_repo", PeeweeException, True),
(False, True, "pull_repo", Exception, True),
(False, True, "push_repo", Exception, True),
(True, False, "push_repo", Exception, True),
(True, True, "push_repo", Exception, True),
],
)
def test_log_action(
user_or_org_name,
account_id,
account,
unlogged_ok,
unlogged_pulls_ok,
action_kind,
db_exception,
throws,
app_config,
logentry,
user,
):
log_args = {
"performer": Mock(id="TEST_PERFORMER_ID"),
"repository": Mock(id="TEST_REPO"),
"ip": "TEST_IP",
"metadata": {"test_key": "test_value"},
"timestamp": "TEST_TIMESTAMP",
}
app_config["SERVICE_LOG_ACCOUNT_ID"] = account_id
app_config["ALLOW_PULLS_WITHOUT_STRICT_LOGGING"] = unlogged_pulls_ok
app_config["ALLOW_WITHOUT_STRICT_LOGGING"] = unlogged_ok
logentry.create.side_effect = db_exception
if throws:
with pytest.raises(db_exception):
log_action(action_kind, user_or_org_name, **log_args)
else:
log_action(action_kind, user_or_org_name, **log_args)
logentry.create.assert_called_once_with(
kind=action_kind + "_kind",
account=account,
performer="TEST_PERFORMER_ID",
repository="TEST_REPO",
ip="TEST_IP",
metadata_json='{"test_key": "test_value"}',
datetime="TEST_TIMESTAMP",
)