| 1 | ''' |
| 2 | unit_tester.py - The module contains the MailScriptTester class. |
| 3 | |
| 4 | Copyright (c) 2012 Intra2net AG |
| 5 | Author: Plamen Dimitrov |
| 6 | |
| 7 | This program is free software: you can redistribute it and/or modify |
| 8 | it under the terms of the GNU General Public License as published by |
| 9 | the Free Software Foundation, either version 3 of the License, or |
| 10 | (at your option) any later version. |
| 11 | |
| 12 | This program is distributed in the hope that it will be useful, |
| 13 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 15 | GNU General Public License for more details. |
| 16 | ''' |
| 17 | |
| 18 | import unittest |
| 19 | import datetime |
| 20 | from mail_date_parser import MailDateParser |
| 21 | |
| 22 | class DateParseTester(unittest.TestCase): |
| 23 | """Used to test the date retrievel and the MailDateParser class.""" |
| 24 | |
| 25 | # class attributes |
| 26 | # DateInterpreter instance testing the DateInterpreter methods |
| 27 | date_interp = None |
| 28 | # datetime for comparison with extracted datetimes and assertions |
| 29 | true_date = None |
| 30 | |
| 31 | # wrong naming conventions are due to python unittest library |
| 32 | def setUp(self): |
| 33 | """Prepares the testing confitions.""" |
| 34 | self.date_interp = MailDateParser() |
| 35 | self.true_date = datetime.datetime(2007, 12, 11, 18, 24, 35) |
| 36 | |
| 37 | def test_received_date_extraction1(self): |
| 38 | """Tests the date extraction method.""" |
| 39 | date = "Tue, 11 Dec 2007 18:24:35 +0100" |
| 40 | extracted_date = self.date_interp.extract_received_date(date) |
| 41 | self.assertEqual(extracted_date, self.true_date, "Failed date format 1") |
| 42 | |
| 43 | def test_received_date_extraction2(self): |
| 44 | """Tests the date extraction method.""" |
| 45 | date = "11 Dec 2007 \r\n18:24:35 +0100" |
| 46 | extracted_date = self.date_interp.extract_received_date(date) |
| 47 | self.assertEqual(extracted_date, self.true_date, "Failed date format 2") |
| 48 | |
| 49 | def test_received_date_extraction3(self): |
| 50 | """Tests the date extraction method.""" |
| 51 | date = "11 Dec 2007 18:24:35 +0100" |
| 52 | extracted_date = self.date_interp.extract_received_date(date) |
| 53 | self.assertEqual(extracted_date, self.true_date, "Failed date format 3") |
| 54 | |
| 55 | def test_received_date_extraction4(self): |
| 56 | """Tests the date extraction method.""" |
| 57 | date = "11 Dec 2007 18:24:35" |
| 58 | extracted_date = self.date_interp.extract_received_date(date) |
| 59 | #should not be equal because of time zone assumption |
| 60 | self.assertNotEqual(extracted_date, self.true_date, "Failed date format 4") |
| 61 | |
| 62 | def test_received_date_extraction5(self): |
| 63 | """Tests the received date extraction method.""" |
| 64 | date = "11 Dec 2007 18:24:35 GMT" |
| 65 | extracted_date = self.date_interp.extract_received_date(date) |
| 66 | #should not be equal because of time zone assumption |
| 67 | self.assertNotEqual(extracted_date, self.true_date, "Failed date format 5") |
| 68 | |
| 69 | def test_received_date_extraction6(self): |
| 70 | """Tests the received date extraction method.""" |
| 71 | date = 'Received: from intranator.m.i2n ([unix socket])'\ |
| 72 | 'by intranator.m.i2n with LMTPA; Tue, 11 Dec 2007 18:24:35'\ |
| 73 | '+0100Received: from localhost (intranator.m.i2n [127.0.0.1])'\ |
| 74 | 'by localhost (Postfix) with ESMTP id 895812AC54for <intra2net_thomas@intranator.m.i2n>;'\ |
| 75 | 'Sun, 13 Mar 2011 18:47:18 +0100 (CET)Received: from re04.intra2net.com '\ |
| 76 | '(re04.intra2net.com [82.165.46.26])(using TLSv1 with cipher ADH-AES256-SHA '\ |
| 77 | '(256/256 bits))(No client certificate requested)by intranator.m.i2n (Postfix) with '\ |
| 78 | 'ESMTPS id 28DB92AC53for <thomas.jarosch@intra2net.com>; Sun, 13 Mar 2011 18:47:15 +0100 '\ |
| 79 | '(CET)Received: from postfix.charite.de (postfix.charite.de [141.42.206.35])(using TLSv1 '\ |
| 80 | 'with cipher ADH-AES256-SHA (256/256 bits))(No client certificate requested)by '\ |
| 81 | 're04.intra2net.com (Postfix) with ESMTP id C054A3010Afor <thomas.jarosch@intra2net.com>; '\ |
| 82 | 'Sun, 13 Mar 2011 18:47:14 +0100 (CET)Received: from localhost (localhost [127.0.0.1])by '\ |
| 83 | 'de.postfix.org (Postfix) with ESMTP id 7FCCFF7879for <thomas.jarosch@intra2net.com>; '\ |
| 84 | 'Sun, 13 Mar 2011 18:47:14 +0100 (CET)Received: from de.postfix.org ([127.0.0.1])by '\ |
| 85 | 'localhost (de.postfix.org [127.0.0.1]) (amavisd-new, port 10026)with LMTP id '\ |
| 86 | 'YSXF-vf3+6E1 for <thomas.jarosch@intra2net.com>;Sun, 13 Mar 2011 18:47:14 +0100 (CET)'\ |
| 87 | 'Received: from de.postfix.org (localhost [127.0.0.1])by de.postfix.org (Postfix) with '\ |
| 88 | 'ESMTP id 3C3123DF1Efor <thomas.jarosch@intra2net.com>; Sun, 13 Mar 2011 18:46:33 +0100 '\ |
| 89 | '(CET)Received: from localhost (localhost [127.0.0.1])by de.postfix.org (Postfix) with '\ |
| 90 | 'ESMTP id AB6CE3DBD2for <amavis-users@amavis.org>; Sun, 13 Mar 2011 18:45:57 +0100 (CET)'\ |
| 91 | 'Received: from de.postfix.org ([127.0.0.1])by localhost (de.postfix.org [127.0.0.1]) '\ |
| 92 | '(amavisd-new, port 10024)with ESMTP id mBYiZO8wREeS for <amavis-users@amavis.org>;Sun, '\ |
| 93 | '13 Mar 2011 18:45:56 +0100 (CET)Received: from mail.inetmsg.com (mail.inetmsg.com '\ |
| 94 | '[173.10.94.185])by de.postfix.org (Postfix) with ESMTPSfor <amavis-users@amavis.org>; '\ |
| 95 | 'Sun, 13 Mar 2011 18:45:55 +0100 (CET)Received: from [192.168.1.107] (fw1.inetmsg.com '\ |
| 96 | '[10.20.30.253])(using TLSv1 with cipher DHE-RSA-CAMELLIA256-SHA (256/256 bits))'\ |
| 97 | '(No client certificate requested)by mail.inetmsg.com (INetMsg Mail Service) with ESMTPSA '\ |
| 98 | 'id 0B95326CD1for <amavis-users@amavis.org>; Sun, 13 Mar 2011 10:45:41 -0700 (PDT)"]]' |
| 99 | extracted_date = self.date_interp.extract_received_date(date) |
| 100 | #should not be equal because of time zone assumption |
| 101 | self.assertEqual(extracted_date, self.true_date, "Failed date format 6") |
| 102 | |
| 103 | def test_compare_dates(self): |
| 104 | """Tests the date comparison method.""" |
| 105 | true_date2 = datetime.datetime(2007, 12, 11, 18, 34, 35) |
| 106 | #is difference of 10 mins significant if tolerance is 9 mins |
| 107 | self.assertTrue(bool(self.date_interp.compare_dates(self.true_date, true_date2, 9*60)), "Failed at comparison test") |
| 108 | #is difference of 10 mins significant if tolerance is 11 mins |
| 109 | self.assertFalse(bool(self.date_interp.compare_dates(self.true_date, true_date2, 11*60)), "Failed at comparison test") |
| 110 | |
| 111 | if __name__ == '__main__': |
| 112 | unittest.main() |