summaryrefslogtreecommitdiff
path: root/tests/twisted/jingle/accept-extra-stream.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/twisted/jingle/accept-extra-stream.py')
-rw-r--r--tests/twisted/jingle/accept-extra-stream.py198
1 files changed, 0 insertions, 198 deletions
diff --git a/tests/twisted/jingle/accept-extra-stream.py b/tests/twisted/jingle/accept-extra-stream.py
deleted file mode 100644
index 95e46377c..000000000
--- a/tests/twisted/jingle/accept-extra-stream.py
+++ /dev/null
@@ -1,198 +0,0 @@
-"""
-Test that we can accept streams added after the call has been accepted.
-"""
-
-from servicetest import (
- make_channel_proxy, EventPattern, sync_dbus, call_async,
- assertEquals,
- )
-from gabbletest import exec_test, make_result_iq, sync_stream
-import constants as cs
-
-from jingletest2 import JingleProtocol031, JingleTest2
-
-from config import VOIP_ENABLED
-
-if not VOIP_ENABLED:
- print "NOTE: built with --disable-voip"
- raise SystemExit(77)
-
-def test(q, bus, conn, stream):
- worker(q, bus, conn, stream, remote_jid='foo@bar.com/Foo')
-
-def test_bare_jid(q, bus, conn, stream):
- worker(q, bus, conn, stream, remote_jid='foo@sip.bar.com')
-
-def worker(q, bus, conn, stream, remote_jid):
- jp = JingleProtocol031()
- jt2 = JingleTest2(jp, conn, q, stream, 'test@localhost', remote_jid)
- jt2.prepare()
-
- self_handle = conn.GetSelfHandle()
- remote_handle = conn.RequestHandles(cs.HT_CONTACT, [jt2.peer])[0]
-
- # Remote end calls us
- node = jp.SetIq(jt2.peer, jt2.jid, [
- jp.Jingle(jt2.sid, jt2.peer, 'session-initiate', [
- jp.Content('audiostream', 'initiator', 'both',
- jp.Description('audio', [
- jp.PayloadType(name, str(rate), str(id), parameters) for
- (name, id, rate, parameters) in jt2.audio_codecs ]),
- jp.TransportGoogleP2P()) ]) ])
- stream.send(jp.xml(node))
-
- nc = q.expect('dbus-signal', signal='NewChannel',
- predicate=lambda e: cs.CHANNEL_TYPE_CONTACT_LIST not in e.args)
- path, ct, ht, h, sh = nc.args
- assert ct == cs.CHANNEL_TYPE_STREAMED_MEDIA, ct
- assert ht == cs.HT_CONTACT, ht
- assert h == remote_handle, h
-
- group = make_channel_proxy(conn, path, 'Channel.Interface.Group')
- sm = make_channel_proxy(conn, path, 'Channel.Type.StreamedMedia')
- ms = make_channel_proxy(conn, path, 'Channel.Interface.MediaSignalling')
-
- streams = sm.ListStreams()
- assert len(streams) == 1, streams
- audio_stream_id, h, media_type, state, direction, pending = streams[0]
- assert h == remote_handle, (h, remote_handle)
- assert media_type == cs.MEDIA_STREAM_TYPE_AUDIO, media_type
- assert state == cs.MEDIA_STREAM_STATE_DISCONNECTED, state
- # FIXME: This turns out to be Bidirectional; wjt thinks this sounds wrong
- # since the stream is (we hope) pending local send.
- #assert direction == cs.MEDIA_STREAM_DIRECTION_RECEIVE, direction
- assert pending == cs.MEDIA_STREAM_PENDING_LOCAL_SEND, pending
-
- session_handlers = ms.GetSessionHandlers()
- assert len(session_handlers) == 1, session_handlers
- session_handler = make_channel_proxy(conn, session_handlers[0][0],
- 'Media.SessionHandler')
- session_handler.Ready()
-
- nsh = q.expect('dbus-signal', signal='NewStreamHandler')
- stream_handler_path, stream_id, media_type, direction = nsh.args
- assert stream_id == audio_stream_id, (stream_id, audio_stream_id)
- assert media_type == cs.MEDIA_STREAM_TYPE_AUDIO, media_type
- # FIXME: As above
- #assert direction == cs.MEDIA_STREAM_DIRECTION_RECEIVE, direction
-
- stream_handler = make_channel_proxy(conn, stream_handler_path,
- 'Media.StreamHandler')
-
- stream_handler.NewNativeCandidate("fake", jt2.get_remote_transports_dbus())
- stream_handler.Ready(jt2.get_audio_codecs_dbus())
- stream_handler.StreamState(cs.MEDIA_STREAM_STATE_CONNECTED)
- stream_handler.SupportedCodecs(jt2.get_audio_codecs_dbus())
-
- # peer gets the transport
- e = q.expect('stream-iq', predicate=jp.action_predicate('transport-info'))
- assertEquals(jt2.peer, e.query['initiator'])
-
- stream.send(make_result_iq(stream, e.stanza))
-
- # Make sure all the above's happened.
- sync_stream(q, stream)
- sync_dbus(bus, q, conn)
-
- # At last, accept the call
- group.AddMembers([self_handle], 'accepted')
-
- # Call is accepted, we become a member, and the stream that was pending
- # local send is now sending.
- memb, acc, _, _, _, = q.expect_many(
- EventPattern('dbus-signal', signal='MembersChanged',
- args=[u'', [self_handle], [], [], [],
- self_handle,
- cs.GC_REASON_NONE]),
- EventPattern('stream-iq',
- predicate=lambda e: (e.query.name == 'jingle' and
- e.query['action'] == 'session-accept')),
- EventPattern('dbus-signal', signal='SetStreamSending', args=[True]),
- EventPattern('dbus-signal', signal='SetStreamPlaying', args=[True]),
- EventPattern('dbus-signal', signal='StreamDirectionChanged',
- args=[audio_stream_id, cs.MEDIA_STREAM_DIRECTION_BIDIRECTIONAL, 0]),
- )
-
- # Respond to session-accept
- # FIXME: wjt thinks Gabble should accept the content-add without this.
- stream.send(jp.xml(jp.ResultIq('test@localhost', acc.stanza, [])))
-
- # Foo would like to gaze upon our beautiful complexion
- node = jp.SetIq(jt2.peer, jt2.jid, [
- jp.Jingle(jt2.sid, jt2.peer, 'content-add', [
- jp.Content('videostream', 'initiator', 'both',
- jp.Description('video', [
- jp.PayloadType(name, str(rate), str(id), parameters) for
- (name, id, rate, parameters) in jt2.video_codecs ]),
- jp.TransportGoogleP2P()) ]) ])
- stream.send(jp.xml(node))
-
- added, nsh = q.expect_many(
- EventPattern('dbus-signal', signal='StreamAdded'),
- EventPattern('dbus-signal', signal='NewStreamHandler'),
- )
-
- video_stream_id, h, type = added.args
- assert h == remote_handle, (h, remote_handle)
- assert type == cs.MEDIA_STREAM_TYPE_VIDEO, type
-
- stream_handler_path, stream_id, media_type, direction = nsh.args
- assert stream_id == video_stream_id, (stream_id, video_stream_id)
- assert media_type == cs.MEDIA_STREAM_TYPE_VIDEO, type
- # FIXME: As above
- #assert direction == cs.MEDIA_STREAM_DIRECTION_RECEIVE, direction
-
- video_handler = make_channel_proxy(conn, stream_handler_path,
- 'Media.StreamHandler')
-
- video_handler.NewNativeCandidate("fake", jt2.get_remote_transports_dbus())
- video_handler.Ready(jt2.get_video_codecs_dbus())
- video_handler.StreamState(cs.MEDIA_STREAM_STATE_CONNECTED)
- video_handler.SupportedCodecs(jt2.get_video_codecs_dbus())
-
- ti, _, _, _ = q.expect_many(
- # Peer gets the transport
- EventPattern('stream-iq',
- predicate=jp.action_predicate('transport-info')),
- # Gabble tells the peer we accepted
- EventPattern('stream-iq',
- predicate=jp.action_predicate('content-accept')),
- EventPattern('dbus-signal', signal='SetStreamPlaying', args=[True]),
- # It's not entirely clear that this *needs* to fire here...
- EventPattern('dbus-signal', signal='SetStreamSending', args=[False]),
- )
- assertEquals(jt2.peer, ti.query['initiator'])
-
- stream.send(make_result_iq(stream, e.stanza))
-
- # Okay, so now the stream's playing but not sending, and we should be still
- # pending local send:
- streams = sm.ListStreams()
- assert len(streams) == 2, streams
- video_streams = [s for s in streams if s[2] == cs.MEDIA_STREAM_TYPE_VIDEO]
- assert len(video_streams) == 1, streams
- stream_id, h, _, state, direction, pending = video_streams[0]
- assert stream_id == video_stream_id, (stream_id, video_stream_id)
- assert h == remote_handle, (h, remote_handle)
- assert state == cs.MEDIA_STREAM_STATE_CONNECTED, state
- assert direction == cs.MEDIA_STREAM_DIRECTION_RECEIVE, direction
- assert pending == cs.MEDIA_STREAM_PENDING_LOCAL_SEND, pending
-
- # Let's accept the stream; the direction should change, and we should be
- # told to start sending.
- call_async(q, sm, 'RequestStreamDirection', video_stream_id,
- cs.MEDIA_STREAM_DIRECTION_BIDIRECTIONAL)
-
- # The stream's direction should change, and we should be told to start
- # playing.
- q.expect_many(
- EventPattern('dbus-signal', signal='StreamDirectionChanged',
- args=[video_stream_id, cs.MEDIA_STREAM_DIRECTION_BIDIRECTIONAL, 0]),
- EventPattern('dbus-signal', signal='SetStreamSending', args=[True]),
- )
-
- # That'll do, pig. That'll do.
-
-if __name__ == '__main__':
- exec_test(test)
- exec_test(test_bare_jid)