Add repositories for "requirements" and "flag mixing" unit tests (#46412)

This commit is contained in:
Massimiliano Culpo 2024-09-16 17:59:35 +02:00 committed by GitHub
parent 576251f0da
commit 61d6c5486c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
15 changed files with 190 additions and 181 deletions

View File

@ -15,7 +15,6 @@
import spack.version import spack.version
from spack.solver.asp import InternalConcretizerError, UnsatisfiableSpecError from spack.solver.asp import InternalConcretizerError, UnsatisfiableSpecError
from spack.spec import Spec from spack.spec import Spec
from spack.test.conftest import create_test_repo
from spack.util.url import path_to_file_url from spack.util.url import path_to_file_url
@ -24,76 +23,10 @@ def update_packages_config(conf_str):
spack.config.set("packages", conf["packages"], scope="concretize") spack.config.set("packages", conf["packages"], scope="concretize")
_pkgx = (
"x",
"""\
class X(Package):
version("1.1")
version("1.0")
version("0.9")
variant("shared", default=True,
description="Build shared libraries")
depends_on("y")
""",
)
_pkgy = (
"y",
"""\
class Y(Package):
version("2.5")
version("2.4")
version("2.3", deprecated=True)
variant("shared", default=True,
description="Build shared libraries")
""",
)
_pkgv = (
"v",
"""\
class V(Package):
version("2.1")
version("2.0")
""",
)
_pkgt = (
"t",
"""\
class T(Package):
version('2.1')
version('2.0')
depends_on('u', when='@2.1:')
""",
)
_pkgu = (
"u",
"""\
class U(Package):
version('1.1')
version('1.0')
""",
)
@pytest.fixture @pytest.fixture
def _create_test_repo(tmpdir, mutable_config): def test_repo(mutable_config, monkeypatch, mock_stage):
yield create_test_repo(tmpdir, [_pkgx, _pkgy, _pkgv, _pkgt, _pkgu]) repo_dir = pathlib.Path(spack.paths.repos_path) / "requirements.test"
with spack.repo.use_repositories(str(repo_dir)) as mock_repo_path:
@pytest.fixture
def test_repo(_create_test_repo, monkeypatch, mock_stage):
with spack.repo.use_repositories(_create_test_repo) as mock_repo_path:
yield mock_repo_path yield mock_repo_path
@ -491,23 +424,24 @@ def test_oneof_ordering(concretize_scope, test_repo):
assert s2.satisfies("@2.5") assert s2.satisfies("@2.5")
def test_reuse_oneof(concretize_scope, _create_test_repo, mutable_database, mock_fetch): def test_reuse_oneof(concretize_scope, test_repo, tmp_path, mock_fetch):
conf_str = """\ conf_str = """\
packages: packages:
y: y:
require: require:
- one_of: ["@2.5", "%gcc"] - one_of: ["@2.5", "~shared"]
""" """
with spack.repo.use_repositories(_create_test_repo): store_dir = tmp_path / "store"
s1 = Spec("y@2.5%gcc").concretized() with spack.store.use_store(str(store_dir)):
s1 = Spec("y@2.5 ~shared").concretized()
s1.package.do_install(fake=True, explicit=True) s1.package.do_install(fake=True, explicit=True)
update_packages_config(conf_str) update_packages_config(conf_str)
with spack.config.override("concretizer:reuse", True): with spack.config.override("concretizer:reuse", True):
s2 = Spec("y").concretized() s2 = Spec("y").concretized()
assert not s2.satisfies("@2.5 %gcc") assert not s2.satisfies("@2.5 ~shared")
@pytest.mark.parametrize( @pytest.mark.parametrize(
@ -546,13 +480,11 @@ def test_requirements_and_deprecated_versions(
@pytest.mark.parametrize("spec_str,requirement_str", [("x", "%gcc"), ("x", "%clang")]) @pytest.mark.parametrize("spec_str,requirement_str", [("x", "%gcc"), ("x", "%clang")])
def test_default_requirements_with_all(spec_str, requirement_str, concretize_scope, test_repo): def test_default_requirements_with_all(spec_str, requirement_str, concretize_scope, test_repo):
"""Test that default requirements are applied to all packages.""" """Test that default requirements are applied to all packages."""
conf_str = """\ conf_str = f"""\
packages: packages:
all: all:
require: "{}" require: "{requirement_str}"
""".format( """
requirement_str
)
update_packages_config(conf_str) update_packages_config(conf_str)
spec = Spec(spec_str).concretized() spec = Spec(spec_str).concretized()
@ -573,15 +505,13 @@ def test_default_and_package_specific_requirements(
"""Test that specific package requirements override default package requirements.""" """Test that specific package requirements override default package requirements."""
generic_req, specific_req = requirements generic_req, specific_req = requirements
generic_exp, specific_exp = expectations generic_exp, specific_exp = expectations
conf_str = """\ conf_str = f"""\
packages: packages:
all: all:
require: "{}" require: "{generic_req}"
x: x:
require: "{}" require: "{specific_req}"
""".format( """
generic_req, specific_req
)
update_packages_config(conf_str) update_packages_config(conf_str)
spec = Spec("x").concretized() spec = Spec("x").concretized()
@ -592,13 +522,11 @@ def test_default_and_package_specific_requirements(
@pytest.mark.parametrize("mpi_requirement", ["mpich", "mpich2", "zmpi"]) @pytest.mark.parametrize("mpi_requirement", ["mpich", "mpich2", "zmpi"])
def test_requirements_on_virtual(mpi_requirement, concretize_scope, mock_packages): def test_requirements_on_virtual(mpi_requirement, concretize_scope, mock_packages):
conf_str = """\ conf_str = f"""\
packages: packages:
mpi: mpi:
require: "{}" require: "{mpi_requirement}"
""".format( """
mpi_requirement
)
update_packages_config(conf_str) update_packages_config(conf_str)
spec = Spec("callpath").concretized() spec = Spec("callpath").concretized()
@ -613,15 +541,13 @@ def test_requirements_on_virtual(mpi_requirement, concretize_scope, mock_package
def test_requirements_on_virtual_and_on_package( def test_requirements_on_virtual_and_on_package(
mpi_requirement, specific_requirement, concretize_scope, mock_packages mpi_requirement, specific_requirement, concretize_scope, mock_packages
): ):
conf_str = """\ conf_str = f"""\
packages: packages:
mpi: mpi:
require: "{0}" require: "{mpi_requirement}"
{0}: {mpi_requirement}:
require: "{1}" require: "{specific_requirement}"
""".format( """
mpi_requirement, specific_requirement
)
update_packages_config(conf_str) update_packages_config(conf_str)
spec = Spec("callpath").concretized() spec = Spec("callpath").concretized()

View File

@ -2,6 +2,8 @@
# Spack Project Developers. See the top-level COPYRIGHT file for details. # Spack Project Developers. See the top-level COPYRIGHT file for details.
# #
# SPDX-License-Identifier: (Apache-2.0 OR MIT) # SPDX-License-Identifier: (Apache-2.0 OR MIT)
import pathlib
import pytest import pytest
import spack.config import spack.config
@ -9,7 +11,6 @@
import spack.repo import spack.repo
import spack.util.spack_yaml as syaml import spack.util.spack_yaml as syaml
from spack.spec import Spec from spack.spec import Spec
from spack.test.conftest import create_test_repo
""" """
These tests include the following package DAGs: These tests include the following package DAGs:
@ -40,90 +41,11 @@
y y
""" """
_pkgx = (
"x",
"""\
class X(Package):
version("1.1")
version("1.0")
variant("activatemultiflag", default=False)
depends_on('y cflags="-d1"', when="~activatemultiflag")
depends_on('y cflags="-d1 -d2"', when="+activatemultiflag")
""",
)
_pkgy = (
"y",
"""\
class Y(Package):
version("2.1")
version("2.0")
""",
)
_pkgw = (
"w",
"""\
class W(Package):
version("3.1")
version("3.0")
variant("moveflaglater", default=False)
depends_on('x +activatemultiflag')
depends_on('y cflags="-d0"', when="~moveflaglater")
depends_on('y cflags="-d3"', when="+moveflaglater")
""",
)
_pkgv = (
"v",
"""\
class V(Package):
version("4.1")
version("4.0")
depends_on("y")
""",
)
_pkgt = (
"t",
"""\
class T(Package):
version("5.0")
depends_on("u")
depends_on("x+activatemultiflag")
depends_on("y cflags='-c1 -c2'")
""",
)
_pkgu = (
"u",
"""\
class U(Package):
version("6.0")
depends_on("y cflags='-e1 -e2'")
""",
)
@pytest.fixture @pytest.fixture
def _create_test_repo(tmpdir, mutable_config): def test_repo(mutable_config, monkeypatch, mock_stage):
yield create_test_repo(tmpdir, [_pkgt, _pkgu, _pkgv, _pkgw, _pkgx, _pkgy]) repo_dir = pathlib.Path(spack.paths.repos_path) / "flags.test"
with spack.repo.use_repositories(str(repo_dir)) as mock_repo_path:
@pytest.fixture
def test_repo(_create_test_repo, monkeypatch, mock_stage):
with spack.repo.use_repositories(_create_test_repo) as mock_repo_path:
yield mock_repo_path yield mock_repo_path

View File

@ -0,0 +1,15 @@
# Copyright 2013-2024 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack.package import *
class T(Package):
version("5.0")
depends_on("u")
depends_on("x+activatemultiflag")
depends_on("y cflags='-c1 -c2'")
depends_on("c", type="build")

View File

@ -0,0 +1,13 @@
# Copyright 2013-2024 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack.package import *
class U(Package):
version("6.0")
depends_on("y cflags='-e1 -e2'")
depends_on("c", type="build")

View File

@ -0,0 +1,14 @@
# Copyright 2013-2024 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack.package import *
class V(Package):
version("4.1")
version("4.0")
depends_on("y")
depends_on("c", type="build")

View File

@ -0,0 +1,18 @@
# Copyright 2013-2024 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack.package import *
class W(Package):
version("3.1")
version("3.0")
variant("moveflaglater", default=False)
depends_on("x +activatemultiflag")
depends_on('y cflags="-d0"', when="~moveflaglater")
depends_on('y cflags="-d3"', when="+moveflaglater")
depends_on("c", type="build")

View File

@ -0,0 +1,16 @@
# Copyright 2013-2024 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack.package import *
class X(Package):
version("1.1")
version("1.0")
variant("activatemultiflag", default=False)
depends_on('y cflags="-d1"', when="~activatemultiflag")
depends_on('y cflags="-d1 -d2"', when="+activatemultiflag")
depends_on("c", type="build")

View File

@ -0,0 +1,12 @@
# Copyright 2013-2024 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack.package import *
class Y(Package):
version("2.1")
version("2.0")
depends_on("c", type="build")

View File

@ -0,0 +1,2 @@
repo:
namespace: flags.test

View File

@ -0,0 +1,14 @@
# Copyright 2013-2024 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack.package import *
class T(Package):
version("2.1")
version("2.0")
depends_on("u", when="@2.1:")
depends_on("c", type="build")

View File

@ -0,0 +1,12 @@
# Copyright 2013-2024 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack.package import *
class U(Package):
version("1.1")
version("1.0")
depends_on("c", type="build")

View File

@ -0,0 +1,12 @@
# Copyright 2013-2024 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack.package import *
class V(Package):
version("2.1")
version("2.0")
depends_on("c", type="build")

View File

@ -0,0 +1,16 @@
# Copyright 2013-2024 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack.package import *
class X(Package):
version("1.1")
version("1.0")
version("0.9")
variant("shared", default=True, description="Build shared libraries")
depends_on("y")
depends_on("c", type="build")

View File

@ -0,0 +1,15 @@
# Copyright 2013-2024 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
from spack.package import *
class Y(Package):
version("2.5")
version("2.4")
version("2.3", deprecated=True)
variant("shared", default=True, description="Build shared libraries")
depends_on("c", type="build")

View File

@ -0,0 +1,2 @@
repo:
namespace: requirements.test