Files
slic/tests/test_utils_sendmail.py
T
tligui_y dc2bc76678
Run CI Tests / test (push) Successful in 53s
Update tests/test_utils_sendmail.py
2025-07-31 13:28:09 +02:00

102 lines
2.9 KiB
Python

import os
import tempfile
from email.mime.text import MIMEText
import sys
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
from slic.utils.sendmail import sendmail
from slic.utils.sendmail import *
import shutil
'''
def test_sendmail_mime_format_to_file():
from_addr = "robot@local"
subject = "MIME Format Test"
body = "This is the MIME body."
# Create the temporary file to capture output
with tempfile.NamedTemporaryFile("r+", delete=False) as tmp_file:
tmp_path = tmp_file.name
# Create a temporary shell script to act as a pipe receiver
with tempfile.NamedTemporaryFile("w", suffix=".sh", delete=False) as script_file:
script_path = script_file.name
script_file.write(f"#!/bin/sh\ncat > {tmp_path}\n")
os.chmod(script_path, 0o755) # Make the script executable
try:
# Send email using the script as a fake receiver
sendmail(
to_addr=f"| {script_path}",
from_addr=from_addr,
subject=subject,
body=body
)
# Read captured output
with open(tmp_path, "r") as f:
output = f.read()
# Build expected MIME message
msg = MIMEText(body)
msg["To"] = f"| {script_path}"
msg["From"] = from_addr
msg["Subject"] = subject
expected = msg.as_string()
# Validate line-by-line
for line in expected.splitlines():
assert line in output, f"Missing line in output: {line!r}"
finally:
# Cleanup temp files
os.remove(tmp_path)
os.remove(script_path)
'''
import subprocess
def start_postfix():
try:
subprocess.run(["sudo", "service", "postfix", "start"], check=True)
print("✅ Postfix started")
except subprocess.CalledProcessError as e:
print("❌ Failed to start postfix:", e)
def setup_postfix():
subprocess.run("echo 'postfix postfix/mailname string localhost.localdomain' | sudo debconf-set-selections", shell=True)
subprocess.run("echo 'postfix postfix/main_mailer_type string Internet Site' | sudo debconf-set-selections", shell=True)
subprocess.run("sudo DEBIAN_FRONTEND=noninteractive apt-get install -y postfix", shell=True)
def test_sendmail_real_local_verbose():
start_postfix()
setup_postfix()
to_addr = "yasmine.tligui@psi.ch"
subject = "Test mail from pytest"
body = "Hello! This is a real test sent using local sendmail."
message = f"""Subject: {subject}
From: test@localhost
To: {to_addr}
{body}
"""
print("=== SENDING MAIL ===")
process = subprocess.Popen(
["/usr/sbin/sendmail", "-v", to_addr],
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
)
stdout, stderr = process.communicate(message.encode())
print("\n=== SENDMAIL STDOUT ===")
print(stdout.decode())
print("\n=== SENDMAIL STDERR ===")
print(stderr.decode())