78 lines
2.6 KiB
Python
78 lines
2.6 KiB
Python
# pyruse is intended as a replacement to both fail2ban and epylog
|
||
# Copyright © 2017–2018 Y. Gablin
|
||
# Full licensing information in the LICENSE file, or gnu.org/licences/gpl-3.0.txt if the file is missing.
|
||
import os
|
||
import re
|
||
from pyruse.actions.action_email import Action
|
||
from pyruse import config
|
||
|
||
mail_filename = "email.dump"
|
||
|
||
def whenEmailWithSubjectThenCheckContents():
|
||
if os.path.exists(mail_filename):
|
||
os.remove(mail_filename)
|
||
Action({"subject": "Test1", "message": "TestMsg{m}"}).act({"m": "#1"})
|
||
assert os.path.exists(mail_filename)
|
||
conf = config.Config().asMap().get("email", {})
|
||
reSubject = re.compile(r"^Subject: (.*)")
|
||
reFrom = re.compile(r"^From: (.*)")
|
||
reTo = re.compile(r"^To: (.*)")
|
||
subjOK = False
|
||
fromOK = False
|
||
toOK = False
|
||
nbMsg = 0
|
||
with open(mail_filename, 'rt') as m:
|
||
for line in m:
|
||
match = reSubject.match(line)
|
||
if match:
|
||
subjOK = match.group(1) == "Test1"
|
||
match = reFrom.match(line)
|
||
if match:
|
||
fromOK = match.group(1) == conf.get("from", "pyruse")
|
||
match = reTo.match(line)
|
||
if match:
|
||
toOK = match.group(1).split(", ") == conf.get("to", ["hostmaster"])
|
||
if "TestMsg#1" in line:
|
||
nbMsg += 1
|
||
assert subjOK
|
||
assert fromOK
|
||
assert toOK
|
||
assert nbMsg == 1
|
||
os.remove(mail_filename)
|
||
|
||
def whenEmailWithoutSubjectThenCheckContents():
|
||
if os.path.exists(mail_filename):
|
||
os.remove(mail_filename)
|
||
Action({"message": "TestMsg{m}"}).act({"m": "#2"})
|
||
assert os.path.exists(mail_filename)
|
||
conf = config.Config().asMap().get("email", {})
|
||
reSubject = re.compile(r"^Subject: (.*)")
|
||
reFrom = re.compile(r"^From: (.*)")
|
||
reTo = re.compile(r"^To: (.*)")
|
||
subjOK = False
|
||
fromOK = False
|
||
toOK = False
|
||
nbMsg = 0
|
||
with open(mail_filename, 'rt') as m:
|
||
for line in m:
|
||
match = reSubject.match(line)
|
||
if match:
|
||
subjOK = match.group(1) == "Pyruse Notification"
|
||
match = reFrom.match(line)
|
||
if match:
|
||
fromOK = match.group(1) == conf.get("from", "pyruse")
|
||
match = reTo.match(line)
|
||
if match:
|
||
toOK = match.group(1).split(", ") == conf.get("to", ["hostmaster"])
|
||
if "TestMsg#2" in line:
|
||
nbMsg += 1
|
||
assert subjOK
|
||
assert fromOK
|
||
assert toOK
|
||
assert nbMsg == 1
|
||
os.remove(mail_filename)
|
||
|
||
def unitTests():
|
||
whenEmailWithSubjectThenCheckContents()
|
||
whenEmailWithoutSubjectThenCheckContents()
|