[Spambayes-checkins]
spambayes/spambayes/test test_sb_imapfilter.py, NONE, 1.1
Tony Meyer
anadelonbrin at users.sourceforge.net
Wed Aug 4 10:36:35 CEST 2004
Update of /cvsroot/spambayes/spambayes/spambayes/test
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv11096/spambayes/test
Added Files:
test_sb_imapfilter.py
Log Message:
First stab at some unit tests for sb_imapfilter.py. These are pretty limited at the moment,
but I will add to them as I have time.
At the moment, many require an IMAP server (hardcoded values in the script). At some
point I'll improve this with a dummy server like test_sb-server.py has, but too much work
for now.
These all pass here right now, with the updated imapfilter script.
--- NEW FILE: test_sb_imapfilter.py ---
# Test sb_imapfilter script.
# At the moment, the script needs to be provided with an IMAP server to
# use for the testing. It would be nice if we provided a dummy server
# like test_sb-server.py does for POP, but this will do for the moment.
import sys
import time
import imaplib
import unittest
import sb_test_support
sb_test_support.fix_sys_path()
from spambayes.Options import options
from sb_imapfilter import BadIMAPResponseError
from sb_imapfilter import IMAPSession, IMAPMessage, IMAPFolder
IMAP_SERVER = "mail.madsods.gen.nz"
IMAP_PORT = 143
IMAP_USERNAME = "test_account+madsods.gen.nz"
IMAP_PASSWORD = ""
IMAP_FOLDER_LIST = ["INBOX", "unsure", "ham_to_train", "spam",
"spam_to_train", ".mailboxlist"]
IMAP_FOLDER_LIST.sort()
class IMAPSessionTest(unittest.TestCase):
def setUp(self):
self.imap = IMAPSession(IMAP_SERVER, IMAP_PORT)
def tearDown(self):
try:
self.imap.logout()
except imaplib.error:
pass
def testGoodLogin(self):
self.imap.login(IMAP_USERNAME, IMAP_PASSWORD)
self.assert_(self.imap.logged_in)
def testBadLogin(self):
self.assertRaises(SystemExit, 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):
# This test will fail if testGoodLogin fails.
self.imap.login(IMAP_USERNAME, IMAP_PASSWORD)
# Check handling of Python (not SpamBayes) bug #845560.
self.assertRaises(BadIMAPResponseError, self.imap.SelectFolder, "")
# Check selection.
self.imap.SelectFolder("Inbox")
response = self.imap.response('OK')
self.assert_(response[0] == "OK")
self.assert_(response[1] != [None])
# Check that we don't reselect if we are already in that folder.
self.imap.SelectFolder("Inbox")
response = self.imap.response('OK')
self.assert_(response[0] == "OK")
self.assert_(response[1] == [None])
def test_folder_list(self):
# This test will fail if testGoodLogin fails.
self.imap.login(IMAP_USERNAME, IMAP_PASSWORD)
# If we had more control over what the IMAP server returned
# (say we had our own one, as suggested above), then we could
# test returning literals, getting an error, and a bad literal,
# but since we don't, just do a simple test for now.
folders = self.imap.folder_list()
self.assertEqual(folders, IMAP_FOLDER_LIST)
def test_extract_fetch_data(self):
response = "bad response"
self.assertRaises(BadIMAPResponseError,
self.imap.extract_fetch_data, response)
# Check UID and message_number.
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)
self.assertEqual(data["UID"], uid)
# Check INTERNALDATE, FLAGS.
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["FLAGS"], flags)
self.assertEqual(data["INTERNALDATE"], date)
# Check RFC822 and literals.
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)
self.assertEqual(data["RFC822"], rfc)
# Check RFC822.HEADER.
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["RFC822.HEADER"], headers)
# Check BODY.PEEK.
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["BODY[]"], peek)
class IMAPMessageTest(unittest.TestCase):
def setUp(self):
imap = IMAPSession(IMAP_SERVER, IMAP_PORT)
self.msg = IMAPMessage()
self.msg.imap_server = imap
def tearDown(self):
try:
self.msg.imap_server.logout()
except imaplib.error:
pass
# These tests might fail if more than one second passes
# between the call and the assert. We could make it more robust,
# or you could just run this on a faster machine, like me <wink>.
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)
# When we have a dummy server, check for MemoryError here.
# And also an unparseable message (for Python < 2.4).
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()
# These should be the same object, not just equal.
self.assert_(new_msg is new_msg2)
def suite():
suite = unittest.TestSuite()
for cls in (IMAPSessionTest,
IMAPMessageTest,
):
suite.addTest(unittest.makeSuite(cls))
return suite
if __name__=='__main__':
sb_test_support.unittest_main(argv=sys.argv + ['suite'])
More information about the Spambayes-checkins
mailing list