diff options
author | Timo Kaufmann <timokau@zoho.com> | 2018-11-07 00:05:22 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-11-07 00:05:22 +0100 |
commit | 6141939d6e0a77c84905efd560c03c3032164ef1 (patch) | |
tree | 57930c5d117d67174ca6ba7f2219549eb4c2c116 | |
parent | 13892da3e76351e0a280fa390e8cb49b1b8b9265 (diff) | |
parent | 02e1f00ffdd0c1a74fbc0be5f314b8921b0c9165 (diff) | |
download | nixlib-6141939d6e0a77c84905efd560c03c3032164ef1.tar nixlib-6141939d6e0a77c84905efd560c03c3032164ef1.tar.gz nixlib-6141939d6e0a77c84905efd560c03c3032164ef1.tar.bz2 nixlib-6141939d6e0a77c84905efd560c03c3032164ef1.tar.lz nixlib-6141939d6e0a77c84905efd560c03c3032164ef1.tar.xz nixlib-6141939d6e0a77c84905efd560c03c3032164ef1.tar.zst nixlib-6141939d6e0a77c84905efd560c03c3032164ef1.zip |
Merge pull request #44439 from Ekleog/meta-tests
[RFC] Use `meta.tests` to link from packages to the tests that test them
-rw-r--r-- | doc/meta.xml | 55 | ||||
-rw-r--r-- | nixos/lib/testing.nix | 4 | ||||
-rw-r--r-- | nixos/tests/opensmtpd.nix | 2 | ||||
-rw-r--r-- | pkgs/servers/mail/dovecot/default.nix | 4 | ||||
-rw-r--r-- | pkgs/servers/mail/opensmtpd/default.nix | 5 | ||||
-rw-r--r-- | pkgs/stdenv/generic/check-meta.nix | 12 | ||||
-rw-r--r-- | pkgs/top-level/all-packages.nix | 20 |
7 files changed, 98 insertions, 4 deletions
diff --git a/doc/meta.xml b/doc/meta.xml index 496b32916552..51c7b2dfc88f 100644 --- a/doc/meta.xml +++ b/doc/meta.xml @@ -252,6 +252,61 @@ meta.platforms = stdenv.lib.platforms.linux; </varlistentry> <varlistentry> <term> + <varname>tests</varname> + </term> + <listitem> + <para> + An attribute set with as values tests. A test is a derivation, which + builds successfully when the test passes, and fails to build otherwise. A + derivation that is a test requires some <literal>meta</literal> elements + to be defined: <literal>needsVMSupport</literal> (automatically filled-in + for NixOS tests) and <literal>timeout</literal>. + </para> + <para> + The NixOS tests are available as <literal>nixosTests</literal> in + parameters of derivations. For instance, the OpenSMTPD derivation + includes lines similar to: +<programlisting> +{ /* ... */, nixosTests }: +{ + # ... + meta.tests = { + basic-functionality-and-dovecot-integration = nixosTests.opensmtpd; + }; +} +</programlisting> + </para> + </listitem> + </varlistentry> + <varlistentry> + <term> + <varname>timeout</varname> + </term> + <listitem> + <para> + A timeout (in seconds) for building the derivation. If the derivation + takes longer than this time to build, it can fail due to breaking the + timeout. However, all computers do not have the same computing power, + hence some builders may decide to apply a multiplicative factor to this + value. When filling this value in, try to keep it approximately + consistent with other values already present in + <literal>nixpkgs</literal>. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term> + <varname>needsVMSupport</varname> + </term> + <listitem> + <para> + A boolan that states whether the derivation requires build-time support + for Virtual Machine to build successfully. + </para> + </listitem> + </varlistentry> + <varlistentry> + <term> <varname>hydraPlatforms</varname> </term> <listitem> diff --git a/nixos/lib/testing.nix b/nixos/lib/testing.nix index 42a0c60c7e19..8cdf4150057e 100644 --- a/nixos/lib/testing.nix +++ b/nixos/lib/testing.nix @@ -69,7 +69,9 @@ in rec { mkdir -p $out/coverage-data mv $i $out/coverage-data/$(dirname $(dirname $i)) done - ''; # */ + ''; + + meta.needsVMSupport = true; }; diff --git a/nixos/tests/opensmtpd.nix b/nixos/tests/opensmtpd.nix index 4d3479168f70..883ad7604941 100644 --- a/nixos/tests/opensmtpd.nix +++ b/nixos/tests/opensmtpd.nix @@ -120,4 +120,6 @@ import ./make-test.nix { $smtp2->waitUntilFails('smtpctl show queue | egrep .'); $client->succeed('check-mail-landed >&2'); ''; + + meta.timeout = 30; } diff --git a/pkgs/servers/mail/dovecot/default.nix b/pkgs/servers/mail/dovecot/default.nix index 3e628f876dd7..638393bd356a 100644 --- a/pkgs/servers/mail/dovecot/default.nix +++ b/pkgs/servers/mail/dovecot/default.nix @@ -1,6 +1,7 @@ { stdenv, lib, fetchurl, perl, pkgconfig, systemd, openssl , bzip2, zlib, lz4, inotify-tools, pam, libcap , clucene_core_2, icu, openldap, libsodium, libstemmer, cyrus_sasl +, nixosTests # Auth modules , withMySQL ? false, mysql , withPgSQL ? false, postgresql @@ -74,5 +75,8 @@ stdenv.mkDerivation rec { description = "Open source IMAP and POP3 email server written with security primarily in mind"; maintainers = with stdenv.lib.maintainers; [ peti rickynils fpletz ]; platforms = stdenv.lib.platforms.unix; + tests = { + opensmtpd-interaction = nixosTests.opensmtpd; + }; }; } diff --git a/pkgs/servers/mail/opensmtpd/default.nix b/pkgs/servers/mail/opensmtpd/default.nix index d55804504442..236e1dba181e 100644 --- a/pkgs/servers/mail/opensmtpd/default.nix +++ b/pkgs/servers/mail/opensmtpd/default.nix @@ -1,5 +1,5 @@ { stdenv, lib, fetchurl, fetchpatch, autoconf, automake, libtool, bison -, libasr, libevent, zlib, libressl, db, pam +, libasr, libevent, zlib, libressl, db, pam, nixosTests }: stdenv.mkDerivation rec { @@ -61,5 +61,8 @@ stdenv.mkDerivation rec { license = licenses.isc; platforms = platforms.linux; maintainers = with maintainers; [ rickynils obadz ekleog ]; + tests = { + basic-functionality-and-dovecot-interaction = nixosTests.opensmtpd; + }; }; } diff --git a/pkgs/stdenv/generic/check-meta.nix b/pkgs/stdenv/generic/check-meta.nix index 26cd9f8beb96..0e93df855471 100644 --- a/pkgs/stdenv/generic/check-meta.nix +++ b/pkgs/stdenv/generic/check-meta.nix @@ -165,6 +165,16 @@ let platforms = listOf (either str lib.systems.parsedPlatform.types.system); hydraPlatforms = listOf str; broken = bool; + # TODO: refactor once something like Profpatsch's types-simple will land + tests = attrsOf (mkOptionType { + name = "test"; + check = x: isDerivation x && + x ? meta.timeout && + x ? meta.needsVMSupport; + merge = lib.options.mergeOneOption; + }); + needsVMSupport = bool; + timeout = int; # Weirder stuff that doesn't appear in the documentation? knownVulnerabilities = listOf str; @@ -184,8 +194,6 @@ let isIbusEngine = bool; isGutenprint = bool; badPlatforms = platforms; - # Hydra build timeout - timeout = int; }; checkMetaAttr = k: v: diff --git a/pkgs/top-level/all-packages.nix b/pkgs/top-level/all-packages.nix index 5a1b72ff1b38..9e9ee8797ff1 100644 --- a/pkgs/top-level/all-packages.nix +++ b/pkgs/top-level/all-packages.nix @@ -71,6 +71,26 @@ with pkgs; common-updater-scripts = callPackage ../common-updater/scripts.nix { }; + ### Push NixOS tests inside the fixed point + + nixosTests = + let + # TODO(Ericson2314,ekleog): Check this will work correctly with cross- + system = builtins.currentSystem; + rawTests = (import ../../nixos/release.nix { + nixpkgs = pkgs; + }).tests; + testNames = builtins.attrNames rawTests; + filteredList = builtins.filter + (test: rawTests.${test} ? ${system}) + testNames; + finalList = map + (test: { name = test; value = rawTests.${test}.${system}; }) + filteredList; + finalTests = builtins.listToAttrs finalList; + in + finalTests; + ### BUILD SUPPORT autoreconfHook = makeSetupHook |