Add unit testing for the mailbox acls parsing functionality
[imap-restore-mail] / unit_tester.py
diff --git a/unit_tester.py b/unit_tester.py
new file mode 100644 (file)
index 0000000..8c77d1d
--- /dev/null
@@ -0,0 +1,73 @@
+'''
+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