about summary refs log tree commit diff
path: root/pkgs/build-support/trivial-builders
diff options
context:
space:
mode:
authorRobert Hensing <robert@roberthensing.nl>2021-11-01 00:06:03 +0100
committerRobert Hensing <robert@roberthensing.nl>2021-11-01 00:06:03 +0100
commit51f7c15df992de82812e3f3f3e48d677fa0ed172 (patch)
tree3e7a5249fac5781a8f86639d9ba569a4eea0636f /pkgs/build-support/trivial-builders
parente544ee88fa4590df75e221e645a03fe157a99e5b (diff)
test.trivial-builders: Add test cases, fix test runner, rename
The writeStringReferencesToFile didn't handle non-unique references
to the same path correctly.
Diffstat (limited to 'pkgs/build-support/trivial-builders')
-rwxr-xr-xpkgs/build-support/trivial-builders/test/references-test.sh (renamed from pkgs/build-support/trivial-builders/test.sh)16
-rw-r--r--pkgs/build-support/trivial-builders/test/references.nix (renamed from pkgs/build-support/trivial-builders/test.nix)29
-rw-r--r--pkgs/build-support/trivial-builders/test/sample.nix6
-rw-r--r--pkgs/build-support/trivial-builders/test/writeStringReferencesToFile.nix18
4 files changed, 41 insertions, 28 deletions
diff --git a/pkgs/build-support/trivial-builders/test.sh b/pkgs/build-support/trivial-builders/test/references-test.sh
index b7c4726a9be01..473ca6e107694 100755
--- a/pkgs/build-support/trivial-builders/test.sh
+++ b/pkgs/build-support/trivial-builders/test/references-test.sh
@@ -8,11 +8,11 @@
 #
 #  This file can be run independently (quick):
 #
-#      $ pkgs/build-support/trivial-builders/test.sh
+#      $ pkgs/build-support/trivial-builders/references-test.sh
 #
 #  or in the build sandbox with a ~20s VM overhead
 #
-#      $ nix-build -A tests.trivial-builders
+#      $ nix-build -A tests.trivial-builders.references
 #
 # -------------------------------------------------------------------------- #
 
@@ -26,9 +26,15 @@ set -euo pipefail
 cd "$(dirname ${BASH_SOURCE[0]})"  # nixpkgs root
 
 if [[ -z ${SAMPLE:-} ]]; then
-  sample=( `nix-build test/sample.nix` )
-  directRefs=( `nix-build test/invoke-writeDirectReferencesToFile.nix` )
-  references=( `nix-build test/invoke-writeReferencesToFile.nix` )
+  echo "Running the script directly is currently not supported."
+  echo "If you need to iterate, remove the raw path, which is not returned by nix-build."
+  exit 1
+#   sample=( `nix-build --no-out-link sample.nix` )
+#   directRefs=( `nix-build --no-out-link invoke-writeDirectReferencesToFile.nix` )
+#   references=( `nix-build --no-out-link invoke-writeReferencesToFile.nix` )
+#   echo "sample: ${#sample[@]}"
+#   echo "direct: ${#directRefs[@]}"
+#   echo "indirect: ${#references[@]}"
 else
   # Injected by Nix (to avoid evaluating in a derivation)
   # turn them into arrays
diff --git a/pkgs/build-support/trivial-builders/test.nix b/pkgs/build-support/trivial-builders/test/references.nix
index 420a0fd0114d0..a2bee51b13e7f 100644
--- a/pkgs/build-support/trivial-builders/test.nix
+++ b/pkgs/build-support/trivial-builders/test/references.nix
@@ -8,11 +8,11 @@
 #
 #  This file can be run independently (quick):
 #
-#      $ pkgs/build-support/trivial-builders/test.sh
+#      $ pkgs/build-support/trivial-builders/references-test.sh
 #
 #  or in the build sandbox with a ~20s VM overhead
 #
-#      $ nix-build -A tests.trivial-builders
+#      $ nix-build -A tests.trivial-builders.references
 #
 # -------------------------------------------------------------------------- #
 
@@ -33,30 +33,15 @@ nixosTest {
       builtins.toJSON [hello figlet stdenvNoCC]
     );
     environment.variables = {
-      SAMPLE = invokeSamples ./test/sample.nix;
-      REFERENCES = invokeSamples ./test/invoke-writeReferencesToFile.nix;
-      DIRECT_REFS = invokeSamples ./test/invoke-writeDirectReferencesToFile.nix;
+      SAMPLE = invokeSamples ./sample.nix;
+      REFERENCES = invokeSamples ./invoke-writeReferencesToFile.nix;
+      DIRECT_REFS = invokeSamples ./invoke-writeDirectReferencesToFile.nix;
     };
   };
   testScript =
-    let
-      sample = import ./test/sample.nix { inherit pkgs; };
-      samplePaths = lib.unique (lib.attrValues sample);
-      sampleText = pkgs.writeText "sample-text" (lib.concatStringsSep "\n" samplePaths);
-      stringReferencesText =
-        pkgs.writeStringReferencesToFile
-          ((lib.concatMapStringsSep "fillertext"
-            (d: "${d}")
-            (lib.attrValues sample)) + ''
-              STORE=${builtins.storeDir};\nsystemctl start bar-foo.service
-            '');
-    in ''
+    ''
       machine.succeed("""
-        ${./test.sh} 2>/dev/console
-      """)
-      machine.succeed("""
-        echo >&2 Testing string references...
-        diff -U3 <(sort ${stringReferencesText}) <(sort ${sampleText})
+        ${./references-test.sh} 2>/dev/console
       """)
     '';
   meta = {
diff --git a/pkgs/build-support/trivial-builders/test/sample.nix b/pkgs/build-support/trivial-builders/test/sample.nix
index 807594d74bb3b..a4eedce8417eb 100644
--- a/pkgs/build-support/trivial-builders/test/sample.nix
+++ b/pkgs/build-support/trivial-builders/test/sample.nix
@@ -1,10 +1,11 @@
-{ pkgs ? import ../../../.. { config = {}; overlays = []; } }:
+{ pkgs ? import ../../../.. { config = { }; overlays = [ ]; } }:
 let
   inherit (pkgs)
     figlet
     zlib
     hello
     writeText
+    runCommand
     ;
 in
 {
@@ -17,7 +18,10 @@ in
   helloRef = writeText "hi" "hello ${hello}";
   helloRefDup = writeText "hi" "hello ${hello}";
   path = ./invoke-writeReferencesToFile.nix;
+  pathLike.outPath = ./invoke-writeReferencesToFile.nix;
   helloFigletRef = writeText "hi" "hello ${hello} ${figlet}";
+  selfRef = runCommand "self-ref-1" {} "echo $out >$out";
+  selfRef2 = runCommand "self-ref-2" {} ''echo "${figlet}, $out" >$out'';
   inherit (pkgs)
     emptyFile
     emptyDirectory
diff --git a/pkgs/build-support/trivial-builders/test/writeStringReferencesToFile.nix b/pkgs/build-support/trivial-builders/test/writeStringReferencesToFile.nix
new file mode 100644
index 0000000000000..b93b43b74aa49
--- /dev/null
+++ b/pkgs/build-support/trivial-builders/test/writeStringReferencesToFile.nix
@@ -0,0 +1,18 @@
+{ callPackage, lib, pkgs, runCommand, writeText, writeStringReferencesToFile }:
+let
+  sample = import ./sample.nix { inherit pkgs; };
+  samplePaths = lib.unique (lib.attrValues sample);
+  stri = x: "${x}";
+  sampleText = writeText "sample-text" (lib.concatStringsSep "\n" (lib.unique (map stri samplePaths)));
+  stringReferencesText =
+    writeStringReferencesToFile
+      ((lib.concatMapStringsSep "fillertext"
+        stri
+        (lib.attrValues sample)) + ''
+        STORE=${builtins.storeDir};\nsystemctl start bar-foo.service
+      '');
+in
+runCommand "test-writeStringReferencesToFile" { } ''
+  diff -U3 <(sort ${stringReferencesText}) <(sort ${sampleText})
+  touch $out
+''