feature: Add -x|--explicit option to 'spack test run' (#32910)

This commit is contained in:
Tamara Dahlgren 2022-10-25 12:32:55 -07:00 committed by GitHub
parent 9d5151ba25
commit 512f8d14d2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 21 additions and 7 deletions

View file

@ -54,6 +54,12 @@ def setup_parser(subparser):
run_parser.add_argument( run_parser.add_argument(
"--externals", action="store_true", help="Test packages that are externally installed." "--externals", action="store_true", help="Test packages that are externally installed."
) )
run_parser.add_argument(
"-x",
"--explicit",
action="store_true",
help="Only test packages that are explicitly installed.",
)
run_parser.add_argument( run_parser.add_argument(
"--keep-stage", action="store_true", help="Keep testing directory for debugging" "--keep-stage", action="store_true", help="Keep testing directory for debugging"
) )
@ -188,6 +194,9 @@ def test_run(args):
if args.fail_fast: if args.fail_fast:
spack.config.set("config:fail_fast", True, scope="command_line") spack.config.set("config:fail_fast", True, scope="command_line")
explicit = args.explicit or any
explicit_str = "explicitly " if args.explicit else ""
# Get specs to test # Get specs to test
env = ev.active_environment() env = ev.active_environment()
hashes = env.all_hashes() if env else None hashes = env.all_hashes() if env else None
@ -195,9 +204,13 @@ def test_run(args):
specs = spack.cmd.parse_specs(args.specs) if args.specs else [None] specs = spack.cmd.parse_specs(args.specs) if args.specs else [None]
specs_to_test = [] specs_to_test = []
for spec in specs: for spec in specs:
matching = spack.store.db.query_local(spec, hashes=hashes) matching = spack.store.db.query_local(
spec,
hashes=hashes,
explicit=explicit,
)
if spec and not matching: if spec and not matching:
tty.warn("No installed packages match spec %s" % spec) tty.warn("No {0}installed packages match spec {1}".format(explicit_str, spec))
""" """
TODO: Need to write out a log message and/or CDASH Testing TODO: Need to write out a log message and/or CDASH Testing
output that package not installed IF continue to process output that package not installed IF continue to process
@ -208,6 +221,7 @@ def test_run(args):
# to ensure report package as skipped (e.g., for CI) # to ensure report package as skipped (e.g., for CI)
specs_to_test.append(spec) specs_to_test.append(spec)
""" """
specs_to_test.extend(matching) specs_to_test.extend(matching)
# test_stage_dir # test_stage_dir

View file

@ -467,7 +467,7 @@ def test_affected_specs_on_first_concretization(mutable_mock_env_path, config):
@pytest.mark.skipif( @pytest.mark.skipif(
sys.platform == "win32", reason="Reliance on bash script ot supported on Windows" sys.platform == "win32", reason="Reliance on bash script not supported on Windows"
) )
def test_ci_process_command(tmpdir): def test_ci_process_command(tmpdir):
repro_dir = tmpdir.join("repro_dir").strpath repro_dir = tmpdir.join("repro_dir").strpath
@ -479,7 +479,7 @@ def test_ci_process_command(tmpdir):
@pytest.mark.skipif( @pytest.mark.skipif(
sys.platform == "win32", reason="Reliance on bash script ot supported on Windows" sys.platform == "win32", reason="Reliance on bash script not supported on Windows"
) )
def test_ci_process_command_fail(tmpdir, monkeypatch): def test_ci_process_command_fail(tmpdir, monkeypatch):
import subprocess import subprocess
@ -526,7 +526,7 @@ def test_ci_run_standalone_tests_missing_requirements(
@pytest.mark.skipif( @pytest.mark.skipif(
sys.platform == "win32", reason="Reliance on bash script ot supported on Windows" sys.platform == "win32", reason="Reliance on bash script not supported on Windows"
) )
def test_ci_run_standalone_tests_not_installed_junit( def test_ci_run_standalone_tests_not_installed_junit(
tmpdir, working_env, config, mock_packages, mock_test_stage, capfd tmpdir, working_env, config, mock_packages, mock_test_stage, capfd
@ -547,7 +547,7 @@ def test_ci_run_standalone_tests_not_installed_junit(
@pytest.mark.skipif( @pytest.mark.skipif(
sys.platform == "win32", reason="Reliance on bash script ot supported on Windows" sys.platform == "win32", reason="Reliance on bash script not supported on Windows"
) )
def test_ci_run_standalone_tests_not_installed_cdash( def test_ci_run_standalone_tests_not_installed_cdash(
tmpdir, working_env, config, mock_packages, mock_test_stage, capfd tmpdir, working_env, config, mock_packages, mock_test_stage, capfd

View file

@ -1738,7 +1738,7 @@ _spack_test() {
_spack_test_run() { _spack_test_run() {
if $list_options if $list_options
then then
SPACK_COMPREPLY="-h --help --alias --fail-fast --fail-first --externals --keep-stage --log-format --log-file --cdash-upload-url --cdash-build --cdash-site --cdash-track --cdash-buildstamp --help-cdash --clean --dirty" SPACK_COMPREPLY="-h --help --alias --fail-fast --fail-first --externals -x --explicit --keep-stage --log-format --log-file --cdash-upload-url --cdash-build --cdash-site --cdash-track --cdash-buildstamp --help-cdash --clean --dirty"
else else
_installed_packages _installed_packages
fi fi