From 49f45d0914bfec89bd7f1c6ab1c09c08eee85f54 Mon Sep 17 00:00:00 2001 From: Christian Herdtweck Date: Mon, 15 Jul 2019 13:00:53 +0200 Subject: [PATCH] Move mail_validator tests into own test file --- test/test_mail_utils.py | 202 ---------------------------------------- test/test_mail_validator.py | 217 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 217 insertions(+), 202 deletions(-) create mode 100644 test/test_mail_validator.py diff --git a/test/test_mail_utils.py b/test/test_mail_utils.py index 4a0aa06..33cb198 100644 --- a/test/test_mail_utils.py +++ b/test/test_mail_utils.py @@ -32,208 +32,6 @@ from datetime import datetime as dt from src import mail_utils -class MailUtilsValidatorTest(unittest.TestCase): - """Tests methods of :py:class:`mail_utils.MailValidator`.""" - - def setUp(self): - os.mkdir("srcdir") - os.mkdir("trgdir") - self.validator = mail_utils.MailValidator("./srcdir", "./trgdir") - - def tearDown(self): - os.rmdir("srcdir") - os.rmdir("trgdir") - - def test_validator(self): - self.assertEqual(self.validator.source_path, "./srcdir") - self.assertEqual(self.validator.target_path, "./trgdir") - self.assertEqual(self.validator._compare_emails_method, - self.validator._default_compare_emails) - - def test_verify_emails_empty(self): - self.validator.verify_emails([], [], 30) - - def test_verify_email_id(self): - email_string = ('From: "House Baratheon" \n' - 'To: "House Lannister" \n' - 'Subject: The iron throne\n' - 'Date: Wed, 28 Mar 1345 10:47:17 +0200\n' - 'Autotest-Message-ID: <20120328084717.63D49232CC@gwt-intranator.m.i2n>\n' - 'Importance: Normal\n') - - with open("srcdir/.123", 'w') as email: - email.write(email_string) - with open("trgdir/.5267", 'w') as email: - email.write(email_string) - - try: - # test defaults - matched_target = self.validator.verify_email_id(".123", [], 30) - self.assertEqual(matched_target, ".5267") - - # test main - matched_target = self.validator.verify_email_id(".123", [".5267"], - 30, in_target=True) - self.assertEqual(matched_target, ".5267") - matched_source = self.validator.verify_email_id(".5267", [".123"], - 30, in_target=False) - self.assertEqual(matched_source, ".123") - - # test mismatch - with open("trgdir/.5267", 'w') as email: - email.write("") - with self.assertRaises(mail_utils.MissingEmailID): - self.validator.verify_email_id(".123", [".5267"], 30) - - finally: - os.unlink("srcdir/.123") - os.unlink("trgdir/.5267") - - def test_verify_emails(self): - email_string = ('From: "House Baratheon" \n' - 'To: "House Lannister" \n' - 'Subject: The iron throne\n' - 'Date: Wed, 28 Mar 1345 10:47:17 +0200\n' - 'Autotest-Message-ID: <20120328084717.63D49232CC@gwt-intranator.m.i2n>\n' - 'Importance: Normal\n') - - with open("srcdir/.123", 'w') as email: - email.write(email_string) - with open("trgdir/.5267", 'w') as email: - email.write(email_string) - - try: - self.validator.verify_emails([".123"], [".5267"], 30) - - # different sender is already too different for the basic email - # comparison (tolerance 1.0) - with open("trgdir/.5267", 'w') as email: - email.write(email_string.replace("Baratheon", "Targaryen")) - with self.assertRaises(mail_utils.EmailMismatch): - self.validator.verify_emails([".123"], [".5267"], 30) - - # test comparison by basic headers - self.validator.compare_emails_method = "headers" - with self.assertRaises(mail_utils.EmailMismatch): - self.validator.verify_emails([".123"], [".5267"], 30) - with open("trgdir/.5267", 'w') as email: - email.write(email_string.replace("Importance", "High")) - self.validator.verify_emails([".123"], [".5267"], 30) - - finally: - os.unlink("srcdir/.123") - os.unlink("trgdir/.5267") - - def test_assert_header(self): - email_string = ('From: "House Baratheon" \n' - 'To: "House Lannister" \n' - 'Subject: The iron throne\n' - 'Date: Wed, 28 Mar 1345 10:47:17 +0200\n' - 'Autotest-Message-ID: <20120328084717.63D49232CC@gwt-intranator.m.i2n>\n' - 'Importance: Normal\n') - - with open("trgdir/.123", 'w') as email: - email.write(email_string) - with open("trgdir/.5267", 'w') as email: - email.write(email_string.replace("Baratheon", "Targaryen")) - - try: - self.validator.assert_header([".123", ".5267"], "Subject", - [], [], 30) - self.validator.assert_header([".123", ".5267"], "Subject", - ["The iron throne"], ["The wooden throne"], 30) - self.validator.assert_header([".123"], "From", - ["House Baratheon"], ["House Targaryen"], 30) - self.validator.assert_header([".5267"], "From", - ["House Targaryen"], ["House Baratheon"], 30) - with self.assertRaises(mail_utils.InvalidEmailHeader): - self.validator.assert_header([".123", ".5267"], "Subject", - ["The wooden throne"], [], 30) - with self.assertRaises(mail_utils.InvalidEmailHeader): - self.validator.assert_header([".123", ".5267"], "Subject", - [], ["The iron throne"], 30) - with self.assertRaises(mail_utils.InvalidEmailHeader): - self.validator.assert_header([".123"], "From", - ["House Targaryen"], [], 30) - with self.assertRaises(mail_utils.InvalidEmailHeader): - self.validator.assert_header([".123"], "From", - [], ["House Baratheon"], 30) - with self.assertRaises(mail_utils.InvalidEmailHeader): - self.validator.assert_header([".5267"], "From", - ["House Baratheon"], [], 30) - with self.assertRaises(mail_utils.InvalidEmailHeader): - self.validator.assert_header([".5267"], "From", - [], ["House Targaryen"], 30) - - finally: - os.unlink("trgdir/.123") - os.unlink("trgdir/.5267") - - def test_assert_content(self): - email_string = ('From: "House Baratheon" \n' - 'To: "House Lannister" \n' - 'Subject: The iron throne\n' - 'Date: Wed, 28 Mar 1345 10:47:17 +0200\n' - 'Autotest-Message-ID: <20120328084717.63D49232CC@gwt-intranator.m.i2n>\n' - 'Content-Type: multipart/alternative;\n' - ' boundary="----=_NextPart_000_0027_01CD0CEA.77D94260\n' - '\n' - 'This is a multi-part message in MIME format.\n' - '\n' - '------=_NextPart_000_0027_01CD0CEA.77D94260\n' - 'Content-Type: text/plain;\n' - ' charset="utf-8"\n' - 'Content-Transfer-Encoding: 8bit\n' - '\n' - 'This is a life threat message.\n' - '\n' - '------=_NextPart_000_0027_01CD0CEA.77D94260\n' - 'Content-Type: text/html;\n' - ' boundary="----=_NextPart_000_0015_01CD0CDA.21206F30";\n' - ' charset="utf-8"\n' - 'Content-Transfer-Encoding: quoted-printable\n' - '\n' - 'This is a life threat message.\n' - '\n' - '------=_NextPart_000_0027_01CD0CEA.77D94260--\n') - - with open("trgdir/.123", 'w') as email: - email.write(email_string) - with open("trgdir/.5267", 'w') as email: - email.write(email_string.replace("life threat", "friendly")) - - try: - self.validator.assert_content([".123", ".5267"], "multipart/alternative", - [], [], 30) - self.validator.assert_content([".123", ".5267"], "multipart/alternative", - ["message"], ["war"], 30) - self.validator.assert_content([".123"], "multipart/alternative", - ["life threat", "message"], ["friendly"], 30) - self.validator.assert_content([".5267"], "multipart/alternative", - ["friendly", "message"], ["life threat"], 30) - with self.assertRaises(mail_utils.InvalidEmailContent): - self.validator.assert_content([".123", ".5267"], "multipart/alternative", - ["war"], [], 30) - with self.assertRaises(mail_utils.InvalidEmailContent): - self.validator.assert_content([".123", ".5267"], "multipart/alternative", - [], ["message"], 30) - with self.assertRaises(mail_utils.InvalidEmailContent): - self.validator.assert_content([".123"], "multipart/alternative", - [], ["life threat"], 30) - with self.assertRaises(mail_utils.InvalidEmailContent): - self.validator.assert_content([".123"], "multipart/alternative", - ["friendly"], [], 30) - with self.assertRaises(mail_utils.InvalidEmailContent): - self.validator.assert_content([".5267"], "multipart/alternative", - ["life threat"], [], 30) - with self.assertRaises(mail_utils.InvalidEmailContent): - self.validator.assert_content([".5267"], "multipart/alternative", - [], ["friendly"], 30) - - finally: - os.unlink("trgdir/.123") - os.unlink("trgdir/.5267") - EMAIL_TEXT = r"""Return-Path: Received: from vm1.net.lan ([unix socket]) diff --git a/test/test_mail_validator.py b/test/test_mail_validator.py new file mode 100644 index 0000000..d5faba0 --- /dev/null +++ b/test/test_mail_validator.py @@ -0,0 +1,217 @@ +#!/usr/bin/env python3 + +""" Summary not created yet + +Details on what happens here should be specified here but please keep it brief! + +.. codeauthor:: Intra2net AG +""" + +import os +import unittest + +from src import mail_validator + + +class MailUtilsValidatorTest(unittest.TestCase): + """Tests methods of :py:class:`mail_validator.MailValidator`.""" + + def setUp(self): + os.mkdir("srcdir") + os.mkdir("trgdir") + self.validator = mail_validator.MailValidator("./srcdir", "./trgdir") + + def tearDown(self): + os.rmdir("srcdir") + os.rmdir("trgdir") + + def test_validator(self): + self.assertEqual(self.validator.source_path, "./srcdir") + self.assertEqual(self.validator.target_path, "./trgdir") + self.assertEqual(self.validator._compare_emails_method, + self.validator._default_compare_emails) + + def test_verify_emails_empty(self): + self.validator.verify_emails([], [], 30) + + def test_verify_email_id(self): + email_string = ('From: "House Baratheon" \n' + 'To: "House Lannister" \n' + 'Subject: The iron throne\n' + 'Date: Wed, 28 Mar 1345 10:47:17 +0200\n' + 'Autotest-Message-ID: <20120328084717.63D49232CC@gwt-intranator.m.i2n>\n' + 'Importance: Normal\n') + + with open("srcdir/.123", 'w') as email: + email.write(email_string) + with open("trgdir/.5267", 'w') as email: + email.write(email_string) + + try: + # test defaults + matched_target = self.validator.verify_email_id(".123", [], 30) + self.assertEqual(matched_target, ".5267") + + # test main + matched_target = self.validator.verify_email_id(".123", [".5267"], + 30, in_target=True) + self.assertEqual(matched_target, ".5267") + matched_source = self.validator.verify_email_id(".5267", [".123"], + 30, in_target=False) + self.assertEqual(matched_source, ".123") + + # test mismatch + with open("trgdir/.5267", 'w') as email: + email.write("") + with self.assertRaises(mail_validator.MissingEmailID): + self.validator.verify_email_id(".123", [".5267"], 30) + + finally: + os.unlink("srcdir/.123") + os.unlink("trgdir/.5267") + + def test_verify_emails(self): + email_string = ('From: "House Baratheon" \n' + 'To: "House Lannister" \n' + 'Subject: The iron throne\n' + 'Date: Wed, 28 Mar 1345 10:47:17 +0200\n' + 'Autotest-Message-ID: <20120328084717.63D49232CC@gwt-intranator.m.i2n>\n' + 'Importance: Normal\n') + + with open("srcdir/.123", 'w') as email: + email.write(email_string) + with open("trgdir/.5267", 'w') as email: + email.write(email_string) + + try: + self.validator.verify_emails([".123"], [".5267"], 30) + + # different sender is already too different for the basic email + # comparison (tolerance 1.0) + with open("trgdir/.5267", 'w') as email: + email.write(email_string.replace("Baratheon", "Targaryen")) + with self.assertRaises(mail_validator.EmailMismatch): + self.validator.verify_emails([".123"], [".5267"], 30) + + # test comparison by basic headers + self.validator.compare_emails_method = "headers" + with self.assertRaises(mail_validator.EmailMismatch): + self.validator.verify_emails([".123"], [".5267"], 30) + with open("trgdir/.5267", 'w') as email: + email.write(email_string.replace("Importance", "High")) + self.validator.verify_emails([".123"], [".5267"], 30) + + finally: + os.unlink("srcdir/.123") + os.unlink("trgdir/.5267") + + def test_assert_header(self): + email_string = ('From: "House Baratheon" \n' + 'To: "House Lannister" \n' + 'Subject: The iron throne\n' + 'Date: Wed, 28 Mar 1345 10:47:17 +0200\n' + 'Autotest-Message-ID: <20120328084717.63D49232CC@gwt-intranator.m.i2n>\n' + 'Importance: Normal\n') + + with open("trgdir/.123", 'w') as email: + email.write(email_string) + with open("trgdir/.5267", 'w') as email: + email.write(email_string.replace("Baratheon", "Targaryen")) + + try: + self.validator.assert_header([".123", ".5267"], "Subject", + [], [], 30) + self.validator.assert_header([".123", ".5267"], "Subject", + ["The iron throne"], ["The wooden throne"], 30) + self.validator.assert_header([".123"], "From", + ["House Baratheon"], ["House Targaryen"], 30) + self.validator.assert_header([".5267"], "From", + ["House Targaryen"], ["House Baratheon"], 30) + with self.assertRaises(mail_validator.InvalidEmailHeader): + self.validator.assert_header([".123", ".5267"], "Subject", + ["The wooden throne"], [], 30) + with self.assertRaises(mail_validator.InvalidEmailHeader): + self.validator.assert_header([".123", ".5267"], "Subject", + [], ["The iron throne"], 30) + with self.assertRaises(mail_validator.InvalidEmailHeader): + self.validator.assert_header([".123"], "From", + ["House Targaryen"], [], 30) + with self.assertRaises(mail_validator.InvalidEmailHeader): + self.validator.assert_header([".123"], "From", + [], ["House Baratheon"], 30) + with self.assertRaises(mail_validator.InvalidEmailHeader): + self.validator.assert_header([".5267"], "From", + ["House Baratheon"], [], 30) + with self.assertRaises(mail_validator.InvalidEmailHeader): + self.validator.assert_header([".5267"], "From", + [], ["House Targaryen"], 30) + + finally: + os.unlink("trgdir/.123") + os.unlink("trgdir/.5267") + + def test_assert_content(self): + email_string = ('From: "House Baratheon" \n' + 'To: "House Lannister" \n' + 'Subject: The iron throne\n' + 'Date: Wed, 28 Mar 1345 10:47:17 +0200\n' + 'Autotest-Message-ID: <20120328084717.63D49232CC@gwt-intranator.m.i2n>\n' + 'Content-Type: multipart/alternative;\n' + ' boundary="----=_NextPart_000_0027_01CD0CEA.77D94260\n' + '\n' + 'This is a multi-part message in MIME format.\n' + '\n' + '------=_NextPart_000_0027_01CD0CEA.77D94260\n' + 'Content-Type: text/plain;\n' + ' charset="utf-8"\n' + 'Content-Transfer-Encoding: 8bit\n' + '\n' + 'This is a life threat message.\n' + '\n' + '------=_NextPart_000_0027_01CD0CEA.77D94260\n' + 'Content-Type: text/html;\n' + ' boundary="----=_NextPart_000_0015_01CD0CDA.21206F30";\n' + ' charset="utf-8"\n' + 'Content-Transfer-Encoding: quoted-printable\n' + '\n' + 'This is a life threat message.\n' + '\n' + '------=_NextPart_000_0027_01CD0CEA.77D94260--\n') + + with open("trgdir/.123", 'w') as email: + email.write(email_string) + with open("trgdir/.5267", 'w') as email: + email.write(email_string.replace("life threat", "friendly")) + + try: + self.validator.assert_content([".123", ".5267"], "multipart/alternative", + [], [], 30) + self.validator.assert_content([".123", ".5267"], "multipart/alternative", + ["message"], ["war"], 30) + self.validator.assert_content([".123"], "multipart/alternative", + ["life threat", "message"], ["friendly"], 30) + self.validator.assert_content([".5267"], "multipart/alternative", + ["friendly", "message"], ["life threat"], 30) + with self.assertRaises(mail_validator.InvalidEmailContent): + self.validator.assert_content([".123", ".5267"], "multipart/alternative", + ["war"], [], 30) + with self.assertRaises(mail_validator.InvalidEmailContent): + self.validator.assert_content([".123", ".5267"], "multipart/alternative", + [], ["message"], 30) + with self.assertRaises(mail_validator.InvalidEmailContent): + self.validator.assert_content([".123"], "multipart/alternative", + [], ["life threat"], 30) + with self.assertRaises(mail_validator.InvalidEmailContent): + self.validator.assert_content([".123"], "multipart/alternative", + ["friendly"], [], 30) + with self.assertRaises(mail_validator.InvalidEmailContent): + self.validator.assert_content([".5267"], "multipart/alternative", + ["life threat"], [], 30) + with self.assertRaises(mail_validator.InvalidEmailContent): + self.validator.assert_content([".5267"], "multipart/alternative", + [], ["friendly"], 30) + + finally: + os.unlink("trgdir/.123") + os.unlink("trgdir/.5267") + -- 1.7.1