Merge pull request #313096 from onny/stalwart-fix-test

This commit is contained in:
Sandro 2024-05-23 13:54:39 +02:00 committed by GitHub
commit 360221d4bf
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 129 additions and 102 deletions

View File

@ -70,7 +70,9 @@ in {
storage.lookup = mkDefault "db"; storage.lookup = mkDefault "db";
storage.blob = mkDefault "blob"; storage.blob = mkDefault "blob";
resolver.type = mkDefault "system"; resolver.type = mkDefault "system";
resolver.public-suffix = mkDefault ["https://publicsuffix.org/list/public_suffix_list.dat"]; resolver.public-suffix = lib.mkDefault [
"file://${pkgs.publicsuffix-list}/share/publicsuffix/public_suffix_list.dat"
];
}; };
systemd.services.stalwart-mail = { systemd.services.stalwart-mail = {

View File

@ -1,25 +1,51 @@
# Rudimentary test checking that the Stalwart email server can: # Rudimentary test checking that the Stalwart email server can:
# - receive some message through SMTP submission, then # - receive some message through SMTP submission, then
# - serve this message through IMAP. # - serve this message through IMAP.
{
system ? builtins.currentSystem,
config ? { },
pkgs ? import ../../.. { inherit system config; },
lib ? pkgs.lib,
}:
let let
certs = import ./common/acme/server/snakeoil-certs.nix; certs = import ./common/acme/server/snakeoil-certs.nix;
domain = certs.domain; domain = certs.domain;
makeTest = import ./make-test-python.nix;
mkTestName =
pkg: "${pkg.pname}_${pkg.version}";
stalwartPackages = {
inherit (pkgs) stalwart-mail_0_6 stalwart-mail;
};
stalwartAtLeast = lib.versionAtLeast;
makeStalwartTest =
{
package,
name ? mkTestName package,
}:
makeTest {
inherit name;
meta.maintainers = with lib.maintainers; [
happysalada pacien onny
];
in import ./make-test-python.nix ({ lib, ... }: { nodes.machine = { lib, ... }: {
name = "stalwart-mail";
nodes.main = { pkgs, ... }: {
security.pki.certificateFiles = [ certs.ca.cert ]; security.pki.certificateFiles = [ certs.ca.cert ];
services.stalwart-mail = { services.stalwart-mail = {
enable = true; enable = true;
inherit package;
settings = { settings = {
server.hostname = domain; server.hostname = domain;
certificate."snakeoil" = { # TODO: Remove backwards compatibility as soon as we drop legacy version 0.6.0
cert = "file://${certs.${domain}.cert}"; certificate."snakeoil" = let
private-key = "file://${certs.${domain}.key}"; certPath = if stalwartAtLeast package.version "0.7.0" then "%{file://${certs.${domain}.cert}}%" else "file://${certs.${domain}.cert}";
keyPath = if stalwartAtLeast package.version "0.7.0" then "%{file:${certs.${domain}.key}}%" else "file://${certs.${domain}.key}";
in {
cert = certPath;
private-key = keyPath;
}; };
server.tls = { server.tls = {
@ -40,8 +66,6 @@ in import ./make-test-python.nix ({ lib, ... }: {
}; };
}; };
resolver.public-suffix = [ ]; # do not fetch from web in sandbox
session.auth.mechanisms = "[plain]"; session.auth.mechanisms = "[plain]";
session.auth.directory = "'in-memory'"; session.auth.directory = "'in-memory'";
storage.directory = "in-memory"; storage.directory = "in-memory";
@ -51,15 +75,16 @@ in import ./make-test-python.nix ({ lib, ... }: {
directory."in-memory" = { directory."in-memory" = {
type = "memory"; type = "memory";
principals = [ # TODO: Remove backwards compatibility as soon as we drop legacy version 0.6.0
principals = let
condition = if stalwartAtLeast package.version "0.7.0" then "class" else "type";
in builtins.map (p: p // { ${condition} = "individual"; }) [
{ {
type = "individual";
name = "alice"; name = "alice";
secret = "foobar"; secret = "foobar";
email = [ "alice@${domain}" ]; email = [ "alice@${domain}" ];
} }
{ {
type = "individual";
name = "bob"; name = "bob";
secret = "foobar"; secret = "foobar";
email = [ "bob@${domain}" ]; email = [ "bob@${domain}" ];
@ -105,18 +130,18 @@ in import ./make-test-python.nix ({ lib, ... }: {
assert msg[0][1].strip() == b'This is a test message.' assert msg[0][1].strip() == b'This is a test message.'
'') '')
]; ];
}; };
testScript = /* python */ '' testScript = ''
main.wait_for_unit("stalwart-mail.service") start_all()
main.wait_for_open_port(587) machine.wait_for_unit("stalwart-mail.service")
main.wait_for_open_port(143) machine.wait_for_open_port(587)
machine.wait_for_open_port(143)
main.succeed("test-smtp-submission") machine.succeed("test-smtp-submission")
main.succeed("test-imap-read") machine.succeed("test-imap-read")
''; '';
meta = {
maintainers = with lib.maintainers; [ happysalada pacien ];
}; };
}) in
lib.mapAttrs (_: package: makeStalwartTest { inherit package; }) stalwartPackages