1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
|
import pytest
from typing import Tuple, Mapping, Any
from debian.deb822 import Deb822
from debian.debian_support import DpkgArchTable
from debputy.architecture_support import (
faked_arch_table,
DpkgArchitectureBuildProcessValuesTable,
)
from debputy.packages import BinaryPackage
from debputy.plugin.api.test_api import DEBPUTY_TEST_AGAINST_INSTALLED_PLUGINS
_DPKG_ARCHITECTURE_TABLE_NATIVE_AMD64 = None
_DPKG_ARCH_QUERY_TABLE = None
def faked_binary_package(
package, architecture="any", section="misc", is_main_package=False, **fields
) -> BinaryPackage:
_arch_data_tables_loaded()
dpkg_arch_table, dpkg_arch_query = _arch_data_tables_loaded()
return BinaryPackage(
Deb822(
{
"Package": package,
"Architecture": architecture,
"Section": section,
**fields,
}
),
dpkg_arch_table,
dpkg_arch_query,
is_main_package=is_main_package,
)
def binary_package_table(*args: BinaryPackage) -> Mapping[str, BinaryPackage]:
packages = list(args)
if not any(p.is_main_package for p in args):
p = args[0]
np = faked_binary_package(
p.name,
architecture=p.declared_architecture,
section=p.archive_section,
is_main_package=True,
**{
k: v
for k, v in p.fields.items()
if k.lower() not in ("package", "architecture", "section")
},
)
packages[0] = np
return {p.name: p for p in packages}
def _arch_data_tables_loaded() -> (
Tuple[DpkgArchitectureBuildProcessValuesTable, DpkgArchTable]
):
global _DPKG_ARCHITECTURE_TABLE_NATIVE_AMD64
global _DPKG_ARCH_QUERY_TABLE
if _DPKG_ARCHITECTURE_TABLE_NATIVE_AMD64 is None:
_DPKG_ARCHITECTURE_TABLE_NATIVE_AMD64 = faked_arch_table("amd64")
if _DPKG_ARCH_QUERY_TABLE is None:
# TODO: Make a faked table instead, so we do not have data dependencies in the test.
_DPKG_ARCH_QUERY_TABLE = DpkgArchTable.load_arch_table()
return _DPKG_ARCHITECTURE_TABLE_NATIVE_AMD64, _DPKG_ARCH_QUERY_TABLE
def build_time_only(func: Any) -> Any:
return pytest.mark.skipif(
DEBPUTY_TEST_AGAINST_INSTALLED_PLUGINS,
reason="Test makes assumptions only valid during build time tests",
)(func)
|