Loading nixos/modules/services/mail/stalwart-mail.nix +3 −1 Original line number Diff line number Diff line Loading @@ -70,7 +70,9 @@ in { storage.lookup = mkDefault "db"; storage.blob = mkDefault "blob"; 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 = { Loading nixos/tests/stalwart-mail.nix +133 −108 Original line number Diff line number Diff line # Rudimentary test checking that the Stalwart email server can: # - receive some message through SMTP submission, then # - serve this message through IMAP. { system ? builtins.currentSystem, config ? { }, pkgs ? import ../../.. { inherit system config; }, lib ? pkgs.lib, }: let certs = import ./common/acme/server/snakeoil-certs.nix; 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, ... }: { name = "stalwart-mail"; nodes.machine = { lib, ... }: { nodes.main = { pkgs, ... }: { security.pki.certificateFiles = [ certs.ca.cert ]; services.stalwart-mail = { enable = true; inherit package; settings = { server.hostname = domain; certificate."snakeoil" = { cert = "file://${certs.${domain}.cert}"; private-key = "file://${certs.${domain}.key}"; # TODO: Remove backwards compatibility as soon as we drop legacy version 0.6.0 certificate."snakeoil" = let 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 = { Loading @@ -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.directory = "'in-memory'"; storage.directory = "in-memory"; Loading @@ -51,15 +75,16 @@ in import ./make-test-python.nix ({ lib, ... }: { directory."in-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"; secret = "foobar"; email = [ "alice@${domain}" ]; } { type = "individual"; name = "bob"; secret = "foobar"; email = [ "bob@${domain}" ]; Loading Loading @@ -105,18 +130,18 @@ in import ./make-test-python.nix ({ lib, ... }: { assert msg[0][1].strip() == b'This is a test message.' '') ]; }; testScript = /* python */ '' main.wait_for_unit("stalwart-mail.service") main.wait_for_open_port(587) main.wait_for_open_port(143) testScript = '' start_all() machine.wait_for_unit("stalwart-mail.service") machine.wait_for_open_port(587) machine.wait_for_open_port(143) main.succeed("test-smtp-submission") main.succeed("test-imap-read") machine.succeed("test-smtp-submission") machine.succeed("test-imap-read") ''; meta = { maintainers = with lib.maintainers; [ happysalada pacien ]; }; }) in lib.mapAttrs (_: package: makeStalwartTest { inherit package; }) stalwartPackages Loading
nixos/modules/services/mail/stalwart-mail.nix +3 −1 Original line number Diff line number Diff line Loading @@ -70,7 +70,9 @@ in { storage.lookup = mkDefault "db"; storage.blob = mkDefault "blob"; 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 = { Loading
nixos/tests/stalwart-mail.nix +133 −108 Original line number Diff line number Diff line # Rudimentary test checking that the Stalwart email server can: # - receive some message through SMTP submission, then # - serve this message through IMAP. { system ? builtins.currentSystem, config ? { }, pkgs ? import ../../.. { inherit system config; }, lib ? pkgs.lib, }: let certs = import ./common/acme/server/snakeoil-certs.nix; 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, ... }: { name = "stalwart-mail"; nodes.machine = { lib, ... }: { nodes.main = { pkgs, ... }: { security.pki.certificateFiles = [ certs.ca.cert ]; services.stalwart-mail = { enable = true; inherit package; settings = { server.hostname = domain; certificate."snakeoil" = { cert = "file://${certs.${domain}.cert}"; private-key = "file://${certs.${domain}.key}"; # TODO: Remove backwards compatibility as soon as we drop legacy version 0.6.0 certificate."snakeoil" = let 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 = { Loading @@ -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.directory = "'in-memory'"; storage.directory = "in-memory"; Loading @@ -51,15 +75,16 @@ in import ./make-test-python.nix ({ lib, ... }: { directory."in-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"; secret = "foobar"; email = [ "alice@${domain}" ]; } { type = "individual"; name = "bob"; secret = "foobar"; email = [ "bob@${domain}" ]; Loading Loading @@ -105,18 +130,18 @@ in import ./make-test-python.nix ({ lib, ... }: { assert msg[0][1].strip() == b'This is a test message.' '') ]; }; testScript = /* python */ '' main.wait_for_unit("stalwart-mail.service") main.wait_for_open_port(587) main.wait_for_open_port(143) testScript = '' start_all() machine.wait_for_unit("stalwart-mail.service") machine.wait_for_open_port(587) machine.wait_for_open_port(143) main.succeed("test-smtp-submission") main.succeed("test-imap-read") machine.succeed("test-smtp-submission") machine.succeed("test-imap-read") ''; meta = { maintainers = with lib.maintainers; [ happysalada pacien ]; }; }) in lib.mapAttrs (_: package: makeStalwartTest { inherit package; }) stalwartPackages