Component migration to use storage
!! Warning !! Not fully tested. darcs-hash:20060122125943-86b55-a0cb0c408b0974b18af8613144bb3a7c3f2288bf.gz
This commit is contained in:
@@ -55,9 +55,6 @@ class DummyServer:
|
||||
self.queries = None
|
||||
self.real_queries = []
|
||||
|
||||
def __del__(self):
|
||||
self.socket.close()
|
||||
|
||||
def serve(self):
|
||||
conn, addr = self.socket.accept()
|
||||
rfile = conn.makefile('rb', -1)
|
||||
@@ -80,6 +77,8 @@ class DummyServer:
|
||||
self.real_queries.append(data)
|
||||
# print >>sys.stderr, 'Receive : ', data
|
||||
conn.close()
|
||||
self.socket.close()
|
||||
self.socket = None
|
||||
|
||||
def verify_queries(self):
|
||||
result = True
|
||||
@@ -114,8 +113,10 @@ class XMLDummyServer(DummyServer):
|
||||
# TODO : this approximation is not clean
|
||||
# received size is based on the expected size in self.queries
|
||||
data = conn.recv(1024 + len(self.queries[idx]))
|
||||
print "receive : " + data
|
||||
if data:
|
||||
# print "-----------RECEIVE " + data
|
||||
## TODO : without this log, test_set_register in test_component wait forever
|
||||
#print "-----------RECEIVE1 " + data
|
||||
r = self._reader.feed(data)
|
||||
except:
|
||||
type, value, stack = sys.exc_info()
|
||||
@@ -132,9 +133,16 @@ 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)
|
||||
data = conn.recv(1024)
|
||||
if data:
|
||||
print "-----------RECEIVE2 " + data
|
||||
r = self._reader.feed(data)
|
||||
self.real_queries.append(data)
|
||||
conn.close()
|
||||
self.socket.close()
|
||||
self.socket = None
|
||||
except:
|
||||
type, value, stack = sys.exc_info()
|
||||
print "".join (traceback.format_exception
|
||||
@@ -143,26 +151,21 @@ class XMLDummyServer(DummyServer):
|
||||
|
||||
def verify_queries(self):
|
||||
result = True
|
||||
queries_len = len(self.queries)
|
||||
if queries_len == len(self.real_queries):
|
||||
full_real_queries = ""
|
||||
full_recv_queries = ""
|
||||
for idx in range(queries_len):
|
||||
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 += "</stream:stream>"
|
||||
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:
|
||||
full_real_queries = ""
|
||||
full_recv_queries = ""
|
||||
for idx in range(len(self.real_queries)):
|
||||
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 += "</stream:stream>"
|
||||
print 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, "Expected " + str(queries_len) + \
|
||||
" queries, got " + str(len(self.real_queries))
|
||||
print >>sys.stderr, msg
|
||||
return result
|
||||
|
||||
def test():
|
||||
|
||||
@@ -66,12 +66,14 @@ class MailComponent_TestCase_Basic(unittest.TestCase):
|
||||
def tearDown(self):
|
||||
self.server = None
|
||||
self.mail_component = None
|
||||
os.remove("./registered.db")
|
||||
|
||||
def test_run(self):
|
||||
self.server.responses = ["<?xml version='1.0'?><stream:stream xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:component:accept' id='4258238724' from='localhost'>", \
|
||||
"<handshake/></stream:stream>"]
|
||||
self.server.queries = ["<?xml version='1.0' encoding='UTF-8'?><stream:stream xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:component:accept' to='jmc.localhost' version='1.0'>", \
|
||||
"<handshake>[0-9abcdef]*</handshake></stream:stream>"]
|
||||
"<handshake>[0-9abcdef]*</handshake>",
|
||||
"</stream:stream>"]
|
||||
self.mail_component.run(1)
|
||||
self.failUnless(self.server.verify_queries())
|
||||
# TODO : more assertion
|
||||
@@ -79,9 +81,6 @@ 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)
|
||||
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, ())
|
||||
@@ -89,25 +88,28 @@ class MailComponent_TestCase_NoReg(unittest.TestCase):
|
||||
def tearDown(self):
|
||||
self.server = None
|
||||
self.mail_component = None
|
||||
## TODO : be storage independant
|
||||
os.remove("./registered.db")
|
||||
|
||||
def test_disco_get_items(self):
|
||||
self.server.responses = ["<?xml version='1.0'?><stream:stream xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:component:accept' id='4258238724' from='localhost'>", \
|
||||
"<handshake/><iq type='get' to='jmc.localhost' id='aabca'><query xmlns='http://jabber.org/protocol/disco#info'/></iq>", \
|
||||
self.server.responses = ["<?xml version='1.0'?><stream:stream xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:component:accept' id='4258238724' from='localhost'>",
|
||||
"<handshake/><iq type='get' to='jmc.localhost' id='aabca'><query xmlns='http://jabber.org/protocol/disco#info'/></iq>",
|
||||
"</stream:stream>"]
|
||||
self.server.queries = ["<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + \
|
||||
"<stream:stream xmlns:stream=\"http://etherx.jabber.org/streams\" xmlns=\"jabber:component:accept\" to=\"jmc.localhost\" version=\"1.0\">", \
|
||||
"<handshake>[0-9abcdef]*</handshake>", \
|
||||
"<iq from=\"jmc.localhost\" type=\"result\" id=\"aabca\"><query xmlns=\"http://jabber.org/protocol/disco#info\"><feature var=\"jabber:iq:version\"/><feature var=\"jabber:iq:register\"/><identity name=\"Jabber Mail Component\" category=\"headline\" type=\"mail\"/></query></iq></stream:stream>"]
|
||||
"<handshake>[0-9abcdef]*</handshake>",
|
||||
"<iq from=\"jmc.localhost\" type=\"result\" id=\"aabca\"><query xmlns=\"http://jabber.org/protocol/disco#info\"><feature var=\"jabber:iq:version\"/><feature var=\"jabber:iq:register\"/><identity name=\"Jabber Mail Component\" category=\"headline\" type=\"mail\"/></query></iq>",
|
||||
"</stream:stream>"]
|
||||
self.mail_component.run(1)
|
||||
self.failUnless(self.server.verify_queries())
|
||||
|
||||
def test_get_register(self):
|
||||
self.server.responses = ["<?xml version='1.0'?><stream:stream xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:component:accept' id='4258238724' from='localhost'>", \
|
||||
"<handshake/><iq type='get' to='jmc.localhost' from='test@localhost/test' id='aad9a'><query xmlns='jabber:iq:register'/></iq>", \
|
||||
self.server.responses = ["<?xml version='1.0'?><stream:stream xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:component:accept' id='4258238724' from='localhost'>",
|
||||
"<handshake/><iq type='get' to='jmc.localhost' from='test@localhost/test' id='aad9a'><query xmlns='jabber:iq:register'/></iq>",
|
||||
"</stream:stream>"]
|
||||
self.server.queries = ["<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + \
|
||||
"<stream:stream xmlns:stream=\"http://etherx.jabber.org/streams\" xmlns=\"jabber:component:accept\" to=\"jmc.localhost\" version=\"1.0\">", \
|
||||
"<handshake>[0-9abcdef]*</handshake>", \
|
||||
"<handshake>[0-9abcdef]*</handshake>",
|
||||
"<iq from=\"jmc.localhost\" to=\"test@localhost/test\" type=\"result\" id=\"aad9a\">" + \
|
||||
"<query xmlns=\"jabber:iq:register\">" + \
|
||||
"<x xmlns=\"jabber:x:data\">" + \
|
||||
@@ -200,84 +202,90 @@ class MailComponent_TestCase_NoReg(unittest.TestCase):
|
||||
"</field>" + \
|
||||
"</x>" + \
|
||||
"</query>" + \
|
||||
"</iq>" + \
|
||||
"</iq>",
|
||||
"</stream:stream>"]
|
||||
self.mail_component.run(1)
|
||||
self.failUnless(self.server.verify_queries())
|
||||
|
||||
|
||||
def test_disco_get_info(self):
|
||||
self.server.responses = ["<?xml version='1.0'?><stream:stream xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:component:accept' id='4258238724' from='localhost'>", \
|
||||
"<handshake/><iq type='get' to='jmc.localhost' from='test@localhost/test' id='aad9a'><query xmlns='http://jabber.org/protocol/disco#info'/></iq>", \
|
||||
self.server.responses = ["<?xml version='1.0'?><stream:stream xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:component:accept' id='4258238724' from='localhost'>",
|
||||
"<handshake/><iq type='get' to='jmc.localhost' from='test@localhost/test' id='aad9a'><query xmlns='http://jabber.org/protocol/disco#info'/></iq>",
|
||||
"</stream:stream>"]
|
||||
self.server.queries = ["<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + \
|
||||
"<stream:stream xmlns:stream=\"http://etherx.jabber.org/streams\" xmlns=\"jabber:component:accept\" to=\"jmc.localhost\" version=\"1.0\">", \
|
||||
"<handshake>[0-9abcdef]*</handshake>", \
|
||||
"<stream:stream xmlns:stream=\"http://etherx.jabber.org/streams\" xmlns=\"jabber:component:accept\" to=\"jmc.localhost\" version=\"1.0\">",
|
||||
"<handshake>[0-9abcdef]*</handshake>",
|
||||
"<iq from=\"jmc.localhost\" to=\"test@localhost/test\" type=\"result\" id=\"aad9a\">" + \
|
||||
"<query xmlns=\"http://jabber.org/protocol/disco#info\">" + \
|
||||
"<feature var=\"jabber:iq:version\"/>" + \
|
||||
"<feature var=\"jabber:iq:register\"/>" + \
|
||||
"<identity name=\"Jabber Mail Component\" category=\"headline\" type=\"mail\"/>" + \
|
||||
"</query></iq>" + \
|
||||
"</query></iq>",
|
||||
"</stream:stream>"]
|
||||
self.mail_component.run(1)
|
||||
self.failUnless(self.server.verify_queries())
|
||||
|
||||
# def test_set_register(self):
|
||||
# self.server.responses = ["<?xml version='1.0'?><stream:stream xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:component:accept' id='4258238724' from='localhost'>", \
|
||||
# "<handshake/>" + \
|
||||
# "<iq from='test@localhost/test' to='jmc.localhost' type='set' id='aacaa'>" + \
|
||||
# "<query xmlns='jabber:iq:register'>" + \
|
||||
# "<x xmlns='jabber:x:data' type='submit'>" + \
|
||||
# "<field type='text-single' var='name'>" + \
|
||||
# "<value>test</value>" + \
|
||||
# "</field>" + \
|
||||
# "<field type='text-single' var='login'>" + \
|
||||
# "<value>logintest</value>" + \
|
||||
# "</field>" + \
|
||||
# "<field type='text-private' var='password'>" + \
|
||||
# "<value>passtest</value>" + \
|
||||
# "</field>" + \
|
||||
# "<field type='text-single' var='host'>" + \
|
||||
# "<value>hosttest</value>" + \
|
||||
# "</field>" + \
|
||||
# "<field type='text-single' var='port'>" + \
|
||||
# "<value>993</value>" + \
|
||||
# "</field>" + \
|
||||
# "<field type='list-single' var='type'>" + \
|
||||
# "<value>imaps</value>" + \
|
||||
# "</field>" + \
|
||||
# "<field type='text-single' var='mailbox'>" + \
|
||||
# "<value>INBOX</value>" + \
|
||||
# "</field>" + \
|
||||
# "<field type='list-single' var='ffc_action'>" + \
|
||||
# "<value>2</value>" + \
|
||||
# "</field>" + \
|
||||
# "<field type='list-single' var='online_action'>" + \
|
||||
# "<value>2</value>" + \
|
||||
# "</field>" + \
|
||||
# "<field type='list-single' var='away_action'>" + \
|
||||
# "<value>1</value>" + \
|
||||
# "</field>" + \
|
||||
# "<field type='list-single' var='ea_action'>" + \
|
||||
# "<value>1</value>" + \
|
||||
# "</field>" + \
|
||||
# "<field type='list-single' var='offline_action'>" + \
|
||||
# "<value>0</value>" + \
|
||||
# "</field>" + \
|
||||
# "<field type='text-single' var='interval'>" + \
|
||||
# "<value>5</value>" + \
|
||||
# "</field>" + \
|
||||
# "</x>" + \
|
||||
# "</query></iq>" + \
|
||||
# "<stream:stream>"]
|
||||
# self.server.queries = ["<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + \
|
||||
# "<stream:stream xmlns:stream=\"http://etherx.jabber.org/streams\" xmlns=\"jabber:component:accept\" to=\"jmc.localhost\" version=\"1.0\">", \
|
||||
# "<handshake>[0-9abcdef]*</handshake>", \
|
||||
# "<iq from=\"jmc.localhost\" to=\"test@localhost/Psi\" type=\"result\" id=\"aacaa\"/>",
|
||||
# "<stream:stream>"]
|
||||
# self.mail_component.run(1)
|
||||
# self.failUnless(self.server.verify_queries())
|
||||
def test_set_register(self):
|
||||
self.server.responses = ["<?xml version='1.0'?><stream:stream xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:component:accept' id='4258238724' from='localhost'>", \
|
||||
"<handshake/>" + \
|
||||
"<iq from='test@localhost/test' to='jmc.localhost' type='set' id='aacaa'>" + \
|
||||
"<query xmlns='jabber:iq:register'>" + \
|
||||
"<x xmlns='jabber:x:data' type='submit'>" + \
|
||||
"<field type='text-single' var='name'>" + \
|
||||
"<value>test</value>" + \
|
||||
"</field>" + \
|
||||
"<field type='text-single' var='login'>" + \
|
||||
"<value>logintest</value>" + \
|
||||
"</field>" + \
|
||||
"<field type='text-private' var='password'>" + \
|
||||
"<value>passtest</value>" + \
|
||||
"</field>" + \
|
||||
"<field type='text-single' var='host'>" + \
|
||||
"<value>hosttest</value>" + \
|
||||
"</field>" + \
|
||||
"<field type='text-single' var='port'>" + \
|
||||
"<value>993</value>" + \
|
||||
"</field>" + \
|
||||
"<field type='list-single' var='type'>" + \
|
||||
"<value>imaps</value>" + \
|
||||
"</field>" + \
|
||||
"<field type='text-single' var='mailbox'>" + \
|
||||
"<value>INBOX</value>" + \
|
||||
"</field>" + \
|
||||
"<field type='list-single' var='ffc_action'>" + \
|
||||
"<value>2</value>" + \
|
||||
"</field>" + \
|
||||
"<field type='list-single' var='online_action'>" + \
|
||||
"<value>2</value>" + \
|
||||
"</field>" + \
|
||||
"<field type='list-single' var='away_action'>" + \
|
||||
"<value>1</value>" + \
|
||||
"</field>" + \
|
||||
"<field type='list-single' var='ea_action'>" + \
|
||||
"<value>1</value>" + \
|
||||
"</field>" + \
|
||||
"<field type='list-single' var='offline_action'>" + \
|
||||
"<value>0</value>" + \
|
||||
"</field>" + \
|
||||
"<field type='text-single' var='interval'>" + \
|
||||
"<value>5</value>" + \
|
||||
"</field>" + \
|
||||
"</x>" + \
|
||||
"</query></iq>",
|
||||
lambda x: None,
|
||||
lambda x: None,
|
||||
lambda x: None,
|
||||
"</stream:stream>"]
|
||||
self.server.queries = ["<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + \
|
||||
"<stream:stream xmlns:stream=\"http://etherx.jabber.org/streams\" xmlns=\"jabber:component:accept\" to=\"jmc.localhost\" version=\"1.0\">", \
|
||||
"<handshake>[0-9abcdef]*</handshake>", \
|
||||
"<iq from=\"jmc.localhost\" to=\"test@localhost/test\" type=\"result\" id=\"aacaa\"/>",
|
||||
"<presence from=\"jmc.localhost\" to=\"test@localhost\" type=\"subscribe\"/>",
|
||||
"<message from=\"jmc.localhost\" to=\"test@localhost/test\" type=\"message\"><body>New imaps connection \\'test\\': Registered with username \\'logintest\\' and password \\'passtest\\' on \\'hosttest:993\\'</body></message>",
|
||||
"<presence from=\"test@jmc.localhost\" to=\"test@localhost\" type=\"subscribe\"/>",
|
||||
"</stream:stream>"]
|
||||
self.mail_component.run(1)
|
||||
self.failUnless(self.server.verify_queries())
|
||||
|
||||
class MailComponent_TestCase_Reg(unittest.TestCase):
|
||||
def setUp(self):
|
||||
|
||||
@@ -97,8 +97,11 @@ class DBMStorage_TestCase(unittest.TestCase):
|
||||
|
||||
def test_haskey(self):
|
||||
self._storage[("test@localhost", "account2")] = self._account2
|
||||
self.assertTrue(self._storage.has_key(("test@localhost", "account2")))
|
||||
self.assertTrue(self._storage.has_key((u"test@localhost", u"account2")))
|
||||
|
||||
def test_partial_haskey(self):
|
||||
self._storage[("test@localhost", "account2")] = self._account2
|
||||
self.assertTrue(self._storage.has_key((u"test@localhost",)))
|
||||
|
||||
def test_get_filtered(self):
|
||||
self._storage[("test@localhost", "account1")] = self._account1
|
||||
@@ -106,8 +109,8 @@ class DBMStorage_TestCase(unittest.TestCase):
|
||||
result = self._storage[("test@localhost",)]
|
||||
self.assertEquals(type(result), list)
|
||||
self.assertEquals(len(result), 2)
|
||||
self.assertEquals(result[0], self._account1)
|
||||
self.assertEquals(result[1], self._account2)
|
||||
self.assertEquals(result[1], self._account1)
|
||||
self.assertEquals(result[0], self._account2)
|
||||
|
||||
def test_get_filtered2(self):
|
||||
self._storage[("test@localhost", "account1")] = self._account1
|
||||
@@ -123,14 +126,14 @@ class DBMStorage_TestCase(unittest.TestCase):
|
||||
result = self._storage.keys()
|
||||
self.assertEquals(type(result), list)
|
||||
self.assertEquals(len(result), 2)
|
||||
self.assertEquals(type(result[0]), tuple)
|
||||
self.assertEquals(len(result[0]), 2)
|
||||
self.assertEquals(result[0][0], "test@localhost")
|
||||
self.assertEquals(result[0][1], "account1")
|
||||
self.assertEquals(type(result[1]), tuple)
|
||||
self.assertEquals(len(result[1]), 2)
|
||||
self.assertEquals(result[1][0], "test@localhost")
|
||||
self.assertEquals(result[1][1], "account2")
|
||||
self.assertEquals(result[1][1], "account1")
|
||||
self.assertEquals(type(result[0]), tuple)
|
||||
self.assertEquals(len(result[0]), 2)
|
||||
self.assertEquals(result[0][0], "test@localhost")
|
||||
self.assertEquals(result[0][1], "account2")
|
||||
|
||||
def test_keys_filtered(self):
|
||||
self._storage[("test@localhost", "account1")] = self._account1
|
||||
|
||||
Reference in New Issue
Block a user