summaryrefslogtreecommitdiff
path: root/lib/spack/spack/test/concretize_requirements.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/spack/spack/test/concretize_requirements.py')
-rw-r--r--lib/spack/spack/test/concretize_requirements.py63
1 files changed, 63 insertions, 0 deletions
diff --git a/lib/spack/spack/test/concretize_requirements.py b/lib/spack/spack/test/concretize_requirements.py
index 329c881cf9..50cc6baa9a 100644
--- a/lib/spack/spack/test/concretize_requirements.py
+++ b/lib/spack/spack/test/concretize_requirements.py
@@ -349,3 +349,66 @@ packages:
assert spec.satisfies(specific_exp)
for s in spec.traverse(root=False):
assert s.satisfies(generic_exp)
+
+
+@pytest.mark.parametrize("mpi_requirement", ["mpich", "mpich2", "zmpi"])
+def test_requirements_on_virtual(mpi_requirement, concretize_scope, mock_packages):
+ if spack.config.get("config:concretizer") == "original":
+ pytest.skip("Original concretizer does not support configuration" " requirements")
+ conf_str = """\
+packages:
+ mpi:
+ require: "{}"
+""".format(
+ mpi_requirement
+ )
+ update_packages_config(conf_str)
+
+ spec = Spec("callpath").concretized()
+ assert "mpi" in spec
+ assert mpi_requirement in spec
+
+
+@pytest.mark.parametrize(
+ "mpi_requirement,specific_requirement",
+ [
+ ("mpich", "@3.0.3"),
+ ("mpich2", "%clang"),
+ ("zmpi", "%gcc"),
+ ],
+)
+def test_requirements_on_virtual_and_on_package(
+ mpi_requirement, specific_requirement, concretize_scope, mock_packages
+):
+ if spack.config.get("config:concretizer") == "original":
+ pytest.skip("Original concretizer does not support configuration" " requirements")
+ conf_str = """\
+packages:
+ mpi:
+ require: "{0}"
+ {0}:
+ require: "{1}"
+""".format(
+ mpi_requirement, specific_requirement
+ )
+ update_packages_config(conf_str)
+
+ spec = Spec("callpath").concretized()
+ assert "mpi" in spec
+ assert mpi_requirement in spec
+ assert spec["mpi"].satisfies(specific_requirement)
+
+
+def test_incompatible_virtual_requirements_raise(concretize_scope, mock_packages):
+ if spack.config.get("config:concretizer") == "original":
+ pytest.skip("Original concretizer does not support configuration" " requirements")
+ conf_str = """\
+ packages:
+ mpi:
+ require: "mpich"
+ """
+ update_packages_config(conf_str)
+
+ spec = Spec("callpath ^zmpi")
+ with pytest.raises(UnsatisfiableSpecError):
+ spec.concretize()