From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id 4735615814C for ; Mon, 30 Oct 2023 03:14:33 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 78E162BC02E; Mon, 30 Oct 2023 03:14:32 +0000 (UTC) Received: from smtp.gentoo.org (mail.gentoo.org [IPv6:2001:470:ea4a:1:5054:ff:fec7:86e4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 4BEA52BC02E for ; Mon, 30 Oct 2023 03:14:32 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 697C2335C2E for ; Mon, 30 Oct 2023 03:14:31 +0000 (UTC) Received: from localhost.localdomain (localhost [IPv6:::1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id 88E4612F6 for ; Mon, 30 Oct 2023 03:14:28 +0000 (UTC) From: "Sam James" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Sam James" Message-ID: <1698635662.25f666914fd7b7be845d4d1fb9fc276fad566779.sam@gentoo> Subject: [gentoo-commits] proj/portage:master commit in: lib/portage/tests/emerge/ X-VCS-Repository: proj/portage X-VCS-Files: lib/portage/tests/emerge/conftest.py lib/portage/tests/emerge/test_simple.py X-VCS-Directories: lib/portage/tests/emerge/ X-VCS-Committer: sam X-VCS-Committer-Name: Sam James X-VCS-Revision: 25f666914fd7b7be845d4d1fb9fc276fad566779 X-VCS-Branch: master Date: Mon, 30 Oct 2023 03:14:28 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-Archives-Salt: 5c176283-8935-4194-a179-e1016fa582ea X-Archives-Hash: 9b3d8a6644d48243d0d5c6caef613677 commit: 25f666914fd7b7be845d4d1fb9fc276fad566779 Author: David Palao gmail com> AuthorDate: Fri Jun 30 14:05:54 2023 +0000 Commit: Sam James gentoo 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 gmail.com> Signed-off-by: Sam James 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) + + +@pytest.fixture() +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}'"