![John Ericson](/assets/img/avatar_default.png)
Use `set -u` and `set -o pipefail` to catch accidental mistakes and failures more strongly. - `set -u` catches the use of undefined variables - `set -o pipefail` catches failures (like `set -e`) earlier in the pipeline. This makes the tests a bit more robust. It is nice to read code not worrying about these spurious success paths (via uncaught) errors undermining the tests. Indeed, I caught some bugs doing this. There are a few tests where we run a command that should fail, and then search its output to make sure the failure message is one that we expect. Before, since the `grep` was the last command in the pipeline the exit code of those failing programs was silently ignored. Now with `set -o pipefail` it won't be, and we have to do something so the expected failure doesn't accidentally fail the test. To do that we use `expect` and a new `expectStderr` to check for the exact failing exit code. See the comments on each for why. `grep -q` is replaced with `grepQuiet`, see the comments on that function for why. `grep -v` when we just want the exit code is replaced with `grepInverse, see the comments on that function for why. `grep -q -v` together is, surprise surprise, replaced with `grepQuietInverse`, which is both combined. Co-authored-by: Robert Hensing <roberth@users.noreply.github.com>
29 lines
1 KiB
Bash
29 lines
1 KiB
Bash
# Test that we can successfully migrate from an older db schema
|
|
|
|
# Only run this if we have an older Nix available
|
|
# XXX: This assumes that the `daemon` package is older than the `client` one
|
|
if [[ -z "${NIX_DAEMON_PACKAGE-}" ]]; then
|
|
exit 99
|
|
fi
|
|
|
|
source common.sh
|
|
|
|
killDaemon
|
|
|
|
# Fill the db using the older Nix
|
|
PATH_WITH_NEW_NIX="$PATH"
|
|
export PATH="${NIX_DAEMON_PACKAGE}/bin:$PATH"
|
|
clearStore
|
|
nix-build simple.nix --no-out-link
|
|
nix-store --generate-binary-cache-key cache1.example.org $TEST_ROOT/sk1 $TEST_ROOT/pk1
|
|
dependenciesOutPath=$(nix-build dependencies.nix --no-out-link --secret-key-files "$TEST_ROOT/sk1")
|
|
fixedOutPath=$(IMPURE_VAR1=foo IMPURE_VAR2=bar nix-build fixed.nix -A good.0 --no-out-link)
|
|
|
|
# Migrate to the new schema and ensure that everything's there
|
|
export PATH="$PATH_WITH_NEW_NIX"
|
|
info=$(nix path-info --json $dependenciesOutPath)
|
|
[[ $info =~ '"ultimate":true' ]]
|
|
[[ $info =~ 'cache1.example.org' ]]
|
|
nix verify -r "$fixedOutPath"
|
|
nix verify -r "$dependenciesOutPath" --sigs-needed 1 --trusted-public-keys $(cat $TEST_ROOT/pk1)
|