68 lines
2.2 KiB
Python
68 lines
2.2 KiB
Python
# Copyright 2021 Oliver Smith
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
import os
|
|
import sys
|
|
import pytest
|
|
import glob
|
|
import filecmp
|
|
|
|
import pmb_test # noqa
|
|
import pmb.parse.apkindex
|
|
import pmb.helpers.logging
|
|
import pmb.config
|
|
|
|
|
|
@pytest.fixture
|
|
def args(request):
|
|
import pmb.parse
|
|
sys.argv = ["pmbootstrap.py", "chroot"]
|
|
args = pmb.parse.arguments()
|
|
args.log = args.work + "/log_testsuite.txt"
|
|
pmb.helpers.logging.init(args)
|
|
request.addfinalizer(pmb.helpers.logging.logfd.close)
|
|
return args
|
|
|
|
|
|
def test_keys(args):
|
|
# Get the alpine-keys apk filename
|
|
pmb.chroot.init(args)
|
|
version = pmb.parse.apkindex.package(args, "alpine-keys")["version"]
|
|
pattern = (args.work + "/cache_apk_" + args.arch_native + "/alpine-keys-" +
|
|
version + ".*.apk")
|
|
filename = os.path.basename(glob.glob(pattern)[0])
|
|
|
|
# Extract it to a temporary folder
|
|
temp = "/tmp/test_keys_extract"
|
|
temp_outside = args.work + "/chroot_native" + temp
|
|
if os.path.exists(temp_outside):
|
|
pmb.chroot.root(args, ["rm", "-r", temp])
|
|
pmb.chroot.user(args, ["mkdir", "-p", temp])
|
|
pmb.chroot.user(args, ["tar", "xvf", "/var/cache/apk/" + filename],
|
|
working_dir=temp)
|
|
|
|
# Get all relevant key file names as {"filename": "full_outside_path"}
|
|
keys_upstream = {}
|
|
for arch in pmb.config.build_device_architectures + ["x86_64"]:
|
|
pattern = temp_outside + "/usr/share/apk/keys/" + arch + "/*.pub"
|
|
for path in glob.glob(pattern):
|
|
keys_upstream[os.path.basename(path)] = path
|
|
assert len(keys_upstream)
|
|
|
|
# Check if the keys are mirrored correctly
|
|
mirror_path_keys = pmb.config.apk_keys_path
|
|
for key, original_path in keys_upstream.items():
|
|
mirror_path = mirror_path_keys + "/" + key
|
|
assert filecmp.cmp(mirror_path, original_path, False)
|
|
|
|
# Find postmarketOS keys
|
|
keys_pmos = ["build.postmarketos.org.rsa.pub"]
|
|
for key in keys_pmos:
|
|
assert os.path.exists(mirror_path_keys + "/" + key)
|
|
|
|
# Find outdated keys, which need to be removed
|
|
glob_result = glob.glob(mirror_path_keys + "/*.pub")
|
|
assert len(glob_result)
|
|
for path in glob_result:
|
|
key = os.path.basename(key)
|
|
assert key in keys_pmos or key in keys_upstream
|