From ed47743186c47d6c846b31737cbabdde656ec6da Mon Sep 17 00:00:00 2001 From: Victor Date: Thu, 6 Aug 2026 20:25:22 -0300 Subject: [PATCH] Cover the example configs with a parsing test Nothing in the test suite or CI reads examples/, which is how the sample config could stay broken for years while every other config surface kept working. Parse both example files through ArchConfigHandler, and check the partition entries directly since the parser only reaches them when the configured device exists on the machine, which is never true in CI. --- tests/conftest.py | 10 ++++++++++ tests/test_args.py | 50 +++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 59 insertions(+), 1 deletion(-) diff --git a/tests/conftest.py b/tests/conftest.py index 819c8397..d3f2bc7e 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -8,6 +8,16 @@ def config_fixture() -> Path: return Path(__file__).parent / 'data' / 'test_config.json' +@pytest.fixture(scope='session') +def example_config_fixture() -> Path: + return Path(__file__).parent.parent / 'examples' / 'config-sample.json' + + +@pytest.fixture(scope='session') +def example_creds_fixture() -> Path: + return Path(__file__).parent.parent / 'examples' / 'creds-sample.json' + + @pytest.fixture(scope='session') def btrfs_config_fixture() -> Path: return Path(__file__).parent / 'data' / 'test_config_btrfs.json' diff --git a/tests/test_args.py b/tests/test_args.py index 324f5a11..100d1044 100644 --- a/tests/test_args.py +++ b/tests/test_args.py @@ -1,3 +1,4 @@ +import json import os from importlib.metadata import version from pathlib import Path @@ -17,7 +18,7 @@ from archinstall.lib.models.application import ( ) from archinstall.lib.models.authentication import AuthenticationConfiguration, U2FLoginConfiguration, U2FLoginMethod from archinstall.lib.models.bootloader import Bootloader, BootloaderConfiguration -from archinstall.lib.models.device import DiskLayoutConfiguration, DiskLayoutType +from archinstall.lib.models.device import DiskLayoutConfiguration, DiskLayoutType, Size from archinstall.lib.models.locale import LocaleConfiguration from archinstall.lib.models.mirrors import CustomRepository, CustomServer, MirrorConfiguration, MirrorRegion, SignCheck, SignOption from archinstall.lib.models.network import NetworkConfiguration, Nic, NicType @@ -388,3 +389,50 @@ def test_encrypted_creds_with_env_var( groups=[], ), ] + + +def test_example_config_parsing( + monkeypatch: MonkeyPatch, + example_config_fixture: Path, + example_creds_fixture: Path, +) -> None: + monkeypatch.setattr( + 'sys.argv', + [ + 'archinstall', + '--config', + str(example_config_fixture), + '--creds', + str(example_creds_fixture), + ], + ) + + handler = ArchConfigHandler() + arch_config = handler.config + + assert arch_config.disk_config is not None + assert arch_config.profile_config is not None + assert arch_config.auth_config is not None + assert arch_config.auth_config.users + + +def test_example_config_partitions(example_config_fixture: Path) -> None: + # partition entries are only parsed when the configured device is present on + # the machine, which is never the case in CI, so read them here directly + config = json.loads(example_config_fixture.read_text()) + + for device in config['disk_config']['device_modifications']: + previous_end = None + + for partition in device['partitions']: + assert 'dev_path' in partition + + start = Size.parse_args(partition['start']) + end = start + Size.parse_args(partition['size']) + + assert start.is_valid_start() + + if previous_end is not None: + assert start >= previous_end + + previous_end = end