with open(mboxlistfile, 'r') as acl_file:
for line in acl_file:
acls = {}
- linedata = MBOXFILE_LINE.match(line).groups()
- if len(linedata) == 0:
+ try:
+ linedata = MBOXFILE_LINE.match(line).groups()
+ except AttributeError:
logging.warning("Illegal line in mailbox list dump: %s", line)
continue
key = linedata[0]
aclstr = linedata[1]
-
+
# loop through acl rights string and build dictionary of users and rights
while(aclstr != ""):
- acldata = ACL_STRING.match(aclstr).groups()
- if len(acldata) == 0:
- logging.error("Illegal acl string in mailbox list dump: %s", line)
+ try:
+ acldata = ACL_STRING.match(aclstr).groups()
+ except AttributeError:
+ logging.warning("Illegal acl string in mailbox list dump: %s", line)
+ aclstr = ""
continue
aclstr = acldata[2]
acls[acldata[0]] = acldata[1]
session = MailIterator(args.user)
else:
session = MailIterator(args.user)
- #session = MailIterator("/var/imap/socket/imap", "cyrus", "geheim")
+ #session = MailIterator("/var/imap/socket/imap", "cyrus", "geheim")
storage = FileIterator()
# retrieve mailbox list from the mailbox list file
formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
console.setFormatter(formatter)
default_logger.addHandler(console)
-
+
# add a handler for warnings counting
warnings_handler = WarningsHandler()
warnings_handler.setLevel(LOG_UNCLEAN_EXIT_LEVEL)
--- /dev/null
+'''
+restore-mail-inject.py - Tool to inject mails via IMAP
+
+Copyright (c) 2012 Intra2net AG
+'''
+
+import unittest
+import os
+from file_iterator import FileIterator
+
+class FileContentsParse(unittest.TestCase):
+ """Test the retrieved acls from a dummy mailbox list file"""
+
+ # class attributes
+ # FileIterator instance to be tested for parsing
+ file_iter = None
+ # dummy filename to be used for parsing the acls
+ dummy_filename = None
+ # dummy file descriptor to be used for parsing the acls
+ dummy_file = None
+
+ # wrong naming conventions are due to python unittest library requirement
+ def setUp(self):
+ """Prepares the testing confitions."""
+ self.file_iter = FileIterator()
+ self.dummy_filename = "test_acls.dump"
+ self.dummy_file = open(self.dummy_filename, "w")
+ self.dummy_file.write("user.00schneider\t0 default 00schneider\tlrswipkxtecda\t\n"
+ "user.00schneider.ibx_poped\t0 default 00schneider\tlrswipkxtecda\t\n"
+ "user.00schneider.ibx_sub\t0 default 00schneider\tlrswpkxtecda\t\n"
+ "user.abrus\t0 default abrus\tlrswipkxtecda\t\n"
+ "user.abrus.Aufgaben\t0 default abrus\tlrswipkxtecda\tabrus2\tlrswikxtecda\t\n"
+ "user.abrus.Entw&APw-rfe\t0 default abrus\tlrswipkxtecda\t\n"
+ "user.abrus.Gesendete Objekte\t0 default abrus\tlrswipkxtecda\t\n"
+ "user.abrus.Junk-E-Mail\t0 default abrus\tlrswipkxtecda\t\n"
+ "user.abrus.Kalender\t0 default abrus\tlrswipkxtecda\t\n"
+ "user.abrus.Kontakte\t0 default abrus\tlrswipkxtecda\t\n"
+ "user.abrus.Notizen\t0 default abrus\tlrswipkxtecda\t\n"
+ "user.abrus.foobar\t0 default abrus\tlrswipkxtecda\t\n")
+ self.dummy_file.close()
+
+ # wrong naming conventions are due to python unittest library requirement
+ def tearDown(self):
+ """Clean up the testing conditions"""
+ os.unlink(self.dummy_filename)
+
+ def test_mboxlist_firstline(self):
+ """Test whether first line was parsed correctly."""
+ parsed_acls = self.file_iter.load_mailbox_list(self.dummy_filename)
+ self.assertIn("user.00schneider", parsed_acls)
+ self.assertIn("00schneider", parsed_acls["user.00schneider"])
+ self.assertEqual(parsed_acls["user.00schneider"]["00schneider"], "lrswipkxtecda", "Wront acls were parsed for a user.")
+
+ def test_mboxlist_totals(self):
+ """Test whether there are missing parsed lines, mailboxs, and users."""
+ parsed_acls = self.file_iter.load_mailbox_list(self.dummy_filename)
+ self.assertEqual(len(parsed_acls), 12)
+ self.assertEqual(len(parsed_acls.popitem()[1]), 1)
+ self.assertEqual(len(parsed_acls.popitem()[1]), 1)
+ self.assertEqual(len(parsed_acls.popitem()[1]), 1)
+ self.assertEqual(len(parsed_acls.popitem()[1]), 1)
+ self.assertEqual(len(parsed_acls.popitem()[1]), 2)
+ self.assertEqual(len(parsed_acls.popitem()[1]), 1)
+ self.assertEqual(len(parsed_acls.popitem()[1]), 1)
+ self.assertEqual(len(parsed_acls.popitem()[1]), 1)
+ self.assertEqual(len(parsed_acls.popitem()[1]), 1)
+ self.assertEqual(len(parsed_acls.popitem()[1]), 1)
+ self.assertEqual(len(parsed_acls.popitem()[1]), 1)
+ self.assertEqual(len(parsed_acls.popitem()[1]), 1)
+
+
+if __name__ == '__main__':
+ unittest.main()
\ No newline at end of file