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" <baratheon@got.you>\n'
- 'To: "House Lannister" <lannister@got.you>\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" <baratheon@got.you>\n'
- 'To: "House Lannister" <lannister@got.you>\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" <baratheon@got.you>\n'
- 'To: "House Lannister" <lannister@got.you>\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" <baratheon@got.you>\n'
- 'To: "House Lannister" <lannister@got.you>\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: <autotest-sender@vm1.net.lan>
Received: from vm1.net.lan ([unix socket])
--- /dev/null
+#!/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 <info@intra2net.com>
+"""
+
+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" <baratheon@got.you>\n'
+ 'To: "House Lannister" <lannister@got.you>\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" <baratheon@got.you>\n'
+ 'To: "House Lannister" <lannister@got.you>\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" <baratheon@got.you>\n'
+ 'To: "House Lannister" <lannister@got.you>\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" <baratheon@got.you>\n'
+ 'To: "House Lannister" <lannister@got.you>\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")
+