import textwrap
from collections.abc import Iterator
from pathlib import Path
-from typing import Any
import pytest
from mkosi.tree import copy_tree
from mkosi.user import INVOKING_USER
-from . import Image, ImageConfig, ci_group
+from . import Image, ImageConfig
pytestmark = pytest.mark.integration
yield Path(passphrase.name)
-@pytest.fixture(scope="module")
-def initrd(request: Any, config: ImageConfig) -> Iterator[Image]:
- with (
- ci_group(f"Initrd image {config.distribution}/{config.release}"),
- Image(
- config,
- options=[
- "--directory", "",
- "--include=mkosi-initrd/",
- ],
- ) as initrd
- ):
- if initrd.config.distribution == Distribution.rhel_ubi:
- pytest.skip("Cannot build RHEL-UBI initrds")
-
- initrd.build()
- yield initrd
-
-
-def test_initrd(initrd: Image) -> None:
+def test_initrd(config: ImageConfig) -> None:
with Image(
- initrd.config,
+ config,
options=[
- "--initrd", Path(initrd.output_dir) / "initrd",
"--kernel-command-line=systemd.unit=mkosi-check-and-shutdown.service",
"--incremental",
"--ephemeral",
@pytest.mark.skipif(os.getuid() != 0, reason="mkosi-initrd LVM test can only be executed as root")
-def test_initrd_lvm(initrd: Image) -> None:
+def test_initrd_lvm(config: ImageConfig) -> None:
with Image(
- initrd.config,
+ config,
options=[
- "--initrd", Path(initrd.output_dir) / "initrd",
"--kernel-command-line=systemd.unit=mkosi-check-and-shutdown.service",
# LVM confuses systemd-repart so we mask it for this test.
"--kernel-command-line=systemd.mask=systemd-repart.service",
image.qemu(["--format=disk"])
-def test_initrd_luks(initrd: Image, passphrase: Path) -> None:
+def test_initrd_luks(config: ImageConfig, passphrase: Path) -> None:
with tempfile.TemporaryDirectory() as repartd:
os.chown(repartd, INVOKING_USER.uid, INVOKING_USER.gid)
f"""\
[Partition]
Type=root
- Format={initrd.config.distribution.filesystem()}
+ Format={config.distribution.filesystem()}
Minimize=guess
Encrypt=key-file
CopyFiles=/
)
with Image(
- initrd.config,
+ config,
options=[
- "--initrd", Path(initrd.output_dir) / "initrd",
"--repart-dir", repartd,
"--passphrase", passphrase,
"--kernel-command-line=systemd.unit=mkosi-check-and-shutdown.service",
@pytest.mark.skipif(os.getuid() != 0, reason="mkosi-initrd LUKS+LVM test can only be executed as root")
-def test_initrd_luks_lvm(config: ImageConfig, initrd: Image, passphrase: Path) -> None:
+def test_initrd_luks_lvm(config: ImageConfig, passphrase: Path) -> None:
with Image(
config,
options=[
- "--initrd", Path(initrd.output_dir) / "initrd",
"--kernel-command-line=systemd.unit=mkosi-check-and-shutdown.service",
"--kernel-command-line=root=LABEL=root",
"--kernel-command-line=rw",
])
-def test_initrd_size(initrd: Image) -> None:
- # The fallback value is for CentOS and related distributions.
- maxsize = 1024**2 * {
- Distribution.fedora: 46,
- Distribution.debian: 40,
- Distribution.ubuntu: 36,
- Distribution.arch: 67,
- Distribution.opensuse: 39,
- }.get(initrd.config.distribution, 48)
+def test_initrd_size(config: ImageConfig) -> None:
+ with Image(
+ config,
+ options=["--incremental", "--format=directory"],
+ ) as image:
+ image.build()
+
+ # The fallback value is for CentOS and related distributions.
+ maxsize = 1024**2 * {
+ Distribution.fedora: 55,
+ Distribution.debian: 55,
+ Distribution.ubuntu: 50,
+ Distribution.arch: 80,
+ Distribution.opensuse: 55,
+ }.get(config.distribution, 55)
- assert (Path(initrd.output_dir) / "initrd").stat().st_size <= maxsize
+ assert (Path(image.output_dir) / "image.initrd").stat().st_size <= maxsize