forked from Mirror/pmbootstrap
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?).
151 lines
4.5 KiB
Python
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"
|