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
|
||||
from spack.solver.asp import InternalConcretizerError, UnsatisfiableSpecError
|
||||
from spack.spec import Spec
|
||||
from spack.test.conftest import create_test_repo
|
||||
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")
|
||||
|
||||
|
||||
_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
|
||||
def _create_test_repo(tmpdir, mutable_config):
|
||||
yield create_test_repo(tmpdir, [_pkgx, _pkgy, _pkgv, _pkgt, _pkgu])
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def test_repo(_create_test_repo, monkeypatch, mock_stage):
|
||||
with spack.repo.use_repositories(_create_test_repo) as mock_repo_path:
|
||||
def test_repo(mutable_config, monkeypatch, mock_stage):
|
||||
repo_dir = pathlib.Path(spack.paths.repos_path) / "requirements.test"
|
||||
with spack.repo.use_repositories(str(repo_dir)) as mock_repo_path:
|
||||
yield mock_repo_path
|
||||
|
||||
|
||||
@ -491,23 +424,24 @@ def test_oneof_ordering(concretize_scope, test_repo):
|
||||
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 = """\
|
||||
packages:
|
||||
y:
|
||||
require:
|
||||
- one_of: ["@2.5", "%gcc"]
|
||||
- one_of: ["@2.5", "~shared"]
|
||||
"""
|
||||
|
||||
with spack.repo.use_repositories(_create_test_repo):
|
||||
s1 = Spec("y@2.5%gcc").concretized()
|
||||
store_dir = tmp_path / "store"
|
||||
with spack.store.use_store(str(store_dir)):
|
||||
s1 = Spec("y@2.5 ~shared").concretized()
|
||||
s1.package.do_install(fake=True, explicit=True)
|
||||
|
||||
update_packages_config(conf_str)
|
||||
|
||||
with spack.config.override("concretizer:reuse", True):
|
||||
s2 = Spec("y").concretized()
|
||||
assert not s2.satisfies("@2.5 %gcc")
|
||||
assert not s2.satisfies("@2.5 ~shared")
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
@ -546,13 +480,11 @@ def test_requirements_and_deprecated_versions(
|
||||
@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):
|
||||
"""Test that default requirements are applied to all packages."""
|
||||
conf_str = """\
|
||||
conf_str = f"""\
|
||||
packages:
|
||||
all:
|
||||
require: "{}"
|
||||
""".format(
|
||||
requirement_str
|
||||
)
|
||||
require: "{requirement_str}"
|
||||
"""
|
||||
update_packages_config(conf_str)
|
||||
|
||||
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."""
|
||||
generic_req, specific_req = requirements
|
||||
generic_exp, specific_exp = expectations
|
||||
conf_str = """\
|
||||
conf_str = f"""\
|
||||
packages:
|
||||
all:
|
||||
require: "{}"
|
||||
require: "{generic_req}"
|
||||
x:
|
||||
require: "{}"
|
||||
""".format(
|
||||
generic_req, specific_req
|
||||
)
|
||||
require: "{specific_req}"
|
||||
"""
|
||||
update_packages_config(conf_str)
|
||||
|
||||
spec = Spec("x").concretized()
|
||||
@ -592,13 +522,11 @@ def test_default_and_package_specific_requirements(
|
||||
|
||||
@pytest.mark.parametrize("mpi_requirement", ["mpich", "mpich2", "zmpi"])
|
||||
def test_requirements_on_virtual(mpi_requirement, concretize_scope, mock_packages):
|
||||
conf_str = """\
|
||||
conf_str = f"""\
|
||||
packages:
|
||||
mpi:
|
||||
require: "{}"
|
||||
""".format(
|
||||
mpi_requirement
|
||||
)
|
||||
require: "{mpi_requirement}"
|
||||
"""
|
||||
update_packages_config(conf_str)
|
||||
|
||||
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(
|
||||
mpi_requirement, specific_requirement, concretize_scope, mock_packages
|
||||
):
|
||||
conf_str = """\
|
||||
conf_str = f"""\
|
||||
packages:
|
||||
mpi:
|
||||
require: "{0}"
|
||||
{0}:
|
||||
require: "{1}"
|
||||
""".format(
|
||||
mpi_requirement, specific_requirement
|
||||
)
|
||||
require: "{mpi_requirement}"
|
||||
{mpi_requirement}:
|
||||
require: "{specific_requirement}"
|
||||
"""
|
||||
update_packages_config(conf_str)
|
||||
|
||||
spec = Spec("callpath").concretized()
|
||||
|
@ -2,6 +2,8 @@
|
||||
# Spack Project Developers. See the top-level COPYRIGHT file for details.
|
||||
#
|
||||
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
||||
import pathlib
|
||||
|
||||
import pytest
|
||||
|
||||
import spack.config
|
||||
@ -9,7 +11,6 @@
|
||||
import spack.repo
|
||||
import spack.util.spack_yaml as syaml
|
||||
from spack.spec import Spec
|
||||
from spack.test.conftest import create_test_repo
|
||||
|
||||
"""
|
||||
These tests include the following package DAGs:
|
||||
@ -40,90 +41,11 @@
|
||||
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
|
||||
def _create_test_repo(tmpdir, mutable_config):
|
||||
yield create_test_repo(tmpdir, [_pkgt, _pkgu, _pkgv, _pkgw, _pkgx, _pkgy])
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def test_repo(_create_test_repo, monkeypatch, mock_stage):
|
||||
with spack.repo.use_repositories(_create_test_repo) as mock_repo_path:
|
||||
def test_repo(mutable_config, monkeypatch, mock_stage):
|
||||
repo_dir = pathlib.Path(spack.paths.repos_path) / "flags.test"
|
||||
with spack.repo.use_repositories(str(repo_dir)) as 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