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