commit: 25f666914fd7b7be845d4d1fb9fc276fad566779
Author: David Palao <david.palao <AT> gmail <DOT> com>
AuthorDate: Fri Jun 30 14:05:54 2023 +0000
Commit: Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Mon Oct 30 03:14:22 2023 +0000
URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=25f66691
tests/emerge: Add simple_command parametrized fixture.
Add simple_command parametrized fixture. This is work in progress:
in order to include post-checks to some tests, a different approach
is needed.
Signed-off-by: David Palao <david.palao <AT> gmail.com>
Signed-off-by: Sam James <sam <AT> gentoo.org>
lib/portage/tests/emerge/conftest.py | 395 +++++++++++++++++++++++++++++++-
lib/portage/tests/emerge/test_simple.py | 391 +++----------------------------
2 files changed, 428 insertions(+), 358 deletions(-)
diff --git a/lib/portage/tests/emerge/conftest.py
b/lib/portage/tests/emerge/conftest.py
index 716bb6a85e..6f78f17935 100644
--- a/lib/portage/tests/emerge/conftest.py
+++ b/lib/portage/tests/emerge/conftest.py
@@ -1,12 +1,21 @@
# Copyright 2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
-from portage.const import SUPPORTED_GENTOO_BINPKG_FORMATS
+import argparse
+
+from portage.const import (
+ SUPPORTED_GENTOO_BINPKG_FORMATS,
+ BASH_BINARY,
+ BINREPOS_CONF_FILE,
+)
from portage.tests.resolver.ResolverPlayground import ResolverPlayground
from portage.cache.mappings import Mapping
from portage.tests.util.test_socks5 import AsyncHTTPServer
from portage import os
from portage.util.futures import asyncio
+from portage.tests import cnf_bindir, cnf_sbindir
+from portage.process import find_binary
+import portage
import pytest
@@ -167,6 +176,51 @@ _INSTALLED_EBUILDS = {
}
+_TEST_COMMAND_NAMES = [
+ "emerge_w_parse_intermixed_args",
+ "emerge --root --quickpkg-direct-root",
+ "emerge --quickpkg-direct-root",
+ "env-update",
+ "portageq envvar",
+ "etc-update",
+ "dispatch-conf",
+ "emerge --version",
+ "emerge --info",
+ "emerge --info --verbose",
+ "emerge --list-sets",
+ "emerge --check-news",
+ "rm -rf {cachedir}",
+ "rm -rf {cachedir_pregen}",
+ "emerge --regen",
+ "rm -rf {cachedir} (2)",
+ "FEATURES=metadata-transfer emerge --regen",
+ "rm -rf {cachedir} (3)",
+ "FEATURES=metadata-transfer emerge --regen (2)",
+ "rm -rf {cachedir} (4)",
+ "egencache --update",
+ "FEATURES=metadata-transfer emerge --metadata",
+ "rm -rf {cachedir} (5)",
+ "FEATURES=metadata-transfer emerge --metadata (2)",
+ "emerge --metadata",
+ "rm -rf {cachedir} (6)",
+ "emerge --oneshot virtual/foo",
+]
+
+
+def pytest_generate_tests(metafunc):
+ if "simple_command" in metafunc.fixturenames:
+ metafunc.parametrize("simple_command", _TEST_COMMAND_NAMES,
indirect=True)
+
+
+def _have_python_xml():
+ try:
+ __import__("xml.etree.ElementTree")
+ __import__("xml.parsers.expat").parsers.expat.ExpatError
+ except (AttributeError, ImportError):
+ return False
+ return True
+
+
class BinhostContentMap(Mapping):
def __init__(self, remote_path, local_path):
self._remote_path = remote_path
@@ -223,5 +277,342 @@ def binhost(playground, async_loop):
port=binhost_server.server_port,
path=binhost_remote_path,
)
- yield {"server": binhost_server, "uri": binhost_uri}
+ yield {"server": binhost_server, "uri": binhost_uri, "dir": binhost_dir}
binhost_server.__exit__(None, None, None)
+
+
[email protected]()
+def simple_command(playground, binhost, request):
+ settings = playground.settings
+ eprefix = settings["EPREFIX"]
+ eroot = settings["EROOT"]
+ trees = playground.trees
+ portdb = trees[eroot]["porttree"].dbapi
+ test_repo_location = settings.repositories["test_repo"].location
+ var_cache_edb = os.path.join(eprefix, "var", "cache", "edb")
+ cachedir = os.path.join(var_cache_edb, "dep")
+ cachedir_pregen = os.path.join(test_repo_location, "metadata", "md5-cache")
+
+ portage_python = portage._python_interpreter
+ dispatch_conf_cmd = (
+ portage_python,
+ "-b",
+ "-Wd",
+ os.path.join(cnf_sbindir, "dispatch-conf"),
+ )
+ ebuild_cmd = (portage_python, "-b", "-Wd", os.path.join(cnf_bindir,
"ebuild"))
+ egencache_cmd = (
+ portage_python,
+ "-b",
+ "-Wd",
+ os.path.join(cnf_bindir, "egencache"),
+ "--repo",
+ "test_repo",
+ "--repositories-configuration",
+ settings.repositories.config_string(),
+ )
+ emerge_cmd = (portage_python, "-b", "-Wd", os.path.join(cnf_bindir,
"emerge"))
+ emaint_cmd = (portage_python, "-b", "-Wd", os.path.join(cnf_sbindir,
"emaint"))
+ env_update_cmd = (
+ portage_python,
+ "-b",
+ "-Wd",
+ os.path.join(cnf_sbindir, "env-update"),
+ )
+ etc_update_cmd = (BASH_BINARY, os.path.join(cnf_sbindir, "etc-update"))
+ fixpackages_cmd = (
+ portage_python,
+ "-b",
+ "-Wd",
+ os.path.join(cnf_sbindir, "fixpackages"),
+ )
+ portageq_cmd = (
+ portage_python,
+ "-b",
+ "-Wd",
+ os.path.join(cnf_bindir, "portageq"),
+ )
+ quickpkg_cmd = (
+ portage_python,
+ "-b",
+ "-Wd",
+ os.path.join(cnf_bindir, "quickpkg"),
+ )
+ regenworld_cmd = (
+ portage_python,
+ "-b",
+ "-Wd",
+ os.path.join(cnf_sbindir, "regenworld"),
+ )
+
+ rm_binary = find_binary("rm")
+ assert rm_binary is not None, "rm command not found"
+ rm_cmd = (rm_binary,)
+
+ egencache_extra_args = []
+ if _have_python_xml():
+ egencache_extra_args.append("--update-use-local-desc")
+
+ test_ebuild = portdb.findname("dev-libs/A-1")
+ assert test_ebuild is not None
+
+ cross_prefix = os.path.join(eprefix, "cross_prefix")
+ cross_root = os.path.join(eprefix, "cross_root")
+ cross_eroot = os.path.join(cross_root, eprefix.lstrip(os.sep))
+
+ binpkg_format = settings.get("BINPKG_FORMAT",
SUPPORTED_GENTOO_BINPKG_FORMATS[0])
+ assert binpkg_format in ("xpak", "gpkg")
+ if binpkg_format == "xpak":
+ foo_filename = "foo-0-1.xpak"
+ elif binpkg_format == "gpkg":
+ foo_filename = "foo-0-1.gpkg.tar"
+
+ test_commands = {}
+
+ if hasattr(argparse.ArgumentParser, "parse_intermixed_args"):
+ test_commands["emerge_w_parse_intermixed_args"] = emerge_cmd + (
+ "--oneshot",
+ "dev-libs/A",
+ "-v",
+ "dev-libs/A",
+ )
+
+ test_commands["emerge --root --quickpkg-direct-root"] = emerge_cmd + (
+ "--usepkgonly",
+ "--root",
+ cross_root,
+ "--quickpkg-direct=y",
+ "--quickpkg-direct-root",
+ "/",
+ "dev-libs/A",
+ )
+ test_commands["emerge --quickpkg-direct-root"] = emerge_cmd + (
+ "--usepkgonly",
+ "--quickpkg-direct=y",
+ "--quickpkg-direct-root",
+ cross_root,
+ "dev-libs/A",
+ )
+ test_commands["env-update"] = env_update_cmd
+ test_commands["portageq envvar"] = portageq_cmd + (
+ "envvar",
+ "-v",
+ "CONFIG_PROTECT",
+ "EROOT",
+ "PORTAGE_CONFIGROOT",
+ "PORTAGE_TMPDIR",
+ "USERLAND",
+ )
+ test_commands["etc-update"] = etc_update_cmd
+ test_commands["dispatch-conf"] = dispatch_conf_cmd
+ test_commands["emerge --version"] = emerge_cmd + ("--version",)
+ test_commands["emerge --info"] = emerge_cmd + ("--info",)
+ test_commands["emerge --info --verbose"] = emerge_cmd + ("--info",
"--verbose")
+ test_commands["emerge --list-sets"] = emerge_cmd + ("--list-sets",)
+ test_commands["emerge --check-news"] = emerge_cmd + ("--check-news",)
+ test_commands["rm -rf {cachedir}"] = rm_cmd + ("-rf", cachedir)
+ test_commands["rm -rf {cachedir_pregen}"] = rm_cmd + ("-rf",
cachedir_pregen)
+ test_commands["emerge --regen"] = emerge_cmd + ("--regen",)
+ test_commands["rm -rf {cachedir} (2)"] = rm_cmd + ("-rf", cachedir)
+ test_commands["FEATURES=metadata-transfer emerge --regen"] = (
+ ({"FEATURES": "metadata-transfer"},) + emerge_cmd + ("--regen",)
+ )
+ test_commands["rm -rf {cachedir} (3)"] = rm_cmd + ("-rf", cachedir)
+ test_commands["FEATURES=metadata-transfer emerge --regen (2)"] = (
+ ({"FEATURES": "metadata-transfer"},) + emerge_cmd + ("--regen",)
+ )
+ test_commands["rm -rf {cachedir} (4)"] = rm_cmd + ("-rf", cachedir)
+ test_commands["egencache --update"] = (
+ egencache_cmd + ("--update",) + tuple(egencache_extra_args)
+ )
+ test_commands["FEATURES=metadata-transfer emerge --metadata"] = (
+ ({"FEATURES": "metadata-transfer"},) + emerge_cmd + ("--metadata",)
+ )
+ test_commands["rm -rf {cachedir} (5)"] = rm_cmd + ("-rf", cachedir)
+ test_commands["FEATURES=metadata-transfer emerge --metadata (2)"] = (
+ ({"FEATURES": "metadata-transfer"},) + emerge_cmd + ("--metadata",)
+ )
+ test_commands["emerge --metadata"] = emerge_cmd + ("--metadata",)
+ test_commands["rm -rf {cachedir} (6)"] = rm_cmd + ("-rf", cachedir)
+ test_commands["emerge --oneshot virtual/foo"] = emerge_cmd + (
+ "--oneshot",
+ "virtual/foo",
+ )
+ # test_commands["virtual/foo exists"] = (
+ # lambda: self.assertFalse(
+ # os.path.exists(os.path.join(pkgdir, "virtual", "foo",
foo_filename))
+ # )
+ # )
+ # ({"FEATURES": "unmerge-backup"},) + emerge_cmd + ("--unmerge",
"virtual/foo"),
+ # lambda: self.assertTrue(
+ # os.path.exists(os.path.join(pkgdir, "virtual", "foo",
foo_filename))
+ # ),
+ # emerge_cmd + ("--pretend", "dev-libs/A"),
+ # ebuild_cmd + (test_ebuild, "manifest", "clean", "package", "merge"),
+ # emerge_cmd + ("--pretend", "--tree", "--complete-graph",
"dev-libs/A"),
+ # emerge_cmd + ("-p", "dev-libs/B"),
+ # emerge_cmd + ("-p", "--newrepo", "dev-libs/B"),
+ # emerge_cmd
+ # + (
+ # "-B",
+ # "dev-libs/B",
+ # ),
+ # emerge_cmd
+ # + (
+ # "--oneshot",
+ # "--usepkg",
+ # "dev-libs/B",
+ # ),
+ # # trigger clean prior to pkg_pretend as in bug #390711
+ # ebuild_cmd + (test_ebuild, "unpack"),
+ # emerge_cmd
+ # + (
+ # "--oneshot",
+ # "dev-libs/A",
+ # ),
+ # emerge_cmd
+ # + (
+ # "--noreplace",
+ # "dev-libs/A",
+ # ),
+ # emerge_cmd
+ # + (
+ # "--config",
+ # "dev-libs/A",
+ # ),
+ # emerge_cmd + ("--info", "dev-libs/A", "dev-libs/B"),
+ # emerge_cmd + ("--pretend", "--depclean", "--verbose", "dev-libs/B"),
+ # emerge_cmd
+ # + (
+ # "--pretend",
+ # "--depclean",
+ # ),
+ # emerge_cmd + ("--depclean",),
+ # quickpkg_cmd
+ # + (
+ # "--include-config",
+ # "y",
+ # "dev-libs/A",
+ # ),
+ # # Test bug #523684, where a file renamed or removed by the
+ # # admin forces replacement files to be merged with config
+ # # protection.
+ # lambda: self.assertEqual(
+ # 0,
+ # len(
+ # list(
+ # find_updated_config_files(
+ # eroot, shlex_split(settings["CONFIG_PROTECT"])
+ # )
+ # )
+ # ),
+ # ),
+ # lambda: os.unlink(os.path.join(eprefix, "etc", "A-0")),
+ # emerge_cmd + ("--usepkgonly", "dev-libs/A"),
+ # lambda: self.assertEqual(
+ # 1,
+ # len(
+ # list(
+ # find_updated_config_files(
+ # eroot, shlex_split(settings["CONFIG_PROTECT"])
+ # )
+ # )
+ # ),
+ # ),
+ # emaint_cmd + ("--check", "all"),
+ # emaint_cmd + ("--fix", "all"),
+ # fixpackages_cmd,
+ # regenworld_cmd,
+ # portageq_cmd + ("match", eroot, "dev-libs/A"),
+ # portageq_cmd + ("best_visible", eroot, "dev-libs/A"),
+ # portageq_cmd + ("best_visible", eroot, "binary", "dev-libs/A"),
+ # portageq_cmd + ("contents", eroot, "dev-libs/A-1"),
+ # portageq_cmd
+ # + ("metadata", eroot, "ebuild", "dev-libs/A-1", "EAPI", "IUSE",
"RDEPEND"),
+ # portageq_cmd
+ # + ("metadata", eroot, "binary", "dev-libs/A-1", "EAPI", "USE",
"RDEPEND"),
+ # portageq_cmd
+ # + (
+ # "metadata",
+ # eroot,
+ # "installed",
+ # "dev-libs/A-1",
+ # "EAPI",
+ # "USE",
+ # "RDEPEND",
+ # ),
+ # portageq_cmd + ("owners", eroot, eroot + "usr"),
+ # emerge_cmd + ("-p", eroot + "usr"),
+ # emerge_cmd + ("-p", "--unmerge", "-q", eroot + "usr"),
+ # emerge_cmd + ("--unmerge", "--quiet", "dev-libs/A"),
+ # emerge_cmd + ("-C", "--quiet", "dev-libs/B"),
+ # # If EMERGE_DEFAULT_OPTS contains --autounmask=n, then --autounmask
+ # # must be specified with --autounmask-continue.
+ # ({"EMERGE_DEFAULT_OPTS": "--autounmask=n"},)
+ # + emerge_cmd
+ # + (
+ # "--autounmask",
+ # "--autounmask-continue",
+ # "dev-libs/C",
+ # ),
+ # # Verify that the above --autounmask-continue command caused
+ # # USE=flag to be applied correctly to dev-libs/D.
+ # portageq_cmd + ("match", eroot, "dev-libs/D[flag]"),
+ # # Test cross-prefix usage, including chpathtool for binpkgs.
+ # # EAPI 7
+ # ({"EPREFIX": cross_prefix},) + emerge_cmd + ("dev-libs/C",),
+ # ({"EPREFIX": cross_prefix},)
+ # + portageq_cmd
+ # + ("has_version", cross_prefix, "dev-libs/C"),
+ # ({"EPREFIX": cross_prefix},)
+ # + portageq_cmd
+ # + ("has_version", cross_prefix, "dev-libs/D"),
+ # ({"ROOT": cross_root},) + emerge_cmd + ("dev-libs/D",),
+ # portageq_cmd + ("has_version", cross_eroot, "dev-libs/D"),
+ # # EAPI 5
+ # ({"EPREFIX": cross_prefix},) + emerge_cmd + ("--usepkgonly",
"dev-libs/A"),
+ # ({"EPREFIX": cross_prefix},)
+ # + portageq_cmd
+ # + ("has_version", cross_prefix, "dev-libs/A"),
+ # ({"EPREFIX": cross_prefix},)
+ # + portageq_cmd
+ # + ("has_version", cross_prefix, "dev-libs/B"),
+ # ({"EPREFIX": cross_prefix},) + emerge_cmd + ("-C", "--quiet",
"dev-libs/B"),
+ # ({"EPREFIX": cross_prefix},) + emerge_cmd + ("-C", "--quiet",
"dev-libs/A"),
+ # ({"EPREFIX": cross_prefix},) + emerge_cmd + ("dev-libs/A",),
+ # ({"EPREFIX": cross_prefix},)
+ # + portageq_cmd
+ # + ("has_version", cross_prefix, "dev-libs/A"),
+ # ({"EPREFIX": cross_prefix},)
+ # + portageq_cmd
+ # + ("has_version", cross_prefix, "dev-libs/B"),
+ # # Test ROOT support
+ # ({"ROOT": cross_root},) + emerge_cmd + ("dev-libs/B",),
+ # portageq_cmd + ("has_version", cross_eroot, "dev-libs/B"),
+ # )
+
+ # # Test binhost support if FETCHCOMMAND is available.
+ # binrepos_conf_file = os.path.join(os.sep, eprefix, BINREPOS_CONF_FILE)
+ # binhost_uri = binhost["uri"]
+ # binhost_dir = binhost["dir"]
+ # with open(binrepos_conf_file, "w") as f:
+ # f.write("[test-binhost]\n")
+ # f.write(f"sync-uri = {binhost_uri}\n")
+ # fetchcommand = portage.util.shlex_split(settings["FETCHCOMMAND"])
+ # fetch_bin = portage.process.find_binary(fetchcommand[0])
+ # if fetch_bin is not None:
+ # test_commands = test_commands + (
+ # lambda: os.rename(pkgdir, binhost_dir),
+ # emerge_cmd + ("-e", "--getbinpkgonly", "dev-libs/A"),
+ # lambda: shutil.rmtree(pkgdir),
+ # lambda: os.rename(binhost_dir, pkgdir),
+ # # Remove binrepos.conf and test PORTAGE_BINHOST.
+ # lambda: os.unlink(binrepos_conf_file),
+ # lambda: os.rename(pkgdir, binhost_dir),
+ # ({"PORTAGE_BINHOST": binhost_uri},)
+ # + emerge_cmd
+ # + ("-fe", "--getbinpkgonly", "dev-libs/A"),
+ # lambda: shutil.rmtree(pkgdir),
+ # lambda: os.rename(binhost_dir, pkgdir),
+ # )
+ return test_commands[request.param]
diff --git a/lib/portage/tests/emerge/test_simple.py
b/lib/portage/tests/emerge/test_simple.py
index 0389961740..6e417f8de3 100644
--- a/lib/portage/tests/emerge/test_simple.py
+++ b/lib/portage/tests/emerge/test_simple.py
@@ -1,22 +1,17 @@
# Copyright 2011-2021, 2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
-import argparse
import subprocess
-import pytest
-
import portage
from portage import shutil, os
from portage.const import (
- BASH_BINARY,
- BINREPOS_CONF_FILE,
PORTAGE_PYM_PATH,
USER_CONFIG_PATH,
SUPPORTED_GENTOO_BINPKG_FORMATS,
)
from portage.process import find_binary
-from portage.tests import cnf_bindir, cnf_sbindir, cnf_etc_path
+from portage.tests import cnf_etc_path
from portage.util import ensure_dirs, find_updated_config_files, shlex_split
from portage.util.futures import asyncio
@@ -37,349 +32,32 @@ _METADATA_XML_FILES = (
)
-def _have_python_xml():
- try:
- __import__("xml.etree.ElementTree")
- __import__("xml.parsers.expat").parsers.expat.ExpatError
- except (AttributeError, ImportError):
- return False
- return True
-
-
-def make_test_commands(settings, trees, binhost_uri):
- eprefix = settings["EPREFIX"]
- eroot = settings["EROOT"]
- portdb = trees[eroot]["porttree"].dbapi
- test_repo_location = settings.repositories["test_repo"].location
- var_cache_edb = os.path.join(eprefix, "var", "cache", "edb")
- cachedir = os.path.join(var_cache_edb, "dep")
- cachedir_pregen = os.path.join(test_repo_location, "metadata", "md5-cache")
-
- portage_python = portage._python_interpreter
- dispatch_conf_cmd = (
- portage_python,
- "-b",
- "-Wd",
- os.path.join(cnf_sbindir, "dispatch-conf"),
- )
- ebuild_cmd = (portage_python, "-b", "-Wd", os.path.join(cnf_bindir,
"ebuild"))
- egencache_cmd = (
- portage_python,
- "-b",
- "-Wd",
- os.path.join(cnf_bindir, "egencache"),
- "--repo",
- "test_repo",
- "--repositories-configuration",
- settings.repositories.config_string(),
- )
- emerge_cmd = (portage_python, "-b", "-Wd", os.path.join(cnf_bindir,
"emerge"))
- emaint_cmd = (portage_python, "-b", "-Wd", os.path.join(cnf_sbindir,
"emaint"))
- env_update_cmd = (
- portage_python,
- "-b",
- "-Wd",
- os.path.join(cnf_sbindir, "env-update"),
- )
- etc_update_cmd = (BASH_BINARY, os.path.join(cnf_sbindir, "etc-update"))
- fixpackages_cmd = (
- portage_python,
- "-b",
- "-Wd",
- os.path.join(cnf_sbindir, "fixpackages"),
- )
- portageq_cmd = (
- portage_python,
- "-b",
- "-Wd",
- os.path.join(cnf_bindir, "portageq"),
- )
- quickpkg_cmd = (
- portage_python,
- "-b",
- "-Wd",
- os.path.join(cnf_bindir, "quickpkg"),
- )
- regenworld_cmd = (
- portage_python,
- "-b",
- "-Wd",
- os.path.join(cnf_sbindir, "regenworld"),
- )
-
- rm_binary = find_binary("rm")
- assert rm_binary is not None, "rm command not found"
- rm_cmd = (rm_binary,)
-
- egencache_extra_args = []
- if _have_python_xml():
- egencache_extra_args.append("--update-use-local-desc")
-
- test_ebuild = portdb.findname("dev-libs/A-1")
- assert test_ebuild is not None
-
- cross_prefix = os.path.join(eprefix, "cross_prefix")
- cross_root = os.path.join(eprefix, "cross_root")
- cross_eroot = os.path.join(cross_root, eprefix.lstrip(os.sep))
-
- binpkg_format = settings.get("BINPKG_FORMAT",
SUPPORTED_GENTOO_BINPKG_FORMATS[0])
- assert binpkg_format in ("xpak", "gpkg")
- if binpkg_format == "xpak":
- foo_filename = "foo-0-1.xpak"
- elif binpkg_format == "gpkg":
- foo_filename = "foo-0-1.gpkg.tar"
-
- test_commands = ()
-
- if hasattr(argparse.ArgumentParser, "parse_intermixed_args"):
- test_commands += (emerge_cmd + ("--oneshot", "dev-libs/A", "-v",
"dev-libs/A"),)
-
- test_commands += (
- emerge_cmd
- + (
- "--usepkgonly",
- "--root",
- cross_root,
- "--quickpkg-direct=y",
- "--quickpkg-direct-root",
- "/",
- "dev-libs/A",
- ),
- emerge_cmd
- + (
- "--usepkgonly",
- "--quickpkg-direct=y",
- "--quickpkg-direct-root",
- cross_root,
- "dev-libs/A",
- ),
- env_update_cmd,
- portageq_cmd
- + (
- "envvar",
- "-v",
- "CONFIG_PROTECT",
- "EROOT",
- "PORTAGE_CONFIGROOT",
- "PORTAGE_TMPDIR",
- "USERLAND",
- ),
- etc_update_cmd,
- dispatch_conf_cmd,
- emerge_cmd + ("--version",),
- emerge_cmd + ("--info",),
- emerge_cmd + ("--info", "--verbose"),
- emerge_cmd + ("--list-sets",),
- emerge_cmd + ("--check-news",),
- rm_cmd + ("-rf", cachedir),
- rm_cmd + ("-rf", cachedir_pregen),
- emerge_cmd + ("--regen",),
- rm_cmd + ("-rf", cachedir),
- ({"FEATURES": "metadata-transfer"},) + emerge_cmd + ("--regen",),
- rm_cmd + ("-rf", cachedir),
- ({"FEATURES": "metadata-transfer"},) + emerge_cmd + ("--regen",),
- rm_cmd + ("-rf", cachedir),
- egencache_cmd + ("--update",) + tuple(egencache_extra_args),
- ({"FEATURES": "metadata-transfer"},) + emerge_cmd + ("--metadata",),
- rm_cmd + ("-rf", cachedir),
- ({"FEATURES": "metadata-transfer"},) + emerge_cmd + ("--metadata",),
- emerge_cmd + ("--metadata",),
- rm_cmd + ("-rf", cachedir),
- emerge_cmd + ("--oneshot", "virtual/foo"),
- lambda: self.assertFalse(
- os.path.exists(os.path.join(pkgdir, "virtual", "foo",
foo_filename))
- ),
- ({"FEATURES": "unmerge-backup"},) + emerge_cmd + ("--unmerge",
"virtual/foo"),
- lambda: self.assertTrue(
- os.path.exists(os.path.join(pkgdir, "virtual", "foo",
foo_filename))
- ),
- emerge_cmd + ("--pretend", "dev-libs/A"),
- ebuild_cmd + (test_ebuild, "manifest", "clean", "package", "merge"),
- emerge_cmd + ("--pretend", "--tree", "--complete-graph", "dev-libs/A"),
- emerge_cmd + ("-p", "dev-libs/B"),
- emerge_cmd + ("-p", "--newrepo", "dev-libs/B"),
- emerge_cmd
- + (
- "-B",
- "dev-libs/B",
- ),
- emerge_cmd
- + (
- "--oneshot",
- "--usepkg",
- "dev-libs/B",
- ),
- # trigger clean prior to pkg_pretend as in bug #390711
- ebuild_cmd + (test_ebuild, "unpack"),
- emerge_cmd
- + (
- "--oneshot",
- "dev-libs/A",
- ),
- emerge_cmd
- + (
- "--noreplace",
- "dev-libs/A",
- ),
- emerge_cmd
- + (
- "--config",
- "dev-libs/A",
- ),
- emerge_cmd + ("--info", "dev-libs/A", "dev-libs/B"),
- emerge_cmd + ("--pretend", "--depclean", "--verbose", "dev-libs/B"),
- emerge_cmd
- + (
- "--pretend",
- "--depclean",
- ),
- emerge_cmd + ("--depclean",),
- quickpkg_cmd
- + (
- "--include-config",
- "y",
- "dev-libs/A",
- ),
- # Test bug #523684, where a file renamed or removed by the
- # admin forces replacement files to be merged with config
- # protection.
- lambda: self.assertEqual(
- 0,
- len(
- list(
- find_updated_config_files(
- eroot, shlex_split(settings["CONFIG_PROTECT"])
- )
- )
- ),
- ),
- lambda: os.unlink(os.path.join(eprefix, "etc", "A-0")),
- emerge_cmd + ("--usepkgonly", "dev-libs/A"),
- lambda: self.assertEqual(
- 1,
- len(
- list(
- find_updated_config_files(
- eroot, shlex_split(settings["CONFIG_PROTECT"])
- )
- )
- ),
- ),
- emaint_cmd + ("--check", "all"),
- emaint_cmd + ("--fix", "all"),
- fixpackages_cmd,
- regenworld_cmd,
- portageq_cmd + ("match", eroot, "dev-libs/A"),
- portageq_cmd + ("best_visible", eroot, "dev-libs/A"),
- portageq_cmd + ("best_visible", eroot, "binary", "dev-libs/A"),
- portageq_cmd + ("contents", eroot, "dev-libs/A-1"),
- portageq_cmd
- + ("metadata", eroot, "ebuild", "dev-libs/A-1", "EAPI", "IUSE",
"RDEPEND"),
- portageq_cmd
- + ("metadata", eroot, "binary", "dev-libs/A-1", "EAPI", "USE",
"RDEPEND"),
- portageq_cmd
- + (
- "metadata",
- eroot,
- "installed",
- "dev-libs/A-1",
- "EAPI",
- "USE",
- "RDEPEND",
- ),
- portageq_cmd + ("owners", eroot, eroot + "usr"),
- emerge_cmd + ("-p", eroot + "usr"),
- emerge_cmd + ("-p", "--unmerge", "-q", eroot + "usr"),
- emerge_cmd + ("--unmerge", "--quiet", "dev-libs/A"),
- emerge_cmd + ("-C", "--quiet", "dev-libs/B"),
- # If EMERGE_DEFAULT_OPTS contains --autounmask=n, then --autounmask
- # must be specified with --autounmask-continue.
- ({"EMERGE_DEFAULT_OPTS": "--autounmask=n"},)
- + emerge_cmd
- + (
- "--autounmask",
- "--autounmask-continue",
- "dev-libs/C",
- ),
- # Verify that the above --autounmask-continue command caused
- # USE=flag to be applied correctly to dev-libs/D.
- portageq_cmd + ("match", eroot, "dev-libs/D[flag]"),
- # Test cross-prefix usage, including chpathtool for binpkgs.
- # EAPI 7
- ({"EPREFIX": cross_prefix},) + emerge_cmd + ("dev-libs/C",),
- ({"EPREFIX": cross_prefix},)
- + portageq_cmd
- + ("has_version", cross_prefix, "dev-libs/C"),
- ({"EPREFIX": cross_prefix},)
- + portageq_cmd
- + ("has_version", cross_prefix, "dev-libs/D"),
- ({"ROOT": cross_root},) + emerge_cmd + ("dev-libs/D",),
- portageq_cmd + ("has_version", cross_eroot, "dev-libs/D"),
- # EAPI 5
- ({"EPREFIX": cross_prefix},) + emerge_cmd + ("--usepkgonly",
"dev-libs/A"),
- ({"EPREFIX": cross_prefix},)
- + portageq_cmd
- + ("has_version", cross_prefix, "dev-libs/A"),
- ({"EPREFIX": cross_prefix},)
- + portageq_cmd
- + ("has_version", cross_prefix, "dev-libs/B"),
- ({"EPREFIX": cross_prefix},) + emerge_cmd + ("-C", "--quiet",
"dev-libs/B"),
- ({"EPREFIX": cross_prefix},) + emerge_cmd + ("-C", "--quiet",
"dev-libs/A"),
- ({"EPREFIX": cross_prefix},) + emerge_cmd + ("dev-libs/A",),
- ({"EPREFIX": cross_prefix},)
- + portageq_cmd
- + ("has_version", cross_prefix, "dev-libs/A"),
- ({"EPREFIX": cross_prefix},)
- + portageq_cmd
- + ("has_version", cross_prefix, "dev-libs/B"),
- # Test ROOT support
- ({"ROOT": cross_root},) + emerge_cmd + ("dev-libs/B",),
- portageq_cmd + ("has_version", cross_eroot, "dev-libs/B"),
- )
-
- # Test binhost support if FETCHCOMMAND is available.
- binrepos_conf_file = os.path.join(os.sep, eprefix, BINREPOS_CONF_FILE)
- with open(binrepos_conf_file, "w") as f:
- f.write("[test-binhost]\n")
- f.write(f"sync-uri = {binhost_uri}\n")
- fetchcommand = portage.util.shlex_split(settings["FETCHCOMMAND"])
- fetch_bin = portage.process.find_binary(fetchcommand[0])
- if fetch_bin is not None:
- test_commands = test_commands + (
- lambda: os.rename(pkgdir, binhost_dir),
- emerge_cmd + ("-e", "--getbinpkgonly", "dev-libs/A"),
- lambda: shutil.rmtree(pkgdir),
- lambda: os.rename(binhost_dir, pkgdir),
- # Remove binrepos.conf and test PORTAGE_BINHOST.
- lambda: os.unlink(binrepos_conf_file),
- lambda: os.rename(pkgdir, binhost_dir),
- ({"PORTAGE_BINHOST": binhost_uri},)
- + emerge_cmd
- + ("-fe", "--getbinpkgonly", "dev-libs/A"),
- lambda: shutil.rmtree(pkgdir),
- lambda: os.rename(binhost_dir, pkgdir),
- )
- return test_commands
+class SimpleTestCommand:
+ ...
-def test_simple_emerge(async_loop, playground, binhost):
+def test_simple_emerge(async_loop, playground, binhost, simple_command):
async_loop.run_until_complete(
asyncio.ensure_future(
_async_test_simple(
- playground, binhost, _METADATA_XML_FILES, loop=async_loop
+ playground,
+ binhost,
+ simple_command,
+ _METADATA_XML_FILES,
+ loop=async_loop,
),
loop=async_loop,
)
)
-async def _async_test_simple(playground, binhost, metadata_xml_files, loop):
+async def _async_test_simple(playground, binhost, command, metadata_xml_files,
loop):
debug = playground.debug
settings = playground.settings
trees = playground.trees
eprefix = settings["EPREFIX"]
- test_commands = make_test_commands(settings, trees, binhost["uri"])
+ # test_commands = make_test_commands(settings, trees, binhost["uri"])
test_repo_location = settings.repositories["test_repo"].location
var_cache_edb = os.path.join(eprefix, "var", "cache", "edb")
@@ -494,29 +172,30 @@ move dev-util/git dev-vcs/git
# triggered by python -Wd will be visible.
stdout = subprocess.PIPE
- for idx, args in enumerate(test_commands):
- if hasattr(args, "__call__"):
- args()
- continue
+ if hasattr(command, "__call__"):
+ command()
+ return
- if isinstance(args[0], dict):
- local_env = env.copy()
- local_env.update(args[0])
- args = args[1:]
- else:
- local_env = env
-
- # with self.subTest(cmd=args, i=idx):
- proc = await asyncio.create_subprocess_exec(
- *args, env=local_env, stderr=None, stdout=stdout
- )
+ if isinstance(command[0], dict):
+ local_env = env.copy()
+ local_env.update(command[0])
+ command = command[1:]
+ else:
+ local_env = env
- if debug:
- await proc.wait()
- else:
- output, _err = await proc.communicate()
- await proc.wait()
- if proc.returncode != os.EX_OK:
- portage.writemsg(output)
+ # with self.subTest(cmd=command, i=idx):
+ proc = await asyncio.create_subprocess_exec(
+ *command, env=local_env, stderr=None, stdout=stdout
+ )
- assert os.EX_OK == proc.returncode, f"emerge failed with args {args}"
+ if debug:
+ await proc.wait()
+ else:
+ output, _err = await proc.communicate()
+ await proc.wait()
+ if proc.returncode != os.EX_OK:
+ portage.writemsg(output)
+
+ real_command = command[0]
+ args = command[1:]
+ assert os.EX_OK == proc.returncode, f"'{real_command}' failed with args
'{args}'"