示例#1
0
class BaseIMAPFilterTest(unittest.TestCase):
    def setUp(self):
        IMAPSession.timeout = 5
        self.imap = IMAPSession("localhost:%d" % IMAP_PORT)
    def tearDown(self):
        try:
            self.imap.logout()
        except IMAPError:
            pass
class BaseIMAPFilterTest(unittest.TestCase):
    def setUp(self):
        # shorten for testing so we don't wait forever
        IMAPSession.timeout = 5
        self.imap = IMAPSession("localhost:%d" % IMAP_PORT)

    def tearDown(self):
        try:
            self.imap.logout()
        except IMAPError:
            pass
示例#3
0
class BaseIMAPFilterTest(unittest.TestCase):
    def setUp(self):
        # shorten for testing so we don't wait forever
        IMAPSession.timeout = 5
        self.imap = IMAPSession("localhost:%d" % IMAP_PORT)

    def tearDown(self):
        try:
            self.imap.logout()
        except IMAPError:
            pass
 def setUp(self):
     # shorten for testing so we don't wait forever
     IMAPSession.timeout = 5
     self.imap = IMAPSession("localhost:%d" % IMAP_PORT)
示例#5
0
 def setUp(self):
     IMAPSession.timeout = 5
     self.imap = IMAPSession("localhost:%d" % IMAP_PORT)
示例#6
0
 def setUp(self):
     # shorten for testing so we don't wait forever
     IMAPSession.timeout = 5
     self.imap = IMAPSession("localhost:%d" % IMAP_PORT)
示例#7
0
class  BaseIMAPFilterTest (unittest.TestCase) :
	def setUp(self):

        IMAPSession.timeout = 5

        self.imap = IMAPSession("localhost:%d" % IMAP_PORT)
 def tearDown(self):

        try:

            self.imap.logout()

        except IMAPError:

            pass

class  IMAPSessionTest (BaseIMAPFilterTest) :
	def testConnection(self):

        self.assert_(self.imap.connected)
 def testGoodLogin(self):

        self.imap.login(IMAP_USERNAME, IMAP_PASSWORD)

        self.assert_(self.imap.logged_in)
 def testBadLogin(self):

        self.assertRaises(LoginFailure, self.imap.login, IMAP_USERNAME,
                          "wrong password")
 def test_check_response(self):

        test_data = "IMAP response data"

        response = ("OK", test_data)

        data = self.imap.check_response("", response)

        self.assertEqual(data, test_data)

        response = ("NO", test_data)

        self.assertRaises(BadIMAPResponseError, self.imap.check_response,
                          "", response)
 def testSelectFolder(self):

        self.imap.login(IMAP_USERNAME, IMAP_PASSWORD)

        self.assertRaises(BadIMAPResponseError, self.imap.SelectFolder, "")

        self.imap.SelectFolder("Inbox")

        response = self.imap.response('OK')

        self.assertEquals(response[0], "OK")

        self.assert_(response[1] != [None])

        self.imap.SelectFolder("Inbox")

        response = self.imap.response('OK')

        self.assertEquals(response[0], "OK")

        self.assertEquals(response[1], [None])
 def test_folder_list(self):

        global FAIL_NEXT

        self.imap.login(IMAP_USERNAME, IMAP_PASSWORD)

        folders = self.imap.folder_list()

        correct = IMAP_FOLDER_LIST[:]

        correct.sort()

        self.assertEqual(folders, correct)

        print("\nYou should see a message indicating that getting the " \
              "folder list failed.")

        FAIL_NEXT = True

        self.assertEqual(self.imap.folder_list(), [])
 def test_extract_fetch_data(self):

        response = "bad response"

        self.assertRaises(BadIMAPResponseError,
                          self.imap.extract_fetch_data, response)

        message_number = "123"

        uid = "5432"

        response = ("%s (UID %s)" % (message_number, uid),)

        data = self.imap.extract_fetch_data(response)

        self.assertEqual(data[message_number]["message_number"],
                         message_number)

        self.assertEqual(data[message_number]["UID"], uid)

        flags = r"(\Seen \Deleted)"

        date = '"27-Jul-2004 13:11:56 +1200"'

        response = ("%s (FLAGS %s INTERNALDATE %s)" % \
                   (message_number, flags, date),)

        data = self.imap.extract_fetch_data(response)

        self.assertEqual(data[message_number]["message_number"],
                         message_number)

        self.assertEqual(data[message_number]["FLAGS"], flags)

        self.assertEqual(data[message_number]["INTERNALDATE"], date)

        rfc = "Subject: Test\r\n\r\nThis is a test message."

        response = (("%s (RFC822 {%s}" % (message_number, len(rfc)), rfc),)

        data = self.imap.extract_fetch_data(response)

        self.assertEqual(data[message_number]["message_number"],
                         message_number)

        self.assertEqual(data[message_number]["RFC822"], rfc)

        headers = "Subject: Foo\r\nX-SpamBayes-ID: 1231-1\r\n"

        response = (("%s (RFC822.HEADER {%s}" % (message_number,
                                                len(headers)), headers),)

        data = self.imap.extract_fetch_data(response)

        self.assertEqual(data[message_number]["RFC822.HEADER"], headers)

        peek = "Subject: Test2\r\n\r\nThis is another test message."

        response = (("%s (BODY[] {%s}" % (message_number, len(peek)),
                    peek),)

        data = self.imap.extract_fetch_data(response)

        self.assertEqual(data[message_number]["BODY[]"], peek)

        uid = '3018'

        flags = '(\\Seen \\Deleted)'

        headers = "Return-Path: <*****@*****.**>\r\nX-Original-To" \
                  ": [email protected]\r\nDelivered-To: dleinbac@ma" \
                  "il2.majro.dhs.org\r\nReceived: from its-mail1.mass" \
                  "ey.ac.nz (its-mail1.massey.ac.nz [130.123.128.11])" \
                  "\r\n\tby mail2.majro.dhs.org (Postfix) with ESMTP " \
                  "id 7BC5018FE22\r\n\tfor <*****@*****.**>; Mon" \
                  ", 13 Dec 2004 22:46:05 -0800 (PST)\r\nReceived: fr" \
                  "om its-mm1.massey.ac.nz (its-mm1 [130.123.128.45])" \
                  "\r\n\tby its-mail1.massey.ac.nz (8.9.3/8.9.3) with" \
                  "ESMTP id TAA12081;\r\n\tTue, 14 Dec 2004 19:45:56 " \
                  "+1300 (NZDT)\r\nReceived: from its-campus2.massey." \
                  "ac.nz (Not Verified[130.123.48.254]) by its-mm1.ma" \
                  "ssey.ac.nz with NetIQ MailMarshal\r\n\tid <B003745" \
                  "788>; Tue, 14 Dec 2004 19:45:56 +1300\r\nReceived:" \
                  "from it029048 (it029048.massey.ac.nz [130.123.238." \
                  "51])\r\n\tby its-campus2.massey.ac.nz (8.9.3/8.9.3" \
                  ") with ESMTP id TAA05881;\r\n\tTue, 14 Dec 2004 19" \
                  ':45:55 +1300 (NZDT)\r\nFrom: "Tony Meyer"  <tameye' \
                  '*****@*****.**>\r\nTo: "\'David Leinbach\'" <david@l' \
                  "einbach.name>, <*****@*****.**>\r\nSubject: " \
                  "RE: [Spambayes] KeyError in sp_imapfilter\r\nDate:" \
                  "Tue, 14 Dec 2004 19:45:25 +1300\r\nMessage-ID: <EC" \
                  "*****@*****.**" \
                  "sey.ac.nz>\r\nMIME-Version: 1.0\r\nContent-Type: t" \
                  'ext/plain;\r\n\tcharset="us-ascii"\r\nContent-Tran' \
                  "sfer-Encoding: quoted-printable\r\nX-Priority: 3 (" \
                  "Normal)\r\nX-MSMail-Priority: Normal\r\nX-Mailer: " \
                  "Microsoft Outlook, Build 10.0.4510\r\nIn-Reply-To:" \
                  "<ECBA357DDED63B4995F5C1F5CBE5B1E801A49168@its-xchg" \
                  ".massey.ac.nz>\r\nX-Habeas-SWE-1: winter into spri" \
                  "ng\r\nX-Habeas-SWE-2: brightly anticipated\r\nX-Ha" \
                  "beas-SWE-3: like Habeas SWE (tm)\r\nX-Habeas-SWE-4" \
                  ": Copyright 2002 Habeas (tm)\r\nX-Habeas-SWE-5: Se" \
                  "nder Warranted Email (SWE) (tm). The sender of thi" \
                  "s\r\nX-Habeas-SWE-6: email in exchange for a licen" \
                  "se for this Habeas\r\nX-Habeas-SWE-7: warrant mark" \
                  "warrants that this is a Habeas Compliant\r\nX-Habe" \
                  "as-SWE-8: Message (HCM) and  not spam. Please repo" \
                  "rt use of this\r\nX-Habeas-SWE-9: mark in spam to " \
                  "<http://www.habeas.com/report/>.\r\nX-MimeOLE: Pro" \
                  "duced By Microsoft MimeOLE V6.00.2900.2180\r\nImpo" \
                  "rtance: Normal\r\n\r\n"

        response = ['1 (FLAGS %s)' % flags,
                    ('2 (UID %s RFC822.HEADER {%d}' % (uid, len(headers)),
                     headers), ')'] 

        data = self.imap.extract_fetch_data(response)

        self.assertEqual(data['1']["message_number"], '1')

        self.assertEqual(data['2']["message_number"], '2')

        self.assertEqual(data['1']["FLAGS"], flags)

        self.assertEqual(data['2']["UID"], uid)

        self.assertEqual(data['2']["RFC822.HEADER"], headers)

        headers = 'Return-Path: <*****@*****.**>\r\n' \
                  'X-Original-To: [email protected]\r\n' \
                  'Delivered-To: [email protected]\r\n' \
                  'Received: from cressida (unknown [70.70.206.137])' \
                  '\r\n\tby mail2.majro.dhs.org (Postfix) with ESMTP' \
                  'id AAD451CD28E\r\n\tfor <*****@*****.**>; Mo' \
                  'n,  6 Dec 2004 11:49:41 -0800 (PST)\r\n' \
                  'From: "Erin Leinbach" <*****@*****.**>\r\n' \
                  'To: "Dave" <*****@*****.**>\r\n' \
                  'Subject: Goo goo dolls songs\r\n' \
                  'Date: Mon, 6 Dec 2004 11:51:07 -0800\r\n' \
                  'Message-ID: <000001c4dbcc$ed6188a0$6801a8c0@cre' \
                  'ssida>\r\nMIME-Version: 1.0\r\n' \
                  'Content-Type: text/plain;\r\n' \
                  '\tcharset="Windows-1252"\r\n' \
                  'Content-Transfer-Encoding: 7bit\r\n' \
                  'X-Priority: 3 (Normal)\r\n' \
                  'X-MSMail-Priority: Normal\r\n' \
                  'X-Mailer: Microsoft Outlook, Build 10.0.2616\r\n' \
                  'Importance: Normal\r\n' \
                  'X-MimeOLE: Produced By Microsoft MimeOLE V6.00.29' \
                  '00.2180\r\nX-Spambayes-Classification: ham\r\n' \
                  'X-Spambayes-MailId: 000001\r\n\r\n'

        uid = '3086'

        flags = '(\\Seen \\Deleted)'

        response = [('5 (UID %s RFC822.HEADER {839}' % (uid,), headers),
                    ')', '5 (FLAGS %s)' % (flags,)]

        data = self.imap.extract_fetch_data(response)

        self.assertEqual(data['5']["message_number"], '5')

        self.assertEqual(data['5']["FLAGS"], flags)

        self.assertEqual(data['5']["UID"], uid)

        self.assertEqual(data['5']["RFC822.HEADER"], headers)
 def _counter(self, size):

        self._count += 1

        return self._imap_file_read(size)
 def test_safe_read(self):

        saved_file = self.imap.file

        self.imap.file = io.StringIO()

        self.imap.file.write("".join(list(IMAP_MESSAGES.values())*10))

        self.imap.file.seek(0)

        try:

            self.assertEqual(len(self.imap.read(\
                self.imap.MAXIMUM_SAFE_READ-1)),
                             self.imap.MAXIMUM_SAFE_READ-1)

            self.assertEqual(len(self.imap.read(\
                self.imap.MAXIMUM_SAFE_READ+1)),
                             self.imap.MAXIMUM_SAFE_READ+1)

            self._count = 0

            self._imap_file_read = self.imap.file.read

            self.imap.file.read = self._counter

            self.imap.read(self.imap.MAXIMUM_SAFE_READ-1)

            self.assertEqual(self._count, 1)

            self._count = 0

            self.imap.read(self.imap.MAXIMUM_SAFE_READ+1)

            self.assertEqual(self._count, 2)

        finally:

            self.imap.file = saved_file

class  IMAPMessageTest (BaseIMAPFilterTest) :
	def setUp(self):

        BaseIMAPFilterTest.setUp(self)

        self.msg = IMAPMessage()

        self.msg.imap_server = self.imap
 def test_extract_time_no_date(self):

        date = self.msg.extractTime()

        self.assertEqual(date, imaplib.Time2Internaldate(time.time()))
 def test_extract_time_date(self):

        self.msg["Date"] = "Wed, 19 May 2004 20:05:15 +1200"

        date = self.msg.extractTime()

        self.assertEqual(date, '"19-May-2004 20:05:15 +1200"')
 def test_extract_time_bad_date(self):

        self.msg["Date"] = "Mon, 06 May 0102 10:51:16 -0100"

        date = self.msg.extractTime()

        self.assertEqual(date, imaplib.Time2Internaldate(time.time()))
 def test_as_string_invalid(self):

        content = "This is example content.\nThis is more\r\n"

        self.msg.invalid = True

        self.msg.invalid_content = content

        as_string = self.msg.as_string()

        self.assertEqual(self.msg._force_CRLF(content), as_string)
 def testMoveTo(self):

        fol1 = "Folder1"

        fol2 = "Folder2"

        self.msg.MoveTo(fol1)

        self.assertEqual(self.msg.folder, fol1)

        self.msg.MoveTo(fol2)

        self.assertEqual(self.msg.previous_folder, fol1)

        self.assertEqual(self.msg.folder, fol2)
 def test_get_full_message(self):

        self.assertRaises(AssertionError, self.msg.get_full_message)

        self.msg.id = "unittest"

        self.assertRaises(AttributeError, self.msg.get_full_message)

        self.msg.imap_server.login(IMAP_USERNAME, IMAP_PASSWORD)

        self.msg.imap_server.select()

        response = self.msg.imap_server.fetch(1, "UID")

        self.assertEqual(response[0], "OK")

        self.msg.uid = response[1][0][7:-1]

        self.msg.folder = IMAPFolder("Inbox", self.msg.imap_server, None)

        new_msg = self.msg.get_full_message()

        self.assertEqual(new_msg.folder, self.msg.folder)

        self.assertEqual(new_msg.previous_folder, self.msg.previous_folder)

        self.assertEqual(new_msg.uid, self.msg.uid)

        self.assertEqual(new_msg.id, self.msg.id)

        self.assertEqual(new_msg.rfc822_key, self.msg.rfc822_key)

        self.assertEqual(new_msg.rfc822_command, self.msg.rfc822_command)

        self.assertEqual(new_msg.imap_server, self.msg.imap_server)

        id_header = options["Headers", "mailid_header_name"]

        self.assertEqual(new_msg[id_header], self.msg.id)

        new_msg2 = new_msg.get_full_message()

        self.assert_(new_msg is new_msg2)
 def test_get_bad_message(self):

        self.msg.id = "unittest"

        self.msg.imap_server.login(IMAP_USERNAME, IMAP_PASSWORD)

        self.msg.imap_server.select()

        self.msg.uid = 103 

        self.msg.folder = IMAPFolder("Inbox", self.msg.imap_server, None)

        print("\nWith email package versions less than 3.0, you should " \
              "see an error parsing the message.")

        new_msg = self.msg.get_full_message()

        has_header = new_msg.as_string().find("X-Spambayes-Exception: ") != -1

        has_defect = hasattr(new_msg, "defects") and len(new_msg.defects) > 0

        self.assert_(has_header or has_defect)
 def test_get_memory_error_message(self):

        pass
 def test_Save(self):

        pass

class  IMAPFolderTest (BaseIMAPFilterTest) :
	def setUp(self):

        BaseIMAPFilterTest.setUp(self)

        self.imap.login(IMAP_USERNAME, IMAP_PASSWORD)

        self.folder = IMAPFolder("testfolder", self.imap, None)
 def test_cmp(self):

        folder2 = IMAPFolder("testfolder", self.imap, None)

        folder3 = IMAPFolder("testfolder2", self.imap, None)

        self.assertEqual(self.folder, folder2)

        self.assertNotEqual(self.folder, folder3)
 def test_iter(self):

        keys = list(self.folder.keys())

        for msg in self.folder:

            msg = msg.get_full_message()

            msg_correct = email.message_from_string(IMAP_MESSAGES[int(keys[0])],
                                                    _class=message.Message)

            id_header_name = options["Headers", "mailid_header_name"]

            if msg_correct[id_header_name] is None:

                msg_correct[id_header_name] = msg.id

            self.assertEqual(msg.as_string(), msg_correct.as_string())

            keys = keys[1:]
 def test_keys(self):

        keys = list(self.folder.keys())

        correct_keys = [str(IMAP_UIDS[id]) for id in UNDELETED_IDS]

        self.assertEqual(keys, correct_keys)
 def test_getitem_new_style(self):

        id_header_name = options["Headers", "mailid_header_name"]

        msg1 = self.folder[101]

        self.assertEqual(msg1.id, SB_ID_1)

        msg1 = msg1.get_full_message()

        msg1_correct = email.message_from_string(IMAP_MESSAGES[101],
                                                 message.Message)

        self.assertNotEqual(msg1[id_header_name], None)

        msg1_correct[id_header_name] = SB_ID_1

        self.assertEqual(msg1.as_string(), msg1_correct.as_string())
 def test_getitem_old_style(self):

        id_header_name = options["Headers", "mailid_header_name"]

        msg2 = self.folder[102]

        self.assertEqual(msg2.id, SB_ID_2)

        msg2 = msg2.get_full_message()

        self.assertNotEqual(msg2[id_header_name], None)

        self.assertEqual(msg2.as_string(), IMAP_MESSAGES[102])
 def test_getitem_new_id(self):

        id_header_name = options["Headers", "mailid_header_name"]

        msg3 = self.folder[104]

        self.assertNotEqual(msg3[id_header_name], None)

        msg_correct = email.message_from_string(IMAP_MESSAGES[104],
                                                message.Message)

        msg_correct[id_header_name] = msg3.id

        self.assertEqual(msg3.as_string(), msg_correct.as_string())
 def test_generate_id(self):

        id1 = self.folder._generate_id()

        id2 = self.folder._generate_id()

        id3 = self.folder._generate_id()

        time.sleep(1)

        id4 = self.folder._generate_id()

        self.assertEqual(id2, id1 + "-2")

        self.assertEqual(id3, id1 + "-3")

        self.assertNotEqual(id1, id4)

        self.assertNotEqual(id2, id4)

        self.assertNotEqual(id3, id4)

        self.assert_('-' not in id4)
 def test_Train(self):

        pass
 def test_Filter(self):

        pass

class  IMAPFilterTest (BaseIMAPFilterTest) :
	def setUp(self):

        BaseIMAPFilterTest.setUp(self)

        self.imap.login(IMAP_USERNAME, IMAP_PASSWORD)

        classifier = Classifier()

        self.filter = IMAPFilter(classifier, None)

        options["imap", "ham_train_folders"] = ("ham_to_train",)

        options["imap", "spam_train_folders"] = ("spam_to_train",)
 def test_Train(self):

        pass
 def test_Filter(self):

        pass

class  SFBugsTest (BaseIMAPFilterTest) :
	def test_802545(self):

        pass
 def test_816400(self):

        pass
 def test_818552(self):

        pass
 def test_842984(self):

        pass
 def test_886133(self):

        pass

class  InterfaceTest (unittest.TestCase) :
	def setUp(self):

        self.saved_server = options["imap", "server"]

        options["imap", "server"] = ""

        self._server = threading.Thread(target=run, args=(True,))

        self._server.setDaemon(True)

        self._server.start()

        time.sleep(1)
 def tearDown(self):

        options["imap", "server"] = self.saved_server

        from urllib.request import urlopen

        from urllib.parse import urlencode

        urlopen('http://localhost:%d/save' % options["html_ui", "port"],
                urlencode({'how': _('Save & shutdown')})).read()
 
def test_UI(self):

    httpServer = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    httpServer.connect(('localhost', options["html_ui", "port"]))

    httpServer.send("get / HTTP/1.0\r\n\r\n")

    response = ''

    while 1:

        packet = httpServer.recv(1024)

        if not packet: break

        response += packet

    self.assert_(re.search(r"(?s)<html>.*SpamBayes IMAP Filter.*</html>",
                           response))

 def suite():

    suite = unittest.TestSuite()

    for cls in (IMAPSessionTest,
                IMAPMessageTest,
                IMAPFolderTest,
                IMAPFilterTest,
                SFBugsTest,
                InterfaceTest,
               ):

        suite.addTest(unittest.makeSuite(cls))

    return suite
 if __name__=='__main__':

    def runTestServer():

        TestListener()

        asyncore.loop()

    server = threading.Thread(target=runTestServer, args=())

    server.setDaemon(True)

    server.start()

    time.sleep(2)

    sb_test_support.unittest_main(argv=sys.argv + ['suite'])

 if __name__=='__main__':

    def runTestServer():

        TestListener()

        asyncore.loop()

    server = threading.Thread(target=runTestServer, args=())

    server.setDaemon(True)

    server.start()

    time.sleep(2)

    sb_test_support.unittest_main(argv=sys.argv + ['suite'])





try:

    IMAPError = imaplib.error

except AttributeError:

    IMAPError = imaplib.IMAP4.error