87 lines
2.5 KiB
Python
87 lines
2.5 KiB
Python
# Copyright Spack Project Developers. See COPYRIGHT file for details.
|
|
#
|
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
|
|
|
"""Tests for the `spack verify` command"""
|
|
import os
|
|
|
|
import llnl.util.filesystem as fs
|
|
|
|
import spack.spec
|
|
import spack.store
|
|
import spack.util.spack_json as sjson
|
|
import spack.verify
|
|
from spack.main import SpackCommand
|
|
|
|
verify = SpackCommand("verify")
|
|
install = SpackCommand("install")
|
|
|
|
|
|
def test_single_file_verify_cmd(tmpdir):
|
|
# Test the verify command interface to verifying a single file.
|
|
filedir = os.path.join(str(tmpdir), "a", "b", "c", "d")
|
|
filepath = os.path.join(filedir, "file")
|
|
metadir = os.path.join(str(tmpdir), spack.store.STORE.layout.metadata_dir)
|
|
|
|
fs.mkdirp(filedir)
|
|
fs.mkdirp(metadir)
|
|
|
|
with open(filepath, "w", encoding="utf-8") as f:
|
|
f.write("I'm a file")
|
|
|
|
data = spack.verify.create_manifest_entry(filepath)
|
|
|
|
manifest_file = os.path.join(metadir, spack.store.STORE.layout.manifest_file_name)
|
|
|
|
with open(manifest_file, "w", encoding="utf-8") as f:
|
|
sjson.dump({filepath: data}, f)
|
|
|
|
results = verify("-f", filepath, fail_on_error=False)
|
|
print(results)
|
|
assert not results
|
|
|
|
os.utime(filepath, (0, 0))
|
|
with open(filepath, "w", encoding="utf-8") as f:
|
|
f.write("I changed.")
|
|
|
|
results = verify("-f", filepath, fail_on_error=False)
|
|
|
|
expected = ["hash"]
|
|
mtime = os.stat(filepath).st_mtime
|
|
if mtime != data["time"]:
|
|
expected.append("mtime")
|
|
|
|
assert results
|
|
assert filepath in results
|
|
assert all(x in results for x in expected)
|
|
|
|
results = verify("-fj", filepath, fail_on_error=False)
|
|
res = sjson.load(results)
|
|
assert len(res) == 1
|
|
errors = res.pop(filepath)
|
|
assert sorted(errors) == sorted(expected)
|
|
|
|
|
|
def test_single_spec_verify_cmd(tmpdir, mock_packages, mock_archive, mock_fetch, install_mockery):
|
|
# Test the verify command interface to verify a single spec
|
|
install("libelf")
|
|
s = spack.spec.Spec("libelf").concretized()
|
|
prefix = s.prefix
|
|
hash = s.dag_hash()
|
|
|
|
results = verify("/%s" % hash, fail_on_error=False)
|
|
assert not results
|
|
|
|
new_file = os.path.join(prefix, "new_file_for_verify_test")
|
|
with open(new_file, "w", encoding="utf-8") as f:
|
|
f.write("New file")
|
|
|
|
results = verify("/%s" % hash, fail_on_error=False)
|
|
assert new_file in results
|
|
assert "added" in results
|
|
|
|
results = verify("-j", "/%s" % hash, fail_on_error=False)
|
|
res = sjson.load(results)
|
|
assert len(res) == 1
|
|
assert res[new_file] == ["added"]
|