diff options
author | regnat <rg@regnat.ovh> | 2021-07-20 06:57:56 +0200 |
---|---|---|
committer | regnat <rg@regnat.ovh> | 2021-07-20 06:57:56 +0200 |
commit | 87077739658b35863fb56131fd7099294c181ee5 (patch) | |
tree | ffea44c1494c39df65233816dc5b965e91f154f9 /tests | |
parent | 1af3f63be53018ab764090acab36e7c5401609cd (diff) |
Properly lock the builds of CA derivations
Make sure that we can’t build the same derivation twice at the same
time.
Fix https://github.com/NixOS/nix/issues/5029
Diffstat (limited to 'tests')
-rwxr-xr-x | tests/ca/concurrent-builds.sh | 18 | ||||
-rw-r--r-- | tests/ca/racy.nix | 15 | ||||
-rw-r--r-- | tests/local.mk | 1 |
3 files changed, 34 insertions, 0 deletions
diff --git a/tests/ca/concurrent-builds.sh b/tests/ca/concurrent-builds.sh new file mode 100755 index 000000000..68441ec76 --- /dev/null +++ b/tests/ca/concurrent-builds.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +# Ensure that we can’t build twice the same derivation concurrently. +# Regression test for https://github.com/NixOS/nix/issues/5029 + +source common.sh + +sed -i 's/experimental-features .*/& ca-derivations ca-references/' "$NIX_CONF_DIR"/nix.conf + +export NIX_TESTS_CA_BY_DEFAULT=1 + +clearStore + +for i in {0..5}; do + nix build --no-link --file ./racy.nix & +done + +wait diff --git a/tests/ca/racy.nix b/tests/ca/racy.nix new file mode 100644 index 000000000..555a15484 --- /dev/null +++ b/tests/ca/racy.nix @@ -0,0 +1,15 @@ +# A derivation that would certainly fail if several builders tried to +# build it at once. + + +with import ./config.nix; + +mkDerivation { + name = "simple"; + buildCommand = '' + mkdir $out + echo bar >> $out/foo + sleep 3 + [[ "$(cat $out/foo)" == bar ]] + ''; +} diff --git a/tests/local.mk b/tests/local.mk index ce9725543..e16c5a9b7 100644 --- a/tests/local.mk +++ b/tests/local.mk @@ -55,6 +55,7 @@ nix_tests = \ ca/nix-shell.sh \ ca/nix-run.sh \ ca/recursive.sh \ + ca/concurrent-builds.sh \ ca/nix-copy.sh # parallel.sh |