forked from lix-project/lix
* Finally, a test for the binary patch functionality.
This commit is contained in:
parent
bf658f016f
commit
a07c68f05e
|
@ -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
15
tests/binary-patching.nix
Normal 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
33
tests/binary-patching.sh
Normal 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
|
|
@ -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^" \
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue