Move mail_validator tests into own test file
authorChristian Herdtweck <christian.herdtweck@intra2net.com>
Mon, 15 Jul 2019 11:00:53 +0000 (13:00 +0200)
committerChristian Herdtweck <christian.herdtweck@intra2net.com>
Thu, 8 Aug 2019 09:54:43 +0000 (11:54 +0200)
test/test_mail_utils.py
test/test_mail_validator.py [new file with mode: 0644]

index 4a0aa06..33cb198 100644 (file)
@@ -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" <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])
diff --git a/test/test_mail_validator.py b/test/test_mail_validator.py
new file mode 100644 (file)
index 0000000..d5faba0
--- /dev/null
@@ -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 <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")
+