Author: jbigelow Date: Fri Feb 13 12:54:13 2015 New Revision: 6407 URL: http://svnview.digium.com/svn/testsuite?view=rev&rev=6407 Log: Testsuite: Attended transfers from non-Stasis to a Stasis bridge.
This adds the Attended Transfers from non-Stasis to a Stasis bridge tests 1.1 & 1.2 as described on the StasisStart/StasisEnd Test Plan at: https://wiki.asterisk.org/wiki/pages/viewpage.action?pageId=30279826 Notes: * The tests may occasionally fail due to bug ASTERISK-24755. * These tests constantly fail due to ASTERISK-24782. The YAML config 'expected-result: False' has been set for the tests. Once the bug has been resolved the config line should be removed from both. (closes issue ASTERISK-24578) Review: https://reviewboard.asterisk.org/r/4415/ Added: asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_app_to_stasis_bridge/ asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_app_to_stasis_bridge/configs/ asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_app_to_stasis_bridge/configs/ast1/ asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_app_to_stasis_bridge/configs/ast1/extensions.conf (with props) asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_app_to_stasis_bridge/configs/ast1/pjsip.conf (with props) asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_app_to_stasis_bridge/test-config.yaml (with props) asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_bridge_to_stasis_bridge/ asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_bridge_to_stasis_bridge/configs/ asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_bridge_to_stasis_bridge/configs/ast1/ asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_bridge_to_stasis_bridge/configs/ast1/extensions.conf (with props) asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_bridge_to_stasis_bridge/configs/ast1/pjsip.conf (with props) asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_bridge_to_stasis_bridge/test-config.yaml (with props) Modified: asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/tests.yaml Added: asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_app_to_stasis_bridge/configs/ast1/extensions.conf URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_app_to_stasis_bridge/configs/ast1/extensions.conf?view=auto&rev=6407 ============================================================================== --- asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_app_to_stasis_bridge/configs/ast1/extensions.conf (added) +++ asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_app_to_stasis_bridge/configs/ast1/extensions.conf Fri Feb 13 12:54:13 2015 @@ -1,0 +1,16 @@ +[default] + +exten => dummy,1,NoOp() + same => n,Answer() + same => n,Stasis(testsuite,dummy) + same => n,Hangup() + +exten => echo,1,Answer + same => n,Echo() + same => n,Hangup + +exten => stasis,1,NoOp() + same => n,Answer() + same => n,Stasis(testsuite,test) + same => n,Hangup + Propchange: asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_app_to_stasis_bridge/configs/ast1/extensions.conf ------------------------------------------------------------------------------ svn:eol-style = native Propchange: asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_app_to_stasis_bridge/configs/ast1/extensions.conf ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Propchange: asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_app_to_stasis_bridge/configs/ast1/extensions.conf ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_app_to_stasis_bridge/configs/ast1/pjsip.conf URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_app_to_stasis_bridge/configs/ast1/pjsip.conf?view=auto&rev=6407 ============================================================================== --- asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_app_to_stasis_bridge/configs/ast1/pjsip.conf (added) +++ asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_app_to_stasis_bridge/configs/ast1/pjsip.conf Fri Feb 13 12:54:13 2015 @@ -1,0 +1,40 @@ +[global] +type=global +debug=yes + +[system] +type=system + +[local] +type=transport +protocol=udp +bind=127.0.0.1:5060 + +[alice] +type=endpoint +context=default +disallow=all +allow=ulaw +direct_media=no +media_address=127.0.0.1 +aors=alice + +[alice] +type=aor +max_contacts=1 +contact=sip:alice@127.0.0.1:5061\;transport=udp + +[bob] +type=endpoint +context=default +disallow=all +allow=ulaw +direct_media=no +media_address=127.0.0.1 +aors=bob + +[bob] +type=aor +max_contacts=1 +contact=sip:bob@127.0.0.1:5062\;transport=udp + Propchange: asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_app_to_stasis_bridge/configs/ast1/pjsip.conf ------------------------------------------------------------------------------ svn:eol-style = native Propchange: asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_app_to_stasis_bridge/configs/ast1/pjsip.conf ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Propchange: asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_app_to_stasis_bridge/configs/ast1/pjsip.conf ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_app_to_stasis_bridge/test-config.yaml URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_app_to_stasis_bridge/test-config.yaml?view=auto&rev=6407 ============================================================================== --- asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_app_to_stasis_bridge/test-config.yaml (added) +++ asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_app_to_stasis_bridge/test-config.yaml Fri Feb 13 12:54:13 2015 @@ -1,0 +1,309 @@ +testinfo: + summary: "Transfer (attended) non-Stasis app to Stasis bridge" + description: | + "Upon the kick off local channel entering into the Stasis(testsuite) + app, the Stasis bridge 'test_bridge' is created. A call is made from + the 'alice' PJSUA account and put into the Echo() app. Alice begins + an attended transfer by making another call that is put into the + Stasis(testsuite) app and then added to the 'test_bridge' stasis + bridge. A channel is then originated to the 'bob' PJSUA account and + put into the same Stasis(testsuite) app and added to the 'test_bridge' + stasis bridge with the second call from alice. + + Alice then completes the attended transfer essentially transferring + the Echo() app to the Stasis bridge. Asterisk does this by creating a + Local channel where half masquerades into the Echo() app and the other + half is swapped with the channel of the second call from alice. After + the transfer is successful with the local replacement channel half in + the 'test_bridge' stasis bridge with bob, bob is hung up. This then + initiates the tear down of the local channels and destruction of the + stasis bridge. + + This test verifies that a non-Stasis app can be transferred (attended) + to a Stasis bridge. It also verifies that the StasisStart & StasisEnd + events occur for the alice, bob, and local replacement channels." + issues: + - jira: 'ASTERISK-24782' + +test-modules: + test-object: + config-section: test-object-config + typename: 'ari.AriOriginateTestObject' + modules: + - + config-section: 'pjsua-config' + typename: 'phones.PjsuaPhoneController' + - + config-section: pluggable-config + typename: 'pluggable_modules.EventActionModule' + +test-object-config: + apps: testsuite + test-iterations: + - + channelId: 'dummy' + endpoint: 'Local/dummy@default' + context: 'default' + extension: 'echo' + priority: '1' + +pjsua-config: + transports: + - + name: 'local-ipv4-1' + bind: '127.0.0.1' + bindport: '5061' + - + name: 'local-ipv4-2' + bind: '127.0.0.1' + bindport: '5062' + accounts: + - + name: 'alice' + username: 'alice' + domain: '127.0.0.1' + transport: 'local-ipv4-1' + - + name: 'bob' + username: 'bob' + domain: '127.0.0.1' + transport: 'local-ipv4-2' + +pluggable-config: + # Upon kickoff channel entering Stasis app: create a bridge, don't add + # kickoff channel to bridge, instruct alice to place call into Echo(). + - + ari-events: + match: + type: StasisStart + application: 'testsuite' + args: ['dummy'] + channel: + id: 'dummy;2' + count: 1 + ari-requests: + method: 'post' + uri: 'bridges/test_bridge' + pjsua_phone: + action: 'call' + pjsua_account: 'alice' + call_uri: 'sip:echo@127.0.0.1' + # Ensure alice's first channel is answered. Then instruct alice to place a + # call into Stasis(testsuite,test). + - + ami-events: + conditions: + match: + Event: 'Newexten' + Channel: 'PJSIP/alice-.*' + ChannelStateDesc: 'Up' + Application: 'Echo' + count: 1 + pjsua_phone: + action: 'call' + pjsua_account: 'alice' + call_uri: 'sip:stasis@127.0.0.1' + # Upon alice entering the Stasis app: add the channel to the bridge and + # originate a call to bob. + - + ari-events: + match: + type: StasisStart + application: 'testsuite' + args: ['test'] + channel: + name: 'PJSIP/alice-.*' + count: 1 + ari-requests: + - + method: 'post' + uri: 'bridges/test_bridge/addChannel' + params: + channel: '{channel.id}' + - + method: 'post' + uri: 'channels/bob' + params: + endpoint: 'PJSIP/bob' + context: 'default' + extension: 'stasis' + priority: '1' + # Ensure alice enters the Stasis bridge. + - + ari-events: + match: + type: ChannelEnteredBridge + bridge: + id: 'test_bridge' + channel: + name: 'PJSIP/alice-.*' + application: 'testsuite' + count: 1 + # Upon bob entering Stasis app: add the channel to the bridge. + - + ari-events: + match: + type: StasisStart + application: 'testsuite' + args: ['test'] + channel: + name: 'PJSIP/bob-.*' + count: 1 + ari-requests: + method: 'post' + uri: 'bridges/test_bridge/addChannel' + params: + channel: '{channel.id}' + # Ensure bob enters the Stasis bridge. Then instruct alice to perform an + # attended transfer. This is to transfer the remote side of the first + # channel which is Echo() to the remote side of the second channel which + # is the Stasis bridge. Essentially bob will be in the stasis bridge with a + # local channel that is in the Echo() app. + - + ari-events: + match: + type: ChannelEnteredBridge + bridge: + id: 'test_bridge' + channel: + name: 'PJSIP/bob-.*' + application: 'testsuite' + count: 1 + pjsua_phone: + action: 'transfer' + pjsua_account: 'alice' + transfer_type: 'attended' + # Ensure the attended transfer occurs with the proper info. + - + ari-events: + match: + type: BridgeAttendedTransfer + application: 'testsuite' + transferer_first_leg: + name: 'PJSIP/alice-.*' + transferer_second_leg: + name: 'PJSIP/alice-.*' + transferer_second_leg_bridge: + id: 'test_bridge' + replace_channel: + name: 'Local/_attended@transfer-.*' + result: 'Success' + count: 1 + # Ensure the local channel half for the transfer that is replacing Alice's + # channel enters the Stasis(testsuite) application. + - + ari-events: + match: + type: StasisStart + application: 'testsuite' + args: [] + channel: + name: 'Local/_attended@transfer-.*' + replace_channel: + name: 'PJSIP/alice-.*' + count: 1 + # Ensure alice leaves the Stasis bridge. + - + ari-events: + match: + type: ChannelLeftBridge + application: 'testsuite' + bridge: + id: 'test_bridge' + channel: + name: 'PJSIP/alice-.*' + count: 1 + # Ensure the local channel half for the transfer enters the Stasis bridge. + - + ari-events: + match: + type: ChannelEnteredBridge + application: 'testsuite' + bridge: + id: 'test_bridge' + channel: + name: 'Local/_attended@transfer-.*' + count: 1 + # Ensure the alice channel exits the Stasis app. Then hang up bob. + - + ari-events: + match: + type: StasisEnd + application: 'testsuite' + channel: + name: 'PJSIP/alice-.*' + count: 1 + ami-actions: + action: + action: 'Hangup' + channel: '/^PJSIP/bob-.*$/' + # Upon hanging up bob, ensure bob leaves the bridge. + - + ari-events: + match: + type: ChannelLeftBridge + application: 'testsuite' + bridge: + id: 'test_bridge' + channel: + name: 'PJSIP/bob-.*' + count: 1 + # Ensure bob exits the Stasis app. + - + ari-events: + match: + type: StasisEnd + application: 'testsuite' + channel: + name: 'PJSIP/bob-.*' + count: 1 + # Ensure the bridged local channel half used for the transfer leaves the + # bridge. + - + ari-events: + match: + type: ChannelLeftBridge + application: 'testsuite' + bridge: + id: 'test_bridge' + channel: + name: 'Local/_attended@transfer-.*' + count: 1 + # Ensure the bridged local channel half used for the transfer exits the + # Stasis app. Then hang up the kickoff local channel halves and destroy + # the bridge. + - + ari-events: + match: + type: StasisEnd + application: 'testsuite' + channel: + name: 'Local/_attended@transfer-.*' + count: 1 + ami-actions: + action: + action: 'Hangup' + channel: '/^Local/dummy@default-.*;2$/' + ari-requests: + method: 'delete' + uri: 'bridges/test_bridge' + +properties: + minversion: '13.1.0' + dependencies: + - python : autobahn.websocket + - python : requests + - python : twisted + - python : starpy + - python : pjsua + - asterisk : app_stasis + - asterisk : app_echo + - asterisk : res_ari_channels + - asterisk : res_ari_bridges + - asterisk : res_pjsip + tags: + - ARI + - pjsip + # Expect test to fail until ASTERISK-24782 is resolved. + expected-result: False + Propchange: asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_app_to_stasis_bridge/test-config.yaml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_app_to_stasis_bridge/test-config.yaml ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Propchange: asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_app_to_stasis_bridge/test-config.yaml ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_bridge_to_stasis_bridge/configs/ast1/extensions.conf URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_bridge_to_stasis_bridge/configs/ast1/extensions.conf?view=auto&rev=6407 ============================================================================== --- asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_bridge_to_stasis_bridge/configs/ast1/extensions.conf (added) +++ asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_bridge_to_stasis_bridge/configs/ast1/extensions.conf Fri Feb 13 12:54:13 2015 @@ -1,0 +1,20 @@ +[default] + +exten => dummy,1,NoOp() + same => n,Answer() + same => n,Stasis(testsuite,dummy) + same => n,Hangup() + +exten => echo,1,Answer + same => n,Echo() + same => n,Hangup + +exten => bob,1,NoOp() + same => n,Dial(PJSIP/bob) + same => n,Hangup + +exten => stasis,1,NoOp() + same => n,Answer() + same => n,Stasis(testsuite,test) + same => n,Hangup + Propchange: asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_bridge_to_stasis_bridge/configs/ast1/extensions.conf ------------------------------------------------------------------------------ svn:eol-style = native Propchange: asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_bridge_to_stasis_bridge/configs/ast1/extensions.conf ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Propchange: asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_bridge_to_stasis_bridge/configs/ast1/extensions.conf ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_bridge_to_stasis_bridge/configs/ast1/pjsip.conf URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_bridge_to_stasis_bridge/configs/ast1/pjsip.conf?view=auto&rev=6407 ============================================================================== --- asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_bridge_to_stasis_bridge/configs/ast1/pjsip.conf (added) +++ asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_bridge_to_stasis_bridge/configs/ast1/pjsip.conf Fri Feb 13 12:54:13 2015 @@ -1,0 +1,54 @@ +[global] +type=global +debug=yes + +[system] +type=system + +[local] +type=transport +protocol=udp +bind=127.0.0.1:5060 + +[alice] +type=endpoint +context=default +disallow=all +allow=ulaw +direct_media=no +media_address=127.0.0.1 +aors=alice + +[alice] +type=aor +max_contacts=1 +contact=sip:alice@127.0.0.1:5061\;transport=udp + +[bob] +type=endpoint +context=default +disallow=all +allow=ulaw +direct_media=no +media_address=127.0.0.1 +aors=bob + +[bob] +type=aor +max_contacts=1 +contact=sip:bob@127.0.0.1:5062\;transport=udp + +[carol] +type=endpoint +context=default +disallow=all +allow=ulaw +direct_media=no +media_address=127.0.0.1 +aors=carol + +[carol] +type=aor +max_contacts=1 +contact=sip:carol@127.0.0.1:5063\;transport=udp + Propchange: asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_bridge_to_stasis_bridge/configs/ast1/pjsip.conf ------------------------------------------------------------------------------ svn:eol-style = native Propchange: asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_bridge_to_stasis_bridge/configs/ast1/pjsip.conf ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Propchange: asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_bridge_to_stasis_bridge/configs/ast1/pjsip.conf ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_bridge_to_stasis_bridge/test-config.yaml URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_bridge_to_stasis_bridge/test-config.yaml?view=auto&rev=6407 ============================================================================== --- asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_bridge_to_stasis_bridge/test-config.yaml (added) +++ asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_bridge_to_stasis_bridge/test-config.yaml Fri Feb 13 12:54:13 2015 @@ -1,0 +1,398 @@ +testinfo: + summary: "Transfer (attended) non-Stasis bridge to Stasis bridge" + description: | + "Upon the kick off local channel entering into the Stasis(testsuite) + app, a call is made from the 'alice' PJSUA account that executes the + Dial() app and calls the 'bob' PJSUA account. Once alice and bob are + in a non-Stasis bridge, alice begins an attended transfer by making + another call. The second alice channel is put into the + Stasis(testsuite) app, the Stasis bridge 'test_bridge' is created, and + the second alice channel is added to Stasis bridge. A channel is then + originated to the 'carol' PJSUA account and put into the same + Stasis(testsuite) app and added to the Stasis bridge 'test_bridge' + with the second alice channel. + + Alice then completes the attended transfer essentially transferring + the non-Stasis bridge to the Stasis bridge. Asterisk does this by + creating a Local channel where each half is swapped in place of the + two alice channels. After the transfer is successful with a local + replacement channel half in the non-Stasis bridge with bob and another + in the Stasis bridge with carol, bob is hung up. This then initiates + the hang up of the local replacement channel half that was in the + non-Stasis bridge with bob and the hang up of the local replacement + channel half that was in the Stasis bridge with carol. Carol is then + hung up which initiates the hung up of the kick off local channel and + the destruction of the stasis bridge. + + This test verifies that a non-Stasis bridge can be transferred + (attended) to a Stasis bridge. It also verifies that the StasisStart & + StasisEnd events occur for the alice(second), carol, and local + replacement channels." + issues: + - jira: 'ASTERISK-24782' + +test-modules: + test-object: + config-section: test-object-config + typename: 'ari.AriOriginateTestObject' + modules: + - + config-section: 'pjsua-config' + typename: 'phones.PjsuaPhoneController' + - + config-section: pluggable-config + typename: 'pluggable_modules.EventActionModule' + +test-object-config: + apps: testsuite + test-iterations: + - + channelId: 'dummy' + endpoint: 'Local/dummy@default' + context: 'default' + extension: 'echo' + priority: '1' + +pjsua-config: + transports: + - + name: 'local-ipv4-1' + bind: '127.0.0.1' + bindport: '5061' + - + name: 'local-ipv4-2' + bind: '127.0.0.1' + bindport: '5062' + - + name: 'local-ipv4-3' + bind: '127.0.0.1' + bindport: '5063' + accounts: + - + name: 'alice' + username: 'alice' + domain: '127.0.0.1' + transport: 'local-ipv4-1' + - + name: 'bob' + username: 'bob' + domain: '127.0.0.1' + transport: 'local-ipv4-2' + - + name: 'carol' + username: 'carol' + domain: '127.0.0.1' + transport: 'local-ipv4-3' + +pluggable-config: + # Upon kickoff channel entering Stasis app: create a bridge, don't add + # kickoff channel to bridge, instruct alice to place call to bob via the + # Dial() app. + - + ari-events: + match: + type: StasisStart + application: 'testsuite' + args: ['dummy'] + channel: + id: 'dummy;2' + count: 1 + pjsua_phone: + action: 'call' + pjsua_account: 'alice' + call_uri: 'sip:bob@127.0.0.1' + # Ensure alice's first channel and bob are bridged. Then instruct alice to + # place another call, this time into Stasis(testsuite). + - + ami-events: + conditions: + match: + Event: 'BridgeEnter' + Channel: 'PJSIP/(alice|bob)-.*' + BridgeNumChannels: '2' + count: 1 + pjsua_phone: + action: 'call' + pjsua_account: 'alice' + call_uri: 'sip:stasis@127.0.0.1' + + # Upon alice entering the Stasis app: create the stasis bridge + # 'test_bridge', add alice's second channel to the Stasis bridge, and + # originate a call to carol. + - + ari-events: + match: + type: StasisStart + application: 'testsuite' + args: ['test'] + channel: + name: 'PJSIP/alice-.*' + count: 1 + ari-requests: + - + method: 'post' + uri: 'bridges/test_bridge' + - + method: 'post' + uri: 'bridges/test_bridge/addChannel' + params: + channel: '{channel.id}' + - + method: 'post' + uri: 'channels/carol' + params: + endpoint: 'PJSIP/carol' + context: 'default' + extension: 'stasis' + priority: '1' + # Ensure alice's second channel enters the Stasis bridge. + - + ari-events: + match: + type: ChannelEnteredBridge + bridge: + id: 'test_bridge' + channel: + name: 'PJSIP/alice-.*' + application: 'testsuite' + count: 1 + # Ensure carol enters the Stasis app. Then add carol to the Stasis bridge + # with alice's second channel. + - + ari-events: + match: + type: StasisStart + application: 'testsuite' + args: ['test'] + channel: + name: 'PJSIP/carol-.*' + count: 1 + ari-requests: + method: 'post' + uri: 'bridges/test_bridge/addChannel' + params: + channel: '{channel.id}' + # Ensure carol enters the Stasis bridge. Then instruct alice to perform an + # attended transfer. This is to transfer the remote side of the first + # channel which is a non-Stasis bridge to the remote side of the second + # channel which is a Stasis bridge. Essentially bob will be in the + # non-Stasis bridge, carol will be in the Stasis bridge, and the halves of + # a local channel will be in each thus linking the non-Stasis bridge with + # the Stasis bridge. + - + ari-events: + match: + type: ChannelEnteredBridge + bridge: + id: 'test_bridge' + channel: + name: 'PJSIP/carol-.*' + application: 'testsuite' + count: 1 + pjsua_phone: + action: 'transfer' + pjsua_account: 'alice' + transfer_type: 'attended' + # Ensure the attended transfer occurs with the proper info. + - + ari-events: + match: + type: BridgeAttendedTransfer + application: 'testsuite' + transferer_first_leg: + name: 'PJSIP/alice-.*' + transferer_first_leg_bridge: + bridge_class: 'basic' + transferer_second_leg: + name: 'PJSIP/alice-.*' + transferer_second_leg_bridge: + id: 'test_bridge' + bridge_class: 'stasis' + transferee: + name: 'PJSIP/bob-.*' + transfer_target: + id: 'carol' + destination_type: 'link' + destination_link_first_leg: + name: 'Local/_attended@transfer-.*;1' + destination_link_second_leg: + name: 'Local/_attended@transfer-.*;2' + result: 'Success' + count: 1 + # Ensure alice's first channel leaves the non-Stasis bridge. + - + ami-events: + conditions: + match: + Event: 'BridgeLeave' + Channel: 'PJSIP/alice-.*' + nomatch: + BridgeUniqueid: 'test_bridge' + count: 1 + # Ensure alice's first channel is hung up. + - + ami-events: + conditions: + match: + Event: 'Hangup' + Channel: 'PJSIP/alice-.*' + ConnectedLineNum: 'bob' + count: 1 + # Ensure the local channel half for the transfer that is replacing alice's + # second channel enters the Stasis(testsuite) application. + - + ari-events: + match: + type: StasisStart + application: 'testsuite' + args: [] + channel: + name: 'Local/_attended@transfer-.*;2' + replace_channel: + name: 'PJSIP/alice-.*' + count: 1 + # Ensure alice's second channel leaves the Stasis bridge. + - + ari-events: + match: + type: ChannelLeftBridge + application: 'testsuite' + bridge: + id: 'test_bridge' + channel: + name: 'PJSIP/alice-.*' + count: 1 + # Ensure the local channel half for the transfer enters the Stasis bridge. + - + ari-events: + match: + type: ChannelEnteredBridge + application: 'testsuite' + bridge: + id: 'test_bridge' + channel: + name: 'Local/_attended@transfer-.*;2' + count: 1 + # Ensure alice's second channel exits the Stasis app. Then hang up bob. + - + ari-events: + match: + type: StasisEnd + application: 'testsuite' + channel: + name: 'PJSIP/alice-.*' + count: 1 + ami-actions: + action: + action: 'Hangup' + channel: '/^PJSIP/bob-.*$/' + # Upon hanging up bob, ensure bob leaves the non-Stasis bridge and is hung + # up. + - + ami-events: + conditions: + match: + Event: 'BridgeLeave' + Channel: 'PJSIP/bob-.*' + nomatch: + BridgeUniqueid: 'test_bridge' + count: 1 + - + ami-events: + conditions: + match: + Event: 'Hangup' + Channel: 'PJSIP/bob-.*' + count: 1 + # Ensure the local channel half that was bridged with bob in the non-Stasis + # bridge leaves the bridge and is hung up. + - + ami-events: + conditions: + match: + Event: 'BridgeLeave' + Channel: 'Local/_attended-.*;1' + nomatch: + BridgeUniqueid: 'test_bridge' + count: 1 + - + ami-events: + conditions: + match: + Event: 'Hangup' + Channel: 'Local/_attended-.*;1' + count: 1 + # Ensure the local channel half in Stasis bridge with carol leaves the + # bridge. + - + ari-events: + match: + type: ChannelLeftBridge + application: 'testsuite' + bridge: + id: 'test_bridge' + channel: + name: 'Local/_attended-.*;2' + count: 1 + # Ensure the local channel half in Stasis bridge with carol exits the + # Stasis app. Then hang up carol. + - + ari-events: + match: + type: StasisEnd + application: 'testsuite' + channel: + name: 'Local/_attended-.*;2' + count: 1 + ari-requests: + method: 'delete' + uri: 'channels/carol' + # Ensure carol leaves the Stasis bridge. + - + ari-events: + match: + type: ChannelLeftBridge + application: 'testsuite' + bridge: + id: 'test_bridge' + channel: + name: 'PJSIP/carol-.*' + count: 1 + # Ensure carol exits the Stasis app. Then hang up the kickoff local channel + # halves and destroy the Stasis bridge. + - + ari-events: + match: + type: StasisEnd + application: 'testsuite' + channel: + name: 'PJSIP/carol-.*' + count: 1 + ami-actions: + action: + action: 'Hangup' + channel: '/^Local/dummy@default-.*;2$/' + ari-requests: + method: 'delete' + uri: 'bridges/test_bridge' + +properties: + minversion: '13.1.0' + dependencies: + - python : autobahn.websocket + - python : requests + - python : twisted + - python : starpy + - python : pjsua + - asterisk : app_stasis + - asterisk : app_echo + - asterisk : app_dial + - asterisk : res_ari_channels + - asterisk : res_ari_bridges + - asterisk : res_pjsip + tags: + - ARI + - pjsip + # Expect test to fail until ASTERISK-24782 is resolved. + expected-result: False + Propchange: asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_bridge_to_stasis_bridge/test-config.yaml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_bridge_to_stasis_bridge/test-config.yaml ------------------------------------------------------------------------------ svn:keywords = Author Date Id Revision Propchange: asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/non_stasis_bridge_to_stasis_bridge/test-config.yaml ------------------------------------------------------------------------------ svn:mime-type = text/plain Modified: asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/tests.yaml URL: http://svnview.digium.com/svn/testsuite/asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/tests.yaml?view=diff&rev=6407&r1=6406&r2=6407 ============================================================================== --- asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/tests.yaml (original) +++ asterisk/trunk/tests/rest_api/external_interaction/attended_transfer/tests.yaml Fri Feb 13 12:54:13 2015 @@ -1,4 +1,6 @@ tests: - test: 'stasis_bridge_to_non_stasis_app' - test: 'stasis_bridge_to_stasis_app' + - test: 'non_stasis_app_to_stasis_bridge' + - test: 'non_stasis_bridge_to_stasis_bridge' -- _____________________________________________________________________ -- Bandwidth and Colocation Provided by http://www.api-digital.com -- svn-commits mailing list To UNSUBSCRIBE or update options visit: http://lists.digium.com/mailman/listinfo/svn-commits