testing: migrate optimise-store.sh
Change-Id: I900183e11ba1405c9aa72028a8902ad8cf023e69
This commit is contained in:
@@ -59,7 +59,6 @@ functional_tests_scripts = [
|
||||
'fetchTree-file.sh',
|
||||
'simple.sh',
|
||||
'referrers.sh',
|
||||
'optimise-store.sh',
|
||||
'substitute-with-invalid-ca.sh',
|
||||
'signing.sh',
|
||||
'gc-non-blocking.sh',
|
||||
|
||||
@@ -1,44 +0,0 @@
|
||||
source common.sh
|
||||
|
||||
clearStore
|
||||
|
||||
outPath1=$(echo 'with import ./config.nix; mkDerivation { name = "foo1"; builder = builtins.toFile "builder" "mkdir $out; echo hello > $out/foo"; }' | nix-build - --no-out-link --auto-optimise-store)
|
||||
outPath2=$(echo 'with import ./config.nix; mkDerivation { name = "foo2"; builder = builtins.toFile "builder" "mkdir $out; echo hello > $out/foo"; }' | nix-build - --no-out-link --auto-optimise-store)
|
||||
|
||||
inode1="$(stat --format=%i $outPath1/foo)"
|
||||
inode2="$(stat --format=%i $outPath2/foo)"
|
||||
if [ "$inode1" != "$inode2" ]; then
|
||||
echo "inodes do not match"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
nlink="$(stat --format=%h $outPath1/foo)"
|
||||
if [ "$nlink" != 3 ]; then
|
||||
echo "link count incorrect"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
outPath3=$(echo 'with import ./config.nix; mkDerivation { name = "foo3"; builder = builtins.toFile "builder" "mkdir $out; echo hello > $out/foo"; }' | nix-build - --no-out-link)
|
||||
|
||||
inode3="$(stat --format=%i $outPath3/foo)"
|
||||
if [ "$inode1" = "$inode3" ]; then
|
||||
echo "inodes match unexpectedly"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# XXX: This should work through the daemon too
|
||||
NIX_REMOTE="" nix-store --optimise
|
||||
|
||||
inode1="$(stat --format=%i $outPath1/foo)"
|
||||
inode3="$(stat --format=%i $outPath3/foo)"
|
||||
if [ "$inode1" != "$inode3" ]; then
|
||||
echo "inodes do not match"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
nix-store --gc
|
||||
|
||||
if [ -n "$(ls $NIX_STORE_DIR/.links)" ]; then
|
||||
echo ".links directory not empty after GC"
|
||||
exit 1
|
||||
fi
|
||||
@@ -0,0 +1,46 @@
|
||||
from pathlib import Path
|
||||
|
||||
from testlib.fixtures.file_helper import with_files
|
||||
from testlib.fixtures.nix import Nix
|
||||
from testlib.utils import get_global_asset
|
||||
|
||||
|
||||
@with_files({"config.nix": get_global_asset("config.nix")})
|
||||
class TestOptimizeStore:
|
||||
def _test_optimise_store(self, nix: Nix):
|
||||
def build(name: str, *extra_args: str) -> Path:
|
||||
expr = f"""
|
||||
with import ./config.nix; mkDerivation {{
|
||||
name = "{name}";
|
||||
builder = builtins.toFile "builder" "mkdir $out; echo hello > $out/foo";
|
||||
}}
|
||||
"""
|
||||
|
||||
result = nix.nix_build(["-E", expr, "--no-out-link", *extra_args]).run().ok()
|
||||
return Path(result.stdout_plain)
|
||||
|
||||
out1 = build("foo1", "--auto-optimise-store")
|
||||
out2 = build("foo2", "--auto-optimise-store")
|
||||
|
||||
assert (out1 / "foo").samefile(out2 / "foo")
|
||||
assert (out1 / "foo").stat().st_nlink == 3
|
||||
|
||||
out3 = build("foo3", "--no-auto-optimise-store")
|
||||
|
||||
assert not (out1 / "foo").samefile(out3 / "foo")
|
||||
|
||||
nix.nix_store(["--optimise"]).run().ok()
|
||||
|
||||
assert (out1 / "foo").samefile(out3 / "foo")
|
||||
|
||||
nix.nix_store(["--gc"]).run().ok()
|
||||
|
||||
assert list((nix.env.dirs.real_store_dir / ".links").glob("*")) == []
|
||||
|
||||
def test_optimise_store(self, nix: Nix):
|
||||
self._test_optimise_store(nix)
|
||||
|
||||
def test_optimise_store_daemon(self, nix: Nix):
|
||||
nix.settings.auto_optimise_store = True
|
||||
with nix.daemon([], {"trusted-users": "*"}) as inner:
|
||||
self._test_optimise_store(inner)
|
||||
Reference in New Issue
Block a user