[Asterisk-code-review] pjsip: Add tests for multiple streams. (testsuite[master])

Joshua Colp asteriskteam at digium.com
Tue Jun 27 09:34:13 CDT 2017


Joshua Colp has uploaded this change for review. ( https://gerrit.asterisk.org/5912


Change subject: pjsip: Add tests for multiple streams.
......................................................................

pjsip: Add tests for multiple streams.

This change adds SDP offer/answer tests for the acceptance
of multiple media stream when configured to allow it, and
for the addition/removal of media streams while a session
is in progress.

ASTERISK-27076

Change-Id: I54201ee955c88dc00fea7fae14b4ac3e431c3b4e
---
R tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video-app/decline/configs/ast1/extensions.conf
R tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video-app/decline/configs/ast1/pjsip.conf
R tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video-app/decline/sipp/uac-audio-video-app-initial-decline.xml
R tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video-app/decline/sipp/uac-audio-video-app.xml
R tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video-app/decline/test-config.yaml
A tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video-app/tests.yaml
R tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/accept/multiple-audio/configs/ast1/extensions.conf
A tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/accept/multiple-audio/configs/ast1/pjsip.conf
A tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/accept/multiple-audio/sipp/uac-multiple-audio-with-video.xml
A tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/accept/multiple-audio/test-config.yaml
R tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/accept/multiple-video/configs/ast1/extensions.conf
A tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/accept/multiple-video/configs/ast1/pjsip.conf
A tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/accept/multiple-video/sipp/uac-multiple-video-with-audio.xml
A tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/accept/multiple-video/test-config.yaml
A tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/accept/tests.yaml
R tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/basic/configs/ast1/extensions.conf
R tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/basic/configs/ast1/pjsip.conf
R tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/basic/sipp/uac-all-codecs.xml
R tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/basic/sipp/uac-basic-codecs-delayed.xml
R tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/basic/sipp/uac-basic-codecs-no-rtpmap.xml
R tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/basic/sipp/uac-basic-codecs-odd-rtpmap.xml
R tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/basic/sipp/uac-basic-codecs-with-attributes.xml
R tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/basic/sipp/uac-basic-codecs.xml
R tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/basic/test-config.yaml
C tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/multiple-audio/configs/ast1/extensions.conf
R tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/multiple-audio/configs/ast1/pjsip.conf
R tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/multiple-audio/sipp/uac-multiple-audio-initial-declined.xml
R tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/multiple-audio/sipp/uac-multiple-audio-with-video.xml
R tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/multiple-audio/test-config.yaml
C tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/multiple-video/configs/ast1/extensions.conf
R tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/multiple-video/configs/ast1/pjsip.conf
R tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/multiple-video/sipp/uac-multiple-video-initial-declined.xml
R tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/multiple-video/sipp/uac-multiple-video-with-audio.xml
R tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/multiple-video/test-config.yaml
A tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/tests.yaml
M tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/tests.yaml
R tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/accept/configs/ast1/extensions.conf
A tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/accept/configs/ast1/pjsip.conf
A tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/accept/sipp/uac-multiple-audio.xml
A tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/accept/test-config.yaml
A tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/add/configs/ast1/extensions.conf
A tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/add/configs/ast1/pjsip.conf
A tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/add/sipp/uac-multiple-audio.xml
A tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/add/test-config.yaml
C tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/decline/configs/ast1/extensions.conf
R tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/decline/configs/ast1/pjsip.conf
R tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/decline/sipp/uac-multiple-audio-initial-declined.xml
R tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/decline/sipp/uac-multiple-audio.xml
R tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/decline/test-config.yaml
A tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/remove/configs/ast1/extensions.conf
A tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/remove/configs/ast1/pjsip.conf
A tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/remove/sipp/uac-multiple-audio.xml
A tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/remove/test-config.yaml
A tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/tests.yaml
M tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/tests.yaml
R tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/accept/configs/ast1/extensions.conf
A tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/accept/configs/ast1/pjsip.conf
A tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/accept/sipp/uac-multiple-video.xml
A tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/accept/test-config.yaml
A tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/add/configs/ast1/extensions.conf
A tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/add/configs/ast1/pjsip.conf
A tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/add/sipp/uac-multiple-video.xml
A tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/add/test-config.yaml
C tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/decline/configs/ast1/extensions.conf
R tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/decline/configs/ast1/pjsip.conf
R tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/decline/sipp/uac-multiple-video-initial-declined.xml
R tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/decline/sipp/uac-multiple-video.xml
R tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/decline/test-config.yaml
A tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/remove/configs/ast1/extensions.conf
A tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/remove/configs/ast1/pjsip.conf
A tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/remove/sipp/uac-multiple-video.xml
A tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/remove/test-config.yaml
A tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/tests.yaml
73 files changed, 1,433 insertions(+), 7 deletions(-)



  git pull ssh://gerrit.asterisk.org:29418/testsuite refs/changes/12/5912/1

diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video-app/configs/ast1/extensions.conf b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video-app/decline/configs/ast1/extensions.conf
similarity index 100%
rename from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video-app/configs/ast1/extensions.conf
rename to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video-app/decline/configs/ast1/extensions.conf
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video-app/configs/ast1/pjsip.conf b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video-app/decline/configs/ast1/pjsip.conf
similarity index 100%
rename from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video-app/configs/ast1/pjsip.conf
rename to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video-app/decline/configs/ast1/pjsip.conf
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video-app/sipp/uac-audio-video-app-initial-decline.xml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video-app/decline/sipp/uac-audio-video-app-initial-decline.xml
similarity index 100%
rename from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video-app/sipp/uac-audio-video-app-initial-decline.xml
rename to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video-app/decline/sipp/uac-audio-video-app-initial-decline.xml
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video-app/sipp/uac-audio-video-app.xml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video-app/decline/sipp/uac-audio-video-app.xml
similarity index 100%
rename from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video-app/sipp/uac-audio-video-app.xml
rename to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video-app/decline/sipp/uac-audio-video-app.xml
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video-app/test-config.yaml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video-app/decline/test-config.yaml
similarity index 100%
rename from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video-app/test-config.yaml
rename to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video-app/decline/test-config.yaml
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video-app/tests.yaml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video-app/tests.yaml
new file mode 100644
index 0000000..9d63b36
--- /dev/null
+++ b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video-app/tests.yaml
@@ -0,0 +1,3 @@
+# Enter tests here in the order they should be considered for execution:
+tests:
+    - test: 'decline'
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/multiple-audio/configs/ast1/extensions.conf b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/accept/multiple-audio/configs/ast1/extensions.conf
similarity index 100%
rename from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/multiple-audio/configs/ast1/extensions.conf
rename to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/accept/multiple-audio/configs/ast1/extensions.conf
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/accept/multiple-audio/configs/ast1/pjsip.conf b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/accept/multiple-audio/configs/ast1/pjsip.conf
new file mode 100644
index 0000000..e91d1ee
--- /dev/null
+++ b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/accept/multiple-audio/configs/ast1/pjsip.conf
@@ -0,0 +1,13 @@
+[local-transport-udp]
+type=transport
+bind=127.0.0.1
+protocol=udp
+
+[endpoint-template](!)
+type=endpoint
+context=default
+media_address=127.0.0.1
+max_audio_streams=10
+
+[alice](endpoint-template)
+allow=!all,g722,ulaw,alaw,h264,h263
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/accept/multiple-audio/sipp/uac-multiple-audio-with-video.xml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/accept/multiple-audio/sipp/uac-multiple-audio-with-video.xml
new file mode 100644
index 0000000..838a4e4
--- /dev/null
+++ b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/accept/multiple-audio/sipp/uac-multiple-audio-with-video.xml
@@ -0,0 +1,116 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+<scenario name="Basic Sipstone UAC">
+  <send retrans="500">
+    <![CDATA[
+
+      INVITE sip:answer@[remote_ip]:[remote_port] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
+      From: alice <sip:[service]@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]
+      To: sut <sip:test@[remote_ip]:[remote_port]>
+      Call-ID: [call_id]
+      CSeq: 1 INVITE
+      Contact: sip:test@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Codec test
+      Content-Type: application/sdp
+      Content-Length: [len]
+
+      v=0
+      o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip]
+      s=-
+      c=IN IP[media_ip_type] [media_ip]
+      t=0 0
+      m=audio 6000 RTP/AVP 9 0 8 101
+      c=IN IP[media_ip_type] [media_ip]
+      a=rtpmap:0 PCMU/8000
+      a=rtpmap:8 PCMA/8000
+      a=rtpmap:9 G722/8000
+      a=rtpmap:101 telephone-event/8000
+      a=fmtp:101 0-16
+      m=audio 6001 RTP/AVP 9
+      c=IN IP[media_ip_type] [media_ip]
+      a=rtpmap:9 G722/8000
+      m=audio 6002 RTP/AVP 9 0 8
+      a=rtpmap:0 PCMU/8000
+      a=rtpmap:8 PCMA/8000
+      a=rtpmap:9 G722/8000
+      m=video 6000 RTP/AVP 99 34
+      a=rtpmap:99 H264/90000
+      a=rtpmap:34 H263/90000
+      a=sendrecv
+
+    ]]>
+  </send>
+
+  <recv response="100" optional="true">
+  </recv>
+
+  <recv response="181" optional="true">
+  </recv>
+
+  <recv response="180" optional="true">
+  </recv>
+
+  <recv response="183" optional="true">
+  </recv>
+
+  <recv response="200" rtd="true">
+    <action>
+      <ereg regexp="m=audio [0-9]{1,5} RTP/AVP 9 0 8 101+..*"
+            search_in="body" check_it="true" assign_to="1"/>
+      <test assign_to="1" variable="1" compare="equal" value=""/>
+      <ereg regexp="m=audio [0-9]{1,5} RTP/AVP 9+..*"
+            search_in="body" check_it="true" assign_to="2"/>
+      <test assign_to="2" variable="2" compare="equal" value=""/>
+      <ereg regexp="m=audio [0-9]{1,5} RTP/AVP 9 0 8+..*"
+            search_in="body" check_it="true" assign_to="3"/>
+      <test assign_to="3" variable="3" compare="equal" value=""/>
+      <ereg regexp="m=video [0-9]{1,5} RTP/AVP 99 34+..*"
+            search_in="body" check_it="true" assign_to="4"/>
+      <test assign_to="4" variable="4" compare="equal" value=""/>
+    </action>
+  </recv>
+
+  <send>
+    <![CDATA[
+
+      ACK sip:answer@[remote_ip]:[remote_port] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
+      From: alice <sip:[service]@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]
+      To: sut <sip:test@[remote_ip]:[remote_port]>[peer_tag_param]
+      Call-ID: [call_id]
+      CSeq: 1 ACK
+      Contact: sip:alice-codec-match@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Performance Test
+      Content-Length: 0
+
+    ]]>
+  </send>
+
+  <recv request="BYE">
+  </recv>
+
+  <send>
+    <![CDATA[
+
+      SIP/2.0 200 OK
+      [last_Via:]
+      [last_From:]
+      [last_To:]
+      [last_Call-ID:]
+      [last_CSeq:]
+      Contact: <sip:[local_ip]:[local_port];transport=[transport]>
+      Content-Length: 0
+
+    ]]>
+  </send>
+
+  <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>
+
+  <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>
+
+</scenario>
+
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/accept/multiple-audio/test-config.yaml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/accept/multiple-audio/test-config.yaml
new file mode 100644
index 0000000..cb51942
--- /dev/null
+++ b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/accept/multiple-audio/test-config.yaml
@@ -0,0 +1,27 @@
+testinfo:
+    summary:     'Test offers with multiple audio streams/one video stream'
+    description: |
+        This tests inbound offers that contain multiple audio
+        media streams and a single video stream. Asterisk should
+        accept all the streams.
+
+test-modules:
+    test-object:
+        config-section: test-object-config
+        typename: 'sipp.SIPpTestCase'
+
+test-object-config:
+    fail-on-any: False
+    test-iterations:
+        -
+            scenarios:
+                - { 'key-args': {'scenario': 'uac-multiple-audio-with-video.xml', '-i': '127.0.0.1', '-p': '5061', '-s': 'alice'} }
+
+properties:
+    minversion: '15.0.0'
+    dependencies:
+        - sipp :
+            version : 'v3.0'
+        - asterisk : 'res_pjsip'
+    tags:
+        - pjsip
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/multiple-video/configs/ast1/extensions.conf b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/accept/multiple-video/configs/ast1/extensions.conf
similarity index 100%
rename from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/multiple-video/configs/ast1/extensions.conf
rename to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/accept/multiple-video/configs/ast1/extensions.conf
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/accept/multiple-video/configs/ast1/pjsip.conf b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/accept/multiple-video/configs/ast1/pjsip.conf
new file mode 100644
index 0000000..5141dbc
--- /dev/null
+++ b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/accept/multiple-video/configs/ast1/pjsip.conf
@@ -0,0 +1,13 @@
+[local-transport-udp]
+type=transport
+bind=127.0.0.1
+protocol=udp
+
+[endpoint-template](!)
+type=endpoint
+context=default
+media_address=127.0.0.1
+max_video_streams=10
+
+[alice](endpoint-template)
+allow=!all,g722,ulaw,alaw,h264,h263
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/accept/multiple-video/sipp/uac-multiple-video-with-audio.xml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/accept/multiple-video/sipp/uac-multiple-video-with-audio.xml
new file mode 100644
index 0000000..3433cce
--- /dev/null
+++ b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/accept/multiple-video/sipp/uac-multiple-video-with-audio.xml
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+<scenario name="Basic Sipstone UAC">
+  <send retrans="500">
+    <![CDATA[
+
+      INVITE sip:answer@[remote_ip]:[remote_port] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
+      From: alice <sip:[service]@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]
+      To: sut <sip:test@[remote_ip]:[remote_port]>
+      Call-ID: [call_id]
+      CSeq: 1 INVITE
+      Contact: sip:test@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Codec Test
+      Content-Type: application/sdp
+      Content-Length: [len]
+
+      v=0
+      o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip]
+      s=-
+      c=IN IP[media_ip_type] [media_ip]
+      t=0 0
+      m=audio 6000 RTP/AVP 9 0 8 101
+      a=rtpmap:9 G722/8000
+      a=rtpmap:0 PCMU/8000
+      a=rtpmap:8 PCMA/8000
+      a=rtpmap:101 telephone-event/8000
+      a=fmtp:101 0-16
+      a=ptime:20
+      a=maxptime:20
+      a=sendrecv
+      m=video 6001 RTP/AVP 99 34
+      a=rtpmap:99 H264/90000
+      a=rtpmap:34 H263/90000
+      a=sendrecv
+      m=video 6002 RTP/AVP 99
+      c=IN IP[media_ip_type] [media_ip]
+      a=rtpmap:99 H264/90000
+      a=sendrecv
+      m=video 6003 RTP/AVP 34
+      a=rtpmap:34 H263/90000
+      a=sendrecv
+
+    ]]>
+  </send>
+
+  <recv response="100" optional="true">
+  </recv>
+
+  <recv response="181" optional="true">
+  </recv>
+
+  <recv response="180" optional="true">
+  </recv>
+
+  <recv response="183" optional="true">
+  </recv>
+
+  <recv response="200" rtd="true">
+    <action>
+      <ereg regexp="m=audio [0-9]{1,5} RTP/AVP 9 0 8 101+..*"
+            search_in="body" check_it="true" assign_to="1"/>
+      <test assign_to="1" variable="1" compare="equal" value=""/>
+      <ereg regexp="m=video [0-9]{1,5} RTP/AVP 99 34+..*"
+            search_in="body" check_it="true" assign_to="2"/>
+      <test assign_to="2" variable="2" compare="equal" value=""/>
+      <ereg regexp="m=video [0-9]{1,5} RTP/AVP 99+..*"
+            search_in="body" check_it="true" assign_to="3"/>
+      <test assign_to="3" variable="3" compare="equal" value=""/>
+      <ereg regexp="m=video [0-9]{1,5} RTP/AVP 34+..*"
+            search_in="body" check_it="true" assign_to="4"/>
+      <test assign_to="4" variable="4" compare="equal" value=""/>
+    </action>
+  </recv>
+
+  <send>
+    <![CDATA[
+
+      ACK sip:answer@[remote_ip]:[remote_port] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
+      From: alice <sip:[service]@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]
+      To: sut <sip:test@[remote_ip]:[remote_port]>[peer_tag_param]
+      Call-ID: [call_id]
+      CSeq: 1 ACK
+      Contact: sip:alice@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Codec Test
+      Content-Length: 0
+
+    ]]>
+  </send>
+
+  <recv request="BYE">
+  </recv>
+
+  <send>
+    <![CDATA[
+
+      SIP/2.0 200 OK
+      [last_Via:]
+      [last_From:]
+      [last_To:]
+      [last_Call-ID:]
+      [last_CSeq:]
+      Contact: <sip:[local_ip]:[local_port];transport=[transport]>
+      Content-Length: 0
+
+    ]]>
+  </send>
+
+  <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>
+
+  <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>
+
+</scenario>
+
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/accept/multiple-video/test-config.yaml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/accept/multiple-video/test-config.yaml
new file mode 100644
index 0000000..3e59590
--- /dev/null
+++ b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/accept/multiple-video/test-config.yaml
@@ -0,0 +1,27 @@
+testinfo:
+    summary:     'Test offers with multiple video streams/one audio stream'
+    description: |
+        This tests inbound offers that contain multiple video
+        media streams and a single audio stream. Asterisk should
+        accept all the streams.
+
+test-modules:
+    test-object:
+        config-section: test-object-config
+        typename: 'sipp.SIPpTestCase'
+
+test-object-config:
+    fail-on-any: False
+    test-iterations:
+        -
+            scenarios:
+                - { 'key-args': {'scenario': 'uac-multiple-video-with-audio.xml', '-i': '127.0.0.1', '-p': '5061', '-s': 'alice'} }
+
+properties:
+    minversion: '15.0.0'
+    dependencies:
+        - sipp :
+            version : 'v3.0'
+        - asterisk : 'res_pjsip'
+    tags:
+        - pjsip
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/accept/tests.yaml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/accept/tests.yaml
new file mode 100644
index 0000000..a2bb275
--- /dev/null
+++ b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/accept/tests.yaml
@@ -0,0 +1,5 @@
+# Enter tests here in the order they should be considered for execution:
+tests:
+    - test: 'multiple-audio'
+    - test: 'multiple-video'
+
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/basic/configs/ast1/extensions.conf b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/basic/configs/ast1/extensions.conf
similarity index 100%
rename from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/basic/configs/ast1/extensions.conf
rename to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/basic/configs/ast1/extensions.conf
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/basic/configs/ast1/pjsip.conf b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/basic/configs/ast1/pjsip.conf
similarity index 100%
rename from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/basic/configs/ast1/pjsip.conf
rename to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/basic/configs/ast1/pjsip.conf
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/basic/sipp/uac-all-codecs.xml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/basic/sipp/uac-all-codecs.xml
similarity index 100%
rename from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/basic/sipp/uac-all-codecs.xml
rename to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/basic/sipp/uac-all-codecs.xml
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/basic/sipp/uac-basic-codecs-delayed.xml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/basic/sipp/uac-basic-codecs-delayed.xml
similarity index 100%
rename from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/basic/sipp/uac-basic-codecs-delayed.xml
rename to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/basic/sipp/uac-basic-codecs-delayed.xml
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/basic/sipp/uac-basic-codecs-no-rtpmap.xml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/basic/sipp/uac-basic-codecs-no-rtpmap.xml
similarity index 100%
rename from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/basic/sipp/uac-basic-codecs-no-rtpmap.xml
rename to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/basic/sipp/uac-basic-codecs-no-rtpmap.xml
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/basic/sipp/uac-basic-codecs-odd-rtpmap.xml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/basic/sipp/uac-basic-codecs-odd-rtpmap.xml
similarity index 100%
rename from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/basic/sipp/uac-basic-codecs-odd-rtpmap.xml
rename to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/basic/sipp/uac-basic-codecs-odd-rtpmap.xml
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/basic/sipp/uac-basic-codecs-with-attributes.xml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/basic/sipp/uac-basic-codecs-with-attributes.xml
similarity index 100%
rename from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/basic/sipp/uac-basic-codecs-with-attributes.xml
rename to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/basic/sipp/uac-basic-codecs-with-attributes.xml
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/basic/sipp/uac-basic-codecs.xml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/basic/sipp/uac-basic-codecs.xml
similarity index 100%
rename from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/basic/sipp/uac-basic-codecs.xml
rename to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/basic/sipp/uac-basic-codecs.xml
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/basic/test-config.yaml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/basic/test-config.yaml
similarity index 100%
rename from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/basic/test-config.yaml
rename to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/basic/test-config.yaml
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/multiple-audio/configs/ast1/extensions.conf b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/multiple-audio/configs/ast1/extensions.conf
similarity index 100%
copy from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/multiple-audio/configs/ast1/extensions.conf
copy to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/multiple-audio/configs/ast1/extensions.conf
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/multiple-audio/configs/ast1/pjsip.conf b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/multiple-audio/configs/ast1/pjsip.conf
similarity index 100%
rename from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/multiple-audio/configs/ast1/pjsip.conf
rename to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/multiple-audio/configs/ast1/pjsip.conf
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/multiple-audio/sipp/uac-multiple-audio-initial-declined.xml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/multiple-audio/sipp/uac-multiple-audio-initial-declined.xml
similarity index 100%
rename from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/multiple-audio/sipp/uac-multiple-audio-initial-declined.xml
rename to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/multiple-audio/sipp/uac-multiple-audio-initial-declined.xml
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/multiple-audio/sipp/uac-multiple-audio-with-video.xml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/multiple-audio/sipp/uac-multiple-audio-with-video.xml
similarity index 100%
rename from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/multiple-audio/sipp/uac-multiple-audio-with-video.xml
rename to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/multiple-audio/sipp/uac-multiple-audio-with-video.xml
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/multiple-audio/test-config.yaml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/multiple-audio/test-config.yaml
similarity index 100%
rename from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/multiple-audio/test-config.yaml
rename to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/multiple-audio/test-config.yaml
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/multiple-video/configs/ast1/extensions.conf b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/multiple-video/configs/ast1/extensions.conf
similarity index 100%
copy from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/multiple-video/configs/ast1/extensions.conf
copy to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/multiple-video/configs/ast1/extensions.conf
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/multiple-video/configs/ast1/pjsip.conf b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/multiple-video/configs/ast1/pjsip.conf
similarity index 100%
rename from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/multiple-video/configs/ast1/pjsip.conf
rename to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/multiple-video/configs/ast1/pjsip.conf
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/multiple-video/sipp/uac-multiple-video-initial-declined.xml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/multiple-video/sipp/uac-multiple-video-initial-declined.xml
similarity index 100%
rename from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/multiple-video/sipp/uac-multiple-video-initial-declined.xml
rename to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/multiple-video/sipp/uac-multiple-video-initial-declined.xml
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/multiple-video/sipp/uac-multiple-video-with-audio.xml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/multiple-video/sipp/uac-multiple-video-with-audio.xml
similarity index 100%
rename from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/multiple-video/sipp/uac-multiple-video-with-audio.xml
rename to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/multiple-video/sipp/uac-multiple-video-with-audio.xml
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/multiple-video/test-config.yaml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/multiple-video/test-config.yaml
similarity index 100%
rename from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/multiple-video/test-config.yaml
rename to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/multiple-video/test-config.yaml
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/tests.yaml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/tests.yaml
new file mode 100644
index 0000000..f345e96
--- /dev/null
+++ b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/decline/tests.yaml
@@ -0,0 +1,6 @@
+# Enter tests here in the order they should be considered for execution:
+tests:
+    - test: 'basic'
+    - test: 'multiple-audio'
+    - test: 'multiple-video'
+
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/tests.yaml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/tests.yaml
index f345e96..a59c1bf 100644
--- a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/tests.yaml
+++ b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio-video/tests.yaml
@@ -1,6 +1,4 @@
 # Enter tests here in the order they should be considered for execution:
 tests:
-    - test: 'basic'
-    - test: 'multiple-audio'
-    - test: 'multiple-video'
-
+    - dir: 'decline'
+    - dir: 'accept'
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/configs/ast1/extensions.conf b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/accept/configs/ast1/extensions.conf
similarity index 100%
rename from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/configs/ast1/extensions.conf
rename to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/accept/configs/ast1/extensions.conf
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/accept/configs/ast1/pjsip.conf b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/accept/configs/ast1/pjsip.conf
new file mode 100644
index 0000000..0dee3c8
--- /dev/null
+++ b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/accept/configs/ast1/pjsip.conf
@@ -0,0 +1,13 @@
+[local-transport-udp]
+type=transport
+bind=127.0.0.1
+protocol=udp
+
+[endpoint-template](!)
+type=endpoint
+context=default
+media_address=127.0.0.1
+max_audio_streams=20
+
+[alice](endpoint-template)
+allow=!all,g722,ulaw,alaw
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/accept/sipp/uac-multiple-audio.xml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/accept/sipp/uac-multiple-audio.xml
new file mode 100644
index 0000000..1703fab
--- /dev/null
+++ b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/accept/sipp/uac-multiple-audio.xml
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+<scenario name="Basic Sipstone UAC">
+  <send retrans="500">
+    <![CDATA[
+
+      INVITE sip:answer@[remote_ip]:[remote_port] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
+      From: alice <sip:[service]@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]
+      To: sut <sip:test@[remote_ip]:[remote_port]>
+      Call-ID: [call_id]
+      CSeq: 1 INVITE
+      Contact: sip:test@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Codec test
+      Content-Type: application/sdp
+      Content-Length: [len]
+
+      v=0
+      o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip]
+      s=-
+      c=IN IP[media_ip_type] [media_ip]
+      t=0 0
+      m=audio 6000 RTP/AVP 9 0 8 101
+      c=IN IP[media_ip_type] [media_ip]
+      a=rtpmap:0 PCMU/8000
+      a=rtpmap:8 PCMA/8000
+      a=rtpmap:9 G722/8000
+      a=rtpmap:101 telephone-event/8000
+      a=fmtp:101 0-16
+      m=audio 6001 RTP/AVP 9
+      c=IN IP[media_ip_type] [media_ip]
+      a=rtpmap:9 G722/8000
+      m=audio 6002 RTP/AVP 9 0 8
+      a=rtpmap:0 PCMU/8000
+      a=rtpmap:8 PCMA/8000
+      a=rtpmap:9 G722/8000
+
+    ]]>
+  </send>
+
+  <recv response="100" optional="true">
+  </recv>
+
+  <recv response="181" optional="true">
+  </recv>
+
+  <recv response="180" optional="true">
+  </recv>
+
+  <recv response="183" optional="true">
+  </recv>
+
+  <recv response="200" rtd="true">
+    <action>
+      <ereg regexp="m=audio [0-9]{1,5} RTP/AVP 9 0 8 101+..*"
+            search_in="body" check_it="true" assign_to="1"/>
+      <test assign_to="1" variable="1" compare="equal" value=""/>
+      <ereg regexp="m=audio [0-9]{1,5} RTP/AVP 9+..*"
+            search_in="body" check_it="true" assign_to="2"/>
+      <test assign_to="2" variable="2" compare="equal" value=""/>
+      <ereg regexp="m=audio [0-9]{1,5} RTP/AVP 9 0 8+..*"
+            search_in="body" check_it="true" assign_to="3"/>
+      <test assign_to="3" variable="3" compare="equal" value=""/>
+    </action>
+  </recv>
+
+  <send>
+    <![CDATA[
+
+      ACK sip:answer@[remote_ip]:[remote_port] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
+      From: alice <sip:[service]@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]
+      To: sut <sip:test@[remote_ip]:[remote_port]>[peer_tag_param]
+      Call-ID: [call_id]
+      CSeq: 1 ACK
+      Contact: sip:alice-codec-match@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Performance Test
+      Content-Length: 0
+
+    ]]>
+  </send>
+
+  <recv request="BYE">
+  </recv>
+
+  <send>
+    <![CDATA[
+
+      SIP/2.0 200 OK
+      [last_Via:]
+      [last_From:]
+      [last_To:]
+      [last_Call-ID:]
+      [last_CSeq:]
+      Contact: <sip:[local_ip]:[local_port];transport=[transport]>
+      Content-Length: 0
+
+    ]]>
+  </send>
+
+  <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>
+
+  <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>
+
+</scenario>
+
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/accept/test-config.yaml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/accept/test-config.yaml
new file mode 100644
index 0000000..c721580
--- /dev/null
+++ b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/accept/test-config.yaml
@@ -0,0 +1,27 @@
+testinfo:
+    summary:     'Test offers with multiple audio streams'
+    description: |
+        This tests inbound offers that contain multiple audio
+        media streams. Asterisk should accept all of the audio
+        streams.
+
+test-modules:
+    test-object:
+        config-section: test-object-config
+        typename: 'sipp.SIPpTestCase'
+
+test-object-config:
+    fail-on-any: False
+    test-iterations:
+        -
+            scenarios:
+                - { 'key-args': {'scenario': 'uac-multiple-audio.xml', '-i': '127.0.0.1', '-p': '5061', '-s': 'alice'} }
+
+properties:
+    minversion: '15.0.0'
+    dependencies:
+        - sipp :
+            version : 'v3.0'
+        - asterisk : 'res_pjsip'
+    tags:
+        - pjsip
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/add/configs/ast1/extensions.conf b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/add/configs/ast1/extensions.conf
new file mode 100644
index 0000000..84e6575
--- /dev/null
+++ b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/add/configs/ast1/extensions.conf
@@ -0,0 +1,6 @@
+[default]
+
+exten => answer,1,NoOp()
+ same => n,Answer()
+ same => n,StreamEcho(3,audio)
+ same => n,Hangup()
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/add/configs/ast1/pjsip.conf b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/add/configs/ast1/pjsip.conf
new file mode 100644
index 0000000..0dee3c8
--- /dev/null
+++ b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/add/configs/ast1/pjsip.conf
@@ -0,0 +1,13 @@
+[local-transport-udp]
+type=transport
+bind=127.0.0.1
+protocol=udp
+
+[endpoint-template](!)
+type=endpoint
+context=default
+media_address=127.0.0.1
+max_audio_streams=20
+
+[alice](endpoint-template)
+allow=!all,g722,ulaw,alaw
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/add/sipp/uac-multiple-audio.xml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/add/sipp/uac-multiple-audio.xml
new file mode 100644
index 0000000..2c89d1b
--- /dev/null
+++ b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/add/sipp/uac-multiple-audio.xml
@@ -0,0 +1,152 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+<scenario name="Basic Sipstone UAC">
+  <send retrans="500">
+    <![CDATA[
+
+      INVITE sip:answer@[remote_ip]:[remote_port] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
+      From: alice <sip:[service]@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]
+      To: sut <sip:test@[remote_ip]:[remote_port]>
+      Call-ID: [call_id]
+      CSeq: 1 INVITE
+      Contact: sip:test@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Codec test
+      Content-Type: application/sdp
+      Content-Length: [len]
+
+      v=0
+      o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip]
+      s=-
+      c=IN IP[media_ip_type] [media_ip]
+      t=0 0
+      m=audio 6000 RTP/AVP 9 0 8 101
+      c=IN IP[media_ip_type] [media_ip]
+      a=rtpmap:0 PCMU/8000
+      a=rtpmap:8 PCMA/8000
+      a=rtpmap:9 G722/8000
+      a=rtpmap:101 telephone-event/8000
+      a=fmtp:101 0-16
+
+    ]]>
+  </send>
+
+  <recv response="100" optional="true">
+  </recv>
+
+  <recv response="181" optional="true">
+  </recv>
+
+  <recv response="180" optional="true">
+  </recv>
+
+  <recv response="183" optional="true">
+  </recv>
+
+  <recv response="200" rtd="true">
+    <action>
+      <ereg regexp="m=audio [0-9]{1,5} RTP/AVP 9 0 8 101+..*"
+            search_in="body" check_it="true" assign_to="1"/>
+      <test assign_to="1" variable="1" compare="equal" value=""/>
+    </action>
+  </recv>
+
+  <send>
+    <![CDATA[
+
+      ACK sip:answer@[remote_ip]:[remote_port] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
+      From: alice <sip:[service]@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]
+      To: sut <sip:test@[remote_ip]:[remote_port]>[peer_tag_param]
+      Call-ID: [call_id]
+      CSeq: 1 ACK
+      Contact: sip:alice-codec-match@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Performance Test
+      Content-Length: 0
+
+    ]]>
+  </send>
+
+  <recv request="INVITE">
+    <action>
+      <ereg regexp="m=audio [0-9]{1,5} RTP/AVP 9 0 8 101+..*"
+            search_in="body" check_it="true" assign_to="1"/>
+      <test assign_to="1" variable="1" compare="equal" value=""/>
+      <ereg regexp="m=audio [0-9]{1,5} RTP/AVP 9 0 8+..*"
+            search_in="body" check_it="true" assign_to="2"/>
+      <test assign_to="2" variable="2" compare="equal" value=""/>
+      <ereg regexp="m=audio [0-9]{1,5} RTP/AVP 9 0 8+..*"
+            search_in="body" check_it="true" assign_to="3"/>
+      <test assign_to="3" variable="3" compare="equal" value=""/>
+    </action>
+  </recv>
+
+  <send retrans="500">
+    <![CDATA[
+
+      SIP/2.0 200 OK
+      [last_Via:]
+      [last_From:]
+      [last_To:];tag=[call_number]
+      [last_Call-ID:]
+      [last_CSeq:]
+      Contact: <sip:[local_ip]:[local_port];transport=[transport]>
+      Content-Type: application/sdp
+      Content-Length: [len]
+
+      v=0
+      o=- 1324901698 1324901698 IN IP4 [local_ip]
+      s=-
+      c=IN IP4 [local_ip]
+      t=0 0
+      m=audio 6000 RTP/AVP 9 0 8 101
+      c=IN IP[media_ip_type] [media_ip]
+      a=rtpmap:0 PCMU/8000
+      a=rtpmap:8 PCMA/8000
+      a=rtpmap:9 G722/8000
+      a=rtpmap:101 telephone-event/8000
+      a=fmtp:101 0-16
+      m=audio 6000 RTP/AVP 9 0 8
+      c=IN IP[media_ip_type] [media_ip]
+      a=rtpmap:0 PCMU/8000
+      a=rtpmap:8 PCMA/8000
+      a=rtpmap:9 G722/8000
+      m=audio 6000 RTP/AVP 9 0 8
+      c=IN IP[media_ip_type] [media_ip]
+      a=rtpmap:0 PCMU/8000
+      a=rtpmap:8 PCMA/8000
+      a=rtpmap:9 G722/8000
+    ]]>
+  </send>
+
+  <recv request="ACK" rtd="true" crlf="true">
+  </recv>
+
+  <send retrans="500">
+    <![CDATA[
+
+      BYE sip:answer@[remote_ip]:[remote_port] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
+      From: alice <sip:[service]@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]
+      To: sut <sip:test@[remote_ip]:[remote_port]>[peer_tag_param]
+      Call-ID: [call_id]
+      CSeq: 2 BYE
+      Contact: <sip:test@[local_ip]:[local_port]>
+      Max-Forwards: 70
+      Content-Length: 0
+
+        ]]>
+  </send>
+
+  <recv response="200" crlf="true">
+  </recv>
+
+  <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>
+
+  <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>
+
+</scenario>
+
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/add/test-config.yaml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/add/test-config.yaml
new file mode 100644
index 0000000..93e7453
--- /dev/null
+++ b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/add/test-config.yaml
@@ -0,0 +1,26 @@
+testinfo:
+    summary:     'Test adding of multiple audio streams'
+    description: |
+        This tests the addition of multiple audio streams once
+        a call has been established.
+
+test-modules:
+    test-object:
+        config-section: test-object-config
+        typename: 'sipp.SIPpTestCase'
+
+test-object-config:
+    fail-on-any: False
+    test-iterations:
+        -
+            scenarios:
+                - { 'key-args': {'scenario': 'uac-multiple-audio.xml', '-i': '127.0.0.1', '-p': '5061', '-s': 'alice'} }
+
+properties:
+    minversion: '15.0.0'
+    dependencies:
+        - sipp :
+            version : 'v3.0'
+        - asterisk : 'res_pjsip'
+    tags:
+        - pjsip
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/configs/ast1/extensions.conf b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/decline/configs/ast1/extensions.conf
similarity index 100%
copy from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/configs/ast1/extensions.conf
copy to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/decline/configs/ast1/extensions.conf
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/configs/ast1/pjsip.conf b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/decline/configs/ast1/pjsip.conf
similarity index 100%
rename from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/configs/ast1/pjsip.conf
rename to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/decline/configs/ast1/pjsip.conf
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/sipp/uac-multiple-audio-initial-declined.xml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/decline/sipp/uac-multiple-audio-initial-declined.xml
similarity index 100%
rename from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/sipp/uac-multiple-audio-initial-declined.xml
rename to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/decline/sipp/uac-multiple-audio-initial-declined.xml
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/sipp/uac-multiple-audio.xml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/decline/sipp/uac-multiple-audio.xml
similarity index 100%
rename from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/sipp/uac-multiple-audio.xml
rename to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/decline/sipp/uac-multiple-audio.xml
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/test-config.yaml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/decline/test-config.yaml
similarity index 100%
rename from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/test-config.yaml
rename to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/decline/test-config.yaml
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/remove/configs/ast1/extensions.conf b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/remove/configs/ast1/extensions.conf
new file mode 100644
index 0000000..9b21754
--- /dev/null
+++ b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/remove/configs/ast1/extensions.conf
@@ -0,0 +1,6 @@
+[default]
+
+exten => answer,1,NoOp()
+ same => n,Answer()
+ same => n,StreamEcho(1,audio)
+ same => n,Hangup()
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/remove/configs/ast1/pjsip.conf b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/remove/configs/ast1/pjsip.conf
new file mode 100644
index 0000000..791aec0
--- /dev/null
+++ b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/remove/configs/ast1/pjsip.conf
@@ -0,0 +1,13 @@
+[local-transport-udp]
+type=transport
+bind=127.0.0.1
+protocol=udp
+
+[endpoint-template](!)
+type=endpoint
+context=default
+media_address=127.0.0.1
+max_audio_streams=10
+
+[alice](endpoint-template)
+allow=!all,g722,ulaw,alaw
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/remove/sipp/uac-multiple-audio.xml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/remove/sipp/uac-multiple-audio.xml
new file mode 100644
index 0000000..7b84ab1
--- /dev/null
+++ b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/remove/sipp/uac-multiple-audio.xml
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+<scenario name="Basic Sipstone UAC">
+  <send retrans="500">
+    <![CDATA[
+
+      INVITE sip:answer@[remote_ip]:[remote_port] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
+      From: alice <sip:[service]@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]
+      To: sut <sip:test@[remote_ip]:[remote_port]>
+      Call-ID: [call_id]
+      CSeq: 1 INVITE
+      Contact: sip:test@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Codec test
+      Content-Type: application/sdp
+      Content-Length: [len]
+
+      v=0
+      o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip]
+      s=-
+      c=IN IP[media_ip_type] [media_ip]
+      t=0 0
+      m=audio 6000 RTP/AVP 9 0 8 101
+      c=IN IP[media_ip_type] [media_ip]
+      a=rtpmap:0 PCMU/8000
+      a=rtpmap:8 PCMA/8000
+      a=rtpmap:9 G722/8000
+      a=rtpmap:101 telephone-event/8000
+      a=fmtp:101 0-16
+      m=audio 6001 RTP/AVP 9
+      c=IN IP[media_ip_type] [media_ip]
+      a=rtpmap:9 G722/8000
+      m=audio 6002 RTP/AVP 9 0 8
+      a=rtpmap:0 PCMU/8000
+      a=rtpmap:8 PCMA/8000
+      a=rtpmap:9 G722/8000
+
+    ]]>
+  </send>
+
+  <recv response="100" optional="true">
+  </recv>
+
+  <recv response="181" optional="true">
+  </recv>
+
+  <recv response="180" optional="true">
+  </recv>
+
+  <recv response="183" optional="true">
+  </recv>
+
+  <recv response="200" rtd="true">
+    <action>
+      <ereg regexp="m=audio [0-9]{1,5} RTP/AVP 9 0 8 101+..*"
+            search_in="body" check_it="true" assign_to="1"/>
+      <test assign_to="1" variable="1" compare="equal" value=""/>
+      <ereg regexp="m=audio [0-9]{1,5} RTP/AVP 9+..*"
+            search_in="body" check_it="true" assign_to="2"/>
+      <test assign_to="2" variable="2" compare="equal" value=""/>
+      <ereg regexp="m=audio [0-9]{1,5} RTP/AVP 9 0 8+..*"
+            search_in="body" check_it="true" assign_to="1"/>
+      <test assign_to="3" variable="3" compare="equal" value=""/>
+    </action>
+  </recv>
+
+  <send>
+    <![CDATA[
+
+      ACK sip:answer@[remote_ip]:[remote_port] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
+      From: alice <sip:[service]@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]
+      To: sut <sip:test@[remote_ip]:[remote_port]>[peer_tag_param]
+      Call-ID: [call_id]
+      CSeq: 1 ACK
+      Contact: sip:alice-codec-match@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Performance Test
+      Content-Length: 0
+
+    ]]>
+  </send>
+
+  <recv request="INVITE">
+    <action>
+      <ereg regexp="m=audio [0-9]{1,5} RTP/AVP 9 0 8 101+..*"
+            search_in="body" check_it="true" assign_to="1"/>
+      <test assign_to="1" variable="1" compare="equal" value=""/>
+      <ereg regexp="m=audio 0 RTP/AVP 9+..*"
+            search_in="body" check_it="true" assign_to="2"/>
+      <test assign_to="2" variable="2" compare="equal" value=""/>
+      <ereg regexp="m=audio 0 RTP/AVP 9 0 8+..*"
+            search_in="body" check_it="true" assign_to="3"/>
+      <test assign_to="3" variable="3" compare="equal" value=""/>
+    </action>
+  </recv>
+
+  <send retrans="500">
+    <![CDATA[
+
+      SIP/2.0 200 OK
+      [last_Via:]
+      [last_From:]
+      [last_To:];tag=[call_number]
+      [last_Call-ID:]
+      [last_CSeq:]
+      Contact: <sip:[local_ip]:[local_port];transport=[transport]>
+      Content-Type: application/sdp
+      Content-Length: [len]
+
+      v=0
+      o=- 1324901698 1324901698 IN IP4 [local_ip]
+      s=-
+      c=IN IP4 [local_ip]
+      t=0 0
+      m=audio 6000 RTP/AVP 9 0 8 101
+      c=IN IP[media_ip_type] [media_ip]
+      a=rtpmap:0 PCMU/8000
+      a=rtpmap:8 PCMA/8000
+      a=rtpmap:9 G722/8000
+      a=rtpmap:101 telephone-event/8000
+      a=fmtp:101 0-16
+      m=audio 0 RTP/AVP 9
+      m=audio 0 RTP/AVP 9 0 8
+    ]]>
+  </send>
+
+  <recv request="ACK" rtd="true" crlf="true">
+  </recv>
+
+  <send retrans="500">
+    <![CDATA[
+
+      BYE sip:answer@[remote_ip]:[remote_port] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
+      From: alice <sip:[service]@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]
+      To: sut <sip:test@[remote_ip]:[remote_port]>[peer_tag_param]
+      Call-ID: [call_id]
+      CSeq: 2 BYE
+      Contact: <sip:test@[local_ip]:[local_port]>
+      Max-Forwards: 70
+      Content-Length: 0
+
+        ]]>
+  </send>
+
+  <recv response="200" crlf="true">
+  </recv>
+
+  <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>
+
+  <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>
+
+</scenario>
+
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/remove/test-config.yaml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/remove/test-config.yaml
new file mode 100644
index 0000000..5ceaec2
--- /dev/null
+++ b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/remove/test-config.yaml
@@ -0,0 +1,26 @@
+testinfo:
+    summary:     'Test removing of multiple audio streams'
+    description: |
+        This tests the removal of multiple audio streams once
+        a call has been established.
+
+test-modules:
+    test-object:
+        config-section: test-object-config
+        typename: 'sipp.SIPpTestCase'
+
+test-object-config:
+    fail-on-any: False
+    test-iterations:
+        -
+            scenarios:
+                - { 'key-args': {'scenario': 'uac-multiple-audio.xml', '-i': '127.0.0.1', '-p': '5061', '-s': 'alice'} }
+
+properties:
+    minversion: '15.0.0'
+    dependencies:
+        - sipp :
+            version : 'v3.0'
+        - asterisk : 'res_pjsip'
+    tags:
+        - pjsip
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/tests.yaml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/tests.yaml
new file mode 100644
index 0000000..024b05a
--- /dev/null
+++ b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/audio/tests.yaml
@@ -0,0 +1,6 @@
+# Enter tests here in the order they should be considered for execution:
+tests:
+    - test: 'decline'
+    - test: 'accept'
+    - test: 'add'
+    - test: 'remove'
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/tests.yaml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/tests.yaml
index 8dbe4c8..e4f005d 100644
--- a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/tests.yaml
+++ b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/tests.yaml
@@ -1,6 +1,6 @@
 # Enter tests here in the order they should be considered for execution:
 tests:
-    - test: 'audio'
-    - test: 'video'
+    - dir: 'audio'
+    - dir: 'video'
     - dir: 'audio-video'
-    - test: 'audio-video-app'
+    - dir: 'audio-video-app'
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/configs/ast1/extensions.conf b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/accept/configs/ast1/extensions.conf
similarity index 100%
rename from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/configs/ast1/extensions.conf
rename to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/accept/configs/ast1/extensions.conf
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/accept/configs/ast1/pjsip.conf b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/accept/configs/ast1/pjsip.conf
new file mode 100644
index 0000000..f20ab1e
--- /dev/null
+++ b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/accept/configs/ast1/pjsip.conf
@@ -0,0 +1,13 @@
+[local-transport-udp]
+type=transport
+bind=127.0.0.1
+protocol=udp
+
+[endpoint-template](!)
+type=endpoint
+context=default
+media_address=127.0.0.1
+max_video_streams=10
+
+[alice](endpoint-template)
+allow=!all,h264,h263
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/accept/sipp/uac-multiple-video.xml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/accept/sipp/uac-multiple-video.xml
new file mode 100644
index 0000000..7865de2
--- /dev/null
+++ b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/accept/sipp/uac-multiple-video.xml
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+<scenario name="Basic Sipstone UAC">
+  <send retrans="500">
+    <![CDATA[
+
+      INVITE sip:answer@[remote_ip]:[remote_port] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
+      From: alice <sip:[service]@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]
+      To: sut <sip:test@[remote_ip]:[remote_port]>
+      Call-ID: [call_id]
+      CSeq: 1 INVITE
+      Contact: sip:test@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Codec test
+      Content-Type: application/sdp
+      Content-Length: [len]
+
+      v=0
+      o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip]
+      s=-
+      c=IN IP[media_ip_type] [media_ip]
+      t=0 0
+      m=video 6001 RTP/AVP 99 34
+      c=IN IP[media_ip_type] [media_ip]
+      a=rtpmap:99 H264/90000
+      a=rtpmap:34 H263/90000
+      a=sendrecv
+      m=video 6002 RTP/AVP 34
+      c=IN IP[media_ip_type] [media_ip]
+      a=rtpmap:34 H263/90000
+      a=sendrecv
+      m=video 6003 RTP/AVP 99
+      c=IN IP[media_ip_type] [media_ip]
+      a=rtpmap:99 H264/90000
+      a=sendrecv
+
+    ]]>
+  </send>
+
+  <recv response="100" optional="true">
+  </recv>
+
+  <recv response="181" optional="true">
+  </recv>
+
+  <recv response="180" optional="true">
+  </recv>
+
+  <recv response="183" optional="true">
+  </recv>
+
+  <recv response="200" rtd="true">
+    <action>
+      <ereg regexp="m=video [0-9]{1,5} RTP/AVP 99 34+..*"
+            search_in="body" check_it="true" assign_to="1"/>
+      <test assign_to="1" variable="1" compare="equal" value=""/>
+      <ereg regexp="m=video [0-9]{1,5} RTP/AVP 34+..*"
+            search_in="body" check_it="true" assign_to="2"/>
+      <test assign_to="2" variable="2" compare="equal" value=""/>
+      <ereg regexp="m=video [0-9]{1,5} RTP/AVP 99+..*"
+            search_in="body" check_it="true" assign_to="3"/>
+      <test assign_to="3" variable="3" compare="equal" value=""/>
+    </action>
+  </recv>
+
+  <send>
+    <![CDATA[
+
+      ACK sip:answer@[remote_ip]:[remote_port] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
+      From: alice <sip:[service]@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]
+      To: sut <sip:test@[remote_ip]:[remote_port]>[peer_tag_param]
+      Call-ID: [call_id]
+      CSeq: 1 ACK
+      Contact: sip:alice-codec-match@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Performance Test
+      Content-Length: 0
+
+    ]]>
+  </send>
+
+  <recv request="BYE">
+  </recv>
+
+  <send>
+    <![CDATA[
+
+      SIP/2.0 200 OK
+      [last_Via:]
+      [last_From:]
+      [last_To:]
+      [last_Call-ID:]
+      [last_CSeq:]
+      Contact: <sip:[local_ip]:[local_port];transport=[transport]>
+      Content-Length: 0
+
+    ]]>
+  </send>
+
+  <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>
+
+  <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>
+
+</scenario>
+
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/accept/test-config.yaml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/accept/test-config.yaml
new file mode 100644
index 0000000..6b04558
--- /dev/null
+++ b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/accept/test-config.yaml
@@ -0,0 +1,27 @@
+testinfo:
+    summary:     'Test offers with multiple video streams'
+    description: |
+        This tests inbound offers that contain multiple video
+        media streams. Asterisk should accept all the video
+        streams.
+
+test-modules:
+    test-object:
+        config-section: test-object-config
+        typename: 'sipp.SIPpTestCase'
+
+test-object-config:
+    fail-on-any: False
+    test-iterations:
+        -
+            scenarios:
+                - { 'key-args': {'scenario': 'uac-multiple-video.xml', '-i': '127.0.0.1', '-p': '5061', '-s': 'alice'} }
+
+properties:
+    minversion: '15.0.0'
+    dependencies:
+        - sipp :
+            version : 'v3.0'
+        - asterisk : 'res_pjsip'
+    tags:
+        - pjsip
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/add/configs/ast1/extensions.conf b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/add/configs/ast1/extensions.conf
new file mode 100644
index 0000000..3db7659
--- /dev/null
+++ b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/add/configs/ast1/extensions.conf
@@ -0,0 +1,6 @@
+[default]
+
+exten => answer,1,NoOp()
+ same => n,Answer()
+ same => n,StreamEcho(3,video)
+ same => n,Hangup()
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/add/configs/ast1/pjsip.conf b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/add/configs/ast1/pjsip.conf
new file mode 100644
index 0000000..f20ab1e
--- /dev/null
+++ b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/add/configs/ast1/pjsip.conf
@@ -0,0 +1,13 @@
+[local-transport-udp]
+type=transport
+bind=127.0.0.1
+protocol=udp
+
+[endpoint-template](!)
+type=endpoint
+context=default
+media_address=127.0.0.1
+max_video_streams=10
+
+[alice](endpoint-template)
+allow=!all,h264,h263
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/add/sipp/uac-multiple-video.xml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/add/sipp/uac-multiple-video.xml
new file mode 100644
index 0000000..8e4ba16
--- /dev/null
+++ b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/add/sipp/uac-multiple-video.xml
@@ -0,0 +1,148 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+<scenario name="Basic Sipstone UAC">
+  <send retrans="500">
+    <![CDATA[
+
+      INVITE sip:answer@[remote_ip]:[remote_port] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
+      From: alice <sip:[service]@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]
+      To: sut <sip:test@[remote_ip]:[remote_port]>
+      Call-ID: [call_id]
+      CSeq: 1 INVITE
+      Contact: sip:test@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Codec test
+      Content-Type: application/sdp
+      Content-Length: [len]
+
+      v=0
+      o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip]
+      s=-
+      c=IN IP[media_ip_type] [media_ip]
+      t=0 0
+      m=video 6001 RTP/AVP 99 34
+      c=IN IP[media_ip_type] [media_ip]
+      a=rtpmap:99 H264/90000
+      a=rtpmap:34 H263/90000
+      a=sendrecv
+
+    ]]>
+  </send>
+
+  <recv response="100" optional="true">
+  </recv>
+
+  <recv response="181" optional="true">
+  </recv>
+
+  <recv response="180" optional="true">
+  </recv>
+
+  <recv response="183" optional="true">
+  </recv>
+
+  <recv response="200" rtd="true">
+    <action>
+      <ereg regexp="m=video [0-9]{1,5} RTP/AVP 99 34+..*"
+            search_in="body" check_it="true" assign_to="1"/>
+      <test assign_to="1" variable="1" compare="equal" value=""/>
+    </action>
+  </recv>
+
+  <send>
+    <![CDATA[
+
+      ACK sip:answer@[remote_ip]:[remote_port] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
+      From: alice <sip:[service]@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]
+      To: sut <sip:test@[remote_ip]:[remote_port]>[peer_tag_param]
+      Call-ID: [call_id]
+      CSeq: 1 ACK
+      Contact: sip:alice-codec-match@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Performance Test
+      Content-Length: 0
+
+    ]]>
+  </send>
+
+  <recv request="INVITE">
+    <action>
+      <ereg regexp="m=video [0-9]{1,5} RTP/AVP 99 34+..*"
+            search_in="body" check_it="true" assign_to="1"/>
+      <test assign_to="1" variable="1" compare="equal" value=""/>
+      <ereg regexp="m=video [0-9]{1,5} RTP/AVP 99 34+..*"
+            search_in="body" check_it="true" assign_to="2"/>
+      <test assign_to="2" variable="2" compare="equal" value=""/>
+      <ereg regexp="m=video [0-9]{1,5} RTP/AVP 99 34+..*"
+            search_in="body" check_it="true" assign_to="3"/>
+      <test assign_to="3" variable="3" compare="equal" value=""/>
+    </action>
+  </recv>
+
+  <send retrans="500">
+    <![CDATA[
+
+      SIP/2.0 200 OK
+      [last_Via:]
+      [last_From:]
+      [last_To:];tag=[call_number]
+      [last_Call-ID:]
+      [last_CSeq:]
+      Contact: <sip:[local_ip]:[local_port];transport=[transport]>
+      Content-Type: application/sdp
+      Content-Length: [len]
+
+      v=0
+      o=- 1324901698 1324901698 IN IP4 [local_ip]
+      s=-
+      c=IN IP4 [local_ip]
+      t=0 0
+      m=video 6001 RTP/AVP 99 34
+      c=IN IP[media_ip_type] [media_ip]
+      a=rtpmap:99 H264/90000
+      a=rtpmap:34 H263/90000
+      a=sendrecv
+      m=video 6001 RTP/AVP 99 34
+      c=IN IP[media_ip_type] [media_ip]
+      a=rtpmap:99 H264/90000
+      a=rtpmap:34 H263/90000
+      a=sendrecv
+      m=video 6001 RTP/AVP 99 34
+      c=IN IP[media_ip_type] [media_ip]
+      a=rtpmap:99 H264/90000
+      a=rtpmap:34 H263/90000
+      a=sendrecv
+    ]]>
+  </send>
+
+  <recv request="ACK" rtd="true" crlf="true">
+  </recv>
+
+  <send retrans="500">
+    <![CDATA[
+
+      BYE sip:answer@[remote_ip]:[remote_port] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
+      From: alice <sip:[service]@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]
+      To: sut <sip:test@[remote_ip]:[remote_port]>[peer_tag_param]
+      Call-ID: [call_id]
+      CSeq: 2 BYE
+      Contact: <sip:test@[local_ip]:[local_port]>
+      Max-Forwards: 70
+      Content-Length: 0
+
+        ]]>
+  </send>
+
+  <recv response="200" crlf="true">
+  </recv>
+
+  <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>
+
+  <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>
+
+</scenario>
+
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/add/test-config.yaml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/add/test-config.yaml
new file mode 100644
index 0000000..56c18c0
--- /dev/null
+++ b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/add/test-config.yaml
@@ -0,0 +1,26 @@
+testinfo:
+    summary:     'Test adding of multiple video streams'
+    description: |
+        This tests the addition of multiple video streams once
+        a call has been established.
+
+test-modules:
+    test-object:
+        config-section: test-object-config
+        typename: 'sipp.SIPpTestCase'
+
+test-object-config:
+    fail-on-any: False
+    test-iterations:
+        -
+            scenarios:
+                - { 'key-args': {'scenario': 'uac-multiple-video.xml', '-i': '127.0.0.1', '-p': '5061', '-s': 'alice'} }
+
+properties:
+    minversion: '15.0.0'
+    dependencies:
+        - sipp :
+            version : 'v3.0'
+        - asterisk : 'res_pjsip'
+    tags:
+        - pjsip
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/configs/ast1/extensions.conf b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/decline/configs/ast1/extensions.conf
similarity index 100%
copy from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/configs/ast1/extensions.conf
copy to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/decline/configs/ast1/extensions.conf
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/configs/ast1/pjsip.conf b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/decline/configs/ast1/pjsip.conf
similarity index 100%
rename from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/configs/ast1/pjsip.conf
rename to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/decline/configs/ast1/pjsip.conf
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/sipp/uac-multiple-video-initial-declined.xml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/decline/sipp/uac-multiple-video-initial-declined.xml
similarity index 100%
rename from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/sipp/uac-multiple-video-initial-declined.xml
rename to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/decline/sipp/uac-multiple-video-initial-declined.xml
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/sipp/uac-multiple-video.xml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/decline/sipp/uac-multiple-video.xml
similarity index 100%
rename from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/sipp/uac-multiple-video.xml
rename to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/decline/sipp/uac-multiple-video.xml
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/test-config.yaml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/decline/test-config.yaml
similarity index 100%
rename from tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/test-config.yaml
rename to tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/decline/test-config.yaml
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/remove/configs/ast1/extensions.conf b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/remove/configs/ast1/extensions.conf
new file mode 100644
index 0000000..1bfc935
--- /dev/null
+++ b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/remove/configs/ast1/extensions.conf
@@ -0,0 +1,6 @@
+[default]
+
+exten => answer,1,NoOp()
+ same => n,Answer()
+ same => n,StreamEcho(1,video)
+ same => n,Hangup()
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/remove/configs/ast1/pjsip.conf b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/remove/configs/ast1/pjsip.conf
new file mode 100644
index 0000000..f20ab1e
--- /dev/null
+++ b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/remove/configs/ast1/pjsip.conf
@@ -0,0 +1,13 @@
+[local-transport-udp]
+type=transport
+bind=127.0.0.1
+protocol=udp
+
+[endpoint-template](!)
+type=endpoint
+context=default
+media_address=127.0.0.1
+max_video_streams=10
+
+[alice](endpoint-template)
+allow=!all,h264,h263
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/remove/sipp/uac-multiple-video.xml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/remove/sipp/uac-multiple-video.xml
new file mode 100644
index 0000000..8e98dcb
--- /dev/null
+++ b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/remove/sipp/uac-multiple-video.xml
@@ -0,0 +1,154 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!DOCTYPE scenario SYSTEM "sipp.dtd">
+
+<scenario name="Basic Sipstone UAC">
+  <send retrans="500">
+    <![CDATA[
+
+      INVITE sip:answer@[remote_ip]:[remote_port] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
+      From: alice <sip:[service]@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]
+      To: sut <sip:test@[remote_ip]:[remote_port]>
+      Call-ID: [call_id]
+      CSeq: 1 INVITE
+      Contact: sip:test@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Codec test
+      Content-Type: application/sdp
+      Content-Length: [len]
+
+      v=0
+      o=user1 53655765 2353687637 IN IP[local_ip_type] [local_ip]
+      s=-
+      c=IN IP[media_ip_type] [media_ip]
+      t=0 0
+      m=video 6001 RTP/AVP 99 34
+      c=IN IP[media_ip_type] [media_ip]
+      a=rtpmap:99 H264/90000
+      a=rtpmap:34 H263/90000
+      a=sendrecv
+      m=video 6001 RTP/AVP 34
+      c=IN IP[media_ip_type] [media_ip]
+      a=rtpmap:34 H263/90000
+      a=sendrecv
+      m=video 6001 RTP/AVP 99
+      c=IN IP[media_ip_type] [media_ip]
+      a=rtpmap:99 H264/90000
+      a=sendrecv
+
+    ]]>
+  </send>
+
+  <recv response="100" optional="true">
+  </recv>
+
+  <recv response="181" optional="true">
+  </recv>
+
+  <recv response="180" optional="true">
+  </recv>
+
+  <recv response="183" optional="true">
+  </recv>
+
+  <recv response="200" rtd="true">
+    <action>
+      <ereg regexp="m=video [0-9]{1,5} RTP/AVP 99 34+..*"
+            search_in="body" check_it="true" assign_to="1"/>
+      <test assign_to="1" variable="1" compare="equal" value=""/>
+      <ereg regexp="m=video [0-9]{1,5} RTP/AVP 34+..*"
+            search_in="body" check_it="true" assign_to="2"/>
+      <test assign_to="2" variable="2" compare="equal" value=""/>
+      <ereg regexp="m=video [0-9]{1,5} RTP/AVP 99+..*"
+            search_in="body" check_it="true" assign_to="1"/>
+      <test assign_to="3" variable="3" compare="equal" value=""/>
+    </action>
+  </recv>
+
+  <send>
+    <![CDATA[
+
+      ACK sip:answer@[remote_ip]:[remote_port] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
+      From: alice <sip:[service]@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]
+      To: sut <sip:test@[remote_ip]:[remote_port]>[peer_tag_param]
+      Call-ID: [call_id]
+      CSeq: 1 ACK
+      Contact: sip:alice-codec-match@[local_ip]:[local_port]
+      Max-Forwards: 70
+      Subject: Performance Test
+      Content-Length: 0
+
+    ]]>
+  </send>
+
+  <recv request="INVITE">
+    <action>
+      <ereg regexp="m=video [0-9]{1,5} RTP/AVP 99 34+..*"
+            search_in="body" check_it="true" assign_to="1"/>
+      <test assign_to="1" variable="1" compare="equal" value=""/>
+      <ereg regexp="m=video 0 RTP/AVP 34+..*"
+            search_in="body" check_it="true" assign_to="2"/>
+      <test assign_to="2" variable="2" compare="equal" value=""/>
+      <ereg regexp="m=video 0 RTP/AVP 99+..*"
+            search_in="body" check_it="true" assign_to="3"/>
+      <test assign_to="3" variable="3" compare="equal" value=""/>
+    </action>
+  </recv>
+
+  <send retrans="500">
+    <![CDATA[
+
+      SIP/2.0 200 OK
+      [last_Via:]
+      [last_From:]
+      [last_To:];tag=[call_number]
+      [last_Call-ID:]
+      [last_CSeq:]
+      Contact: <sip:[local_ip]:[local_port];transport=[transport]>
+      Content-Type: application/sdp
+      Content-Length: [len]
+
+      v=0
+      o=- 1324901698 1324901698 IN IP4 [local_ip]
+      s=-
+      c=IN IP4 [local_ip]
+      t=0 0
+      m=video 6001 RTP/AVP 99 34
+      c=IN IP[media_ip_type] [media_ip]
+      a=rtpmap:99 H264/90000
+      a=rtpmap:34 H263/90000
+      a=sendrecv
+      m=video 0 RTP/AVP 34
+      m=video 0 RTP/AVP 99
+    ]]>
+  </send>
+
+  <recv request="ACK" rtd="true" crlf="true">
+  </recv>
+
+  <send retrans="500">
+    <![CDATA[
+
+      BYE sip:answer@[remote_ip]:[remote_port] SIP/2.0
+      Via: SIP/2.0/[transport] [local_ip]:[local_port];branch=[branch]
+      From: alice <sip:[service]@[local_ip]:[local_port]>;tag=[pid]SIPpTag00[call_number]
+      To: sut <sip:test@[remote_ip]:[remote_port]>[peer_tag_param]
+      Call-ID: [call_id]
+      CSeq: 2 BYE
+      Contact: <sip:test@[local_ip]:[local_port]>
+      Max-Forwards: 70
+      Content-Length: 0
+
+        ]]>
+  </send>
+
+  <recv response="200" crlf="true">
+  </recv>
+
+  <ResponseTimeRepartition value="10, 20, 30, 40, 50, 100, 150, 200"/>
+
+  <CallLengthRepartition value="10, 50, 100, 500, 1000, 5000, 10000"/>
+
+</scenario>
+
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/remove/test-config.yaml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/remove/test-config.yaml
new file mode 100644
index 0000000..8da0f76
--- /dev/null
+++ b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/remove/test-config.yaml
@@ -0,0 +1,26 @@
+testinfo:
+    summary:     'Test removing of multiple video streams'
+    description: |
+        This tests the removal of multiple video streams once
+        a call has been established.
+
+test-modules:
+    test-object:
+        config-section: test-object-config
+        typename: 'sipp.SIPpTestCase'
+
+test-object-config:
+    fail-on-any: False
+    test-iterations:
+        -
+            scenarios:
+                - { 'key-args': {'scenario': 'uac-multiple-video.xml', '-i': '127.0.0.1', '-p': '5061', '-s': 'alice'} }
+
+properties:
+    minversion: '15.0.0'
+    dependencies:
+        - sipp :
+            version : 'v3.0'
+        - asterisk : 'res_pjsip'
+    tags:
+        - pjsip
diff --git a/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/tests.yaml b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/tests.yaml
new file mode 100644
index 0000000..024b05a
--- /dev/null
+++ b/tests/channels/pjsip/sdp_offer_answer/incoming/nominal/multiple-media-stream/video/tests.yaml
@@ -0,0 +1,6 @@
+# Enter tests here in the order they should be considered for execution:
+tests:
+    - test: 'decline'
+    - test: 'accept'
+    - test: 'add'
+    - test: 'remove'

-- 
To view, visit https://gerrit.asterisk.org/5912
To unsubscribe, visit https://gerrit.asterisk.org/settings

Gerrit-Project: testsuite
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I54201ee955c88dc00fea7fae14b4ac3e431c3b4e
Gerrit-Change-Number: 5912
Gerrit-PatchSet: 1
Gerrit-Owner: Joshua Colp <jcolp at digium.com>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-code-review/attachments/20170627/46257aea/attachment-0001.html>


More information about the asterisk-code-review mailing list