diff --git a/tests/rest_api/external_interaction/attended_transfer/stasis_bridge_to_stasis_app_ari_only/configs/ast1/extensions.conf b/tests/rest_api/external_interaction/attended_transfer/stasis_bridge_to_stasis_app_ari_only/configs/ast1/extensions.conf
new file mode 100644
index 000000000..46904d6e6
--- /dev/null
+++ b/tests/rest_api/external_interaction/attended_transfer/stasis_bridge_to_stasis_app_ari_only/configs/ast1/extensions.conf
@@ -0,0 +1,14 @@
+[default]
+
+exten => s,1,NoOp()
+ same => n,Answer()
+ same => n,Stasis(testsuite)
+ same => n,Hangup()
+
+exten => 1000,1,Answer
+ same => n,Stasis(testsuite,no_bridge)
+ same => n,Hangup
+
+exten => stasis,1,NoOp()
+ same => n,Answer()
+ same => n,Stasis(testsuite,test)
diff --git a/tests/rest_api/external_interaction/attended_transfer/stasis_bridge_to_stasis_app_ari_only/configs/ast1/pjsip.conf b/tests/rest_api/external_interaction/attended_transfer/stasis_bridge_to_stasis_app_ari_only/configs/ast1/pjsip.conf
new file mode 100644
index 000000000..3b49ddb7c
--- /dev/null
+++ b/tests/rest_api/external_interaction/attended_transfer/stasis_bridge_to_stasis_app_ari_only/configs/ast1/pjsip.conf
@@ -0,0 +1,12 @@
+[local]
+type=transport
+protocol=udp
+bind=127.0.0.1:5060
+
+[bob]
+type=endpoint
+context=default
+disallow=all
+allow=ulaw
+direct_media=no
+set_var=PJSIP_TRANSFER_HANDLING=ari-only
\ No newline at end of file
diff --git a/tests/rest_api/external_interaction/attended_transfer/stasis_bridge_to_stasis_app_ari_only/sipp/referee.xml b/tests/rest_api/external_interaction/attended_transfer/stasis_bridge_to_stasis_app_ari_only/sipp/referee.xml
new file mode 100644
index 000000000..1b9ed417e
--- /dev/null
+++ b/tests/rest_api/external_interaction/attended_transfer/stasis_bridge_to_stasis_app_ari_only/sipp/referee.xml
@@ -0,0 +1,126 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ;tag=[call_number]
+ To:
+ Call-ID: [call_id]
+ CSeq: [cseq] INVITE
+ Contact:
+ Max-Forwards: 70
+ Content-Type: application/sdp
+ Content-Length: [len]
+
+ v=0
+ o=- 1324901698 1324901698 IN IP[local_ip_type] [local_ip]
+ s=-
+ c=IN IP[media_ip_type] [media_ip]
+ t=0 0
+ m=audio [media_port] RTP/AVP 0 101
+ a=sendrecv
+ a=rtpmap:0 PCMU/8000
+ a=rtpmap:101 telephone-event/8000
+
+ ]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Content-Length:0
+
+ ]]>
+
+
+
+
+
+
+
+
+
diff --git a/tests/rest_api/external_interaction/attended_transfer/stasis_bridge_to_stasis_app_ari_only/sipp/referer.xml b/tests/rest_api/external_interaction/attended_transfer/stasis_bridge_to_stasis_app_ari_only/sipp/referer.xml
new file mode 100644
index 000000000..f9c890dd6
--- /dev/null
+++ b/tests/rest_api/external_interaction/attended_transfer/stasis_bridge_to_stasis_app_ari_only/sipp/referer.xml
@@ -0,0 +1,178 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ ;tag=[call_number]
+ To:
+ Call-ID: [call_id]
+ CSeq: [cseq] INVITE
+ Contact:
+ Content-Type: application/sdp
+ Max-Forwards: 70
+ Content-Length: [len]
+
+ v=0
+ o=- 1324901698 1324901698 IN IP[local_ip_type] [local_ip]
+ s=-
+ c=IN IP[media_ip_type] [media_ip]
+ t=0 0
+ m=audio [media_port] RTP/AVP 0 101
+ a=sendrecv
+ a=rtpmap:0 PCMU/8000
+ a=rtpmap:101 telephone-event/8000
+
+ ]]>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Max-Forwards: 70
+ Refer-to: <[$remote_contact]?Replaces=REMOTE[$callid_chunk_1]%40[$callid_chunk_2]%3Bto-tag%3D[$remote_to_tag]%3Bfrom-tag%3D[$remote_from_tag]>
+ Referred-By: sip:bob@[local_ip]
+ Content-Length: 0
+
+ ]]>
+
+
+
+
+
+
+ Content-Length:0
+
+ ]]>
+
+
+
+
+
+ Content-Length:0
+
+ ]]>
+
+
+
+ ;tag=[call_number]
+ To: [peer_tag_param]
+ [last_Call-ID:]
+ CSeq: [cseq] BYE
+ Contact: sip:bob@[local_ip]:[local_port]
+ Max-Forwards: 70
+ Subject: Performance Test
+ Content-Length: 0
+
+ ]]>
+
+
+
+
+
+
+
+
+
+
diff --git a/tests/rest_api/external_interaction/attended_transfer/stasis_bridge_to_stasis_app_ari_only/test-config.yaml b/tests/rest_api/external_interaction/attended_transfer/stasis_bridge_to_stasis_app_ari_only/test-config.yaml
new file mode 100644
index 000000000..2078c30b4
--- /dev/null
+++ b/tests/rest_api/external_interaction/attended_transfer/stasis_bridge_to_stasis_app_ari_only/test-config.yaml
@@ -0,0 +1,169 @@
+testinfo:
+ summary: |
+ "Verifies that appropriate ChannelTransfer, StasisStart,
+ and StasisEnd events are delivered when an ari-only transfer
+ occurs between a Stasis App and a Stasis Bridge."
+ description: |
+ "This test originates one call into Stasis():
+
+ Originated Channel -> Stasis(testsuite)
+
+ It then starts two SIPp scenarios that call into the dialplan:
+
+ SIPp #1 (referer.xml) -> Stasis(testsuite)
+ SIPp #2 (referee.xml) -> Stasis(testsuite,no_bridge)
+
+ The two SIPp scenarios work together via 3PCC mode to pass
+ SIPp #2's call information back to SIPp #1 once both calls are up:
+
+ SIPp #2 --3PCC(call information)-> SIPp #1
+
+ The test bridges the two channels in Stasis(testsuite):
+
+ Originated Channel -> Stasis(testsuite) -> Bridge -> Stasis(testsuite) -> SIPp #1
+
+ SIPp #1 then performs an attended transfer using a REFER with
+ SIPp #2's call information which results in a ChannelTransferEvent with
+ the right information.
+
+ Now that we have received the ChannelTransfer event we can delete the
+ channels and the test eneds."
+
+test-modules:
+ test-object:
+ typename: ari.AriTestObject
+ modules:
+ -
+ config-section: pluggable-config
+ typename: 'pluggable_modules.EventActionModule'
+
+pluggable-config:
+ -
+ ari-events:
+ match:
+ type: StasisStart
+ application: testsuite
+ args: []
+ channel:
+ name: 'Local/s@default-.*'
+ count: 1
+ ari-requests:
+ -
+ method: 'post'
+ uri: 'bridges/test_bridge'
+ -
+ method: 'post'
+ uri: 'bridges/test_bridge/addChannel'
+ params:
+ channel: '{channel.id}'
+ callback:
+ module: extension_bank
+ method: default_attended_transfer
+ -
+ ari-events:
+ match:
+ type: StasisStart
+ application: testsuite
+ args: ['test']
+ count: 1
+ ari-requests:
+ method: 'post'
+ uri: 'bridges/test_bridge/addChannel'
+ params:
+ channel: '{channel.id}'
+ -
+ ari-events:
+ match:
+ type: StasisStart
+ application: testsuite
+ args: ['no_bridge']
+ count: 1
+ -
+ ari-events:
+ match:
+ type: ChannelTransfer
+ refer_to:
+ destination_channel:
+ name: 'PJSIP/bob-.*'
+ dialplan:
+ app_data: 'testsuite,no_bridge'
+ app_name: 'Stasis'
+ context: 'default'
+ exten: '1000'
+ requested_destination:
+ destination: '1000'
+ protocol_id: 'REMOTE1-.*'
+ additional_protocol_params:
+ - parameter_name: 'from'
+ parameter_value: '1'
+ - parameter_name: 'to'
+ parameter_value: '.*'
+ referred_by:
+ bridge:
+ id: 'test_bridge'
+ connected_channel:
+ name: 'Local/s.*'
+ source_channel:
+ name: 'PJSIP/bob-.*'
+ dialplan:
+ app_data: 'testsuite,test'
+ nomatch:
+ state: 'channel.*'
+ count: 1
+ ari-requests:
+ -
+ method: 'post'
+ uri: 'channels/{referred_by.source_channel.id}/transfer_progress'
+ params:
+ states: 'channel_progress'
+ -
+ ari-events:
+ match:
+ type: ChannelTransfer
+ refer_to:
+ requested_destination:
+ destination: '1000'
+ state: 'channel_progress'
+ count: 1
+ ari-requests:
+ -
+ method: 'post'
+ uri: 'channels/{referred_by.source_channel.id}/transfer_progress'
+ params:
+ states: 'channel_answered'
+ -
+ ari-events:
+ match:
+ type: ChannelTransfer
+ refer_to:
+ requested_destination:
+ destination: '1000'
+ state: 'channel_answered'
+ count: 1
+ ari-requests:
+ -
+ method: 'delete'
+ uri: 'channels/{referred_by.source_channel.id}'
+ -
+ method: 'delete'
+ uri: 'channels/{referred_by.connected_channel.id}'
+ -
+ method: 'delete'
+ uri: 'channels/{refer_to.destination_channel.id}'
+ -
+ method: 'delete'
+ uri: 'bridges/test_bridge'
+
+properties:
+ dependencies:
+ - python : autobahn.websocket
+ - python : requests
+ - python : twisted
+ - python : starpy
+ - asterisk : res_ari_channels
+ - asterisk : res_ari_bridges
+ - asterisk : chan_pjsip
+ tags:
+ - ARI
+ - pjsip
+ - refleaks
diff --git a/tests/rest_api/external_interaction/attended_transfer/tests.yaml b/tests/rest_api/external_interaction/attended_transfer/tests.yaml
index ea976609b..4feaadc7e 100644
--- a/tests/rest_api/external_interaction/attended_transfer/tests.yaml
+++ b/tests/rest_api/external_interaction/attended_transfer/tests.yaml
@@ -1,7 +1,7 @@
tests:
- test: 'stasis_bridge_to_non_stasis_app'
- test: 'stasis_bridge_to_stasis_app'
+ - test: 'stasis_bridge_to_stasis_app_ari_only'
- test: 'non_stasis_app_to_stasis_bridge'
- test: 'non_stasis_bridge_to_stasis_bridge'
- dir: 'stasis_bridge_to_stasis_bridge'
-