Add a test for repairing paths
This commit is contained in:
parent
a9d99ab55f
commit
832377bbd6
5 changed files with 56 additions and 8 deletions
|
@ -2,11 +2,9 @@ source common.sh
|
||||||
|
|
||||||
clearStore
|
clearStore
|
||||||
clearManifests
|
clearManifests
|
||||||
|
clearCache
|
||||||
|
|
||||||
# Create the binary cache.
|
# Create the binary cache.
|
||||||
cacheDir=$TEST_ROOT/binary-cache
|
|
||||||
rm -rf "$cacheDir"
|
|
||||||
|
|
||||||
outPath=$(nix-build dependencies.nix --no-out-link)
|
outPath=$(nix-build dependencies.nix --no-out-link)
|
||||||
|
|
||||||
nix-push --dest $cacheDir $outPath
|
nix-push --dest $cacheDir $outPath
|
||||||
|
|
|
@ -29,6 +29,8 @@ export SHELL="@bash@"
|
||||||
export version=@PACKAGE_VERSION@
|
export version=@PACKAGE_VERSION@
|
||||||
export system=@system@
|
export system=@system@
|
||||||
|
|
||||||
|
cacheDir=$TEST_ROOT/binary-cache
|
||||||
|
|
||||||
readLink() {
|
readLink() {
|
||||||
ls -l "$1" | sed 's/.*->\ //'
|
ls -l "$1" | sed 's/.*->\ //'
|
||||||
}
|
}
|
||||||
|
@ -55,6 +57,10 @@ clearManifests() {
|
||||||
rm -f $NIX_STATE_DIR/manifests/*
|
rm -f $NIX_STATE_DIR/manifests/*
|
||||||
}
|
}
|
||||||
|
|
||||||
|
clearCache() {
|
||||||
|
rm -rf "$cacheDir"
|
||||||
|
}
|
||||||
|
|
||||||
startDaemon() {
|
startDaemon() {
|
||||||
# Start the daemon, wait for the socket to appear. !!!
|
# Start the daemon, wait for the socket to appear. !!!
|
||||||
# ‘nix-daemon’ should have an option to fork into the background.
|
# ‘nix-daemon’ should have an option to fork into the background.
|
||||||
|
|
|
@ -4,13 +4,13 @@ check:
|
||||||
nix_tests = \
|
nix_tests = \
|
||||||
init.sh hash.sh lang.sh add.sh simple.sh dependencies.sh \
|
init.sh hash.sh lang.sh add.sh simple.sh dependencies.sh \
|
||||||
parallel.sh build-hook.sh substitutes.sh substitutes2.sh \
|
parallel.sh build-hook.sh substitutes.sh substitutes2.sh \
|
||||||
fallback.sh nix-push.sh gc.sh gc-concurrent.sh verify.sh nix-pull.sh \
|
fallback.sh nix-push.sh gc.sh gc-concurrent.sh nix-pull.sh \
|
||||||
referrers.sh user-envs.sh logging.sh nix-build.sh misc.sh fixed.sh \
|
referrers.sh user-envs.sh logging.sh nix-build.sh misc.sh fixed.sh \
|
||||||
gc-runtime.sh install-package.sh check-refs.sh filter-source.sh \
|
gc-runtime.sh install-package.sh check-refs.sh filter-source.sh \
|
||||||
remote-store.sh export.sh export-graph.sh negative-caching.sh \
|
remote-store.sh export.sh export-graph.sh negative-caching.sh \
|
||||||
binary-patching.sh timeout.sh secure-drv-outputs.sh nix-channel.sh \
|
binary-patching.sh timeout.sh secure-drv-outputs.sh nix-channel.sh \
|
||||||
multiple-outputs.sh import-derivation.sh fetchurl.sh optimise-store.sh \
|
multiple-outputs.sh import-derivation.sh fetchurl.sh optimise-store.sh \
|
||||||
binary-cache.sh nix-profile.sh
|
binary-cache.sh nix-profile.sh repair.sh
|
||||||
|
|
||||||
install-tests += $(foreach x, $(nix_tests), tests/$(x))
|
install-tests += $(foreach x, $(nix_tests), tests/$(x))
|
||||||
|
|
||||||
|
|
47
tests/repair.sh
Normal file
47
tests/repair.sh
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
source common.sh
|
||||||
|
|
||||||
|
clearStore
|
||||||
|
|
||||||
|
path=$(nix-build dependencies.nix -o $TEST_ROOT/result)
|
||||||
|
path2=$(nix-store -qR $path | grep input-2)
|
||||||
|
|
||||||
|
nix-store --verify --check-contents -v
|
||||||
|
|
||||||
|
hash=$(nix-hash $path2)
|
||||||
|
|
||||||
|
# Corrupt a path and check whether nix-build --repair can fix it.
|
||||||
|
chmod u+w $path2
|
||||||
|
touch $path2/bad
|
||||||
|
|
||||||
|
if nix-store --verify --check-contents -v; then
|
||||||
|
echo "nix-store --verify succeeded unexpectedly" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if nix-store --verify --check-contents --repair; then
|
||||||
|
echo "nix-store --verify --repair succeeded unexpectedly" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
nix-build dependencies.nix -o $TEST_ROOT/result --repair
|
||||||
|
|
||||||
|
if [ "$(nix-hash $path2)" != "$hash" -o -e $path2/bad ]; then
|
||||||
|
echo "path not repaired properly" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Corrupt a path that has a substitute and check whether nix-store
|
||||||
|
# --verify can fix it.
|
||||||
|
clearCache
|
||||||
|
|
||||||
|
nix-push --dest $cacheDir $path
|
||||||
|
|
||||||
|
chmod u+w $path2
|
||||||
|
rm -rf $path2
|
||||||
|
|
||||||
|
nix-store --verify --check-contents --repair --option binary-caches "file://$cacheDir"
|
||||||
|
|
||||||
|
if [ "$(nix-hash $path2)" != "$hash" -o -e $path2/bad ]; then
|
||||||
|
echo "path not repaired properly" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
|
@ -1,3 +0,0 @@
|
||||||
source common.sh
|
|
||||||
|
|
||||||
nix-store --verify
|
|
Loading…
Reference in a new issue