diff --git a/doc/meta.xml b/doc/meta.xml index 496b32916552..51c7b2dfc88f 100644 --- a/doc/meta.xml +++ b/doc/meta.xml @@ -250,6 +250,61 @@ meta.platforms = stdenv.lib.platforms.linux; + + + tests + + + + 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 meta elements + to be defined: needsVMSupport (automatically filled-in + for NixOS tests) and timeout. + + + The NixOS tests are available as nixosTests in + parameters of derivations. For instance, the OpenSMTPD derivation + includes lines similar to: + +{ /* ... */, nixosTests }: +{ + # ... + meta.tests = { + basic-functionality-and-dovecot-integration = nixosTests.opensmtpd; + }; +} + + + + + + + timeout + + + + 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 + nixpkgs. + + + + + + needsVMSupport + + + + A boolan that states whether the derivation requires build-time support + for Virtual Machine to build successfully. + + + hydraPlatforms 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