[telepathy-gabble/telepathy-gabble-0.8] Reduce duplicated code in caps-cache.py
Will Thompson
will.thompson at collabora.co.uk
Thu Sep 10 07:18:16 PDT 2009
_test_with_hash and _test_without_hash were pretty much exactly the same
function, with minor tweaks. Plus, lots of arguments were passed around
for no particularly good reason, since they were essentially constants.
---
tests/twisted/caps/caps-cache.py | 142 +++++++++++++-------------------------
1 files changed, 47 insertions(+), 95 deletions(-)
diff --git a/tests/twisted/caps/caps-cache.py b/tests/twisted/caps/caps-cache.py
index b7393af..edbb4de 100644
--- a/tests/twisted/caps/caps-cache.py
+++ b/tests/twisted/caps/caps-cache.py
@@ -6,137 +6,89 @@ confirmation without hash.
from twisted.words.xish import xpath
-from servicetest import EventPattern
-from gabbletest import exec_test, make_result_iq, make_presence
+from servicetest import EventPattern, assertEquals, assertContains
+from gabbletest import exec_test, make_presence
import constants as cs
+import ns
from caps_helper import (
compute_caps_hash, make_caps_disco_reply, fake_client_dataforms,
)
-def _test_without_hash(q, bus, conn, stream, contact, client, disco):
- contact_handle = conn.RequestHandles(cs.HT_CONTACT, [contact])[0]
- presence = make_presence(contact, status='hello')
- stream.send(presence)
+client = 'http://telepathy.freedesktop.org/fake-client'
+features = [
+ 'http://jabber.org/protocol/jingle',
+ 'http://jabber.org/protocol/jingle/description/audio',
+ 'http://www.google.com/transport/p2p',
+ ]
- q.expect_many(
- EventPattern('dbus-signal', signal='PresenceUpdate',
- args=[{contact_handle:
- (0L, {u'available': {'message': 'hello'}})}]),
- EventPattern('dbus-signal', signal='PresencesChanged',
- args=[{contact_handle:
- (2, u'available', 'hello')}]))
+def presence_and_disco(q, conn, stream, contact, disco,
+ caps, dataforms={}):
+ h = conn.RequestHandles(cs.HT_CONTACT, [contact])[0]
-
- # no special capabilities
- basic_caps = [(contact_handle, cs.CHANNEL_TYPE_TEXT, 3, 0)]
- assert conn.Capabilities.GetCapabilities([contact_handle]) == basic_caps
-
- # send updated presence with Jingle caps info
- presence = make_presence(contact, status='hello',
- caps={ 'node': client,
- 'ver': '0.1',
- })
- stream.send(presence)
-
- if disco:
- # Gabble looks up our capabilities
- event = q.expect('stream-iq', to=contact,
- query_ns='http://jabber.org/protocol/disco#info')
- query_node = xpath.queryForNodes('/iq/query', event.stanza)[0]
- assert query_node.attributes['node'] == \
- client + '#' + '0.1'
-
- # send good reply
- result = make_caps_disco_reply(stream, event.stanza,
- ['http://jabber.org/protocol/jingle',
- 'http://jabber.org/protocol/jingle/description/audio',
- 'http://www.google.com/transport/p2p',
- ])
- stream.send(result)
-
- # we can now do audio calls
- event = q.expect('dbus-signal', signal='CapabilitiesChanged')
-
-def _test_with_hash(q, bus, conn, stream, contact, client, disco):
- contact_handle = conn.RequestHandles(cs.HT_CONTACT, [contact])[0]
- presence = make_presence(contact, status='hello')
- stream.send(presence)
+ stream.send(make_presence(contact, status='hello'))
q.expect_many(
EventPattern('dbus-signal', signal='PresenceUpdate',
- args=[{contact_handle:
+ args=[{h:
(0L, {u'available': {'message': 'hello'}})}]),
EventPattern('dbus-signal', signal='PresencesChanged',
- args=[{contact_handle:
+ args=[{h:
(2, u'available', 'hello')}]))
# no special capabilities
- basic_caps = [(contact_handle, cs.CHANNEL_TYPE_TEXT, 3, 0)]
- assert conn.Capabilities.GetCapabilities([contact_handle]) == basic_caps
-
- features = [
- 'http://jabber.org/protocol/jingle',
- 'http://jabber.org/protocol/jingle/description/audio',
- 'http://www.google.com/transport/p2p',
- ]
+ assertEquals([(h, cs.CHANNEL_TYPE_TEXT, 3, 0)],
+ conn.Capabilities.GetCapabilities([h]))
# send updated presence with Jingle caps info
- ver = compute_caps_hash([], features, fake_client_dataforms)
- caps = {
- 'node': client,
- 'ver': ver,
- 'hash': 'sha-1',
- }
- presence = make_presence(contact, status='hello', caps=caps)
- stream.send(presence)
+ stream.send(make_presence(contact, status='hello', caps=caps))
if disco:
# Gabble looks up our capabilities
- event = q.expect('stream-iq', to=contact,
- query_ns='http://jabber.org/protocol/disco#info')
- query_node = xpath.queryForNodes('/iq/query', event.stanza)[0]
- assert query_node.attributes['node'] == \
- client + '#' + ver
+ event = q.expect('stream-iq', to=contact, query_ns=ns.DISCO_INFO)
+ assertEquals(client + '#' + caps['ver'], event.query['node'])
# send good reply
result = make_caps_disco_reply(stream, event.stanza, features,
- fake_client_dataforms)
+ dataforms)
stream.send(result)
# we can now do audio calls
event = q.expect('dbus-signal', signal='CapabilitiesChanged')
- assert conn.Capabilities.GetCapabilities([contact_handle]) != basic_caps
+ assertContains((h, cs.CHANNEL_TYPE_STREAMED_MEDIA, 3, cs.MEDIA_CAP_AUDIO),
+ conn.Capabilities.GetCapabilities([h]))
def test(q, bus, conn, stream):
conn.Connect()
q.expect('dbus-signal', signal='StatusChanged',
args=[cs.CONN_STATUS_CONNECTED, cs.CSR_REQUESTED])
- client = 'http://telepathy.freedesktop.org/fake-client'
-
- _test_without_hash(q, bus, conn, stream, 'bob1 at foo.com/Foo', client,
- True)
- _test_without_hash(q, bus, conn, stream, 'bob2 at foo.com/Foo', client,
- True)
- _test_without_hash(q, bus, conn, stream, 'bob3 at foo.com/Foo', client,
- True)
- _test_without_hash(q, bus, conn, stream, 'bob4 at foo.com/Foo', client,
- True)
- _test_without_hash(q, bus, conn, stream, 'bob5 at foo.com/Foo', client,
- True)
+ caps = {
+ 'node': client,
+ 'ver': '0.1',
+ }
+
+ presence_and_disco(q, conn, stream, 'bob1 at foo.com/Foo', True, caps)
+ presence_and_disco(q, conn, stream, 'bob2 at foo.com/Foo', True, caps)
+ presence_and_disco(q, conn, stream, 'bob3 at foo.com/Foo', True, caps)
+ presence_and_disco(q, conn, stream, 'bob4 at foo.com/Foo', True, caps)
+ presence_and_disco(q, conn, stream, 'bob5 at foo.com/Foo', True, caps)
# we have 5 different contacts that confirm
- _test_without_hash(q, bus, conn, stream, 'bob6 at foo.com/Foo', client,
- False)
- _test_without_hash(q, bus, conn, stream, 'bob7 at foo.com/Foo', client,
- False)
+ presence_and_disco(q, conn, stream, 'bob6 at foo.com/Foo', False, caps)
+ presence_and_disco(q, conn, stream, 'bob7 at foo.com/Foo', False, caps)
+
+ caps = {
+ 'node': client,
+ 'ver': compute_caps_hash([], features, fake_client_dataforms),
+ 'hash': 'sha-1',
+ }
- _test_with_hash(q, bus, conn, stream, 'bilbo1 at foo.com/Foo', client,
- True)
+ presence_and_disco(q, conn, stream, 'bilbo1 at foo.com/Foo', True, caps,
+ fake_client_dataforms)
# 1 contact is enough with hash
- _test_with_hash(q, bus, conn, stream, 'bilbo2 at foo.com/Foo', client,
- False)
- _test_with_hash(q, bus, conn, stream, 'bilbo3 at foo.com/Foo', client,
- False)
+ presence_and_disco(q, conn, stream, 'bilbo2 at foo.com/Foo', False, caps,
+ fake_client_dataforms)
+ presence_and_disco(q, conn, stream, 'bilbo3 at foo.com/Foo', False, caps,
+ fake_client_dataforms)
if __name__ == '__main__':
exec_test(test)
--
1.5.6.5
More information about the telepathy-commits
mailing list