This commit is contained in:
swrup 2025-11-11 02:07:51 +01:00
parent aa2ff7b2f0
commit 2f3113f55d
11742 changed files with 1223940 additions and 0 deletions

View file

@ -0,0 +1,141 @@
Tests that changing the dependencies of a project cause lockdir validation to
fail due to the dependency hash not matching the hash stored in the lockdir.
Dummy opam repo so we can generate lockdirs
$ . ./helpers.sh
$ mkrepo
$ mkpkg a <<EOF
> EOF
Start with a project with a single package with no dependencies:
$ solve_project <<EOF
> (lang dune 3.11)
> (package
> (name foo))
> EOF
Solution for dune.lock:
(no dependencies to lock)
$ cat dune.lock/lock.dune
(lang package 0.1)
(repositories
(complete false)
(used))
$ dune pkg validate-lockdir
Add a dependency to the project:
$ cat >dune-project <<EOF
> (lang dune 3.11)
> (package
> (name foo)
> (depends a))
> EOF
$ dune pkg validate-lockdir
Lockdir dune.lock does not contain a solution for local packages:
Error: This project has at least one non-local dependency but the lockdir
doesn't contain a dependency hash.
An example of a non-local dependency of this project is: a
Hint: Regenerate the lockdir by running 'dune pkg lock'
Error: Some lockdirs do not contain solutions for local packages:
- dune.lock
[1]
Add a non-local dependency to the package:
$ solve_project <<EOF
> (lang dune 3.11)
> (package
> (name foo)
> (depends a))
> EOF
Solution for dune.lock:
- a.0.0.1
$ cat dune.lock/lock.dune
(lang package 0.1)
(dependency_hash 7ba1cacd46bb2609d7b9735909c3b8a5)
(repositories
(complete false)
(used))
$ dune pkg validate-lockdir
Add a second dependency to the project:
$ cat >dune-project <<EOF
> (lang dune 3.11)
> (package
> (name foo)
> (depends a b))
> EOF
$ dune pkg validate-lockdir
Lockdir dune.lock does not contain a solution for local packages:
File "dune.lock/lock.dune", line 3, characters 17-49:
Error: Dependency hash in lockdir does not match the hash of non-local
dependencies of this project. The lockdir expects the the non-local
dependencies to hash to:
7ba1cacd46bb2609d7b9735909c3b8a5
...but the non-local dependencies of this project hash to:
d18946fdd9833ae312d309f654f11c1b
Hint: Regenerate the lockdir by running 'dune pkg lock'
Error: Some lockdirs do not contain solutions for local packages:
- dune.lock
[1]
Remove all dependencies from the project:
$ cat >dune-project <<EOF
> (lang dune 3.11)
> (package
> (name foo))
> EOF
$ dune pkg validate-lockdir
Lockdir dune.lock does not contain a solution for local packages:
File "dune.lock/lock.dune", line 3, characters 17-49:
Error: This project has no non-local dependencies yet the lockfile contains a
dependency hash: 7ba1cacd46bb2609d7b9735909c3b8a5
Hint: Regenerate the lockdir by running 'dune pkg lock'
Error: Some lockdirs do not contain solutions for local packages:
- dune.lock
[1]
Exercise handling invalid dependency hashes.
$ make_lock_metadata_with_hash() {
> cat >dune.lock/lock.dune <<EOF
> (lang package 0.1)
> (dependency_hash $1)
> (repositories
> (complete false)
> (used))
> EOF
> }
Case where the label ("md5") is missing:
$ make_lock_metadata_with_hash badhash
$ dune pkg validate-lockdir
Failed to parse lockdir dune.lock:
File "dune.lock/lock.dune", line 2, characters 17-24:
Error: Dependency hash is not a valid md5 hash: badhash
Error: Some lockdirs do not contain solutions for local packages:
- dune.lock
[1]
Case where the label is not "md5":
$ make_lock_metadata_with_hash foo=badhash
$ dune pkg validate-lockdir
Failed to parse lockdir dune.lock:
File "dune.lock/lock.dune", line 2, characters 17-28:
Error: Dependency hash is not a valid md5 hash: foo=badhash
Error: Some lockdirs do not contain solutions for local packages:
- dune.lock
[1]
Case where the the hash is not a valid md5 hash:
$ make_lock_metadata_with_hash md5=badhash
$ dune pkg validate-lockdir
Failed to parse lockdir dune.lock:
File "dune.lock/lock.dune", line 2, characters 17-28:
Error: Dependency hash is not a valid md5 hash: md5=badhash
Error: Some lockdirs do not contain solutions for local packages:
- dune.lock
[1]