about summary refs log tree commit diff
path: root/tests
diff options
context:
space:
mode:
authorEelco Dolstra <e.dolstra@tudelft.nl>2004-06-20T19·17+0000
committerEelco Dolstra <e.dolstra@tudelft.nl>2004-06-20T19·17+0000
commit112ee89501a936ad9c492780be6b63f53b2eb9ca (patch)
tree2070bc757fa986b062b7964619ad927b272fd1de /tests
parentbafb2357d1ab5f7aef8ce4495f5ab8b835359f63 (diff)
* Re-enable support for substitutes in the normaliser.
* A better substitute mechanism.

  Instead of generating a store expression for each store path for
  which we have a substitute, we can have a single store expression
  that builds a generic program that is invoked to build the desired
  store path, which is passed as an argument.

  This means that operations like `nix-pull' only produce O(1) files
  instead of O(N) files in the store when registering N substitutes.
  (It consumes O(N) database storage, of course, but that's not a
  performance problem).

* Added a test for the substitute mechanism.
  
* `nix-store --substitute' reads the substitutes from standard input,
  instead of from the command line.  This prevents us from running
  into the kernel's limit on command line length.

Diffstat (limited to 'tests')
-rw-r--r--tests/Makefile.am3
-rw-r--r--tests/substituter.builder.sh22
-rw-r--r--tests/substituter.nix.in6
-rw-r--r--tests/substitutes.nix.in6
-rw-r--r--tests/substitutes.sh25
5 files changed, 61 insertions, 1 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am
index 4256625d9dc2..3f10b402b4b5 100644
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@ -17,9 +17,10 @@ dependencies.sh: dependencies.nix
 locking.sh: locking.nix
 parallel.sh: parallel.nix
 build-hook.sh: build-hook.nix
+substitutes.sh: substitutes.nix substituter.nix
 
 TESTS = init.sh simple.sh dependencies.sh locking.sh parallel.sh \
-  build-hook.sh
+  build-hook.sh substitutes.sh
 
 XFAIL_TESTS =
 
diff --git a/tests/substituter.builder.sh b/tests/substituter.builder.sh
new file mode 100644
index 000000000000..c9ce0a08c6a8
--- /dev/null
+++ b/tests/substituter.builder.sh
@@ -0,0 +1,22 @@
+# Set a PATH (!!! impure).
+export PATH=/bin:/usr/bin:$PATH
+
+mkdir $out
+
+cat > $out/substituter <<EOF
+#! /bin/sh -ex
+echo \$*
+
+case \$* in
+    *aaaa*)
+        echo "Closure([\"\$2\"],[(\"\$2\",[])])" > \$1
+        ;;
+    *)
+        mkdir \$1
+        echo \$3 \$4 > \$1/hello
+        ;;
+esac        
+EOF
+
+chmod +x $out/substituter
+
diff --git a/tests/substituter.nix.in b/tests/substituter.nix.in
new file mode 100644
index 000000000000..8f9da530c38e
--- /dev/null
+++ b/tests/substituter.nix.in
@@ -0,0 +1,6 @@
+derivation {
+  name = "substituter";
+  system = "@system@";
+  builder = "@shell@";
+  args = ["-e" "-x" ./substituter.builder.sh];
+}
\ No newline at end of file
diff --git a/tests/substitutes.nix.in b/tests/substitutes.nix.in
new file mode 100644
index 000000000000..e3473621608d
--- /dev/null
+++ b/tests/substitutes.nix.in
@@ -0,0 +1,6 @@
+derivation {
+  name = "substitutes";
+  system = "@system@";
+  builder = "@shell@";
+  args = ["-e" "-x" ./simple.builder.sh];
+}
\ No newline at end of file
diff --git a/tests/substitutes.sh b/tests/substitutes.sh
new file mode 100644
index 000000000000..ea214a8a8a43
--- /dev/null
+++ b/tests/substitutes.sh
@@ -0,0 +1,25 @@
+# Instantiate.
+storeExpr=$($TOP/src/nix-instantiate/nix-instantiate substitutes.nix)
+echo "store expr is $storeExpr"
+
+# Find the output path.
+outPath=$($TOP/src/nix-store/nix-store -qvvvvv "$storeExpr")
+echo "output path is $outPath"
+
+# Instantiate the substitute program.
+subExpr=$($TOP/src/nix-instantiate/nix-instantiate substituter.nix)
+echo "store expr is $subExpr"
+
+# Register a fake successor, and a substitute for it.
+suc=$NIX_STORE_DIR/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa-s.store
+(echo $suc && echo $subExpr && echo "/substituter" && echo 3 && echo $outPath && echo Hallo && echo Wereld) | $TOP/src/nix-store/nix-store --substitute
+$TOP/src/nix-store/nix-store --successor $storeExpr $suc
+
+# Register a substitute for the output path.
+(echo $outPath && echo $subExpr && echo "/substituter" && echo 3 && echo $outPath && echo Hallo && echo Wereld) | $TOP/src/nix-store/nix-store --substitute
+
+
+$TOP/src/nix-store/nix-store -rvvvvv "$storeExpr"
+
+text=$(cat "$outPath"/hello)
+if test "$text" != "Hallo Wereld"; then exit 1; fi