tests: common: Add lib.nix containing various helpers for testing mailsystem behaviour
This commit is contained in:
parent
a033432bb8
commit
b630755ea8
1 changed files with 77 additions and 0 deletions
77
tests/common/lib.nix
Normal file
77
tests/common/lib.nix
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
{pkgs, ...}: let
|
||||
lib = pkgs.lib;
|
||||
in rec {
|
||||
waitForRspamd = node: let
|
||||
inherit (import ../../mailsystem/common.nix {inherit (node) config;}) rspamdProxySocket;
|
||||
in "set +e; timeout 1 ${node.nixpkgs.pkgs.netcat}/bin/nc -U ${rspamdProxySocket} < /dev/null; [ $? -eq 124 ]";
|
||||
|
||||
mkHashedPasswordFile = password:
|
||||
pkgs.runCommand "mk-password-hash-${password}" {
|
||||
buildInputs = [pkgs.mkpasswd];
|
||||
inherit password;
|
||||
} ''
|
||||
echo "$password" | mkpasswd -sm bcrypt > $out
|
||||
'';
|
||||
|
||||
mkAccounts = accounts:
|
||||
lib.concatMapAttrs (_: account: {
|
||||
${account.address} =
|
||||
{
|
||||
hashedPasswordFile = "${mkHashedPasswordFile account.password}";
|
||||
}
|
||||
// builtins.removeAttrs account ["address" "password"];
|
||||
})
|
||||
accounts;
|
||||
|
||||
mkSendMail = smtpSettings: accounts: accountName: fromAddr: recipient: body: let
|
||||
account = accounts.${accountName};
|
||||
senderAddr =
|
||||
if fromAddr == ""
|
||||
then account.address
|
||||
else fromAddr;
|
||||
msmtprc = pkgs.writeText "msmtprc" ''
|
||||
account default
|
||||
auth on
|
||||
tls on
|
||||
tls_starttls off
|
||||
tls_certcheck off
|
||||
host ${smtpSettings.address}
|
||||
port ${toString smtpSettings.port}
|
||||
from ${senderAddr}
|
||||
user ${account.address}
|
||||
password ${account.password}
|
||||
'';
|
||||
mail = pkgs.writeText "mail-${account.address}-${recipient}" ''
|
||||
From: <${account.address}>
|
||||
To: <${recipient}>
|
||||
${body}
|
||||
'';
|
||||
in "${pkgs.msmtp}/bin/msmtp -C ${msmtprc} ${recipient} < ${mail} >&2";
|
||||
|
||||
pendingPostqueue = "[ \"$(postqueue -p)\" != \"Mail queue is empty\" ]";
|
||||
cleanupMail = "rm $HOME/mail/*";
|
||||
|
||||
# mkRecvMail requires procmail to be setup correctly. This is ensured by
|
||||
# importing ./server.nix
|
||||
mkRecvMail = imapAddr: accounts: accountName: let
|
||||
mkFetchmailRcScript = imapAddr: account:
|
||||
pkgs.writeScript "mk-fetchmailrc-${account.address}" ''
|
||||
umask 077
|
||||
readonly out=$(mktemp)
|
||||
cat <<EOF > "$out"
|
||||
poll ${imapAddr} with proto IMAP
|
||||
user '${account.address}' there with password '${account.password}' is 'root' here
|
||||
mda procmail
|
||||
EOF
|
||||
echo $out
|
||||
'';
|
||||
fetchmailrc = mkFetchmailRcScript imapAddr accounts.${accountName};
|
||||
in "${pkgs.fetchmail}/bin/fetchmail -f $(${fetchmailrc}) --ssl --nosslcertck -v";
|
||||
|
||||
checkLogs = node: ''
|
||||
${node}.fail("journalctl -u postfix | grep -i error >&2")
|
||||
${node}.fail("journalctl -u postfix | grep -i warning >&2")
|
||||
${node}.fail("journalctl -u dovecot2 | grep -i error >&2")
|
||||
${node}.fail("journalctl -u dovecot2 | grep -i warning >&2")
|
||||
'';
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue