[telepathy-gabble/master] Port jingle/hold-av.py to JingleTest2
Will Thompson
will.thompson at collabora.co.uk
Sat Mar 28 03:28:41 PDT 2009
For GTalk, it just checks that asking for a video stream fails, and then
ends.
---
tests/twisted/jingle/hold-av.py | 140 ++++++++++++++---------------------
tests/twisted/jingle/jingletest2.py | 38 ++++++++--
2 files changed, 88 insertions(+), 90 deletions(-)
diff --git a/tests/twisted/jingle/hold-av.py b/tests/twisted/jingle/hold-av.py
index 841ad48..15967ef 100644
--- a/tests/twisted/jingle/hold-av.py
+++ b/tests/twisted/jingle/hold-av.py
@@ -5,67 +5,41 @@ Test the Hold API.
from gabbletest import exec_test, make_result_iq, acknowledge_iq, sync_stream
from servicetest import make_channel_proxy, unwrap, tp_path_prefix, \
call_async, EventPattern
-import jingletest
import gabbletest
import dbus
import time
import constants as cs
+from jingletest2 import JingleTest2, test_all_dialects
-MEDIA_STREAM_TYPE_AUDIO = 0
-MEDIA_STREAM_TYPE_VIDEO = 0
-# Hold states
-S_UNHELD = 0
-S_HELD = 1
-S_PENDING_HOLD = 2
-S_PENDING_UNHOLD = 3
-# Reasons
-R_NONE = 0
-R_REQUESTED = 1
-R_RESOURCE_NOT_AVAILABLE = 2
+def test(jp, q, bus, conn, stream):
+ jt = JingleTest2(jp, conn, q, stream, 'test at localhost', 'foo at bar.com/Foo')
+ jt.prepare()
-def test(q, bus, conn, stream):
- jt = jingletest.JingleTest(stream, 'test at localhost', 'foo at bar.com/Foo')
+ self_handle = conn.GetSelfHandle()
+ handle = conn.RequestHandles(cs.HT_CONTACT, [jt.peer])[0]
- # If we need to override remote caps, feats, codecs or caps,
- # this is a good time to do it
-
- # Connecting
- conn.Connect()
-
- q.expect('dbus-signal', signal='StatusChanged', args=[1, 1])
- q.expect('stream-authenticated')
- q.expect('dbus-signal', signal='PresenceUpdate',
- args=[{1L: (0L, {u'available': {}})}])
- q.expect('dbus-signal', signal='StatusChanged', args=[0, 1])
-
- # We need remote end's presence for capabilities
- jt.send_remote_presence()
-
- # Gabble doesn't trust it, so makes a disco
- event = q.expect('stream-iq', query_ns='http://jabber.org/protocol/disco#info',
- to='foo at bar.com/Foo')
-
- jt.send_remote_disco_reply(event.stanza)
-
- # Force Gabble to process the caps before calling RequestChannel
- sync_stream(q, stream)
-
- handle = conn.RequestHandles(1, [jt.remote_jid])[0]
-
- path = conn.RequestChannel(
- 'org.freedesktop.Telepathy.Channel.Type.StreamedMedia',
- 1, handle, True)
+ path = conn.RequestChannel(cs.CHANNEL_TYPE_STREAMED_MEDIA,
+ cs.HT_CONTACT, handle, True)
signalling_iface = make_channel_proxy(conn, path, 'Channel.Interface.MediaSignalling')
media_iface = make_channel_proxy(conn, path, 'Channel.Type.StreamedMedia')
group_iface = make_channel_proxy(conn, path, 'Channel.Interface.Group')
hold_iface = make_channel_proxy(conn, path, 'Channel.Interface.Hold')
- media_iface.RequestStreams(handle, [MEDIA_STREAM_TYPE_AUDIO,
- MEDIA_STREAM_TYPE_VIDEO])
+ call_async(q, media_iface, 'RequestStreams', handle,
+ [cs.MEDIA_STREAM_TYPE_AUDIO, cs.MEDIA_STREAM_TYPE_VIDEO])
+
+ if jp.is_gtalk():
+ # Video on GTalk? Not so much.
+ e = q.expect('dbus-error', method='RequestStreams')
+ # The spec and implemention say this should be NotAvailable, but wjt
+ # thinks it should be NotCapable. The spec bug is #20920.
+ name = e.error.get_dbus_name()
+ #assert name == cs.NOT_CAPABLE, name
+ return
# S-E gets notified about new session handler, and calls Ready on it
e = q.expect('dbus-signal', signal='NewSessionHandler')
@@ -99,19 +73,19 @@ def test(q, bus, conn, stream):
video_stream_handler.Ready(jt.get_video_codecs_dbus())
video_stream_handler.StreamState(cs.MEDIA_STREAM_STATE_CONNECTED)
- e = q.expect('stream-iq')
- assert e.query.name == 'jingle'
- assert e.query['action'] == 'session-initiate'
- stream.send(gabbletest.make_result_iq(stream, e.stanza))
+ e = q.expect('stream-iq', predicate=lambda e:
+ jp.match_jingle_action(e.query, 'session-initiate'))
+ stream.send(make_result_iq(stream, e.stanza))
- jt.outgoing_call_reply(e.query['sid'], True)
+ jt.set_sid_from_initiate(e.query)
+ jt.accept(with_video=True)
q.expect('stream-iq', iq_type='result')
# ---- Test 1: GetHoldState returns unheld and unhold is a no-op ----
hold_state = hold_iface.GetHoldState()
- assert hold_state[0] == S_UNHELD, hold_state
+ assert hold_state[0] == cs.HS_UNHELD, hold_state
hold_iface.RequestHold(False)
# ---- Test 2: successful hold ----
@@ -119,7 +93,7 @@ def test(q, bus, conn, stream):
call_async(q, hold_iface, 'RequestHold', True)
q.expect_many(
EventPattern('dbus-signal', signal='HoldStateChanged',
- args=[S_PENDING_HOLD, R_REQUESTED]),
+ args=[cs.HS_PENDING_HOLD, cs.HSR_REQUESTED]),
EventPattern('dbus-signal', signal='SetStreamHeld', args=[True]),
EventPattern('dbus-return', method='RequestHold', value=()),
)
@@ -129,13 +103,13 @@ def test(q, bus, conn, stream):
q.expect_many(
EventPattern('dbus-return', method='HoldState', value=()),
EventPattern('dbus-signal', signal='HoldStateChanged',
- args=[S_HELD, R_REQUESTED]),
+ args=[cs.HS_HELD, cs.HSR_REQUESTED]),
)
# ---- Test 3: GetHoldState returns held and hold is a no-op ----
hold_state = hold_iface.GetHoldState()
- assert hold_state[0] == S_HELD, hold_state
+ assert hold_state[0] == cs.HS_HELD, hold_state
hold_iface.RequestHold(True)
# ---- Test 4: successful unhold ----
@@ -143,7 +117,7 @@ def test(q, bus, conn, stream):
call_async(q, hold_iface, 'RequestHold', False)
q.expect_many(
EventPattern('dbus-signal', signal='HoldStateChanged',
- args=[S_PENDING_UNHOLD, R_REQUESTED]),
+ args=[cs.HS_PENDING_UNHOLD, cs.HSR_REQUESTED]),
EventPattern('dbus-signal', signal='SetStreamHeld', args=[False]),
EventPattern('dbus-return', method='RequestHold', value=()),
)
@@ -153,26 +127,26 @@ def test(q, bus, conn, stream):
q.expect_many(
EventPattern('dbus-return', method='HoldState', value=()),
EventPattern('dbus-signal', signal='HoldStateChanged',
- args=[S_UNHELD, R_REQUESTED]),
+ args=[cs.HS_UNHELD, cs.HSR_REQUESTED]),
)
# ---- Test 5: GetHoldState returns False and unhold is a no-op ----
hold_state = hold_iface.GetHoldState()
- assert hold_state[0] == S_UNHELD, hold_state
+ assert hold_state[0] == cs.HS_UNHELD, hold_state
hold_iface.RequestHold(False)
# ---- Test 6: 3 parallel calls to hold ----
hold_state = hold_iface.GetHoldState()
- assert hold_state[0] == S_UNHELD, hold_state
+ assert hold_state[0] == cs.HS_UNHELD, hold_state
call_async(q, hold_iface, 'RequestHold', True)
call_async(q, hold_iface, 'RequestHold', True)
call_async(q, hold_iface, 'RequestHold', True)
q.expect_many(
EventPattern('dbus-signal', signal='HoldStateChanged',
- args=[S_PENDING_HOLD, R_REQUESTED]),
+ args=[cs.HS_PENDING_HOLD, cs.HSR_REQUESTED]),
EventPattern('dbus-signal', signal='SetStreamHeld', args=[True]),
EventPattern('dbus-return', method='RequestHold', value=()),
)
@@ -182,7 +156,7 @@ def test(q, bus, conn, stream):
q.expect_many(
EventPattern('dbus-return', method='HoldState', value=()),
EventPattern('dbus-signal', signal='HoldStateChanged',
- args=[S_HELD, R_REQUESTED]),
+ args=[cs.HS_HELD, cs.HSR_REQUESTED]),
)
# ---- Test 7: 3 parallel calls to unhold ----
@@ -192,7 +166,7 @@ def test(q, bus, conn, stream):
call_async(q, hold_iface, 'RequestHold', False)
q.expect_many(
EventPattern('dbus-signal', signal='HoldStateChanged',
- args=[S_PENDING_UNHOLD, R_REQUESTED]),
+ args=[cs.HS_PENDING_UNHOLD, cs.HSR_REQUESTED]),
EventPattern('dbus-signal', signal='SetStreamHeld', args=[False]),
EventPattern('dbus-return', method='RequestHold', value=()),
)
@@ -202,24 +176,24 @@ def test(q, bus, conn, stream):
q.expect_many(
EventPattern('dbus-return', method='HoldState', value=()),
EventPattern('dbus-signal', signal='HoldStateChanged',
- args=[S_UNHELD, R_REQUESTED]),
+ args=[cs.HS_UNHELD, cs.HSR_REQUESTED]),
)
# ---- Test 8: hold, then change our minds before s-e has responded ----
hold_state = hold_iface.GetHoldState()
- assert hold_state[0] == S_UNHELD, hold_state
+ assert hold_state[0] == cs.HS_UNHELD, hold_state
call_async(q, hold_iface, 'RequestHold', True)
call_async(q, hold_iface, 'RequestHold', False)
q.expect_many(
EventPattern('dbus-signal', signal='HoldStateChanged',
- args=[S_PENDING_HOLD, R_REQUESTED]),
+ args=[cs.HS_PENDING_HOLD, cs.HSR_REQUESTED]),
EventPattern('dbus-signal', signal='SetStreamHeld', args=[True]),
)
q.expect_many(
EventPattern('dbus-signal', signal='HoldStateChanged',
- args=[S_PENDING_UNHOLD, R_REQUESTED]),
+ args=[cs.HS_PENDING_UNHOLD, cs.HSR_REQUESTED]),
EventPattern('dbus-signal', signal='SetStreamHeld', args=[False]),
)
@@ -230,11 +204,11 @@ def test(q, bus, conn, stream):
q.expect_many(
EventPattern('dbus-return', method='HoldState', value=()),
EventPattern('dbus-signal', signal='HoldStateChanged',
- args=[S_UNHELD, R_REQUESTED]),
+ args=[cs.HS_UNHELD, cs.HSR_REQUESTED]),
)
hold_state = hold_iface.GetHoldState()
- assert hold_state[0] == S_UNHELD, hold_state
+ assert hold_state[0] == cs.HS_UNHELD, hold_state
# ---- Test 9: unhold, then change our minds before s-e has responded ----
@@ -242,7 +216,7 @@ def test(q, bus, conn, stream):
call_async(q, hold_iface, 'RequestHold', True)
q.expect_many(
EventPattern('dbus-signal', signal='HoldStateChanged',
- args=[S_PENDING_HOLD, R_REQUESTED]),
+ args=[cs.HS_PENDING_HOLD, cs.HSR_REQUESTED]),
EventPattern('dbus-signal', signal='SetStreamHeld', args=[True]),
EventPattern('dbus-return', method='RequestHold', value=()),
)
@@ -251,24 +225,24 @@ def test(q, bus, conn, stream):
q.expect_many(
EventPattern('dbus-return', method='HoldState', value=()),
EventPattern('dbus-signal', signal='HoldStateChanged',
- args=[S_HELD, R_REQUESTED]),
+ args=[cs.HS_HELD, cs.HSR_REQUESTED]),
)
# Actually do test 9
hold_state = hold_iface.GetHoldState()
- assert hold_state[0] == S_HELD, hold_state
+ assert hold_state[0] == cs.HS_HELD, hold_state
call_async(q, hold_iface, 'RequestHold', False)
call_async(q, hold_iface, 'RequestHold', True)
q.expect_many(
EventPattern('dbus-signal', signal='HoldStateChanged',
- args=[S_PENDING_UNHOLD, R_REQUESTED]),
+ args=[cs.HS_PENDING_UNHOLD, cs.HSR_REQUESTED]),
EventPattern('dbus-signal', signal='SetStreamHeld', args=[False]),
)
q.expect_many(
EventPattern('dbus-signal', signal='HoldStateChanged',
- args=[S_PENDING_HOLD, R_REQUESTED]),
+ args=[cs.HS_PENDING_HOLD, cs.HSR_REQUESTED]),
EventPattern('dbus-signal', signal='SetStreamHeld', args=[True]),
)
@@ -279,18 +253,18 @@ def test(q, bus, conn, stream):
q.expect_many(
EventPattern('dbus-return', method='HoldState', value=()),
EventPattern('dbus-signal', signal='HoldStateChanged',
- args=[S_HELD, R_REQUESTED]),
+ args=[cs.HS_HELD, cs.HSR_REQUESTED]),
)
hold_state = hold_iface.GetHoldState()
- assert hold_state[0] == S_HELD, hold_state
+ assert hold_state[0] == cs.HS_HELD, hold_state
# ---- Test 10: attempting to unhold fails (both streams) ----
call_async(q, hold_iface, 'RequestHold', False)
q.expect_many(
EventPattern('dbus-signal', signal='HoldStateChanged',
- args=[S_PENDING_UNHOLD, R_REQUESTED]),
+ args=[cs.HS_PENDING_UNHOLD, cs.HSR_REQUESTED]),
EventPattern('dbus-signal', signal='SetStreamHeld', args=[False]),
EventPattern('dbus-return', method='RequestHold', value=()),
)
@@ -301,7 +275,7 @@ def test(q, bus, conn, stream):
q.expect_many(
EventPattern('dbus-return', method='UnholdFailure', value=()),
EventPattern('dbus-signal', signal='HoldStateChanged',
- args=[S_HELD, R_RESOURCE_NOT_AVAILABLE]),
+ args=[cs.HS_HELD, cs.HSR_RESOURCE_NOT_AVAILABLE]),
)
# ---- Test 11: attempting to unhold fails (first stream) ----
@@ -309,7 +283,7 @@ def test(q, bus, conn, stream):
call_async(q, hold_iface, 'RequestHold', False)
q.expect_many(
EventPattern('dbus-signal', signal='HoldStateChanged',
- args=[S_PENDING_UNHOLD, R_REQUESTED]),
+ args=[cs.HS_PENDING_UNHOLD, cs.HSR_REQUESTED]),
EventPattern('dbus-signal', signal='SetStreamHeld', args=[False]),
EventPattern('dbus-return', method='RequestHold', value=()),
)
@@ -319,7 +293,7 @@ def test(q, bus, conn, stream):
q.expect_many(
EventPattern('dbus-return', method='UnholdFailure', value=()),
EventPattern('dbus-signal', signal='HoldStateChanged',
- args=[S_HELD, R_RESOURCE_NOT_AVAILABLE]),
+ args=[cs.HS_HELD, cs.HSR_RESOURCE_NOT_AVAILABLE]),
)
# ---- Test 12: attempting to unhold partially fails, so roll back ----
@@ -327,7 +301,7 @@ def test(q, bus, conn, stream):
call_async(q, hold_iface, 'RequestHold', False)
q.expect_many(
EventPattern('dbus-signal', signal='HoldStateChanged',
- args=[S_PENDING_UNHOLD, R_REQUESTED]),
+ args=[cs.HS_PENDING_UNHOLD, cs.HSR_REQUESTED]),
EventPattern('dbus-signal', signal='SetStreamHeld', args=[False]),
EventPattern('dbus-return', method='RequestHold', value=()),
)
@@ -341,7 +315,7 @@ def test(q, bus, conn, stream):
EventPattern('dbus-signal', signal='SetStreamHeld', args=[True]),
EventPattern('dbus-return', method='UnholdFailure', value=()),
EventPattern('dbus-signal', signal='HoldStateChanged',
- args=[S_PENDING_HOLD, R_RESOURCE_NOT_AVAILABLE]),
+ args=[cs.HS_PENDING_HOLD, cs.HSR_RESOURCE_NOT_AVAILABLE]),
)
call_async(q, audio_stream_handler, 'HoldState', True)
@@ -349,12 +323,12 @@ def test(q, bus, conn, stream):
q.expect_many(
EventPattern('dbus-return', method='HoldState', value=()),
EventPattern('dbus-signal', signal='HoldStateChanged',
- args=[S_HELD, R_RESOURCE_NOT_AVAILABLE]),
+ args=[cs.HS_HELD, cs.HSR_RESOURCE_NOT_AVAILABLE]),
)
# ---- The end ----
- group_iface.RemoveMembers([dbus.UInt32(1)], 'closed')
+ group_iface.RemoveMembers([self_handle], 'closed')
# Test completed, close the connection
@@ -367,5 +341,5 @@ def test(q, bus, conn, stream):
if __name__ == '__main__':
- exec_test(test)
+ test_all_dialects(test)
diff --git a/tests/twisted/jingle/jingletest2.py b/tests/twisted/jingle/jingletest2.py
index 215e764..5daeb45 100644
--- a/tests/twisted/jingle/jingletest2.py
+++ b/tests/twisted/jingle/jingletest2.py
@@ -109,6 +109,9 @@ class JingleProtocol:
def extract_session_id(self, query):
return query['sid']
+ def is_gtalk(self):
+ return False
+
def is_modern_jingle(self):
return False
@@ -157,6 +160,9 @@ class GtalkProtocol03(JingleProtocol):
def extract_session_id(self, query):
return query['id']
+ def is_gtalk(self):
+ return True
+
class GtalkProtocol04(JingleProtocol):
features = [ 'http://www.google.com/xmpp/protocol/voice/v1',
'http://www.google.com/transport/p2p' ]
@@ -199,6 +205,9 @@ class GtalkProtocol04(JingleProtocol):
def extract_session_id(self, query):
return query['id']
+ def is_gtalk(self):
+ return True
+
class JingleProtocol015(JingleProtocol):
features = [ 'http://www.google.com/transport/p2p',
'http://jabber.org/protocol/jingle',
@@ -339,15 +348,30 @@ class JingleTest2:
def set_sid_from_initiate(self, query):
self.sid = self.jp.extract_session_id(query)
- def accept(self):
+ def accept(self, with_video=False):
jp = self.jp
- node = jp.SetIq(self.peer, self.jid, [
- jp.Jingle(self.sid, self.peer, 'session-accept', [
- jp.Content('stream1', 'initiator', 'both', [
- jp.Description('audio', [
+ audio = [
+ jp.Content('stream1', 'initiator', 'both', [
+ jp.Description('audio', [
+ jp.PayloadType(name, str(rate), str(id)) for
+ (name, id, rate) in self.audio_codecs ]),
+ jp.TransportGoogleP2P() ])
+ ]
+
+ if with_video:
+ video = [
+ jp.Content('stream2', 'initiator', 'both', [
+ jp.Description('video', [
jp.PayloadType(name, str(rate), str(id)) for
- (name, id, rate) in self.audio_codecs ]),
- jp.TransportGoogleP2P() ]) ]) ])
+ (name, id, rate) in self.video_codecs ]),
+ jp.TransportGoogleP2P() ])
+ ]
+ else:
+ video = []
+
+ node = jp.SetIq(self.peer, self.jid, [
+ jp.Jingle(self.sid, self.peer, 'session-accept',
+ audio + video) ])
self.stream.send(jp.xml(node))
def terminate(self, reason=None):
--
1.5.6.5
More information about the telepathy-commits
mailing list