nix-super/tests/overlay-local-store/inner.sh

94 lines
2.4 KiB
Bash
Raw Normal View History

2023-03-17 05:00:14 +02:00
#!/usr/bin/env bash
set -eu -o pipefail
set -x
source common.sh
storeDirs
2023-03-17 05:00:14 +02:00
initLowerStore
2023-03-17 05:00:14 +02:00
mountOverlayfs
2023-05-08 21:47:39 +03:00
2023-05-08 23:00:47 +03:00
### Check status
2023-03-17 05:00:14 +02:00
2023-05-08 23:00:47 +03:00
# Checking for path in lower layer
stat $(toRealPath "$storeA/nix/store" "$path")
2023-03-17 05:00:14 +02:00
2023-05-08 23:00:47 +03:00
# Checking for path in upper layer (should fail)
expect 1 stat $(toRealPath "$storeBTop" "$path")
2023-03-17 05:00:14 +02:00
2023-05-08 23:00:47 +03:00
# Checking for path in overlay store matching lower layer
diff $(toRealPath "$storeA/nix/store" "$path") $(toRealPath "$TEST_ROOT/merged-store/nix/store" "$path")
2023-03-17 05:00:14 +02:00
2023-05-10 00:20:58 +03:00
# Checking requisites query agreement
[[ \
$(nix-store --store $storeA --query --requisites $drvPath) \
== \
$(nix-store --store $storeB --query --requisites $drvPath) \
]]
# Checking referrers query agreement
busyboxStore=$(nix store --store $storeA add-path $busybox)
[[ \
$(nix-store --store $storeA --query --referrers $busyboxStore) \
== \
$(nix-store --store $storeB --query --referrers $busyboxStore) \
]]
2023-05-09 23:49:44 +03:00
# Checking derivers query agreement
[[ \
$(nix-store --store $storeA --query --deriver $path) \
== \
$(nix-store --store $storeB --query --deriver $path) \
]]
2023-03-17 05:00:14 +02:00
2023-05-09 23:49:44 +03:00
# Checking outputs query agreement
[[ \
$(nix-store --store $storeA --query --outputs $drvPath) \
== \
$(nix-store --store $storeB --query --outputs $drvPath) \
]]
2023-05-09 23:49:44 +03:00
# Verifying path in lower layer
nix-store --verify-path --store "$storeA" "$path"
# Verifying path in merged-store
nix-store --verify-path --store "$storeB" "$path"
hashPart=$(echo $path | sed "s^$NIX_STORE_DIR/^^" | sed 's/-.*//')
# Lower store can find from hash part
[[ $(nix store --store $storeA path-from-hash-part $hashPart) == $path ]]
# merged store can find from hash part
[[ $(nix store --store $storeB path-from-hash-part $hashPart) == $path ]]
2023-05-08 23:00:47 +03:00
### Do a redundant add
2023-03-17 05:00:14 +02:00
2023-05-08 23:03:32 +03:00
# upper layer should not have it
expect 1 stat $(toRealPath "$storeBTop/nix/store" "$path")
path=$(nix-store --store "$storeB" --add ../dummy)
2023-05-08 23:00:47 +03:00
# lower store should have it from before
stat $(toRealPath "$storeA/nix/store" "$path")
2023-05-08 23:03:32 +03:00
# upper layer should still not have it (no redundant copy)
expect 1 stat $(toRealPath "$storeB/nix/store" "$path")
2023-05-09 17:22:38 +03:00
### Do a build in overlay store
path=$(nix-build ../hermetic.nix --arg busybox $busybox --arg seed 2 --store "$storeB" --no-out-link)
2023-05-09 17:22:38 +03:00
# Checking for path in lower layer (should fail)
expect 1 stat $(toRealPath "$storeA/nix/store" "$path")
# Checking for path in upper layer
stat $(toRealPath "$storeBTop" "$path")
# Verifying path in overlay store
nix-store --verify-path --store "$storeB" "$path"