From 8ce1d9c05a42c6250dbf53f00f8d2861f7b81c31 Mon Sep 17 00:00:00 2001 From: Gregory Becker Date: Thu, 30 Mar 2023 16:16:45 -0700 Subject: [PATCH] test for not writing the same view multiple times --- lib/spack/spack/test/cmd/env.py | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/lib/spack/spack/test/cmd/env.py b/lib/spack/spack/test/cmd/env.py index c8a7585b63b..195160ba8e8 100644 --- a/lib/spack/spack/test/cmd/env.py +++ b/lib/spack/spack/test/cmd/env.py @@ -3350,3 +3350,32 @@ def raises(*args, **kwargs): if update_method == "symlink": link = os.path.join(str(tmpdir), "._root", "._tmp_symlink") assert not os.path.lexists(link) + + +@pytest.mark.parametrize("update_method", ["symlink", "exchange"]) +def test_view_update_unnecessary(update_method, tmpdir, install_mockery, mock_fetch, monkeypatch): + if update_method == "exchange" and not supports_renameat2: + pytest.skip("Testing on an OS that does not support the exchange update method") + + root = str(tmpdir.join("root")) + view = ev.environment.ViewDescriptor( + base_path=str(tmpdir), root=root, update_method=update_method + ) + + libelf = spack.spec.Spec("libelf").concretized() + install("libelf") + libdwarf = spack.spec.Spec("libdwarf").concretized() + install("libdwarf") + + # Ensure multiple previous views around + view.regenerate([libelf]) + view.regenerate([libelf, libdwarf]) + + # monkeypatch so that any attempt to actually regenerate the view fails + def raises(*args, **kwargs): + raise AssertionError + monkeypatch.setattr(view, "view", raises) + + view.regenerate([libelf, libdwarf]) + with pytest.raises(AssertionError): + view.regenerate([libelf])