test-utilities: version test

Extract 'version test' to a reusable test utility as discussed in
https://github.com/NixOS/nixpkgs/pull/119636#issuecomment-826137021 and
This commit is contained in:
Arnout Engelen 2021-05-06 10:08:08 +02:00
parent 39e6bf7647
commit b68130fd2c
No known key found for this signature in database
GPG key ID: 061107B0F74A6DAA
5 changed files with 57 additions and 11 deletions

View file

@ -2,6 +2,7 @@
, bzip2, zlib, libX11, libXext, libXt, fontconfig, freetype, ghostscript, libjpeg, djvulibre
, lcms2, openexr, libpng, librsvg, libtiff, libxml2, openjpeg, libwebp, libheif
, ApplicationServices
, testVersion, imagemagick
}:
let
@ -72,6 +73,9 @@ stdenv.mkDerivation rec {
done
'';
passthru.tests.version =
testVersion { package = imagemagick; };
meta = with lib; {
homepage = "http://www.imagemagick.org/";
description = "A software suite to create, edit, compose, or convert bitmap images";

View file

@ -1,4 +1,9 @@
{ lib, stdenv, fetchurl }:
{ lib
, stdenv
, fetchurl
, testVersion
, hello
}:
stdenv.mkDerivation rec {
pname = "hello";
@ -11,6 +16,9 @@ stdenv.mkDerivation rec {
doCheck = true;
passthru.tests.version =
testVersion { package = hello; };
meta = with lib; {
description = "A program that produces a familiar, friendly greeting";
longDescription = ''

View file

@ -1,7 +1,7 @@
{ lib
, fetchFromGitHub
, buildGoModule
, runCommand
, testVersion
, seaweedfs
}:
@ -20,10 +20,8 @@ buildGoModule rec {
subPackages = [ "weed" ];
passthru.tests.check-version = runCommand "weed-version" { meta.timeout = 3; } ''
${seaweedfs}/bin/weed version | grep -Fw ${version}
touch $out
'';
passthru.tests.version =
testVersion { package = seaweedfs; command = "weed version"; };
meta = with lib; {
description = "Simple and highly scalable distributed file system";

View file

@ -5,7 +5,7 @@
, ant
, jre
, makeWrapper
, runCommand
, testVersion
, key
}:
@ -51,10 +51,13 @@ in stdenv.mkDerivation rec {
--add-flags "-cp $out/share/java/KeY.jar de.uka.ilkd.key.core.Main"
'';
passthru.tests.check-version = runCommand "key-help" {} ''
${key}/bin/KeY --help | grep 2.5 # Wrong version in the code. On next version change to ${version}
touch $out
'';
passthru.tests.version =
testVersion {
package = key;
command = "KeY --help";
# Wrong '2.5' version in the code. On next version change to ${version}
version = "2.5";
};
meta = with lib; {
description = "Java formal verification tool";

View file

@ -541,4 +541,37 @@ rec {
phases = "unpackPhase patchPhase installPhase";
installPhase = "cp -R ./ $out";
};
/* Checks the command output contains the specified version
*
* Although simplistic, this test assures that the main program
* can run. While there's no substitute for a real test case,
* it does catch dynamic linking errors and such. It also provides
* some protection against accidentally building the wrong version,
* for example when using an 'old' hash in a fixed-output derivation.
*
* Examples:
*
* passthru.tests.version = testVersion { package = hello; };
*
* passthru.tests.version = testVersion {
* package = seaweedfs;
* command = "weed version";
* };
*
* passthru.tests.version = testVersion {
* package = key;
* command = "KeY --help";
* # Wrong '2.5' version in the code. Drop on next version.
* version = "2.5";
* };
*/
testVersion =
{ package,
command ? "${package.meta.mainProgram or package.pname or package.name} --version",
version ? package.version,
}: runCommand "test-version" { nativeBuildInputs = [ package ]; meta.timeout = 60; } ''
${command} | grep -Fw ${version}
touch $out
'';
}