test/relay: init

This commit is contained in:
Marcel 2025-01-08 09:46:39 +01:00
parent e14ab67b1b
commit c1024403fa
No known key found for this signature in database
GPG Key ID: 446F3B093DF81C6A
3 changed files with 81 additions and 2 deletions

View File

@ -34,12 +34,13 @@
"clamav"
"multiple"
"ldap"
"relay"
];
genTest = testName: release: {
"name"= "${testName}-${builtins.replaceStrings ["."] ["_"] release.name}";
"value"= import (./tests/. + "/${testName}.nix") {
pkgs = release.pkgs;
inherit blobs;
inherit blobs lib;
};
};
# Generate an attribute set such as

View File

@ -14,7 +14,7 @@
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>
{ pkgs ? import <nixpkgs> {}, blobs}:
{ pkgs ? import <nixpkgs> {}, blobs, ...}:
pkgs.nixosTest {
name = "clamav";

78
tests/relay.nix Normal file
View File

@ -0,0 +1,78 @@
# This tests is used to test features requiring several mail domains.
{ lib, pkgs ? import <nixpkgs> { }, ... }:
let
hashPassword = password: pkgs.runCommand
"password-${password}-hashed"
{ buildInputs = [ pkgs.mkpasswd ]; inherit password; }
''
mkpasswd -sm bcrypt <<<"$password" > $out
'';
password = pkgs.writeText "password" "password";
domainGenerator = domain: {
imports = [ ../default.nix ];
virtualisation.memorySize = 1024;
mailserver = {
enable = true;
fqdn = "mail.${domain}";
domains = [ domain ];
localDnsResolver = false;
loginAccounts = {
"user@${domain}" = {
hashedPasswordFile = hashPassword "password";
};
};
enableImap = true;
enableImapSsl = true;
};
services = {
dnsmasq = {
enable = true;
settings.mx-host = [ "domain1.com,domain1,10" "domain2.com,domain2,10" ];
};
# disable rspamd because of graylisting
postfix.config.smtpd_milters = lib.mkForce [ ];
rspamd.enable = lib.mkForce false;
redis.servers.rspamd.enable = false;
};
systemd.services.postfix.requires = lib.mkForce [ "postfix-setup.service" ];
};
in
pkgs.nixosTest {
name = "relay";
nodes = {
domain1 = {
imports = [
../default.nix
(domainGenerator "domain1.com")
];
mailserver.relayDomains = [ "replay.domain1.com" ];
# ip of itself
services.postfix.networks = [ "[2001:db8:1::1]/128" ];
};
domain2 = domainGenerator "domain2.com";
client = { pkgs, ... }: {
environment.systemPackages = [
(pkgs.writeScriptBin "mail-check" ''
${pkgs.python3}/bin/python ${../scripts/mail-check.py} $@
'')
];
};
};
testScript = ''
start_all()
domain1.wait_for_unit("multi-user.target")
domain2.wait_for_unit("multi-user.target")
# user@domain1.com sends a mail to user@domain2.com
client.succeed(
"mail-check send-and-read --smtp-port 25 --smtp-starttls --smtp-host domain1 --from-addr user@relay.domain1.com --imap-host domain2 --to-addr user@domain2.com --dst-password-file ${password} --ignore-dkim-spf"
)
'';
}