Unverified Commit 6ac78f11 authored by Robert Hensing's avatar Robert Hensing Committed by GitHub
Browse files

Merge pull request #204462 from ShamrockLee/test-references

tests.trivial-builders.references: refactor and move expressions into trivial-builders/test/references
parents 676285f3 7950a226
Loading
Loading
Loading
Loading
+7 −4
Original line number Diff line number Diff line
@@ -14,21 +14,24 @@
{ callPackage, lib, stdenv }:
let
  inherit (lib) recurseIntoAttrs;
  references = callPackage ./references {};
in
recurseIntoAttrs {
  concat = callPackage ./concat-test.nix {};
  linkFarm = callPackage ./link-farm.nix {};
  overriding = callPackage ../test-overriding.nix {};
  references =
  # VM test not supported beyond linux yet
  references =
    if stdenv.hostPlatform.isLinux
    then callPackage ./references.nix {}
    else null;
    then references
    else {};
  writeCBin = callPackage ./writeCBin.nix {};
  writeShellApplication = callPackage ./writeShellApplication.nix {};
  writeScriptBin = callPackage ./writeScriptBin.nix {};
  writeShellScript = callPackage ./write-shell-script.nix {};
  writeShellScriptBin = callPackage ./writeShellScriptBin.nix {};
  writeStringReferencesToFile = callPackage ./writeStringReferencesToFile.nix {};
  writeStringReferencesToFile = callPackage ./writeStringReferencesToFile.nix {
    inherit (references) samples;
  };
  writeTextFile = callPackage ./write-text-file.nix {};
}
+0 −4
Original line number Diff line number Diff line
{ pkgs ? import ../../../.. { config = {}; overlays = []; } }:
pkgs.lib.mapAttrs
  (k: v: pkgs.writeDirectReferencesToFile v)
  (import ./sample.nix { inherit pkgs; })
+0 −4
Original line number Diff line number Diff line
{ pkgs ? import ../../../.. { config = {}; overlays = []; } }:
pkgs.lib.mapAttrs
  (k: v: pkgs.writeReferencesToFile v)
  (import ./sample.nix { inherit pkgs; })
+0 −52
Original line number Diff line number Diff line
{ lib, testers, pkgs, writeText, hello, figlet, stdenvNoCC }:

# -------------------------------------------------------------------------- #
#
#                         trivial-builders test
#
# -------------------------------------------------------------------------- #
#
#  This file can be run independently (quick):
#
#      $ pkgs/build-support/trivial-builders/references-test.sh
#
#  or in the build sandbox with a ~20s VM overhead
#
#      $ nix-build -A tests.trivial-builders.references
#
# -------------------------------------------------------------------------- #

let
  invokeSamples = file:
    lib.concatStringsSep " " (
      lib.attrValues (import file { inherit pkgs; })
    );
in
testers.nixosTest {
  name = "nixpkgs-trivial-builders";
  nodes.machine = { ... }: {
    virtualisation.writableStore = true;

    # Test runs without network, so we don't substitute and prepare our deps
    nix.settings.substituters = lib.mkForce [];
    environment.etc."pre-built-paths".source = writeText "pre-built-paths" (
      builtins.toJSON [hello figlet stdenvNoCC]
    );
    environment.variables = {
      SAMPLE = invokeSamples ./sample.nix;
      REFERENCES = invokeSamples ./invoke-writeReferencesToFile.nix;
      DIRECT_REFS = invokeSamples ./invoke-writeDirectReferencesToFile.nix;
    };
  };
  testScript =
    ''
      machine.succeed("""
        ${./references-test.sh} 2>/dev/console
      """)
    '';
  meta = {
    maintainers = with lib.maintainers; [
      roberth
    ];
  };
}
+124 −0
Original line number Diff line number Diff line
{ lib
, stdenvNoCC
, testers
, callPackage
, writeText
  # nativeBuildInputs
, shellcheck-minimal
  # Samples
, samples ? cleanSamples (callPackage ./samples.nix { })
  # Filter out the non-string-like attributes such as <pkg>.override added by
  # callPackage.
, cleanSamples ? lib.filterAttrs (n: lib.isStringLike)
  # Test targets
, writeDirectReferencesToFile
, writeReferencesToFile
}:

# -------------------------------------------------------------------------- #
#
#                         trivial-builders test
#
# -------------------------------------------------------------------------- #
#
# Execute this build script directly (quick):
#
# * Classic
#   $ NIX_PATH="nixpkgs=$PWD" nix-shell -p tests.trivial-builders.references.testScriptBin --run references-test
#
# * Flake-based
#   $ nix run .#tests.trivial-builders.references.testScriptBin
#
# or in the build sandbox with a ~20s VM overhead:
#
# * Classic
#   $ nix-build --no-out-link -A tests.trivial-builders.references
#
# * Flake-based
#   $ nix build -L --no-link .#tests.trivial-builders.references
#
# -------------------------------------------------------------------------- #

let
  # Map each attribute to an element specification of Bash associative arrary
  # and concatenate them with white spaces, to be used to define a
  # one-line Bash associative array.
  samplesToString = attrs:
    lib.concatMapStringsSep " " (name: "[${name}]=${lib.escapeShellArg "${attrs.${name}}"}") (builtins.attrNames attrs);

  references = lib.mapAttrs (n: v: writeReferencesToFile v) samples;
  directReferences = lib.mapAttrs (n: v: writeDirectReferencesToFile v) samples;

  testScriptBin = stdenvNoCC.mkDerivation (finalAttrs: {
    name = "references-test";

    src = ./references-test.sh;
    dontUnpack = true;
    dontBuild = true;

    installPhase = ''
      runHook preInstall
      mkdir -p "$out/bin"
      substitute "$src" "$out/bin/${finalAttrs.meta.mainProgram}" \
        --replace "@SAMPLES@" ${lib.escapeShellArg (samplesToString samples)} \
        --replace "@REFERENCES@" ${lib.escapeShellArg (samplesToString references)} \
        --replace "@DIRECT_REFS@" ${lib.escapeShellArg (samplesToString directReferences)}
      runHook postInstall
      chmod +x "$out/bin/${finalAttrs.meta.mainProgram}"
    '';

    doInstallCheck = true;
    nativeInstallCheckInputs = [
      shellcheck-minimal
    ];
    installCheckPhase = ''
      runHook preInstallCheck
      shellcheck "$out/bin/${finalAttrs.meta.mainProgram}"
      runHook postInstallCheck
    '';

    passthru = {
      inherit
        directReferences
        references
        samples
        ;
    };

    meta = with lib; {
      mainProgram = "references-test";
    };
  });
in
testers.nixosTest {
  name = "nixpkgs-trivial-builders";
  nodes.machine = { ... }: {
    virtualisation.writableStore = true;

    # Test runs without network, so we don't substitute and prepare our deps
    nix.settings.substituters = lib.mkForce [ ];
    environment.etc."pre-built-paths".source = writeText "pre-built-paths" (
      builtins.toJSON [ testScriptBin ]
    );
  };
  testScript =
    ''
      machine.succeed("""
        ${lib.getExe testScriptBin} 2>/dev/console
      """)
    '';
  passthru = {
    inherit
      directReferences
      references
      samples
      testScriptBin
      ;
  };
  meta = {
    maintainers = with lib.maintainers; [
      roberth
      ShamrockLee
    ];
  };
}
Loading