archinstall/tests/test_args.py

176 lines
4.1 KiB
Python

from pathlib import Path
from pytest import MonkeyPatch
import archinstall
from archinstall.default_profiles.profile import GreeterType
from archinstall.lib.args import ArchConfig, ArchConfigHandler, Arguments
from archinstall.lib.disk import DiskLayoutConfiguration, DiskLayoutType
from archinstall.lib.hardware import GfxDriver
from archinstall.lib.locale import LocaleConfiguration
from archinstall.lib.mirrors import MirrorConfiguration
from archinstall.lib.models import Audio, AudioConfiguration, Bootloader, NetworkConfiguration, User
from archinstall.lib.models.network_configuration import Nic, NicType
from archinstall.lib.profile.profile_model import ProfileConfiguration
from archinstall.lib.profile.profiles_handler import profile_handler
from archinstall.lib.translationhandler import translation_handler
def test_default_args(monkeypatch: MonkeyPatch) -> None:
monkeypatch.setattr('sys.argv', ['archinstall'])
handler = ArchConfigHandler()
args = handler.args
assert args == Arguments(
config=None,
config_url=None,
creds=None,
silent=False,
dry_run=False,
script='guided',
mount_point=Path('/mnt'),
skip_ntp=False,
debug=False,
offline=False,
no_pkg_lookups=False,
plugin=None,
skip_version_check=False,
advanced=False
)
def test_correct_parsing_args(
monkeypatch: MonkeyPatch,
config_fixture: Path,
creds_fixture: Path
) -> None:
monkeypatch.setattr('sys.argv', [
'archinstall',
'--config',
str(config_fixture),
'--config-url',
'https://example.com',
'--creds',
str(creds_fixture),
'--script',
'execution_script',
'--mount-point',
'/tmp',
'--skip-ntp',
'--debug',
'--offline',
'--no-pkg-lookups',
'--plugin',
'pytest_plugin.py',
'--skip-version-check',
'--advanced',
'--dry-run',
'--silent'
])
handler = ArchConfigHandler()
args = handler.args
assert args == Arguments(
config=config_fixture,
config_url='https://example.com',
creds=creds_fixture,
silent=True,
dry_run=True,
script='execution_script',
mount_point=Path('/tmp'),
skip_ntp=True,
debug=True,
offline=True,
no_pkg_lookups=True,
plugin='pytest_plugin.py',
skip_version_check=True,
advanced=True
)
def test_config_file_parsing(
monkeypatch: MonkeyPatch,
config_fixture: Path,
creds_fixture: Path
) -> None:
monkeypatch.setattr('sys.argv', [
'archinstall',
'--config',
str(config_fixture),
'--creds',
str(creds_fixture),
])
handler = ArchConfigHandler()
arch_config = handler.arch_config
# TODO: Use the real values from the test fixture instead of clearing out the entries
arch_config.disk_config.device_modifications = [] # type: ignore[union-attr]
assert arch_config == ArchConfig(
version=archinstall.__version__,
locale_config=LocaleConfiguration(
kb_layout='us',
sys_lang='en_US',
sys_enc='UTF-8'
),
archinstall_language=translation_handler.get_language_by_abbr('en'),
disk_config=DiskLayoutConfiguration(
config_type=DiskLayoutType.Default,
device_modifications=[],
lvm_config=None,
mountpoint=None
),
profile_config=ProfileConfiguration(
profile=profile_handler.parse_profile_config({
"custom_settings": {
"Hyprland": {
"seat_access": "polkit"
},
"Sway": {
"seat_access": "seatd"
}
},
"details": [
"Sway",
"Hyprland"
],
"main": "Desktop"
}),
gfx_driver=GfxDriver.AllOpenSource,
greeter=GreeterType.Lightdm
),
mirror_config=MirrorConfiguration(
mirror_regions={},
custom_mirrors=[]
),
network_config=NetworkConfiguration(
type=NicType.MANUAL,
nics=[
Nic(
iface='eno1',
ip='192.168.1.15/24',
dhcp=True,
gateway='192.168.1.1',
dns=[
'192.168.1.1',
'9.9.9.9'
]
)
]
),
bootloader=Bootloader.Systemd,
uki=False,
audio_config=AudioConfiguration(Audio.Pipewire),
hostname='archy',
kernels=['linux-zen'],
ntp=True,
packages=["firefox"],
parallel_downloads=66,
swap=False,
timezone='UTC',
additional_repositories=["testing"],
_users=[User(username='user_name', password='user_pwd', sudo=True)],
_disk_encryption=None
)