chore(keyringctl): add missing type annotations for tests
This commit is contained in:
parent
c807a81a57
commit
86eb172ac3
@ -32,6 +32,7 @@ from .types import Fingerprint
|
|||||||
from .types import Trust
|
from .types import Trust
|
||||||
from .types import Uid
|
from .types import Uid
|
||||||
from .types import Username
|
from .types import Username
|
||||||
|
from .util import filter_fingerprints_by_trust
|
||||||
from .util import get_cert_paths
|
from .util import get_cert_paths
|
||||||
from .util import system
|
from .util import system
|
||||||
from .util import transform_fd_to_tmpfile
|
from .util import transform_fd_to_tmpfile
|
||||||
@ -605,12 +606,7 @@ def export_ownertrust(certs: List[Path], output: Path) -> List[Fingerprint]:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
main_trusts = certificate_trust_from_paths(sources=certs, main_keys=get_fingerprints_from_paths(sources=certs))
|
main_trusts = certificate_trust_from_paths(sources=certs, main_keys=get_fingerprints_from_paths(sources=certs))
|
||||||
trusted_certs: List[Fingerprint] = list(
|
trusted_certs: List[Fingerprint] = filter_fingerprints_by_trust(main_trusts, Trust.full)
|
||||||
map(
|
|
||||||
lambda item: item[0],
|
|
||||||
filter(lambda item: Trust.full == item[1], main_trusts.items()),
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
with open(file=output, mode="w") as trusted_certs_file:
|
with open(file=output, mode="w") as trusted_certs_file:
|
||||||
for cert in sorted(set(trusted_certs)):
|
for cert in sorted(set(trusted_certs)):
|
||||||
@ -636,12 +632,7 @@ def export_revoked(certs: List[Path], main_keys: Set[Fingerprint], output: Path)
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
certificate_trusts = certificate_trust_from_paths(sources=certs, main_keys=main_keys)
|
certificate_trusts = certificate_trust_from_paths(sources=certs, main_keys=main_keys)
|
||||||
revoked_certs: List[Fingerprint] = list(
|
revoked_certs: List[Fingerprint] = filter_fingerprints_by_trust(certificate_trusts, Trust.revoked)
|
||||||
map(
|
|
||||||
lambda item: item[0],
|
|
||||||
filter(lambda item: Trust.revoked == item[1], certificate_trusts.items()),
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
with open(file=output, mode="w") as revoked_certs_file:
|
with open(file=output, mode="w") as revoked_certs_file:
|
||||||
for cert in sorted(set(revoked_certs)):
|
for cert in sorted(set(revoked_certs)):
|
||||||
|
@ -16,12 +16,14 @@ from tempfile import mkstemp
|
|||||||
from traceback import print_stack
|
from traceback import print_stack
|
||||||
from typing import IO
|
from typing import IO
|
||||||
from typing import AnyStr
|
from typing import AnyStr
|
||||||
|
from typing import Dict
|
||||||
from typing import List
|
from typing import List
|
||||||
from typing import Optional
|
from typing import Optional
|
||||||
from typing import Set
|
from typing import Set
|
||||||
from typing import Union
|
from typing import Union
|
||||||
|
|
||||||
from libkeyringctl.types import Fingerprint
|
from libkeyringctl.types import Fingerprint
|
||||||
|
from libkeyringctl.types import Trust
|
||||||
|
|
||||||
|
|
||||||
@contextmanager
|
@contextmanager
|
||||||
@ -198,4 +200,37 @@ def get_parent_cert_paths(paths: Iterable[Path]) -> Set[Path]:
|
|||||||
|
|
||||||
|
|
||||||
def contains_fingerprint(fingerprints: Iterable[Fingerprint], fingerprint: Fingerprint) -> bool:
|
def contains_fingerprint(fingerprints: Iterable[Fingerprint], fingerprint: Fingerprint) -> bool:
|
||||||
|
"""Returns weather an iterable structure of fingerprints contains a specific fingerprint
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
fingerprints: Iteratable structure of fingerprints that should be searched
|
||||||
|
fingerprint: Fingerprint to search for
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
Weather an iterable structure of fingerprints contains a specific fingerprint
|
||||||
|
"""
|
||||||
|
|
||||||
return any(filter(lambda e: str(e).endswith(fingerprint), fingerprints))
|
return any(filter(lambda e: str(e).endswith(fingerprint), fingerprints))
|
||||||
|
|
||||||
|
|
||||||
|
def filter_fingerprints_by_trust(trusts: Dict[Fingerprint, Trust], trust: Trust) -> List[Fingerprint]:
|
||||||
|
"""Filters a dict of Fingerprint to Trust by a passed Trust parameter and returns the matching fingerprints.
|
||||||
|
|
||||||
|
Parameters
|
||||||
|
----------
|
||||||
|
trusts: Dict of Fingerprint to Trust that should be filtered based on the trust parameter
|
||||||
|
trust: Trust that should be used to filter the trusts dict
|
||||||
|
|
||||||
|
Returns
|
||||||
|
-------
|
||||||
|
The matching fingerprints of the dict filtered by trust
|
||||||
|
"""
|
||||||
|
|
||||||
|
return list(
|
||||||
|
map(
|
||||||
|
lambda item: item[0],
|
||||||
|
filter(lambda item: trust == item[1], trusts.items()),
|
||||||
|
)
|
||||||
|
)
|
||||||
|
@ -3,8 +3,12 @@ from functools import wraps
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from shutil import copytree
|
from shutil import copytree
|
||||||
from tempfile import TemporaryDirectory
|
from tempfile import TemporaryDirectory
|
||||||
|
from typing import Any
|
||||||
|
from typing import Callable
|
||||||
from typing import Dict
|
from typing import Dict
|
||||||
|
from typing import Generator
|
||||||
from typing import List
|
from typing import List
|
||||||
|
from typing import Optional
|
||||||
from typing import Set
|
from typing import Set
|
||||||
|
|
||||||
from pytest import fixture
|
from pytest import fixture
|
||||||
@ -26,17 +30,22 @@ test_main_fingerprints: Set[Fingerprint] = set()
|
|||||||
|
|
||||||
|
|
||||||
@fixture(autouse=True)
|
@fixture(autouse=True)
|
||||||
def reset_storage():
|
def reset_storage() -> None:
|
||||||
test_keys.clear()
|
test_keys.clear()
|
||||||
test_certificates.clear()
|
test_certificates.clear()
|
||||||
test_keyring_certificates.clear()
|
test_keyring_certificates.clear()
|
||||||
test_main_fingerprints.clear()
|
test_main_fingerprints.clear()
|
||||||
|
|
||||||
|
|
||||||
def create_certificate(username: Username, uids: List[Uid], keyring_type: str = "packager", func=None):
|
def create_certificate(
|
||||||
def decorator(decorated_func):
|
username: Username,
|
||||||
|
uids: List[Uid],
|
||||||
|
keyring_type: str = "packager",
|
||||||
|
func: Optional[Callable[..., Any]] = None,
|
||||||
|
) -> Callable[..., Any]:
|
||||||
|
def decorator(decorated_func: Callable[..., None]) -> Callable[..., Any]:
|
||||||
@wraps(decorated_func)
|
@wraps(decorated_func)
|
||||||
def wrapper(working_dir: Path, *args, **kwargs):
|
def wrapper(working_dir: Path, *args: Any, **kwargs: Any) -> None:
|
||||||
print(username)
|
print(username)
|
||||||
|
|
||||||
key_directory = working_dir / "secret" / f"{id}"
|
key_directory = working_dir / "secret" / f"{id}"
|
||||||
@ -80,10 +89,12 @@ def create_certificate(username: Username, uids: List[Uid], keyring_type: str =
|
|||||||
return decorator(func)
|
return decorator(func)
|
||||||
|
|
||||||
|
|
||||||
def create_uid_certification(issuer: Username, certified: Username, uid: Uid, func=None):
|
def create_uid_certification(
|
||||||
def decorator(decorated_func):
|
issuer: Username, certified: Username, uid: Uid, func: Optional[Callable[[Any], None]] = None
|
||||||
|
) -> Callable[..., Any]:
|
||||||
|
def decorator(decorated_func: Callable[..., None]) -> Callable[..., Any]:
|
||||||
@wraps(decorated_func)
|
@wraps(decorated_func)
|
||||||
def wrapper(working_dir: Path, *args, **kwargs):
|
def wrapper(working_dir: Path, *args: Any, **kwargs: Any) -> None:
|
||||||
key: Path = test_keys[issuer][0]
|
key: Path = test_keys[issuer][0]
|
||||||
certificate: Path = test_certificates[certified][0]
|
certificate: Path = test_certificates[certified][0]
|
||||||
fingerprint: Fingerprint = Fingerprint(test_keyring_certificates[certified][0].name)
|
fingerprint: Fingerprint = Fingerprint(test_keyring_certificates[certified][0].name)
|
||||||
@ -115,12 +126,13 @@ def create_uid_certification(issuer: Username, certified: Username, uid: Uid, fu
|
|||||||
|
|
||||||
|
|
||||||
@fixture(scope="function")
|
@fixture(scope="function")
|
||||||
def working_dir():
|
def working_dir() -> Generator[Path, None, None]:
|
||||||
with TemporaryDirectory(prefix="arch-keyringctl-test-") as tempdir:
|
with TemporaryDirectory(prefix="arch-keyringctl-test-") as tempdir:
|
||||||
with cwd(tempdir):
|
path: Path = Path(tempdir)
|
||||||
yield Path(tempdir)
|
with cwd(path):
|
||||||
|
yield path
|
||||||
|
|
||||||
|
|
||||||
@fixture(scope="function")
|
@fixture(scope="function")
|
||||||
def keyring_dir(working_dir: Path):
|
def keyring_dir(working_dir: Path) -> Generator[Path, None, None]:
|
||||||
yield working_dir / "keyring"
|
yield working_dir / "keyring"
|
||||||
|
@ -12,7 +12,7 @@ from .conftest import test_main_fingerprints
|
|||||||
|
|
||||||
|
|
||||||
@create_certificate(username=Username("foobar"), uids=[Uid("foobar <foo@bar.xyz>")], keyring_type="main")
|
@create_certificate(username=Username("foobar"), uids=[Uid("foobar <foo@bar.xyz>")], keyring_type="main")
|
||||||
def test_certificate_trust_main_key_has_full_trust(working_dir: Path, keyring_dir: Path):
|
def test_certificate_trust_main_key_has_full_trust(working_dir: Path, keyring_dir: Path) -> None:
|
||||||
trust = certificate_trust(
|
trust = certificate_trust(
|
||||||
test_keyring_certificates[Username("foobar")][0],
|
test_keyring_certificates[Username("foobar")][0],
|
||||||
test_main_fingerprints,
|
test_main_fingerprints,
|
||||||
@ -22,7 +22,7 @@ def test_certificate_trust_main_key_has_full_trust(working_dir: Path, keyring_di
|
|||||||
|
|
||||||
@create_certificate(username=Username("main"), uids=[Uid("main <foo@bar.xyz>")])
|
@create_certificate(username=Username("main"), uids=[Uid("main <foo@bar.xyz>")])
|
||||||
@create_certificate(username=Username("foobar"), uids=[Uid("foobar <foo@bar.xyz>")])
|
@create_certificate(username=Username("foobar"), uids=[Uid("foobar <foo@bar.xyz>")])
|
||||||
def test_certificate_trust_no_signature_is_unknown(working_dir: Path, keyring_dir: Path):
|
def test_certificate_trust_no_signature_is_unknown(working_dir: Path, keyring_dir: Path) -> None:
|
||||||
trust = certificate_trust(
|
trust = certificate_trust(
|
||||||
test_keyring_certificates[Username("foobar")][0],
|
test_keyring_certificates[Username("foobar")][0],
|
||||||
test_main_fingerprints,
|
test_main_fingerprints,
|
||||||
@ -33,7 +33,7 @@ def test_certificate_trust_no_signature_is_unknown(working_dir: Path, keyring_di
|
|||||||
@create_certificate(username=Username("main"), uids=[Uid("main <foo@bar.xyz>")], keyring_type="main")
|
@create_certificate(username=Username("main"), uids=[Uid("main <foo@bar.xyz>")], keyring_type="main")
|
||||||
@create_certificate(username=Username("foobar"), uids=[Uid("foobar <foo@bar.xyz>")])
|
@create_certificate(username=Username("foobar"), uids=[Uid("foobar <foo@bar.xyz>")])
|
||||||
@create_uid_certification(issuer=Username("main"), certified=Username("foobar"), uid=Uid("foobar <foo@bar.xyz>"))
|
@create_uid_certification(issuer=Username("main"), certified=Username("foobar"), uid=Uid("foobar <foo@bar.xyz>"))
|
||||||
def test_certificate_trust_one_signature_is_marginal(working_dir: Path, keyring_dir: Path):
|
def test_certificate_trust_one_signature_is_marginal(working_dir: Path, keyring_dir: Path) -> None:
|
||||||
trust = certificate_trust(
|
trust = certificate_trust(
|
||||||
test_keyring_certificates[Username("foobar")][0],
|
test_keyring_certificates[Username("foobar")][0],
|
||||||
test_main_fingerprints,
|
test_main_fingerprints,
|
||||||
@ -45,7 +45,7 @@ def test_certificate_trust_one_signature_is_marginal(working_dir: Path, keyring_
|
|||||||
@create_certificate(username=Username("not_main"), uids=[Uid("main <foo@bar.xyz>")])
|
@create_certificate(username=Username("not_main"), uids=[Uid("main <foo@bar.xyz>")])
|
||||||
@create_certificate(username=Username("foobar"), uids=[Uid("foobar <foo@bar.xyz>")])
|
@create_certificate(username=Username("foobar"), uids=[Uid("foobar <foo@bar.xyz>")])
|
||||||
@create_uid_certification(issuer=Username("not_main"), certified=Username("foobar"), uid=Uid("foobar <foo@bar.xyz>"))
|
@create_uid_certification(issuer=Username("not_main"), certified=Username("foobar"), uid=Uid("foobar <foo@bar.xyz>"))
|
||||||
def test_certificate_trust_one_none_main_signature_gives_no_trust(working_dir: Path, keyring_dir: Path):
|
def test_certificate_trust_one_none_main_signature_gives_no_trust(working_dir: Path, keyring_dir: Path) -> None:
|
||||||
trust = certificate_trust(
|
trust = certificate_trust(
|
||||||
test_keyring_certificates[Username("foobar")][0],
|
test_keyring_certificates[Username("foobar")][0],
|
||||||
test_main_fingerprints,
|
test_main_fingerprints,
|
||||||
@ -60,7 +60,7 @@ def test_certificate_trust_one_none_main_signature_gives_no_trust(working_dir: P
|
|||||||
@create_uid_certification(issuer=Username("main1"), certified=Username("foobar"), uid=Uid("foobar <foo@bar.xyz>"))
|
@create_uid_certification(issuer=Username("main1"), certified=Username("foobar"), uid=Uid("foobar <foo@bar.xyz>"))
|
||||||
@create_uid_certification(issuer=Username("main2"), certified=Username("foobar"), uid=Uid("foobar <foo@bar.xyz>"))
|
@create_uid_certification(issuer=Username("main2"), certified=Username("foobar"), uid=Uid("foobar <foo@bar.xyz>"))
|
||||||
@create_uid_certification(issuer=Username("main3"), certified=Username("foobar"), uid=Uid("foobar <foo@bar.xyz>"))
|
@create_uid_certification(issuer=Username("main3"), certified=Username("foobar"), uid=Uid("foobar <foo@bar.xyz>"))
|
||||||
def test_certificate_trust_three_main_signature_gives_full_trust(working_dir: Path, keyring_dir: Path):
|
def test_certificate_trust_three_main_signature_gives_full_trust(working_dir: Path, keyring_dir: Path) -> None:
|
||||||
trust = certificate_trust(
|
trust = certificate_trust(
|
||||||
test_keyring_certificates[Username("foobar")][0],
|
test_keyring_certificates[Username("foobar")][0],
|
||||||
test_main_fingerprints,
|
test_main_fingerprints,
|
||||||
|
Loading…
Reference in New Issue
Block a user