test case for jingle
This commit is contained in:
parent
c0e4756f12
commit
2d624a7b96
|
@ -74,12 +74,12 @@ class JingleFileTransfer(JingleContent):
|
|||
self.file_props['transfered_size'] = []
|
||||
|
||||
log.info("FT request: %s" % file_props)
|
||||
|
||||
|
||||
if transport is None:
|
||||
self.transport = JingleTransportSocks5()
|
||||
self.transport.set_connection(session.connection)
|
||||
self.transport.set_file_props(self.file_props)
|
||||
self.transport.set_our_jid(session.ourjid)
|
||||
self.transport.set_connection(session.connection)
|
||||
self.transport.set_file_props(self.file_props)
|
||||
self.transport.set_our_jid(session.ourjid)
|
||||
log.info('ourjid: %s' % session.ourjid)
|
||||
|
||||
if self.file_props is not None:
|
||||
|
|
|
@ -0,0 +1,157 @@
|
|||
'''
|
||||
Tests for dispatcher_nb.py
|
||||
'''
|
||||
import unittest
|
||||
|
||||
import lib
|
||||
lib.setup_env()
|
||||
|
||||
from mock import Mock
|
||||
|
||||
from common.protocol.bytestream import ConnectionIBBytestream, ConnectionSocks5Bytestream
|
||||
from common.xmpp import dispatcher_nb
|
||||
from common.xmpp import protocol
|
||||
from common.jingle import ConnectionJingle
|
||||
from common import gajim
|
||||
from common.socks5 import SocksQueue
|
||||
import common
|
||||
|
||||
|
||||
session_init = '''
|
||||
<iq xmlns="jabber:client" to="jingleft@thiessen.im/Gajim" type="set" id="43">
|
||||
<jingle xmlns="urn:xmpp:jingle:1" action="session-initiate" initiator="jtest@thiessen.im/Gajim" sid="38">
|
||||
<content name="fileWL1Y2JIPTM5RAD68" creator="initiator">
|
||||
<security xmlns="urn:xmpp:jingle:security:xtls:0">
|
||||
<method name="x509" />
|
||||
</security>
|
||||
<description xmlns="urn:xmpp:jingle:apps:file-transfer:1">
|
||||
<offer>
|
||||
<file xmlns="http://jabber.org/protocol/si/profile/file-transfer" name="to" size="2273">
|
||||
<desc />
|
||||
</file>
|
||||
</offer>
|
||||
</description>
|
||||
<transport xmlns="urn:xmpp:jingle:transports:s5b:1" sid="39">
|
||||
<candidate jid="jtest@thiessen.im/Gajim" cid="40" priority="8257536" host="192.168.2.100" type="direct" port="28011" />
|
||||
<candidate jid="proxy.thiessen.im" cid="41" priority="655360" host="192.168.2.100" type="proxy" port="5000" />
|
||||
<candidate jid="proxy.jabbim.cz" cid="42" priority="655360" host="192.168.2.100" type="proxy" port="7777" />
|
||||
</transport>
|
||||
</content>
|
||||
</jingle>
|
||||
</iq>
|
||||
'''
|
||||
|
||||
|
||||
transport_info = '''
|
||||
<iq from='jtest@thiessen.im/Gajim'
|
||||
id='hjdi8'
|
||||
to='jingleft@thiessen.im/Gajim'
|
||||
type='set'>
|
||||
<jingle xmlns='urn:xmpp:jingle:1'
|
||||
action='transport-info'
|
||||
initiator='jtest@thiessen.im/Gajim'
|
||||
sid='38'>
|
||||
<content creator='initiator' name='fileWL1Y2JIPTM5RAD68'>
|
||||
<transport xmlns='urn:xmpp:jingle:transports:s5b:1'
|
||||
sid='vj3hs98y'>
|
||||
<candidate-used cid='hr65dqyd'/>
|
||||
</transport>
|
||||
</content>
|
||||
</jingle>
|
||||
</iq>
|
||||
|
||||
'''
|
||||
|
||||
class Connection(Mock, ConnectionJingle, ConnectionSocks5Bytestream,
|
||||
ConnectionIBBytestream):
|
||||
|
||||
def __init__(self):
|
||||
Mock.__init__(self)
|
||||
ConnectionJingle.__init__(self)
|
||||
ConnectionSocks5Bytestream.__init__(self)
|
||||
ConnectionIBBytestream.__init__(self)
|
||||
self.connected = 2 # This tells gajim we are connected
|
||||
|
||||
|
||||
def send(self, stanza=None, when=None):
|
||||
# Called when gajim wants to send something
|
||||
print str(stanza)
|
||||
|
||||
class TestJingle(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.dispatcher = dispatcher_nb.XMPPDispatcher()
|
||||
gajim.nec = Mock()
|
||||
gajim.socks5queue = SocksQueue(Mock())
|
||||
# Setup mock client
|
||||
self.client = Connection()
|
||||
self.client.__str__ = lambda: 'Mock' # FIXME: why do I need this one?
|
||||
self.client._caller = Connection()
|
||||
self.client.defaultNamespace = protocol.NS_CLIENT
|
||||
self.client.Connection = Connection() # mock transport
|
||||
self.con = self.client.Connection
|
||||
self.con.server_resource = None
|
||||
self.con.connection = Connection()
|
||||
|
||||
'''
|
||||
Fake file_props when we recieve a file. Gajim creates a file_props
|
||||
out of a FileRequestRecieve event and from then on it changes in
|
||||
a lot of places. It is easier to just copy it in here.
|
||||
If the session_initiate stanza changes, this also must change.
|
||||
'''
|
||||
self.recieve_file = {'stream-methods':
|
||||
'http://jabber.org/protocol/bytestreams',
|
||||
'sender': u'jtest@thiessen.im/Gajim',
|
||||
'file-name': u'test_recieved_file',
|
||||
'request-id': u'43', 'sid': u'39',
|
||||
'session-sid': u'38', 'session-type': 'jingle',
|
||||
'transfered_size': [], 'receiver':
|
||||
u'jingleft@thiessen.im/Gajim', 'desc': '',
|
||||
u'size': u'2273', 'type': 'r',
|
||||
'streamhosts': [{'initiator':
|
||||
u'jtest@thiessen.im/Gajim',
|
||||
'target': u'jingleft@thiessen.im/Gajim',
|
||||
'cid': u'41', 'state': 0, 'host': u'192.168.2.100',
|
||||
'type': u'direct', 'port': u'28011'},
|
||||
{'initiator': u'jtest@thiessen.im/Gajim',
|
||||
'target': u'jingleft@thiessen.im/Gajim',
|
||||
'cid': u'42', 'state': 0, 'host': u'192.168.2.100',
|
||||
'type': u'proxy', 'port': u'5000'}],
|
||||
u'name': u'to'}
|
||||
|
||||
def tearDown(self):
|
||||
# Unplug if needed
|
||||
if hasattr(self.dispatcher, '_owner'):
|
||||
self.dispatcher.PlugOut()
|
||||
|
||||
def _simulate_connect(self):
|
||||
self.dispatcher.PlugIn(self.client) # client is owner
|
||||
# Simulate that we have established a connection
|
||||
self.dispatcher.StreamInit()
|
||||
self.dispatcher.ProcessNonBlocking("<stream:stream xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:client'>")
|
||||
|
||||
def _simulate_jingle_session(self):
|
||||
|
||||
self.dispatcher.RegisterHandler('iq', self.con._JingleCB, 'set'
|
||||
, common.xmpp.NS_JINGLE)
|
||||
self.dispatcher.ProcessNonBlocking(session_init)
|
||||
session = self.con._sessions.values()[0] # The only session we have
|
||||
jft = session.contents.values()[0] # jingleFT object
|
||||
jft.file_props = self.recieve_file # We plug file_props manually
|
||||
# The user accepts to recieve the file
|
||||
# we have to manually simulate this behavior
|
||||
session.approve_session()
|
||||
self.con.send_file_approval(self.recieve_file)
|
||||
|
||||
self.dispatcher.ProcessNonBlocking(transport_info)
|
||||
|
||||
|
||||
def test_jingle_session(self):
|
||||
self._simulate_connect()
|
||||
self._simulate_jingle_session()
|
||||
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
Loading…
Reference in New Issue