Test the NAR info cache

This commit is contained in:
Eelco Dolstra 2016-05-30 14:53:57 +02:00
parent 3593c8285d
commit bac123ddd9
6 changed files with 25 additions and 29 deletions

View file

@ -1,5 +1,6 @@
#include "binary-cache-store.hh" #include "binary-cache-store.hh"
#include "globals.hh" #include "globals.hh"
#include "nar-info-disk-cache.hh"
namespace nix { namespace nix {
@ -16,6 +17,9 @@ public:
: BinaryCacheStore(params) : BinaryCacheStore(params)
, binaryCacheDir(binaryCacheDir) , binaryCacheDir(binaryCacheDir)
{ {
/* For testing the NAR info cache. */
if (getEnv("_NIX_CACHE_FILE_URLS") == "1")
diskCache = getNarInfoDiskCache();
} }
void init() override; void init() override;
@ -53,6 +57,9 @@ void LocalBinaryCacheStore::init()
{ {
createDirs(binaryCacheDir + "/nar"); createDirs(binaryCacheDir + "/nar");
BinaryCacheStore::init(); BinaryCacheStore::init();
if (diskCache && !diskCache->cacheExists(getUri()))
diskCache->createCache(getUri(), wantMassQuery_, priority);
} }
static void atomicWrite(const Path & path, const std::string & s) static void atomicWrite(const Path & path, const std::string & s)

View file

@ -12,7 +12,7 @@ nix-push --dest $cacheDir $outPath
# By default, a binary cache doesn't support "nix-env -qas", but does # By default, a binary cache doesn't support "nix-env -qas", but does
# support installation. # support installation.
clearStore clearStore
rm -f $NIX_STATE_DIR/binary-cache* clearCacheCache
export _NIX_CACHE_FILE_URLS=1 export _NIX_CACHE_FILE_URLS=1
@ -25,7 +25,7 @@ nix-store --option binary-caches "file://$cacheDir" -r $outPath
# But with the right configuration, "nix-env -qas" should also work. # But with the right configuration, "nix-env -qas" should also work.
clearStore clearStore
rm -f $NIX_STATE_DIR/binary-cache* clearCacheCache
echo "WantMassQuery: 1" >> $cacheDir/nix-cache-info echo "WantMassQuery: 1" >> $cacheDir/nix-cache-info
nix-env --option binary-caches "file://$cacheDir" -f dependencies.nix -qas \* | grep -- "--S" nix-env --option binary-caches "file://$cacheDir" -f dependencies.nix -qas \* | grep -- "--S"
@ -55,8 +55,7 @@ mv $nar.good $nar
# Test whether this unsigned cache is rejected if the user requires signed caches. # Test whether this unsigned cache is rejected if the user requires signed caches.
clearStore clearStore
clearCacheCache
rm -f $NIX_STATE_DIR/binary-cache*
if nix-store --option binary-caches "file://$cacheDir" --option signed-binary-caches '*' -r $outPath; then if nix-store --option binary-caches "file://$cacheDir" --option signed-binary-caches '*' -r $outPath; then
echo "unsigned binary cache incorrectly accepted" echo "unsigned binary cache incorrectly accepted"
@ -107,16 +106,14 @@ nix-push --dest $cacheDir --key-file $TEST_ROOT/sk1 $outPath
# Downloading should fail if we don't provide a key. # Downloading should fail if we don't provide a key.
clearStore clearStore
clearCacheCache
rm -f $NIX_STATE_DIR/binary-cache*
(! nix-store -r $outPath --option binary-caches "file://$cacheDir" --option signed-binary-caches '*' ) (! nix-store -r $outPath --option binary-caches "file://$cacheDir" --option signed-binary-caches '*' )
# And it should fail if we provide an incorrect key. # And it should fail if we provide an incorrect key.
clearStore clearStore
clearCacheCache
rm -f $NIX_STATE_DIR/binary-cache*
(! nix-store -r $outPath --option binary-caches "file://$cacheDir" --option signed-binary-caches '*' --option binary-cache-public-keys "$badKey") (! nix-store -r $outPath --option binary-caches "file://$cacheDir" --option signed-binary-caches '*' --option binary-cache-public-keys "$badKey")
@ -133,7 +130,7 @@ for i in $cacheDir/*.narinfo; do
mv $i.tmp $i mv $i.tmp $i
done done
rm -f $NIX_STATE_DIR/binary-cache* clearCacheCache
(! nix-store -r $outPath --option binary-caches "file://$cacheDir" --option signed-binary-caches '*' --option binary-cache-public-keys "$publicKey") (! nix-store -r $outPath --option binary-caches "file://$cacheDir" --option signed-binary-caches '*' --option binary-cache-public-keys "$publicKey")

View file

@ -2,18 +2,15 @@ source common.sh
clearProfiles clearProfiles
rm -f $TEST_ROOT/.nix-channels rm -f $TEST_HOME/.nix-channels $TEST_HOME/.nix-profile
# Override location of ~/.nix-channels.
export HOME=$TEST_ROOT
# Test add/list/remove. # Test add/list/remove.
nix-channel --add http://foo/bar xyzzy nix-channel --add http://foo/bar xyzzy
nix-channel --list | grep -q http://foo/bar nix-channel --list | grep -q http://foo/bar
nix-channel --remove xyzzy nix-channel --remove xyzzy
[ -e $TEST_ROOT/.nix-channels ] [ -e $TEST_HOME/.nix-channels ]
[ "$(cat $TEST_ROOT/.nix-channels)" = '' ] [ "$(cat $TEST_HOME/.nix-channels)" = '' ]
# Create a channel. # Create a channel.
rm -rf $TEST_ROOT/foo rm -rf $TEST_ROOT/foo
@ -41,10 +38,8 @@ grep -q 'item.*attrPath="foo".*name="dependencies"' $TEST_ROOT/meta.xml
nix-env -i dependencies nix-env -i dependencies
[ -e $TEST_ROOT/var/nix/profiles/default/foobar ] [ -e $TEST_ROOT/var/nix/profiles/default/foobar ]
clearProfiles clearProfiles
rm -f $TEST_ROOT/.nix-channels rm -f $TEST_HOME/.nix-channels
# Test updating from a tarball # Test updating from a tarball
nix-channel --add file://$TEST_ROOT/foo/nixexprs.tar.bz2 foo nix-channel --add file://$TEST_ROOT/foo/nixexprs.tar.bz2 foo

View file

@ -1,11 +1,10 @@
source common.sh source common.sh
home=$TEST_ROOT/home
user=$(whoami) user=$(whoami)
rm -rf $home rm -rf $TEST_HOME
mkdir -p $home mkdir -p $TEST_HOME
HOME=$home USER=$user $SHELL -e -c ". ../scripts/nix-profile.sh" USER=$user $SHELL -e -c ". ../scripts/nix-profile.sh"
HOME=$home USER=$user $SHELL -e -c ". ../scripts/nix-profile.sh" # test idempotency USER=$user $SHELL -e -c ". ../scripts/nix-profile.sh" # test idempotency
[ -L $home/.nix-profile ] [ -L $TEST_HOME/.nix-profile ]
[ -e $home/.nix-channels ] [ -e $TEST_HOME/.nix-channels ]

View file

@ -2,8 +2,7 @@ source common.sh
clearStore clearStore
export HOME=$TEST_ROOT/home rm -rf $TEST_HOME
rm -rf $TEST_ROOT/home
tarroot=$TEST_ROOT/tarball tarroot=$TEST_ROOT/tarball
rm -rf $tarroot rm -rf $tarroot

View file

@ -6,8 +6,7 @@ clearProfiles
# Query installed: should be empty. # Query installed: should be empty.
test "$(nix-env -p $profiles/test -q '*' | wc -l)" -eq 0 test "$(nix-env -p $profiles/test -q '*' | wc -l)" -eq 0
export HOME=$TEST_ROOT/home mkdir -p $TEST_HOME
mkdir -p $HOME
nix-env --switch-profile $profiles/test nix-env --switch-profile $profiles/test
# Query available: should contain several. # Query available: should contain several.