Source code for spack.test.cmd.verify

# Copyright 2013-2022 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)

"""Tests for the `spack verify` command"""
import os
import sys

import pytest

import llnl.util.filesystem as fs

import spack.spec
import spack.util.spack_json as sjson
import spack.verify
from spack.main import SpackCommand

verify = SpackCommand('verify')
install = SpackCommand('install')

pytestmark = pytest.mark.skipif(sys.platform == "win32",
                                reason="does not run on windows")

[docs]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), fs.mkdirp(filedir) fs.mkdirp(metadir) with open(filepath, 'w') as f: f.write("I'm a file") data = spack.verify.create_manifest_entry(filepath) manifest_file = os.path.join(metadir, with open(manifest_file, 'w') 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') 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)
[docs]def test_single_spec_verify_cmd(tmpdir, mock_packages, mock_archive, mock_fetch, config, 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') 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']