pmbootstrap-meow/test/test_config_workdir.py
Oliver Smith 278dfced61
Replace pmaports channels stable, stable-next (MR 2032)
Translate the pmaports channels "stable" to "v20.05" and "stable-next"
to "v21.03", so these have the same channel name as the pmaports.git
branch name.

The original plan was to switch the "stable" channel from the "v20.05"
branch to the "v21.03" branch when the release is done. However, now
that we are close to that, I'm realizing that this would not be useful.
It would lead to conflicts in the dir with locally built packages
(default: ~/.local/var/pmbootstrap/packages/$CHANNEL). And it would make
it awkward to go back to a previous branch (we may name it old-stable
for the time being, but what after that, old-old-stable?).
2021-03-18 18:58:13 +01:00

151 lines
4.5 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(args.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"