def test_ambiguous_hash(self, database): x1 = Spec('a') x1._hash = 'xy' x1._concrete = True x2 = Spec('a') x2._hash = 'xx' x2._concrete = True database.add(x1, spack.store.layout) database.add(x2, spack.store.layout) # ambiguity in first hash character self._check_raises(AmbiguousHashError, ['/x']) # ambiguity in first hash character AND spec name self._check_raises(AmbiguousHashError, ['a/x'])
def test_ambiguous_hash(self, mutable_database): x1 = Spec('a') x1.concretize() x1._hash = 'xyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy' x2 = Spec('a') x2.concretize() x2._hash = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' mutable_database.add(x1, spack.store.layout) mutable_database.add(x2, spack.store.layout) # ambiguity in first hash character self._check_raises(AmbiguousHashError, ['/x']) # ambiguity in first hash character AND spec name self._check_raises(AmbiguousHashError, ['a/x'])
def test_splice_with_cached_hashes(self, transitive): spec = Spec('splice-t') dep = Spec('splice-h+foo') spec.concretize() dep.concretize() # monkeypatch hashes so we can test that they are cached spec._hash = 'aaaaaa' dep._hash = 'bbbbbb' spec['splice-h']._hash = 'cccccc' spec['splice-z']._hash = 'dddddd' dep['splice-z']._hash = 'eeeeee' out = spec.splice(dep, transitive=transitive) out_z_expected = (dep if transitive else spec)['splice-z'] assert out.dag_hash() != spec.dag_hash() assert (out['splice-h'].dag_hash() == dep.dag_hash()) == transitive assert out['splice-z'].dag_hash() == out_z_expected.dag_hash()
def test_concretize_partial_old_dag_hash_spec(mock_packages, config): # create an "old" spec with no package hash bottom = Spec("dt-diamond-bottom").concretized() delattr(bottom, "_package_hash") dummy_hash = "zd4m26eis2wwbvtyfiliar27wkcv3ehk" bottom._hash = dummy_hash # add it to an abstract spec as a dependency top = Spec("dt-diamond") top.add_dependency_edge(bottom, ()) # concretize with the already-concrete dependency top.concretize() for spec in top.traverse(): assert spec.concrete # make sure dag_hash is untouched assert spec["dt-diamond-bottom"].dag_hash() == dummy_hash assert spec["dt-diamond-bottom"]._hash == dummy_hash # make sure package hash is NOT recomputed assert not getattr(spec["dt-diamond-bottom"], '_package_hash', None)