Add a test for repairing paths

This commit is contained in:
Eelco Dolstra 2014-02-17 12:22:50 +01:00
parent a9d99ab55f
commit 832377bbd6
5 changed files with 56 additions and 8 deletions

View file

@ -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

View file

@ -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.

View file

@ -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
View 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

View file

@ -1,3 +0,0 @@
source common.sh
nix-store --verify