2024-05-28 19:43:04 +03:00
#!/usr/bin/env bash
2006-03-01 14:15:33 +02:00
source common.sh
2024-06-16 18:56:50 +03:00
clearStoreIfPossible
2009-03-18 16:48:42 +02:00
2011-10-11 00:32:34 +03:00
drvPath = $( nix-instantiate dependencies.nix)
2004-05-04 16:22:33 +03:00
2005-02-09 14:57:13 +02:00
echo " derivation is $drvPath "
2004-05-04 16:22:33 +03:00
2020-05-12 14:49:55 +03:00
nix-store -q --tree " $drvPath " | grep '───.*builder-dependencies-input-1.sh'
2006-02-22 15:55:41 +02:00
# Test Graphviz graph generation.
2011-10-11 00:32:34 +03:00
nix-store -q --graph " $drvPath " > $TEST_ROOT /graph
2006-02-22 15:55:41 +02:00
if test -n " $dot " ; then
# Does it parse?
$dot < $TEST_ROOT /graph
2008-06-09 16:52:45 +03:00
fi
2006-02-22 15:55:41 +02:00
2015-09-04 23:23:08 +03:00
# Test GraphML graph generation
nix-store -q --graphml " $drvPath " > $TEST_ROOT /graphml
2011-10-11 00:32:34 +03:00
outPath = $( nix-store -rvv " $drvPath " ) || fail "build failed"
2004-05-04 16:22:33 +03:00
2006-02-22 15:55:41 +02:00
# Test Graphviz graph generation.
2011-10-11 00:32:34 +03:00
nix-store -q --graph " $outPath " > $TEST_ROOT /graph
2006-02-22 15:55:41 +02:00
if test -n " $dot " ; then
# Does it parse?
$dot < $TEST_ROOT /graph
2020-03-24 15:17:10 +02:00
fi
2006-02-22 15:55:41 +02:00
2020-03-24 15:17:10 +02:00
nix-store -q --tree " $outPath " | grep '───.*dependencies-input-2'
2006-02-22 15:55:41 +02:00
2004-05-04 16:22:33 +03:00
echo " output path is $outPath "
2024-06-12 19:42:38 +03:00
text = $( cat " $outPath /foobar " )
2004-05-04 16:22:33 +03:00
if test " $text " != "FOOBAR" ; then exit 1; fi
2011-10-11 00:32:34 +03:00
deps = $( nix-store -quR " $drvPath " )
2004-05-04 16:22:33 +03:00
2005-01-25 12:55:33 +02:00
echo " output closure contains $deps "
2004-05-04 16:22:33 +03:00
# The output path should be in the closure.
2021-12-09 17:26:46 +02:00
echo " $deps " | grepQuiet " $outPath "
2004-05-04 16:22:33 +03:00
# Input-1 is not retained.
2021-12-09 17:26:46 +02:00
if echo " $deps " | grepQuiet "dependencies-input-1" ; then exit 1; fi
2004-05-04 16:22:33 +03:00
# Input-2 is retained.
2005-01-25 13:18:03 +02:00
input2OutPath = $( echo " $deps " | grep "dependencies-input-2" )
2005-12-13 23:04:48 +02:00
# The referrers closure of input-2 should include outPath.
2011-10-11 00:32:34 +03:00
nix-store -q --referrers-closure " $input2OutPath " | grep " $outPath "
2005-02-09 14:57:13 +02:00
# Check that the derivers are set properly.
2011-10-11 00:32:34 +03:00
test $( nix-store -q --deriver " $outPath " ) = " $drvPath "
2021-12-09 17:26:46 +02:00
nix-store -q --deriver " $input2OutPath " | grepQuiet -- "-input-2.drv"
2023-08-23 15:00:00 +03:00
# --valid-derivers returns the currently single valid .drv file
test " $( nix-store -q --valid-derivers " $outPath " ) " = " $drvPath "
# instantiate a different drv with the same output
drvPath2 = $( nix-instantiate dependencies.nix --argstr hashInvalidator yay)
# now --valid-derivers returns both
test " $( nix-store -q --valid-derivers " $outPath " | sort) " = " $( sort <<< " $drvPath " $'\n' " $drvPath2 " ) "
2024-06-16 18:56:50 +03:00
TODO_NixOS # The following --delete fails, because it seems to be still alive. This might be caused by a different test using the same path. We should try make the derivations unique, e.g. naming after tests, and adding a timestamp that's constant for that test script run.
2023-08-23 15:00:00 +03:00
# check that nix-store --valid-derivers only returns existing drv
nix-store --delete " $drvPath "
test " $( nix-store -q --valid-derivers " $outPath " ) " = " $drvPath2 "
# check that --valid-derivers returns nothing when there are no valid derivers
nix-store --delete " $drvPath2 "
test -z " $( nix-store -q --valid-derivers " $outPath " ) "