pmbootstrap-meow/test/test_helpers_status.py
BO41 944f539dd6
args.logfd: remove (MR 2114)
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.
2021-10-10 16:59:17 +02:00

92 lines
2.8 KiB
Python

# Copyright 2021 Oliver Smith
# SPDX-License-Identifier: GPL-3.0-or-later
""" Test pmb/helpers/status.py """
import os
import pytest
import shutil
import sys
import pmb_test
import pmb_test.git
import pmb.config
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_pmbootstrap_status(args, tmpdir):
""" High level testing of 'pmbootstrap status': run it twice, once with
a fine workdir, and once where one check is failing. """
# Prepare empty workdir
work = str(tmpdir)
with open(work + "/version", "w") as handle:
handle.write(str(pmb.config.work_version))
# "pmbootstrap status" succeeds (pmb.helpers.run.user verifies exit 0)
pmbootstrap = pmb.config.pmb_src + "/pmbootstrap.py"
pmb.helpers.run.user(args, [pmbootstrap, "-w", work, "status",
"--details"])
# Mark chroot_native as outdated
with open(work + "/workdir.cfg", "w") as handle:
handle.write("[chroot-init-dates]\nnative = 1234\n")
# "pmbootstrap status" fails
ret = pmb.helpers.run.user(args, [pmbootstrap, "-w", work, "status"],
check=False)
assert ret == 1
def test_print_checks_git_repo(args, monkeypatch, tmpdir):
""" Test pmb.helpers.status.print_checks_git_repo """
path, run_git = pmb_test.git.prepare_tmpdir(args, monkeypatch, tmpdir)
# Not on official branch
func = pmb.helpers.status.print_checks_git_repo
name_repo = "test"
run_git(["checkout", "-b", "inofficial-branch"])
status, _ = func(args, name_repo)
assert status == -1
# Workdir is not clean
run_git(["checkout", "master"])
shutil.copy(__file__, path + "/test.py")
status, _ = func(args, name_repo)
assert status == -2
os.unlink(path + "/test.py")
# Tracking different remote
status, _ = func(args, name_repo)
assert status == -3
# Let master track origin/master
run_git(["checkout", "-b", "temp"])
run_git(["branch", "-D", "master"])
run_git(["checkout", "-b", "master", "--track", "origin/master"])
# Not up to date
run_git(["commit", "--allow-empty", "-m", "new"], "remote")
run_git(["fetch"])
status, _ = func(args, name_repo)
assert status == -4
# Up to date
run_git(["pull"])
status, _ = func(args, name_repo)
assert status == 0
# Outdated remote information
def is_outdated(args, path):
return True
monkeypatch.setattr(pmb.helpers.git, "is_outdated", is_outdated)
status, _ = func(args, name_repo)
assert status == -5