1
0
Fork 1
mirror of https://gitlab.postmarketos.org/postmarketOS/pmbootstrap.git synced 2025-07-12 19:09:56 +03:00
pmbootstrap/pmb/config/test_config_serde.py
Oliver Smith 9dfa89c58c
Use pmbootstrap_v3.cfg as config file (MR 2350)
Using pmbootstrap v3 with the old config can cause problems, for example
when having $WORK in the pmaports dir instead of the actual work path.
This is not supported anymore by v3 to reduce complexity. The format of
how mirrors are stored in the config also has changed.

Use a separate config file, so users can go back from v3 to 2.3.x if
they need to (for figuring out a regression) and so users won't run into
bugs when moving from 2.3.x to v3.
2024-07-10 20:06:25 +02:00

98 lines
2.6 KiB
Python

from pathlib import Path
import pytest
import pmb.config
from pmb.core.config import SystemdConfig
"""Test the config file serialization and deserialization."""
def test_load(config_file):
config = pmb.config.load(config_file)
assert config.build_default_device_arch
assert config.ccache_size == "5G"
assert config.device == "qemu-amd64"
assert config.extra_packages == "neofetch,neovim,reboot-mode"
assert config.hostname == "qemu-amd64"
assert not config.is_default_channel
assert config.jobs == "8"
assert config.kernel == "edge"
assert config.locale == "C.UTF-8"
assert config.ssh_keys
assert config.sudo_timer
assert config.systemd == SystemdConfig.ALWAYS
assert config.timezone == "Europe/Berlin"
assert config.ui == "gnome"
assert config.providers == {}
assert config.mirrors["pmaports"] is not None
assert ".pytest_tmp" in config.work.parts
@pytest.fixture
def config_file_2_3_x(tmp_path: Path):
"""Fixture to create a temporary pmbootstrap_v3.cfg file with 2.3.x format."""
file = tmp_path / "pmbootstrap_v3.cfg"
contents = """[pmbootstrap]
aports = /home/user/.local/var/pmbootstrap/cache_git/pmaports
ccache_size = 32G
is_default_channel = False
device = oneplus-fajita
extra_packages = none
hostname = pmos
build_pkgs_on_install = True
jobs = 32
kernel = edge
keymap =
locale = C.UTF-8
nonfree_firmware = True
nonfree_userland = False
ssh_keys = True
timezone = Europe/London
ui = gnome-mobile
ui_extras = False
user = user
work = /home/user/.local/var/pmbootstrap
boot_size = 256
extra_space = 0
sudo_timer = True
mirrors_postmarketos = http://mirror.postmarketos.org/postmarketos/
mirror_alpine = http://dl-cdn.alpinelinux.org/alpine/
ssh_key_glob = ~/.ssh/id_*.pub
qemu_redir_stdio = True
build_default_device_arch = True
merge_usr = True
auto_checksum = True
systemd = always
[providers]
"""
open(file, "w").write(contents)
return file
def test_migrate_2_to_3(config_file_2_3_x, tmp_path, monkeypatch):
tmp_path = tmp_path / "pmbootstrap-new.cfg"
did_migrate = False
def mock_save(path, config):
nonlocal did_migrate
did_migrate = True
monkeypatch.setattr(pmb.config.file, "save", mock_save)
config = pmb.config.load(config_file_2_3_x)
# The 2.3.x to 3.0 migration removes these keys from the
# config in favour of a new [mirrors] section.
# It should be automatically migrated.
assert not hasattr(config, "mirror_alpine")
assert not hasattr(config, "mirrors_postmarketos")
# Check that save was called (which happens on a config migration)
assert did_migrate
# FIXME: add save tests and better type checks