mirror of
https://gitlab.postmarketos.org/postmarketOS/pmbootstrap.git
synced 2025-07-13 19:39:51 +03:00
Replace "args.logfd" with "pmb.helpers.logging.logfd" in order to avoid passing "args" to all functions that only use it to write to logfd. This is the first step to get rid of this args-passed-to-all-functions pattern in pmbootstrap.
151 lines
4.6 KiB
Python
151 lines
4.6 KiB
Python
# Copyright 2021 Oliver Smith
|
|
# SPDX-License-Identifier: GPL-3.0-or-later
|
|
""" Test pmb/config/workdir.py """
|
|
import os
|
|
import pytest
|
|
import sys
|
|
import time
|
|
|
|
import pmb_test # noqa
|
|
import pmb.config
|
|
import pmb.config.pmaports
|
|
import pmb.config.workdir
|
|
|
|
|
|
@pytest.fixture
|
|
def args(request):
|
|
import pmb.parse
|
|
sys.argv = ["pmbootstrap", "init"]
|
|
args = pmb.parse.arguments()
|
|
args.log = args.work + "/log_testsuite.txt"
|
|
pmb.helpers.logging.init(args)
|
|
request.addfinalizer(pmb.helpers.logging.logfd.close)
|
|
return args
|
|
|
|
|
|
def test_chroot_save_init(args, tmpdir, monkeypatch):
|
|
# Override time.time()
|
|
def fake_time():
|
|
return 1234567890.1234
|
|
monkeypatch.setattr(time, "time", fake_time)
|
|
|
|
# Pretend channel=v20.05 in pmaports.cfg
|
|
def read_config(args):
|
|
return {"channel": "v20.05"}
|
|
monkeypatch.setattr(pmb.config.pmaports, "read_config", read_config)
|
|
|
|
args.work = str(tmpdir)
|
|
func = pmb.config.workdir.chroot_save_init
|
|
func(args, "native")
|
|
|
|
expected = ("[chroot-init-dates]\n"
|
|
"native = 1234567890\n\n"
|
|
"[chroot-channels]\n"
|
|
"native = v20.05\n\n")
|
|
with open(args.work + "/workdir.cfg", "r") as handle:
|
|
assert handle.read() == expected
|
|
|
|
# Write again (different code path)
|
|
func(args, "buildroot_armhf")
|
|
expected = ("[chroot-init-dates]\n"
|
|
"native = 1234567890\n"
|
|
"buildroot_armhf = 1234567890\n\n"
|
|
"[chroot-channels]\n"
|
|
"native = v20.05\n"
|
|
"buildroot_armhf = v20.05\n\n")
|
|
with open(args.work + "/workdir.cfg", "r") as handle:
|
|
assert handle.read() == expected
|
|
|
|
|
|
def test_chroots_outdated(args, tmpdir, monkeypatch):
|
|
args.work = str(tmpdir)
|
|
|
|
# Override time.time(): now is "100"
|
|
def fake_time():
|
|
return 100.0
|
|
monkeypatch.setattr(time, "time", fake_time)
|
|
|
|
# workdir.cfg does not exist
|
|
func = pmb.config.workdir.chroots_outdated
|
|
assert func(args) is False
|
|
|
|
# workdir.cfg is empty file
|
|
with open(args.work + "/workdir.cfg", "w") as handle:
|
|
handle.write("")
|
|
assert func(args) is False
|
|
|
|
# Write fake workdir.cfg: native was created at "90"
|
|
with open(args.work + "/workdir.cfg", "w") as handle:
|
|
handle.write("[chroot-init-dates]\nnative = 90\n\n")
|
|
|
|
# Outdated (date_outdated: 90)
|
|
monkeypatch.setattr(pmb.config, "chroot_outdated", 10)
|
|
assert func(args) is True
|
|
|
|
# Not outdated (date_outdated: 89)
|
|
monkeypatch.setattr(pmb.config, "chroot_outdated", 11)
|
|
assert func(args) is False
|
|
|
|
|
|
def test_chroot_check_channel(args, tmpdir, monkeypatch):
|
|
func = pmb.config.workdir.chroot_check_channel
|
|
args.work = str(tmpdir)
|
|
channel = "edge"
|
|
|
|
# Pretend to have a certain channel in pmaports.cfg
|
|
def read_config(args):
|
|
return {"channel": channel}
|
|
monkeypatch.setattr(pmb.config.pmaports, "read_config", read_config)
|
|
|
|
# workdir.cfg does not exist
|
|
with pytest.raises(RuntimeError) as e:
|
|
func(args, "native")
|
|
assert "Could not figure out on which release channel" in str(e.value)
|
|
|
|
# Write workdir.cfg
|
|
with open(f"{args.work}/workdir.cfg", "w") as handle:
|
|
handle.write("[chroot-channels]\nnative = v20.05\n\n")
|
|
|
|
# workdir.cfg: no entry for buildroot_armhf chroot
|
|
with pytest.raises(RuntimeError) as e:
|
|
func(args, "buildroot_armhf")
|
|
assert "Could not figure out on which release channel" in str(e.value)
|
|
|
|
# Chroot was created for wrong channel
|
|
with pytest.raises(RuntimeError) as e:
|
|
func(args, "native")
|
|
exp = "created for the 'v20.05' channel, but you are on the 'edge'"
|
|
assert exp in str(e.value)
|
|
|
|
# Check runs through without raising an exception
|
|
channel = "v20.05"
|
|
func(args, "native")
|
|
|
|
|
|
def test_clean(args, tmpdir):
|
|
args.work = str(tmpdir)
|
|
|
|
# 0. workdir.cfg does not exist
|
|
func = pmb.config.workdir.clean
|
|
assert func(args) is None
|
|
|
|
# Write fake workdir.cfg
|
|
cfg_fake = "[chroot-init-dates]\nnative = 1337\n\n"
|
|
with open(args.work + "/workdir.cfg", "w") as handle:
|
|
handle.write(cfg_fake)
|
|
|
|
# 1. chroot_native dir exists
|
|
os.makedirs(args.work + "/chroot_native")
|
|
assert func(args) is False
|
|
|
|
# workdir.cfg: unchanged
|
|
with open(args.work + "/workdir.cfg", "r") as handle:
|
|
assert handle.read() == cfg_fake
|
|
|
|
# 2. chroot_native dir does not exist
|
|
os.rmdir(args.work + "/chroot_native")
|
|
assert func(args) is True
|
|
|
|
# workdir.cfg: "native" entry removed
|
|
with open(args.work + "/workdir.cfg", "r") as handle:
|
|
assert handle.read() == "[chroot-init-dates]\n\n"
|