mirror of
https://github.com/correl/SleekXMPP.git
synced 2024-12-22 19:17:30 +00:00
Merge remote branch 'tom/master'
This commit is contained in:
commit
4b322720b3
8 changed files with 73 additions and 13 deletions
|
@ -43,6 +43,10 @@ class TestPubsubServer(unittest.TestCase):
|
||||||
|
|
||||||
def test001getdefaultconfig(self):
|
def test001getdefaultconfig(self):
|
||||||
"""Get the default node config"""
|
"""Get the default node config"""
|
||||||
|
self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode2')
|
||||||
|
self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode3')
|
||||||
|
self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode4')
|
||||||
|
self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode5')
|
||||||
result = self.xmpp1['xep_0060'].getNodeConfig(self.pshost)
|
result = self.xmpp1['xep_0060'].getNodeConfig(self.pshost)
|
||||||
self.statev['defaultconfig'] = result
|
self.statev['defaultconfig'] = result
|
||||||
self.failUnless(isinstance(result, sleekxmpp.plugins.xep_0004.Form))
|
self.failUnless(isinstance(result, sleekxmpp.plugins.xep_0004.Form))
|
||||||
|
@ -130,6 +134,39 @@ class TestPubsubServer(unittest.TestCase):
|
||||||
self.failUnless(msg != False, "Account #1 did not get message event: perhaps node was advertised incorrectly?")
|
self.failUnless(msg != False, "Account #1 did not get message event: perhaps node was advertised incorrectly?")
|
||||||
self.failUnless(result)
|
self.failUnless(result)
|
||||||
|
|
||||||
|
# def test016speedtest(self):
|
||||||
|
# "Uncached speed test"
|
||||||
|
# import time
|
||||||
|
# start = time.time()
|
||||||
|
# for y in range(0, 50000, 1000):
|
||||||
|
# start2 = time.time()
|
||||||
|
# for x in range(y, y+1000):
|
||||||
|
# self.failUnless(self.xmpp1['xep_0060'].subscribe(self.pshost, "testnode4", subscribee="testuser%s@whatever" % x))
|
||||||
|
# print time.time() - start2
|
||||||
|
# seconds = time.time() - start
|
||||||
|
# print "--", seconds
|
||||||
|
# print "---------"
|
||||||
|
# time.sleep(15)
|
||||||
|
# self.failUnless(self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode4'), "Could not delete non-cached test node")
|
||||||
|
|
||||||
|
# def test015speedtest(self):
|
||||||
|
# "cached speed test"
|
||||||
|
# result = self.xmpp1['xep_0060'].getNodeConfig(self.pshost)
|
||||||
|
# self.statev['defaultconfig'] = result
|
||||||
|
# self.statev['defaultconfig'].field['pubsub#node_type'].setValue("leaf")
|
||||||
|
# self.statev['defaultconfig'].field['sleek#saveonchange'].setValue(True)
|
||||||
|
# self.failUnless(self.xmpp1['xep_0060'].create_node(self.pshost, 'testnode4', self.statev['defaultconfig']))
|
||||||
|
# self.statev['defaultconfig'].field['sleek#saveonchange'].setValue(False)
|
||||||
|
# self.failUnless(self.xmpp1['xep_0060'].create_node(self.pshost, 'testnode5', self.statev['defaultconfig']))
|
||||||
|
# start = time.time()
|
||||||
|
# for y in range(0, 50000, 1000):
|
||||||
|
# start2 = time.time()
|
||||||
|
# for x in range(y, y+1000):
|
||||||
|
# self.failUnless(self.xmpp1['xep_0060'].subscribe(self.pshost, "testnode5", subscribee="testuser%s@whatever" % x))
|
||||||
|
# print time.time() - start2
|
||||||
|
# seconds = time.time() - start
|
||||||
|
# print "--", seconds
|
||||||
|
|
||||||
def test900cleanup(self):
|
def test900cleanup(self):
|
||||||
"Cleaning up"
|
"Cleaning up"
|
||||||
self.failUnless(self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode2'), "Could not delete test node.")
|
self.failUnless(self.xmpp1['xep_0060'].deleteNode(self.pshost, 'testnode2'), "Could not delete test node.")
|
||||||
|
|
|
@ -271,12 +271,13 @@ class basexmpp(object):
|
||||||
name = self.roster[jid].get('name', '')
|
name = self.roster[jid].get('name', '')
|
||||||
if show == 'unavailable':
|
if show == 'unavailable':
|
||||||
logging.debug("%s %s got offline" % (jid, resource))
|
logging.debug("%s %s got offline" % (jid, resource))
|
||||||
if len(self.roster[jid]['presence']):
|
del self.roster[jid]['presence'][resource]
|
||||||
del self.roster[jid]['presence'][resource]
|
if len(self.roster[jid]['presence']) == 0 and not self.roster[jid]['in_roster']:
|
||||||
else:
|
|
||||||
del self.roster[jid]
|
del self.roster[jid]
|
||||||
if not wasoffline:
|
if not wasoffline:
|
||||||
self.event("got_offline", presence)
|
self.event("got_offline", presence)
|
||||||
|
else:
|
||||||
|
return False
|
||||||
self.event("changed_status", presence)
|
self.event("changed_status", presence)
|
||||||
name = ''
|
name = ''
|
||||||
if name:
|
if name:
|
||||||
|
|
|
@ -93,10 +93,10 @@ class MUCPresence(ElementBase):
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def getNick(self):
|
def getNick(self):
|
||||||
return self.parent['from'].resource
|
return self.parent()['from'].resource
|
||||||
|
|
||||||
def getRoom(self):
|
def getRoom(self):
|
||||||
return self.parent['from'].bare
|
return self.parent()['from'].bare
|
||||||
|
|
||||||
def setNick(self, value):
|
def setNick(self, value):
|
||||||
logging.warning("Cannot set nick through mucpresence plugin.")
|
logging.warning("Cannot set nick through mucpresence plugin.")
|
||||||
|
|
|
@ -22,7 +22,7 @@ class Error(ElementBase):
|
||||||
self['type'] = 'cancel'
|
self['type'] = 'cancel'
|
||||||
self['condition'] = 'feature-not-implemented'
|
self['condition'] = 'feature-not-implemented'
|
||||||
if self.parent is not None:
|
if self.parent is not None:
|
||||||
self.parent['type'] = 'error'
|
self.parent()['type'] = 'error'
|
||||||
|
|
||||||
def getCondition(self):
|
def getCondition(self):
|
||||||
for child in self.xml.getchildren():
|
for child in self.xml.getchildren():
|
||||||
|
|
|
@ -31,4 +31,5 @@ class HTMLIM(ElementBase):
|
||||||
return html
|
return html
|
||||||
|
|
||||||
def delHtml(self):
|
def delHtml(self):
|
||||||
return self.__del__()
|
if self.parent is not None:
|
||||||
|
self.parent().xml.remove(self.xml)
|
||||||
|
|
|
@ -22,4 +22,5 @@ class Nick(ElementBase):
|
||||||
return self.xml.text
|
return self.xml.text
|
||||||
|
|
||||||
def delNick(self):
|
def delNick(self):
|
||||||
return self.__del__()
|
if self.parent is not None:
|
||||||
|
self.parent().xml.remove(self.xml)
|
||||||
|
|
|
@ -9,6 +9,7 @@ from xml.etree import cElementTree as ET
|
||||||
import logging
|
import logging
|
||||||
import traceback
|
import traceback
|
||||||
import sys
|
import sys
|
||||||
|
import weakref
|
||||||
|
|
||||||
if sys.version_info < (3,0):
|
if sys.version_info < (3,0):
|
||||||
from . import tostring26 as tostring
|
from . import tostring26 as tostring
|
||||||
|
@ -51,7 +52,10 @@ class ElementBase(tostring.ToString):
|
||||||
subitem = None
|
subitem = None
|
||||||
|
|
||||||
def __init__(self, xml=None, parent=None):
|
def __init__(self, xml=None, parent=None):
|
||||||
self.parent = parent
|
if parent is None:
|
||||||
|
self.parent = None
|
||||||
|
else:
|
||||||
|
self.parent = weakref.ref(parent)
|
||||||
self.xml = xml
|
self.xml = xml
|
||||||
self.plugins = {}
|
self.plugins = {}
|
||||||
self.iterables = []
|
self.iterables = []
|
||||||
|
@ -158,7 +162,7 @@ class ElementBase(tostring.ToString):
|
||||||
else:
|
else:
|
||||||
self.xml.append(new)
|
self.xml.append(new)
|
||||||
if self.parent is not None:
|
if self.parent is not None:
|
||||||
self.parent.xml.append(self.xml)
|
self.parent().xml.append(self.xml)
|
||||||
return True #had to generate XML
|
return True #had to generate XML
|
||||||
else:
|
else:
|
||||||
return False
|
return False
|
||||||
|
@ -302,9 +306,9 @@ class ElementBase(tostring.ToString):
|
||||||
self.xml.append(xml)
|
self.xml.append(xml)
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def __del__(self):
|
#def __del__(self): #prevents garbage collection of reference cycle
|
||||||
if self.parent is not None:
|
# if self.parent is not None:
|
||||||
self.parent.xml.remove(self.xml)
|
# self.parent.xml.remove(self.xml)
|
||||||
|
|
||||||
class StanzaBase(ElementBase):
|
class StanzaBase(ElementBase):
|
||||||
name = 'stanza'
|
name = 'stanza'
|
||||||
|
|
|
@ -12,4 +12,20 @@ class testpresencestanzas(unittest.TestCase):
|
||||||
p['type'] = 'dnd'
|
p['type'] = 'dnd'
|
||||||
self.failUnless(str(p) == "<presence><show>dnd</show></presence>")
|
self.failUnless(str(p) == "<presence><show>dnd</show></presence>")
|
||||||
|
|
||||||
|
def testPresenceUnsolicitedOffline(self):
|
||||||
|
"Unsolicted offline presence does not spawn changed_status or update roster"
|
||||||
|
p = self.p.Presence()
|
||||||
|
p['type'] = 'unavailable'
|
||||||
|
p['from'] = 'bill@chadmore.com/gmail15af'
|
||||||
|
import sleekxmpp
|
||||||
|
c = sleekxmpp.ClientXMPP('crap@wherever', 'password')
|
||||||
|
happened = []
|
||||||
|
def handlechangedpresence(event):
|
||||||
|
happened.append(True)
|
||||||
|
c.add_event_handler("changed_status", handlechangedpresence)
|
||||||
|
c._handlePresence(p)
|
||||||
|
self.failUnless(happened == [], "changed_status event triggered for superfulous unavailable presence")
|
||||||
|
self.failUnless(c.roster == {}, "Roster updated for superfulous unavailable presence")
|
||||||
|
|
||||||
|
|
||||||
suite = unittest.TestLoader().loadTestsFromTestCase(testpresencestanzas)
|
suite = unittest.TestLoader().loadTestsFromTestCase(testpresencestanzas)
|
||||||
|
|
Loading…
Reference in a new issue