mirror of
https://github.com/arcan1s/ahriman.git
synced 2025-04-24 07:17:17 +00:00
in order to sort method correctly we are going to use the following namiing schema: {subject}_{action}_{details} This schema still have some exceptions, e.g. single word methods, bool methods (is_) and getters in case if they are singular (i.e. there is no any other method with this subject)
236 lines
7.6 KiB
Python
236 lines
7.6 KiB
Python
import pytest
|
|
import requests
|
|
|
|
from pathlib import Path
|
|
from pytest_mock import MockerFixture
|
|
from unittest import mock
|
|
|
|
from ahriman.core.sign.gpg import GPG
|
|
from ahriman.models.sign_settings import SignSettings
|
|
|
|
|
|
def test_repository_sign_args_1(gpg_with_key: GPG) -> None:
|
|
"""
|
|
must generate correct sign args
|
|
"""
|
|
gpg_with_key.targets = {SignSettings.Repository}
|
|
assert gpg_with_key.repository_sign_args
|
|
|
|
|
|
def test_repository_sign_args_2(gpg_with_key: GPG) -> None:
|
|
"""
|
|
must generate correct sign args
|
|
"""
|
|
gpg_with_key.targets = {SignSettings.Packages, SignSettings.Repository}
|
|
assert gpg_with_key.repository_sign_args
|
|
|
|
|
|
def test_repository_sign_args_skip_1(gpg_with_key: GPG) -> None:
|
|
"""
|
|
must return empty args if it is not set
|
|
"""
|
|
gpg_with_key.targets = {}
|
|
assert not gpg_with_key.repository_sign_args
|
|
|
|
|
|
def test_repository_sign_args_skip_2(gpg_with_key: GPG) -> None:
|
|
"""
|
|
must return empty args if it is not set
|
|
"""
|
|
gpg_with_key.targets = {SignSettings.Packages}
|
|
assert not gpg_with_key.repository_sign_args
|
|
|
|
|
|
def test_repository_sign_args_skip_3(gpg: GPG) -> None:
|
|
"""
|
|
must return empty args if it is not set
|
|
"""
|
|
gpg.targets = {SignSettings.Repository}
|
|
assert not gpg.repository_sign_args
|
|
|
|
|
|
def test_repository_sign_args_skip_4(gpg: GPG) -> None:
|
|
"""
|
|
must return empty args if it is not set
|
|
"""
|
|
gpg.targets = {SignSettings.Packages, SignSettings.Repository}
|
|
assert not gpg.repository_sign_args
|
|
|
|
|
|
def test_sign_command(gpg_with_key: GPG) -> None:
|
|
"""
|
|
must generate sign command
|
|
"""
|
|
assert gpg_with_key.sign_command(Path("a"), gpg_with_key.default_key)
|
|
|
|
|
|
def test_key_download(gpg: GPG, mocker: MockerFixture) -> None:
|
|
"""
|
|
must download the key from public server
|
|
"""
|
|
requests_mock = mocker.patch("requests.get")
|
|
gpg.key_download("pgp.mit.edu", "0xE989490C")
|
|
requests_mock.assert_called_once()
|
|
|
|
|
|
def test_key_download_failure(gpg: GPG, mocker: MockerFixture) -> None:
|
|
"""
|
|
must download the key from public server and log error if any (and raise it again)
|
|
"""
|
|
mocker.patch("requests.get", side_effect=requests.exceptions.HTTPError())
|
|
with pytest.raises(requests.exceptions.HTTPError):
|
|
gpg.key_download("pgp.mit.edu", "0xE989490C")
|
|
|
|
|
|
def test_key_import(gpg: GPG, mocker: MockerFixture) -> None:
|
|
"""
|
|
must import PGP key from the server
|
|
"""
|
|
mocker.patch("ahriman.core.sign.gpg.GPG.key_download", return_value="key")
|
|
check_output_mock = mocker.patch("ahriman.core.sign.gpg.GPG._check_output")
|
|
|
|
gpg.key_import("pgp.mit.edu", "0xE989490C")
|
|
check_output_mock.assert_has_calls([
|
|
mock.call("gpg", "--import", input_data="key", exception=None, logger=pytest.helpers.anyvar(int)),
|
|
mock.call("gpg", "--quick-lsign-key", "0xE989490C", exception=None, logger=pytest.helpers.anyvar(int))
|
|
])
|
|
|
|
|
|
def test_process(gpg_with_key: GPG, mocker: MockerFixture) -> None:
|
|
"""
|
|
must call process method correctly
|
|
"""
|
|
result = [Path("a"), Path("a.sig")]
|
|
check_output_mock = mocker.patch("ahriman.core.sign.gpg.GPG._check_output")
|
|
|
|
assert gpg_with_key.process(Path("a"), gpg_with_key.default_key) == result
|
|
check_output_mock.assert_called()
|
|
|
|
|
|
def test_process_sign_package_1(gpg_with_key: GPG, mocker: MockerFixture) -> None:
|
|
"""
|
|
must sign package
|
|
"""
|
|
result = [Path("a"), Path("a.sig")]
|
|
process_mock = mocker.patch("ahriman.core.sign.gpg.GPG.process", return_value=result)
|
|
|
|
gpg_with_key.targets = {SignSettings.Packages}
|
|
assert gpg_with_key.process_sign_package(Path("a"), "a") == result
|
|
process_mock.assert_called_once()
|
|
|
|
|
|
def test_process_sign_package_2(gpg_with_key: GPG, mocker: MockerFixture) -> None:
|
|
"""
|
|
must sign package
|
|
"""
|
|
result = [Path("a"), Path("a.sig")]
|
|
process_mock = mocker.patch("ahriman.core.sign.gpg.GPG.process", return_value=result)
|
|
|
|
gpg_with_key.targets = {SignSettings.Packages, SignSettings.Repository}
|
|
assert gpg_with_key.process_sign_package(Path("a"), "a") == result
|
|
process_mock.assert_called_once()
|
|
|
|
|
|
def test_process_sign_package_skip_1(gpg_with_key: GPG, mocker: MockerFixture) -> None:
|
|
"""
|
|
must not sign package if it is not set
|
|
"""
|
|
process_mock = mocker.patch("ahriman.core.sign.gpg.GPG.process")
|
|
gpg_with_key.targets = {}
|
|
gpg_with_key.process_sign_package(Path("a"), "a")
|
|
process_mock.assert_not_called()
|
|
|
|
|
|
def test_process_sign_package_skip_2(gpg_with_key: GPG, mocker: MockerFixture) -> None:
|
|
"""
|
|
must not sign package if it is not set
|
|
"""
|
|
process_mock = mocker.patch("ahriman.core.sign.gpg.GPG.process")
|
|
gpg_with_key.targets = {SignSettings.Repository}
|
|
gpg_with_key.process_sign_package(Path("a"), "a")
|
|
process_mock.assert_not_called()
|
|
|
|
|
|
def test_process_sign_package_skip_3(gpg: GPG, mocker: MockerFixture) -> None:
|
|
"""
|
|
must not sign package if it is not set
|
|
"""
|
|
process_mock = mocker.patch("ahriman.core.sign.gpg.GPG.process")
|
|
gpg.targets = {SignSettings.Packages}
|
|
gpg.process_sign_package(Path("a"), "a")
|
|
process_mock.assert_not_called()
|
|
|
|
|
|
def test_process_sign_package_skip_4(gpg: GPG, mocker: MockerFixture) -> None:
|
|
"""
|
|
must not sign package if it is not set
|
|
"""
|
|
process_mock = mocker.patch("ahriman.core.sign.gpg.GPG.process")
|
|
gpg.targets = {SignSettings.Packages, SignSettings.Repository}
|
|
gpg.process_sign_package(Path("a"), "a")
|
|
process_mock.assert_not_called()
|
|
|
|
|
|
def test_process_sign_repository_1(gpg_with_key: GPG, mocker: MockerFixture) -> None:
|
|
"""
|
|
must sign repository
|
|
"""
|
|
result = [Path("a"), Path("a.sig")]
|
|
process_mock = mocker.patch("ahriman.core.sign.gpg.GPG.process", return_value=result)
|
|
|
|
gpg_with_key.targets = {SignSettings.Repository}
|
|
assert gpg_with_key.process_sign_repository(Path("a")) == result
|
|
process_mock.assert_called_once()
|
|
|
|
|
|
def test_process_sign_repository_2(gpg_with_key: GPG, mocker: MockerFixture) -> None:
|
|
"""
|
|
must sign repository
|
|
"""
|
|
result = [Path("a"), Path("a.sig")]
|
|
process_mock = mocker.patch("ahriman.core.sign.gpg.GPG.process", return_value=result)
|
|
|
|
gpg_with_key.targets = {SignSettings.Packages, SignSettings.Repository}
|
|
assert gpg_with_key.process_sign_repository(Path("a")) == result
|
|
process_mock.assert_called_once()
|
|
|
|
|
|
def test_process_sign_repository_skip_1(gpg_with_key: GPG, mocker: MockerFixture) -> None:
|
|
"""
|
|
must not sign repository if it is not set
|
|
"""
|
|
process_mock = mocker.patch("ahriman.core.sign.gpg.GPG.process")
|
|
gpg_with_key.targets = {}
|
|
gpg_with_key.process_sign_repository(Path("a"))
|
|
process_mock.assert_not_called()
|
|
|
|
|
|
def test_process_sign_repository_skip_2(gpg_with_key: GPG, mocker: MockerFixture) -> None:
|
|
"""
|
|
must not sign repository if it is not set
|
|
"""
|
|
process_mock = mocker.patch("ahriman.core.sign.gpg.GPG.process")
|
|
gpg_with_key.targets = {SignSettings.Packages}
|
|
gpg_with_key.process_sign_repository(Path("a"))
|
|
process_mock.assert_not_called()
|
|
|
|
|
|
def test_process_sign_repository_skip_3(gpg: GPG, mocker: MockerFixture) -> None:
|
|
"""
|
|
must not sign repository if it is not set
|
|
"""
|
|
process_mock = mocker.patch("ahriman.core.sign.gpg.GPG.process")
|
|
gpg.targets = {SignSettings.Repository}
|
|
gpg.process_sign_repository(Path("a"))
|
|
process_mock.assert_not_called()
|
|
|
|
|
|
def test_process_sign_repository_skip_4(gpg: GPG, mocker: MockerFixture) -> None:
|
|
"""
|
|
must not sign repository if it is not set
|
|
"""
|
|
process_mock = mocker.patch("ahriman.core.sign.gpg.GPG.process")
|
|
gpg.targets = {SignSettings.Packages, SignSettings.Repository}
|
|
gpg.process_sign_repository(Path("a"))
|
|
process_mock.assert_not_called()
|