* Finally, a test for the binary patch functionality.

This commit is contained in:
Eelco Dolstra 2010-11-17 15:30:07 +00:00
parent bf658f016f
commit a07c68f05e
5 changed files with 56 additions and 3 deletions

View file

@ -7,7 +7,8 @@ TESTS = init.sh hash.sh lang.sh add.sh simple.sh dependencies.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 verify.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
XFAIL_TESTS = XFAIL_TESTS =

15
tests/binary-patching.nix Normal file
View file

@ -0,0 +1,15 @@
{ version }:
with import ./config.nix;
mkDerivation {
name = "foo-${toString version}";
builder = builtins.toFile "builder.sh"
''
mkdir $out
seq 1 1000000 > $out/foo
${if version == 2 then ''
echo bla >> $out/foo
'' else ""}
'';
}

33
tests/binary-patching.sh Normal file
View file

@ -0,0 +1,33 @@
source common.sh
mkdir -p $TEST_ROOT/cache2 $TEST_ROOT/patches
RESULT=$TEST_ROOT/result
# Build version 1 and 2 of the "foo" package.
$NIX_BIN_DIR/nix-push --copy $TEST_ROOT/cache2 $TEST_ROOT/manifest1 \
$($nixbuild -o $RESULT binary-patching.nix --arg version 1)
out2=$($nixbuild -o $RESULT binary-patching.nix --arg version 2)
$NIX_BIN_DIR/nix-push --copy $TEST_ROOT/cache2 $TEST_ROOT/manifest2 $out2
rm $RESULT
# Generate a binary patch.
$NIX_BIN_DIR/generate-patches.pl $TEST_ROOT/cache2 $TEST_ROOT/patches \
file://$TEST_ROOT/patches $TEST_ROOT/manifest1 $TEST_ROOT/manifest2
grep -q "patch {" $TEST_ROOT/manifest2
# Get rid of version 2.
$nixstore --delete $out2
! test -e $out2
# Pull the manifest containing the patch.
clearManifests
$NIX_BIN_DIR/nix-pull file://$TEST_ROOT/manifest2
# To make sure that we're using the patch, delete the full NARs.
rm -f $TEST_ROOT/cache2/*
# Now rebuild it. This should use the patch generated above.
$nixbuild -o $RESULT binary-patching.nix --arg version 2

View file

@ -23,6 +23,8 @@ ln -s $nixinstantiate $NIX_BIN_DIR/
ln -s $nixhash $NIX_BIN_DIR/ ln -s $nixhash $NIX_BIN_DIR/
ln -s $nixenv $NIX_BIN_DIR/ ln -s $nixenv $NIX_BIN_DIR/
ln -s $nixworker $NIX_BIN_DIR/ ln -s $nixworker $NIX_BIN_DIR/
ln -s $TOP/src/bsdiff-*/bsdiff $NIX_BIN_DIR/
ln -s $TOP/src/bsdiff-*/bspatch $NIX_BIN_DIR/
ln -s $TOP/scripts/nix-prefetch-url $NIX_BIN_DIR/ ln -s $TOP/scripts/nix-prefetch-url $NIX_BIN_DIR/
ln -s $TOP/scripts/nix-collect-garbage $NIX_BIN_DIR/ ln -s $TOP/scripts/nix-collect-garbage $NIX_BIN_DIR/
ln -s $TOP/scripts/nix-build $NIX_BIN_DIR/ ln -s $TOP/scripts/nix-build $NIX_BIN_DIR/
@ -34,6 +36,7 @@ ln -s $bzip2_bin_test/bzip2 $NIX_BIN_DIR/nix/
ln -s $bzip2_bin_test/bunzip2 $NIX_BIN_DIR/nix/ ln -s $bzip2_bin_test/bunzip2 $NIX_BIN_DIR/nix/
ln -s $TOP/scripts/copy-from-other-stores.pl $NIX_BIN_DIR/nix/ ln -s $TOP/scripts/copy-from-other-stores.pl $NIX_BIN_DIR/nix/
ln -s $TOP/scripts/download-using-manifests.pl $NIX_BIN_DIR/nix/ ln -s $TOP/scripts/download-using-manifests.pl $NIX_BIN_DIR/nix/
ln -s $TOP/scripts/generate-patches.pl $NIX_BIN_DIR/
ln -s $TOP/scripts/readmanifest.pm $NIX_BIN_DIR/nix/ ln -s $TOP/scripts/readmanifest.pm $NIX_BIN_DIR/nix/
cat > "$NIX_CONF_DIR"/nix.conf <<EOF cat > "$NIX_CONF_DIR"/nix.conf <<EOF
@ -45,7 +48,7 @@ EOF
mkdir $NIX_DATA_DIR/nix mkdir $NIX_DATA_DIR/nix
cp -pr $TOP/corepkgs $NIX_DATA_DIR/nix/ cp -pr $TOP/corepkgs $NIX_DATA_DIR/nix/
# Bah, script has the prefix hard-coded. This is really messy stuff # Bah, scripts have the prefix hard-coded. This is really messy stuff
# (and likely to fail). # (and likely to fail).
for i in \ for i in \
$NIX_DATA_DIR/nix/corepkgs/nar/nar.sh \ $NIX_DATA_DIR/nix/corepkgs/nar/nar.sh \
@ -58,6 +61,7 @@ for i in \
$NIX_BIN_DIR/nix-push \ $NIX_BIN_DIR/nix-push \
$NIX_BIN_DIR/nix-pull \ $NIX_BIN_DIR/nix-pull \
$NIX_BIN_DIR/nix/readmanifest.pm \ $NIX_BIN_DIR/nix/readmanifest.pm \
$NIX_BIN_DIR/generate-patches.pl \
; do ; do
sed < $i > $i.tmp \ sed < $i > $i.tmp \
-e "s^$REAL_BIN_DIR/nix-store^$NIX_BIN_DIR/nix-store^" \ -e "s^$REAL_BIN_DIR/nix-store^$NIX_BIN_DIR/nix-store^" \

View file

@ -5,7 +5,7 @@ outPath=$($nixstore -r $drvPath)
echo "pushing $drvPath" echo "pushing $drvPath"
mkdir $TEST_ROOT/cache mkdir -p $TEST_ROOT/cache
$NIX_BIN_DIR/nix-push \ $NIX_BIN_DIR/nix-push \
--copy $TEST_ROOT/cache $TEST_ROOT/manifest $drvPath --copy $TEST_ROOT/cache $TEST_ROOT/manifest $drvPath