diff --git a/jabber/storage.py b/jabber/storage.py index 9653e7f..805bfcc 100644 --- a/jabber/storage.py +++ b/jabber/storage.py @@ -123,12 +123,12 @@ class DBMStorage(Storage): print >>sys.stderr, e def __setitem__(self, pk_tuple, obj): - print "Adding " + "#".join(pk_tuple) + " = " + str(obj) +# print "Adding " + "#".join(pk_tuple) + " = " + str(obj) self.__str_registered["#".join(pk_tuple)] = str(obj) self.sync() def __getitem__(self, pk_tuple): - print "Getting " + "#".join(pk_tuple) +# print "Getting " + "#".join(pk_tuple) if len(pk_tuple) == self.nb_pk_fields: return mailconnection_factory.str_to_mail_connection(self.__str_registered["#".join(pk_tuple)]) else: @@ -139,7 +139,7 @@ class DBMStorage(Storage): if regexp.search(key)] def __delitem__(self, pk_tuple): - print "Deleting " + "#".join(pk_tuple) +# print "Deleting " + "#".join(pk_tuple) del self.__str_registered["#".join(pk_tuple)] self.sync() diff --git a/run_test.py b/run_test.py index 4b97f72..a281fa2 100644 --- a/run_test.py +++ b/run_test.py @@ -59,7 +59,7 @@ if __name__ == '__main__': component2_suite, \ storage_suite, \ dbmstorage_suite)) - test_support.run_suite(component_suite) + test_support.run_suite(component2_suite) # coverage.stop() # coverage.analysis(jabber.mailconnection_factory) diff --git a/tests/dummy_server.py b/tests/dummy_server.py index fba36cb..4235cef 100644 --- a/tests/dummy_server.py +++ b/tests/dummy_server.py @@ -24,6 +24,7 @@ import sys import time import traceback import re +import os import socket import types import select @@ -114,7 +115,7 @@ class XMLDummyServer(DummyServer): # received size is based on the expected size in self.queries data = conn.recv(1024 + len(self.queries[idx])) if data: - print "-----------RECEIVE " + data +# print "-----------RECEIVE " + data r = self._reader.feed(data) except: type, value, stack = sys.exc_info() @@ -131,7 +132,7 @@ class XMLDummyServer(DummyServer): else: response = self.responses[idx] if response is not None: - print >>sys.stderr, '---------SENDING : ', response +# print >>sys.stderr, '---------SENDING : ', response conn.send(response) conn.close() except: @@ -143,15 +144,21 @@ class XMLDummyServer(DummyServer): def verify_queries(self): result = True queries_len = len(self.queries) - if queries_len == len(self.real_queries): + if queries_len == len(self.real_queries): + full_real_queries = "" + full_recv_queries = "" for idx in range(queries_len): - real_query = xml.dom.minidom.parseString(self.real_queries[idx]) - recv_query = xml.dom.minidom.parseString(self.queries[idx]) - if not utils.xmldiff(real_query, recv_query): - result = False - print >>sys.stderr, "Unexpected query :\n" + \ - "Expected query : _" + self.queries[idx] + "_\n" + \ - "Receive query : _" + self.real_queries[idx] + "_\n" + full_real_queries += self.real_queries[idx].rstrip(os.linesep) + full_recv_queries += self.queries[idx].rstrip(os.linesep) + # Do not receive it but add it so that xml parsing can succeed + full_real_queries += "" + real_query = xml.dom.minidom.parseString(full_real_queries) + recv_query = xml.dom.minidom.parseString(full_recv_queries) + try: + utils.xmldiff(real_query, recv_query) + except Exception, msg: + result = False + print >>sys.stderr, msg else: result = False print >>sys.stderr, "Expected " + str(queries_len) + \ diff --git a/tests/test_component.py b/tests/test_component.py index cce9c71..013083c 100644 --- a/tests/test_component.py +++ b/tests/test_component.py @@ -70,11 +70,8 @@ class MailComponent_TestCase_Basic(unittest.TestCase): def test_run(self): self.server.responses = ["", \ ""] - # TODO : concatenate all queries to parse xml self.server.queries = ["", \ - ""] -# self.server.queries = ["<\?xml version=\"1.0\" encoding=\"UTF-8\"\?>\s", \ -# "\s*"] + "[0-9abcdef]*"] self.mail_component.run(1) self.failUnless(self.server.verify_queries()) # TODO : more assertion @@ -82,9 +79,9 @@ class MailComponent_TestCase_Basic(unittest.TestCase): class MailComponent_TestCase_NoReg(unittest.TestCase): def setUp(self): self.handler = TestStreamHandler() - logger = logging.getLogger() - logger.addHandler(logging.StreamHandler()) - logger.setLevel(logging.DEBUG) +# logger = logging.getLogger() +# logger.addHandler(logging.StreamHandler()) +# logger.setLevel(logging.DEBUG) self.mail_component = MailComponent(Config("tests/jmc-test.xml")) self.server = dummy_server.XMLDummyServer("localhost", 55555, None, self.handler) thread.start_new_thread(self.server.serve, ()) @@ -97,10 +94,10 @@ class MailComponent_TestCase_NoReg(unittest.TestCase): self.server.responses = ["", \ "", \ ""] - self.server.queries = ["<\?xml version=\"1.0\" encoding=\"UTF-8\"\?>\s?" + \ + self.server.queries = ["" + \ "", \ - "\s*", \ - ""] + "[0-9abcdef]*", \ + ""] self.mail_component.run(1) self.failUnless(self.server.verify_queries()) @@ -109,102 +106,103 @@ class MailComponent_TestCase_NoReg(unittest.TestCase): self.server.responses = ["", \ "", \ ""] - self.server.queries = ["<\?xml version=\"1.0\" encoding=\"UTF-8\"\?>\s?" + \ + self.server.queries = ["" + \ "", \ - "\s*", \ - "\s?" + \ - "\s?" + \ - "\s?" + \ - "Jabber Mail connection registration\s?" + \ - "Enter anything below\s?" + \ - "\s?" + \ - "\s?" + \ - "\s?" + \ - "\s?" + \ - "\s?" + \ - "\s?" + \ - "\s?" + \ - "\s?" + \ - "\s?" + \ - "\s?" + \ - "\s?" + \ - "\s?" + \ - "INBOX\s?" + \ - "\s?" + \ - "\s?" + \ - "2\s?" + \ - "\s?" + \ - "\s?" + \ - "\s?" + \ - "\s?" + \ - "\s?" + \ - "2\s?" + \ - "\s?" + \ - "\s?" + \ - "\s?" + \ - "\s?" + \ - "\s?" + \ - "1\s?" + \ - "\s?" + \ - "\s?" + \ - "\s?" + \ - "\s?" + \ - "\s?" + \ - "1\s?" + \ - "\s?" + \ - "\s?" + \ - "\s?" + \ - "\s?" + \ - "\s?" + \ - "0\s?" + \ - "\s?" + \ - "\s?" + \ - "\s?" + \ - "\s?" + \ - "\s?" + \ - "5\s?" + \ - "\s?" + \ - "\s?" + \ - "\s?" + \ - ""] + "[0-9abcdef]*", \ + "" + \ + "" + \ + "" + \ + "Jabber Mail connection registration" + \ + "Enter anything below" + \ + "" + \ + "" + \ + "" + \ + "" + \ + "" + \ + "" + \ + "" + \ + "" + \ + "" + \ + "" + \ + "" + \ + "" + \ + "INBOX" + \ + "" + \ + "" + \ + "2" + \ + "" + \ + "" + \ + "" + \ + "" + \ + "" + \ + "2" + \ + "" + \ + "" + \ + "" + \ + "" + \ + "" + \ + "1" + \ + "" + \ + "" + \ + "" + \ + "" + \ + "" + \ + "1" + \ + "" + \ + "" + \ + "" + \ + "" + \ + "" + \ + "0" + \ + "" + \ + "" + \ + "" + \ + "" + \ + "" + \ + "5" + \ + "" + \ + "" + \ + "" + \ + "" + \ + ""] self.mail_component.run(1) self.failUnless(self.server.verify_queries()) diff --git a/tests/test_mailconnection.py b/tests/test_mailconnection.py index 9844682..00f4935 100644 --- a/tests/test_mailconnection.py +++ b/tests/test_mailconnection.py @@ -213,7 +213,7 @@ class IMAPConnection_TestCase(unittest.TestCase): if core: core(self) self.imap_connection.disconnect() - self.failUnless(self.server.verify_queries("Sended queries does not match expected queries.")) + self.failUnless(self.server.verify_queries()) return inner test_connection = make_test() diff --git a/tests/test_mailconnection_factory.py b/tests/test_mailconnection_factory.py index 1d0ad5f..8cbbfdf 100644 --- a/tests/test_mailconnection_factory.py +++ b/tests/test_mailconnection_factory.py @@ -22,6 +22,7 @@ import unittest from jabber.mailconnection_factory import * +from jabber import mailconnection class MailConnectionFactory_TestCase(unittest.TestCase): def test_new_mail_connection_imap(self): @@ -41,56 +42,56 @@ class MailConnectionFactory_TestCase(unittest.TestCase): self.assertEquals(mc, mc) def test_str_to_mail_connection_imap(self): - mc = str_to_mail_connection("imap#login#passwd#host#193#nothing#nothing#nothing#nothing#retrieve#INBOX") + mc = str_to_mail_connection("imap#login#passwd#host#193#0#0#0#1#2#INBOX") self.assertEquals(mc.get_type(), "imap") self.assertEquals(mc.login, "login") self.assertEquals(mc.password, "passwd") self.assertEquals(mc.host, "host") self.assertEquals(mc.port, 193) self.assertEquals(mc.mailbox, "INBOX") - self.assertEquals(mc.ffc_action, "nothing") - self.assertEquals(mc.online_action, "nothing") - self.assertEquals(mc.away_action, "nothing") - self.assertEquals(mc.ea_action, "nothing") - self.assertEquals(mc.offline_action, "retrieve") + self.assertEquals(mc.ffc_action, mailconnection.DO_NOTHING) + self.assertEquals(mc.online_action, mailconnection.DO_NOTHING) + self.assertEquals(mc.away_action, mailconnection.DO_NOTHING) + self.assertEquals(mc.ea_action, mailconnection.DIGEST) + self.assertEquals(mc.offline_action, mailconnection.RETRIEVE) def test_str_to_mail_connection_imaps(self): - mc = str_to_mail_connection("imaps#login#passwd#host#993#nothing#nothing#nothing#nothing#retrieve#INBOX.SubDir") + mc = str_to_mail_connection("imaps#login#passwd#host#993#0#0#0#1#2#INBOX.SubDir") self.assertEquals(mc.get_type(), "imaps") self.assertEquals(mc.login, "login") self.assertEquals(mc.password, "passwd") self.assertEquals(mc.host, "host") self.assertEquals(mc.port, 993) self.assertEquals(mc.mailbox, "INBOX.SubDir") - self.assertEquals(mc.ffc_action, "nothing") - self.assertEquals(mc.online_action, "nothing") - self.assertEquals(mc.away_action, "nothing") - self.assertEquals(mc.ea_action, "nothing") - self.assertEquals(mc.offline_action, "retrieve") + self.assertEquals(mc.ffc_action, mailconnection.DO_NOTHING) + self.assertEquals(mc.online_action, mailconnection.DO_NOTHING) + self.assertEquals(mc.away_action, mailconnection.DO_NOTHING) + self.assertEquals(mc.ea_action, mailconnection.DIGEST) + self.assertEquals(mc.offline_action, mailconnection.RETRIEVE) def test_str_to_mail_connection_pop3(self): - mc = str_to_mail_connection("pop3#login#passwd#host#110#nothing#nothing#nothing#nothing#retrieve") + mc = str_to_mail_connection("pop3#login#passwd#host#110#0#0#0#1#2") self.assertEquals(mc.get_type(), "pop3") self.assertEquals(mc.login, "login") self.assertEquals(mc.password, "passwd") self.assertEquals(mc.host, "host") self.assertEquals(mc.port, 110) - self.assertEquals(mc.ffc_action, "nothing") - self.assertEquals(mc.online_action, "nothing") - self.assertEquals(mc.away_action, "nothing") - self.assertEquals(mc.ea_action, "nothing") - self.assertEquals(mc.offline_action, "retrieve") + self.assertEquals(mc.ffc_action, mailconnection.DO_NOTHING) + self.assertEquals(mc.online_action, mailconnection.DO_NOTHING) + self.assertEquals(mc.away_action, mailconnection.DO_NOTHING) + self.assertEquals(mc.ea_action, mailconnection.DIGEST) + self.assertEquals(mc.offline_action, mailconnection.RETRIEVE) def test_str_to_mail_connection_pop3s(self): - mc = str_to_mail_connection("pop3s#login#passwd#host#995#nothing#nothing#nothing#nothing#retrieve") + mc = str_to_mail_connection("pop3s#login#passwd#host#995#0#0#0#1#2") self.assertEquals(mc.get_type(), "pop3s") self.assertEquals(mc.login, "login") self.assertEquals(mc.password, "passwd") self.assertEquals(mc.host, "host") self.assertEquals(mc.port, 995) - self.assertEquals(mc.ffc_action, "nothing") - self.assertEquals(mc.online_action, "nothing") - self.assertEquals(mc.away_action, "nothing") - self.assertEquals(mc.ea_action, "nothing") - self.assertEquals(mc.offline_action, "retrieve") + self.assertEquals(mc.ffc_action, mailconnection.DO_NOTHING) + self.assertEquals(mc.online_action, mailconnection.DO_NOTHING) + self.assertEquals(mc.away_action, mailconnection.DO_NOTHING) + self.assertEquals(mc.ea_action, mailconnection.DIGEST) + self.assertEquals(mc.offline_action, mailconnection.RETRIEVE) diff --git a/tests/utils.py b/tests/utils.py index a24f93f..4537e79 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -21,80 +21,75 @@ ## import xml.dom.minidom - -#document = "" -# document = """\ -# -# Demo slideshow -# Slide title -# This is a demo -# Of a program for processing slides -# - -# Another demo slide -# It is important -# To have more than -# one slide -# -# -# """ - -# document1 = """\ -# -# Demo slideshow -# Slide title -# This is a demo -# Of a program for processing slides -# - -# Another demo slide -# It is important1 -# To have more than -# one slide -# -# -# """ - -#dom = xml.dom.minidom.parseString(document) -#dom1 = xml.dom.minidom.parseString(document) - -# def getText(nodelist): -# rc = "" -# for node in nodelist: -# if node.nodeType == node.TEXT_NODE: -# rc = rc + node.data -# return rc +import re def xmldiff(node1, node2): if node1.nodeType == node1.TEXT_NODE: if not node2.nodeType == node2.TEXT_NODE \ - or node1.data != node2.data: - return False + or re.compile(node2.data + "$").match(node1.data) is None: + raise Exception("data in text node " + node1.data + " does not match " + node2.data) elif node1.nodeType == node1.DOCUMENT_NODE: if not node2.nodeType == node2.DOCUMENT_NODE: - return False + raise Exception("node1 is Document but not node2 (" + node2.nodeType + ")") elif node1.tagName != node2.tagName: - return False + raise Exception("Different tag name : " + node1.tagName + " != " + node2.tagName) else: for attr in node1._get_attributes().keys(): if not node2.hasAttribute(attr) \ or node1.getAttribute(attr) != node2.getAttribute(attr): - return False + raise Exception("(" + node1.tagName + ") Different attributes : " + node1.getAttribute(attr) + " != " + node2.getAttribute(attr)) + if len(node1.childNodes) != len(node2.childNodes): + raise Exception("(" + node1.tagName + ") Different children number : " + str(len(node1.childNodes)) + " != " + str(len(node2.childNodes))) for i in range(len(node1.childNodes)): - if not xmldiff(node1.childNodes[i], node2.childNodes[i]): - return False - return True + xmldiff(node1.childNodes[i], node2.childNodes[i]) -#print xmldiff(dom, dom1) +# def xmldiff(events1, events2): +# for (event1, node1) in events1: +# (event2, node2) = events2.next() +# print event1 + " " + str(node1) +# if not (event1 == event2) or not xml_diff_nodes(node1, node2): +# return False +# return True -# def nodediff(node1, node2): -# if not node1.name == node2.name: -# return False -# for properties in node1.properties: -# if node2.hasAttribute(attr): - -# def xmldiff(xpath, node1, node2): -# if not nodediff(node1, node2): -# return False -# for child in node1.children: +if __name__ == "__main__": + document1 = """\ + + Demo slideshow + Slide title + This is a demo + Of a program for processing slides + + + Another demo slide + It is important + To have more than + one slide + + + """ + + document2 = """\ + + Demo slideshow + Slide title + This is a demo + Of a program for processing slides + + + Another demo slide + It is important + To have more than + one slide + + + """ + + dom1 = xml.dom.minidom.parseString(document1) + dom2 = xml.dom.minidom.parseString(document2) + + try: + xmldiff(dom1, dom2) + except Exception, msg: + print msg +