Test the NAR info cache
This commit is contained in:
		
							parent
							
								
									3593c8285d
								
							
						
					
					
						commit
						bac123ddd9
					
				
					 6 changed files with 25 additions and 29 deletions
				
			
		| 
						 | 
					@ -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)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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 ]
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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.
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue