Add repositories for "requirements" and "flag mixing" unit tests (#46412)
This commit is contained in:
parent
576251f0da
commit
61d6c5486c
@ -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()
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
|
||||||
|
15
var/spack/repos/flags.test/packages/t/package.py
Normal file
15
var/spack/repos/flags.test/packages/t/package.py
Normal 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")
|
13
var/spack/repos/flags.test/packages/u/package.py
Normal file
13
var/spack/repos/flags.test/packages/u/package.py
Normal 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")
|
14
var/spack/repos/flags.test/packages/v/package.py
Normal file
14
var/spack/repos/flags.test/packages/v/package.py
Normal 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")
|
18
var/spack/repos/flags.test/packages/w/package.py
Normal file
18
var/spack/repos/flags.test/packages/w/package.py
Normal 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")
|
16
var/spack/repos/flags.test/packages/x/package.py
Normal file
16
var/spack/repos/flags.test/packages/x/package.py
Normal 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")
|
12
var/spack/repos/flags.test/packages/y/package.py
Normal file
12
var/spack/repos/flags.test/packages/y/package.py
Normal 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")
|
2
var/spack/repos/flags.test/repo.yaml
Normal file
2
var/spack/repos/flags.test/repo.yaml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
repo:
|
||||||
|
namespace: flags.test
|
14
var/spack/repos/requirements.test/packages/t/package.py
Normal file
14
var/spack/repos/requirements.test/packages/t/package.py
Normal 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")
|
12
var/spack/repos/requirements.test/packages/u/package.py
Normal file
12
var/spack/repos/requirements.test/packages/u/package.py
Normal 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")
|
12
var/spack/repos/requirements.test/packages/v/package.py
Normal file
12
var/spack/repos/requirements.test/packages/v/package.py
Normal 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")
|
16
var/spack/repos/requirements.test/packages/x/package.py
Normal file
16
var/spack/repos/requirements.test/packages/x/package.py
Normal 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")
|
15
var/spack/repos/requirements.test/packages/y/package.py
Normal file
15
var/spack/repos/requirements.test/packages/y/package.py
Normal 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")
|
2
var/spack/repos/requirements.test/repo.yaml
Normal file
2
var/spack/repos/requirements.test/repo.yaml
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
repo:
|
||||||
|
namespace: requirements.test
|
Loading…
Reference in New Issue
Block a user