<html>
<head>
    <base href="https://wiki.asterisk.org/wiki">
            <link rel="stylesheet" href="/wiki/s/en/2176/25/9/_/styles/combined.css?spaceKey=AST&amp;forWysiwyg=true" type="text/css">
    </head>
<body style="background: white;" bgcolor="white" class="email-body">
<div id="pageContent">
<div id="notificationFormat">
<div class="wiki-content">
<div class="email">
    <h2><a href="https://wiki.asterisk.org/wiki/display/AST/Tests+for+Basic+Call+Functionality">Tests for Basic Call Functionality</a></h2>
    <h4>Page <b>edited</b> by             <a href="https://wiki.asterisk.org/wiki/display/~mmichelson">Mark Michelson</a>
    </h4>
        <br/>
                         <h4>Changes (20)</h4>
                                 
    
<div id="page-diffs">
                    <table class="diff" cellpadding="0" cellspacing="0">
    
            <tr><td class="diff-snipped" >...<br></td></tr>
            <tr><td class="diff-unchanged" > <br>Procedure: <br></td></tr>
            <tr><td class="diff-changed-lines" >Asterisk originates a call to Alice and directs the answered call to <span class="diff-deleted-words"style="color:#999;background-color:#fdd;text-decoration:line-through;">bob@default</span> <span class="diff-added-words"style="background-color: #dfd;">Bob</span> <br></td></tr>
            <tr><td class="diff-unchanged" >Bob answers the call. <br>Alice and Bob exchange audio. <br></td></tr>
            <tr><td class="diff-snipped" >...<br></td></tr>
            <tr><td class="diff-unchanged" > <br>Procedure: <br></td></tr>
            <tr><td class="diff-changed-lines" >Asterisk originates a call to Alice and directs the answered call to <span class="diff-deleted-words"style="color:#999;background-color:#fdd;text-decoration:line-through;">bob@default</span> <span class="diff-added-words"style="background-color: #dfd;">Bob</span> <br></td></tr>
            <tr><td class="diff-unchanged" >Bob answers the call. <br>Alice and Bob exchange audio. <br></td></tr>
            <tr><td class="diff-snipped" >...<br></td></tr>
            <tr><td class="diff-unchanged" >Ensure that Asterisk sends a BYE to Alice <br> <br></td></tr>
            <tr><td class="diff-deleted-lines" style="color:#999;background-color:#fdd;text-decoration:line-through;">h3. Off-nominal Tests <br></td></tr>
            <tr><td class="diff-added-lines" style="background-color: #dfd;">h3. Off-nominal Tests, Alice-initiated <br></td></tr>
            <tr><td class="diff-unchanged" > <br></td></tr>
            <tr><td class="diff-deleted-lines" style="color:#999;background-color:#fdd;text-decoration:line-through;">h5. Test 1: Alice-initiated, Bob does not exist <br></td></tr>
            <tr><td class="diff-added-lines" style="background-color: #dfd;">The following tests require multiple iterations. Details about each iteration are in the following table: <br></td></tr>
            <tr><td class="diff-unchanged" > <br></td></tr>
            <tr><td class="diff-added-lines" style="background-color: #dfd;">||Iteration||Transport-specific data||Extension Alice calls <br>|1|bind = 127.0.0.1:5060\\protocol=udp|bob@default <br>|2|bind = 127.0.0.1:5060\\protocol=tcp|bob@default <br>|3|bind = \[::1\]:5060\\protocol=udp|bobv6@default <br>|4|bind = \[::1\]:5060\\protocol=tcp|bobv6@default <br> <br>h5. Test 1: Bob does not exist <br> <br></td></tr>
            <tr><td class="diff-unchanged" >Procedure: <br>Remove Bob from the network. <br></td></tr>
            <tr><td class="diff-changed-lines" >Alice places a call to Asterisk to <span class="diff-deleted-words"style="color:#999;background-color:#fdd;text-decoration:line-through;">extension bob@default</span> <span class="diff-added-words"style="background-color: #dfd;">Bob</span> <br></td></tr>
            <tr><td class="diff-unchanged" > <br>Pass Conditions: <br></td></tr>
            <tr><td class="diff-snipped" >...<br></td></tr>
            <tr><td class="diff-unchanged" >Ensure that Asterisk sends an error response to Alice <br> <br></td></tr>
            <tr><td class="diff-changed-lines" >h5. Test 2: <span class="diff-deleted-words"style="color:#999;background-color:#fdd;text-decoration:line-through;">Alice-initiated,</span> Bob does not answer <br></td></tr>
            <tr><td class="diff-unchanged" > <br>Procedure: <br></td></tr>
            <tr><td class="diff-changed-lines" >Alice places a call to Asterisk to <span class="diff-deleted-words"style="color:#999;background-color:#fdd;text-decoration:line-through;">extension bob@default</span> <span class="diff-added-words"style="background-color: #dfd;">Bob</span> <br></td></tr>
            <tr><td class="diff-unchanged" >Bob rings but never answers the phone. <br> <br></td></tr>
            <tr><td class="diff-snipped" >...<br></td></tr>
            <tr><td class="diff-unchanged" >Ensure that Asterisk sends an error response to Alice <br> <br></td></tr>
            <tr><td class="diff-changed-lines" >h5. Test 3: <span class="diff-deleted-words"style="color:#999;background-color:#fdd;text-decoration:line-through;">Alice-initiated,</span> Bob is busy <br></td></tr>
            <tr><td class="diff-unchanged" > <br>Procedure: <br></td></tr>
            <tr><td class="diff-changed-lines" >Alice places a call to Asterisk to <span class="diff-deleted-words"style="color:#999;background-color:#fdd;text-decoration:line-through;">extension bob@default</span> <span class="diff-added-words"style="background-color: #dfd;">Bob</span> <br></td></tr>
            <tr><td class="diff-unchanged" >Bob responds with a busy response. <br> <br></td></tr>
            <tr><td class="diff-snipped" >...<br></td></tr>
            <tr><td class="diff-unchanged" >Ensure that Asterisk sends an error response (preferably a 486) to Alice. <br> <br></td></tr>
            <tr><td class="diff-deleted-lines" style="color:#999;background-color:#fdd;text-decoration:line-through;">h5. Test 4: Asterisk-initiated, Bob does not exist <br></td></tr>
            <tr><td class="diff-added-lines" style="background-color: #dfd;">h3. Off-nominal tests, Asterisk-initiated <br></td></tr>
            <tr><td class="diff-unchanged" > <br></td></tr>
            <tr><td class="diff-added-lines" style="background-color: #dfd;">The following tests require multiple iterations. Details about each iteration are in the following table: <br> <br>||Iteration||Transport-specific data||Originate channel||Originate extension <br>|1|bind = 127.0.0.1:5060\\protocol=udp|GULP/sip:alice@127.0.0.1:5061|bob@default <br>|2|bind = 127.0.0.1:5060\\protocol=tcp|GULP/sip:alice@127.0.0.1:5061|bob@default <br>|3|bind = \[::1\]:5060\\protocol=udp|GULP/sip:alice@\[::1\]:5061|bobv6@default <br>|4|bind = \[::1\]:5060\\protocol=tcp|GULP/sip:alice@\[::1\]:5061|bobv6@default <br> <br>h5. Test 1: Bob does not exist <br> <br></td></tr>
            <tr><td class="diff-unchanged" >Procedure: <br>Remove Bob from the network. <br></td></tr>
            <tr><td class="diff-changed-lines" >Asterisk originates a call to Alice and directs the answered call to <span class="diff-deleted-words"style="color:#999;background-color:#fdd;text-decoration:line-through;">bob@default</span> <span class="diff-added-words"style="background-color: #dfd;">Bob</span> <br></td></tr>
            <tr><td class="diff-unchanged" > <br>Pass Conditions: <br></td></tr>
            <tr><td class="diff-snipped" >...<br></td></tr>
            <tr><td class="diff-unchanged" >Ensure that Asterisk sends a BYE to Alice <br> <br></td></tr>
            <tr><td class="diff-changed-lines" >h5. Test <span class="diff-deleted-words"style="color:#999;background-color:#fdd;text-decoration:line-through;">5: Asterisk-initiated,</span> <span class="diff-added-words"style="background-color: #dfd;">2:</span> Bob does not answer <br></td></tr>
            <tr><td class="diff-unchanged" > <br>Procedure: <br></td></tr>
            <tr><td class="diff-changed-lines" >Asterisk originates a call to Alice and directs the answered call to <span class="diff-deleted-words"style="color:#999;background-color:#fdd;text-decoration:line-through;">bob@default</span> <span class="diff-added-words"style="background-color: #dfd;">Bob</span> <br></td></tr>
            <tr><td class="diff-unchanged" >Bob rings but never answers the phone. <br> <br></td></tr>
            <tr><td class="diff-snipped" >...<br></td></tr>
            <tr><td class="diff-unchanged" >Ensure that Asterisk sends a BYE to Alice <br> <br></td></tr>
            <tr><td class="diff-changed-lines" >h5. Test <span class="diff-deleted-words"style="color:#999;background-color:#fdd;text-decoration:line-through;">6: Asterisk-initiated,</span> <span class="diff-added-words"style="background-color: #dfd;">3:</span> Bob is busy <br></td></tr>
            <tr><td class="diff-unchanged" > <br>Procedure: <br></td></tr>
            <tr><td class="diff-changed-lines" >Asterisk originates a call to Alice and directs the answered call to <span class="diff-deleted-words"style="color:#999;background-color:#fdd;text-decoration:line-through;">bob@default</span> <span class="diff-added-words"style="background-color: #dfd;">Bob</span> <br></td></tr>
            <tr><td class="diff-unchanged" >Bob responds with a busy response. <br> <br></td></tr>
            <tr><td class="diff-snipped" >...<br></td></tr>
    
            </table>
    </div>                            <h4>Full Content</h4>
                    <div class="notificationGreySide">
        <p>This page outlines some basic call tests for the new SIP work in Asterisk.</p>

<div>
<ul>
    <li><a href='#TestsforBasicCallFunctionality-ConfigurationforTests'>Configuration for Tests</a></li>
    <li><a href='#TestsforBasicCallFunctionality-IncomingCalltests'>Incoming Call tests</a></li>
<ul>
    <li><a href='#TestsforBasicCallFunctionality-Nominalpath'>Nominal path</a></li>
<ul>
    <li><a href='#TestsforBasicCallFunctionality-Test1%3AFilePlayback'>Test 1: File Playback</a></li>
    <li><a href='#TestsforBasicCallFunctionality-Test2%3AEcho'>Test 2: Echo</a></li>
</ul>
    <li><a href='#TestsforBasicCallFunctionality-Offnominalpaths'>Off-nominal paths</a></li>
<ul>
    <li><a href='#TestsforBasicCallFunctionality-Test1%3AUnknownSource'>Test 1: Unknown Source</a></li>
    <li><a href='#TestsforBasicCallFunctionality-Test2%3AAuthenticationfailure'>Test 2: Authentication failure</a></li>
    <li><a href='#TestsforBasicCallFunctionality-Test3%3AUnknownDestination'>Test 3: Unknown Destination</a></li>
    <li><a href='#TestsforBasicCallFunctionality-Test4%3AIncompatiblecodecs'>Test 4: Incompatible codecs</a></li>
</ul>
</ul>
    <li><a href='#TestsforBasicCallFunctionality-OutgoingCallTests'>Outgoing Call Tests</a></li>
<ul>
    <li><a href='#TestsforBasicCallFunctionality-NominalTests'>Nominal Tests</a></li>
<ul>
    <li><a href='#TestsforBasicCallFunctionality-Test1%3APlayback'>Test 1: Playback</a></li>
    <li><a href='#TestsforBasicCallFunctionality-Test2%3AEcho'>Test 2: Echo</a></li>
</ul>
    <li><a href='#TestsforBasicCallFunctionality-OffnominalTests'>Off-nominal Tests</a></li>
<ul>
    <li><a href='#TestsforBasicCallFunctionality-Test1%3ABobdoesnotexist'>Test 1: Bob does not exist</a></li>
    <li><a href='#TestsforBasicCallFunctionality-Test2%3ABobdoesnotanswer'>Test 2: Bob does not answer</a></li>
    <li><a href='#TestsforBasicCallFunctionality-Test3%3ABobisbusy'>Test 3: Bob is busy</a></li>
</ul>
</ul>
    <li><a href='#TestsforBasicCallFunctionality-TwopartyCalltests'>Two-party Call tests</a></li>
<ul>
    <li><a href='#TestsforBasicCallFunctionality-NominalTests%2CAliceinitiated'>Nominal Tests, Alice-initiated</a></li>
<ul>
    <li><a href='#TestsforBasicCallFunctionality-Test1%3AAlicehangsup'>Test 1: Alice hangs up</a></li>
    <li><a href='#TestsforBasicCallFunctionality-Test2%3ABobhangsup'>Test 2: Bob hangs up</a></li>
</ul>
    <li><a href='#TestsforBasicCallFunctionality-NominalTests%2CAsteriskinitiated'>Nominal Tests, Asterisk-initiated</a></li>
<ul>
    <li><a href='#TestsforBasicCallFunctionality-Test3%3AAlicehangsup'>Test 3: Alice hangs up</a></li>
    <li><a href='#TestsforBasicCallFunctionality-Test4%3ABobhangsup'>Test 4: Bob hangs up</a></li>
</ul>
    <li><a href='#TestsforBasicCallFunctionality-OffnominalTests%2CAliceinitiated'>Off-nominal Tests, Alice-initiated</a></li>
<ul>
    <li><a href='#TestsforBasicCallFunctionality-Test1%3ABobdoesnotexist'>Test 1: Bob does not exist</a></li>
    <li><a href='#TestsforBasicCallFunctionality-Test2%3ABobdoesnotanswer'>Test 2: Bob does not answer</a></li>
    <li><a href='#TestsforBasicCallFunctionality-Test3%3ABobisbusy'>Test 3: Bob is busy</a></li>
</ul>
    <li><a href='#TestsforBasicCallFunctionality-Offnominaltests%2CAsteriskinitiated'>Off-nominal tests, Asterisk-initiated</a></li>
<ul>
    <li><a href='#TestsforBasicCallFunctionality-Test1%3ABobdoesnotexist'>Test 1: Bob does not exist</a></li>
    <li><a href='#TestsforBasicCallFunctionality-Test2%3ABobdoesnotanswer'>Test 2: Bob does not answer</a></li>
    <li><a href='#TestsforBasicCallFunctionality-Test3%3ABobisbusy'>Test 3: Bob is busy</a></li>
</ul>
</ul>
</ul></div>

<h1><a name="TestsforBasicCallFunctionality-ConfigurationforTests"></a>Configuration for Tests</h1>

<p>The configuration for these tests will all be made from a basic template. Some tests will require configuration to be added to the template. This will be specified in the test if necessary.</p>

<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedHeader panelHeader" style="border-bottom-width: 1px;"><b>res_sip.conf</b></div><div class="preformattedContent panelContent">
<pre>[local-transport-template](!)
type=transport

[local-transport](local-transport-template)
; Place test-specific transport options here

[endpoint-template](!)
type=endpoint
context=default
transport=local-transport
allow=!all,ulaw,alaw

; alice is the caller
[alice](endpoint-template)
; Place alice-specific options here

; bob is the recipient of outbound calls
[bob](endpoint-template)
host=127.0.0.1:5062
; Place bob-specific options here

[auth-template](!)
type=auth

[alice-auth](auth-template)
username=alice
; Place alice-specific auth options here

[bob-auth](auth-template)
username=bob
; Place bob-specific auth options here
; Note: in the first iteration of tests on
; this page, there will never be any bob-specific
; auth options because we do not respond properly
; to auth challenges.
</pre>
</div></div>

<div class="preformatted panel" style="border-width: 1px;"><div class="preformattedHeader panelHeader" style="border-bottom-width: 1px;"><b>extensions.conf</b></div><div class="preformattedContent panelContent">
<pre>exten =&gt; echo,1,Answer()
same  =&gt;      n,Echo()
same  =&gt;      n,Hangup()

exten =&gt; playback,1,Answer()
same  =&gt;          n,Playback(hello-world)
same  =&gt;          n,Hangup()

exten =&gt; early,1,Progress()
same  =&gt;       n,Playback(hello-world,noanswer)
same  =&gt;       n,Hangup(INTERWORKING)

;This dialstring can be altered once endpoints can be used directly
exten =&gt; bob,1,Dial(GULP/sip:bob@127.0.0.1:5062,10)
same  =&gt;     n,Hangup()

exten =&gt; bobv6,1,Dial(GULP/sip:bob@[::1]:5062,10)
same  =&gt;       n,Hangup()

</pre>
</div></div>

<h1><a name="TestsforBasicCallFunctionality-IncomingCalltests"></a>Incoming Call tests</h1>

<p>Incoming call tests involve a call placed from endpoint "alice" to Asterisk.</p>

<h3><a name="TestsforBasicCallFunctionality-Nominalpath"></a>Nominal path</h3>

<p>All Nominal path tests will be run multiple times. Each iteration of the test is detailed in the table below.</p>

<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'>Iteration</th>
<th class='confluenceTh'>Transport-specific Data</th>
<th class='confluenceTh'>Alice-specific Data</th>
<th class='confluenceTh'>Alice-auth-specific data</th>
<th class='confluenceTh'>modules.conf additions</th>
<th class='confluenceTh'>INVITE details</th>
<th class='confluenceTh'>Comment</th>
</tr>
<tr>
<td class='confluenceTd'>1</td>
<td class='confluenceTd'>bind=127.0.0.1:5060<br class="atl-forced-newline" />protocol=udp</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>SDP in INVITE</td>
<td class='confluenceTd'>Identify by username, no auth</td>
</tr>
<tr>
<td class='confluenceTd'>2</td>
<td class='confluenceTd'>bind=127.0.0.1:5060<br class="atl-forced-newline" />protocol=udp</td>
<td class='confluenceTd'>auth = alice-auth</td>
<td class='confluenceTd'>password = swordfish</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>SDP in INVITE</td>
<td class='confluenceTd'>Identify by username, userpass auth</td>
</tr>
<tr>
<td class='confluenceTd'>3</td>
<td class='confluenceTd'>bind=127.0.0.1:5060<br class="atl-forced-newline" />protocol=udp</td>
<td class='confluenceTd'>auth = alice-auth</td>
<td class='confluenceTd'>auth_type=md5<br class="atl-forced-newline" />md5_cred=c9b9e23e2160fd69b19f99116da19711</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>SDP in INVITE</td>
<td class='confluenceTd'>Identify by username, md5 auth</td>
</tr>
<tr>
<td class='confluenceTd'>4</td>
<td class='confluenceTd'>bind=127.0.0.1:5060<br class="atl-forced-newline" />protocol=udp</td>
<td class='confluenceTd'>host = 127.0.0.1:5061</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>noload =&gt; res_sip_endpoint_identifier_user.so</td>
<td class='confluenceTd'>SDP in INVITE</td>
<td class='confluenceTd'>Identify by host, no auth</td>
</tr>
<tr>
<td class='confluenceTd'>5</td>
<td class='confluenceTd'>bind=127.0.0.1:5060<br class="atl-forced-newline" />protocol=udp</td>
<td class='confluenceTd'>host = 127.0.0.1:5061<br class="atl-forced-newline" />auth = alice-auth</td>
<td class='confluenceTd'>password = swordfish</td>
<td class='confluenceTd'>noload =&gt; res_sip_endpoint_identifier_user.so</td>
<td class='confluenceTd'>SDP in INVITE</td>
<td class='confluenceTd'>Identify by host, userpass auth</td>
</tr>
<tr>
<td class='confluenceTd'>6</td>
<td class='confluenceTd'>bind=127.0.0.1:5060<br class="atl-forced-newline" />protocol=udp</td>
<td class='confluenceTd'>host = 127.0.0.1:5061<br class="atl-forced-newline" />auth = alice-auth</td>
<td class='confluenceTd'>auth_type=md5<br class="atl-forced-newline" />md5_cred=c9b9e23e2160fd69b19f99116da19711</td>
<td class='confluenceTd'>noload =&gt; res_sip_endpoint_identifier_user.so</td>
<td class='confluenceTd'>SDP in INVITE</td>
<td class='confluenceTd'>Identify by host, md5 auth</td>
</tr>
<tr>
<td class='confluenceTd'>7</td>
<td class='confluenceTd'>bind=127.0.0.1:5060<br class="atl-forced-newline" />protocol=tcp</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>SDP in INVITE</td>
<td class='confluenceTd'>Identify by username, no auth (TCP)</td>
</tr>
<tr>
<td class='confluenceTd'>8</td>
<td class='confluenceTd'>bind=127.0.0.1:5060<br class="atl-forced-newline" />protocol=tcp</td>
<td class='confluenceTd'>auth = alice-auth</td>
<td class='confluenceTd'>password = swordfish</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>SDP in INVITE</td>
<td class='confluenceTd'>Identify by username, userpass auth (TCP)</td>
</tr>
<tr>
<td class='confluenceTd'>9</td>
<td class='confluenceTd'>bind=127.0.0.1:5060<br class="atl-forced-newline" />protocol=tcp</td>
<td class='confluenceTd'>auth = alice-auth</td>
<td class='confluenceTd'>auth_type=md5<br class="atl-forced-newline" />md5_cred=c9b9e23e2160fd69b19f99116da19711</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>SDP in INVITE</td>
<td class='confluenceTd'>Identify by username, md5 auth (TCP)</td>
</tr>
<tr>
<td class='confluenceTd'>10</td>
<td class='confluenceTd'>bind=127.0.0.1:5060<br class="atl-forced-newline" />protocol=tcp</td>
<td class='confluenceTd'>host = 127.0.0.1:5061</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>noload =&gt; res_sip_endpoint_identifier_user.so</td>
<td class='confluenceTd'>SDP in INVITE</td>
<td class='confluenceTd'>Identify by host, no auth (TCP)</td>
</tr>
<tr>
<td class='confluenceTd'>11</td>
<td class='confluenceTd'>bind=127.0.0.1:5060<br class="atl-forced-newline" />protocol=tcp</td>
<td class='confluenceTd'>host = 127.0.0.1:5061<br class="atl-forced-newline" />auth = alice-auth</td>
<td class='confluenceTd'>password = swordfish</td>
<td class='confluenceTd'>noload =&gt; res_sip_endpoint_identifier_user.so</td>
<td class='confluenceTd'>SDP in INVITE</td>
<td class='confluenceTd'>Identify by host, userpass auth (TCP)</td>
</tr>
<tr>
<td class='confluenceTd'>12</td>
<td class='confluenceTd'>bind=127.0.0.1:5060<br class="atl-forced-newline" />protocol=tcp</td>
<td class='confluenceTd'>host = 127.0.0.1:5061<br class="atl-forced-newline" />auth = alice-auth</td>
<td class='confluenceTd'>auth_type=md5<br class="atl-forced-newline" />md5_cred=c9b9e23e2160fd69b19f99116da19711</td>
<td class='confluenceTd'>noload =&gt; res_sip_endpoint_identifier_user.so</td>
<td class='confluenceTd'>SDP in INVITE</td>
<td class='confluenceTd'>Identify by host, md5 auth (TCP)</td>
</tr>
<tr>
<td class='confluenceTd'>13</td>
<td class='confluenceTd'>bind=127.0.0.1:5060<br class="atl-forced-newline" />protocol=udp</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>No SDP in INVITE</td>
<td class='confluenceTd'>Identify by username, no auth</td>
</tr>
<tr>
<td class='confluenceTd'>14</td>
<td class='confluenceTd'>bind=127.0.0.1:5060<br class="atl-forced-newline" />protocol=udp</td>
<td class='confluenceTd'>auth = alice-auth</td>
<td class='confluenceTd'>password = swordfish</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>No SDP in INVITE</td>
<td class='confluenceTd'>Identify by username, userpass auth</td>
</tr>
<tr>
<td class='confluenceTd'>15</td>
<td class='confluenceTd'>bind=127.0.0.1:5060<br class="atl-forced-newline" />protocol=udp</td>
<td class='confluenceTd'>auth = alice-auth</td>
<td class='confluenceTd'>auth_type=md5<br class="atl-forced-newline" />md5_cred=c9b9e23e2160fd69b19f99116da19711</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>No SDP in INVITE</td>
<td class='confluenceTd'>Identify by username, md5 auth</td>
</tr>
<tr>
<td class='confluenceTd'>16</td>
<td class='confluenceTd'>bind=127.0.0.1:5060<br class="atl-forced-newline" />protocol=udp</td>
<td class='confluenceTd'>host = 127.0.0.1:5061</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>noload =&gt; res_sip_endpoint_identifier_user.so</td>
<td class='confluenceTd'>No SDP in INVITE</td>
<td class='confluenceTd'>Identify by host, no auth</td>
</tr>
<tr>
<td class='confluenceTd'>17</td>
<td class='confluenceTd'>bind=127.0.0.1:5060<br class="atl-forced-newline" />protocol=udp</td>
<td class='confluenceTd'>host = 127.0.0.1:5061<br class="atl-forced-newline" />auth = alice-auth</td>
<td class='confluenceTd'>password = swordfish</td>
<td class='confluenceTd'>noload =&gt; res_sip_endpoint_identifier_user.so</td>
<td class='confluenceTd'>No SDP in INVITE</td>
<td class='confluenceTd'>Identify by host, userpass auth</td>
</tr>
<tr>
<td class='confluenceTd'>18</td>
<td class='confluenceTd'>bind=127.0.0.1:5060<br class="atl-forced-newline" />protocol=udp</td>
<td class='confluenceTd'>host = 127.0.0.1:5061<br class="atl-forced-newline" />auth = alice-auth</td>
<td class='confluenceTd'>auth_type=md5<br class="atl-forced-newline" />md5_cred=c9b9e23e2160fd69b19f99116da19711</td>
<td class='confluenceTd'>noload =&gt; res_sip_endpoint_identifier_user.so</td>
<td class='confluenceTd'>No SDP in INVITE</td>
<td class='confluenceTd'>Identify by host, md5 auth</td>
</tr>
<tr>
<td class='confluenceTd'>19</td>
<td class='confluenceTd'>bind=127.0.0.1:5060<br class="atl-forced-newline" />protocol=tcp</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>No SDP in INVITE</td>
<td class='confluenceTd'>Identify by username, no auth (TCP)</td>
</tr>
<tr>
<td class='confluenceTd'>20</td>
<td class='confluenceTd'>bind=127.0.0.1:5060<br class="atl-forced-newline" />protocol=tcp</td>
<td class='confluenceTd'>auth = alice-auth</td>
<td class='confluenceTd'>password = swordfish</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>No SDP in INVITE</td>
<td class='confluenceTd'>Identify by username, userpass auth (TCP)</td>
</tr>
<tr>
<td class='confluenceTd'>21</td>
<td class='confluenceTd'>bind=127.0.0.1:5060<br class="atl-forced-newline" />protocol=tcp</td>
<td class='confluenceTd'>auth = alice-auth</td>
<td class='confluenceTd'>auth_type=md5<br class="atl-forced-newline" />md5_cred=c9b9e23e2160fd69b19f99116da19711</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>No SDP in INVITE</td>
<td class='confluenceTd'>Identify by username, md5 auth (TCP)</td>
</tr>
<tr>
<td class='confluenceTd'>22</td>
<td class='confluenceTd'>bind=127.0.0.1:5060<br class="atl-forced-newline" />protocol=tcp</td>
<td class='confluenceTd'>host = 127.0.0.1:5061</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>noload =&gt; res_sip_endpoint_identifier_user.so</td>
<td class='confluenceTd'>No SDP in INVITE</td>
<td class='confluenceTd'>Identify by host, no auth (TCP)</td>
</tr>
<tr>
<td class='confluenceTd'>23</td>
<td class='confluenceTd'>bind=127.0.0.1:5060<br class="atl-forced-newline" />protocol=tcp</td>
<td class='confluenceTd'>host = 127.0.0.1:5061<br class="atl-forced-newline" />auth = alice-auth</td>
<td class='confluenceTd'>password = swordfish</td>
<td class='confluenceTd'>noload =&gt; res_sip_endpoint_identifier_user.so</td>
<td class='confluenceTd'>No SDP in INVITE</td>
<td class='confluenceTd'>Identify by host, userpass auth (TCP)</td>
</tr>
<tr>
<td class='confluenceTd'>24</td>
<td class='confluenceTd'>bind=127.0.0.1:5060<br class="atl-forced-newline" />protocol=tcp</td>
<td class='confluenceTd'>host = 127.0.0.1:5061<br class="atl-forced-newline" />auth = alice-auth</td>
<td class='confluenceTd'>auth_type=md5<br class="atl-forced-newline" />md5_cred=c9b9e23e2160fd69b19f99116da19711</td>
<td class='confluenceTd'>noload =&gt; res_sip_endpoint_identifier_user.so</td>
<td class='confluenceTd'>No SDP in INVITE</td>
<td class='confluenceTd'>Identify by host, md5 auth (TCP)</td>
</tr>
<tr>
<td class='confluenceTd'>25</td>
<td class='confluenceTd'>bind=[::1]:5060<br class="atl-forced-newline" />protocol=udp</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>SDP in INVITE</td>
<td class='confluenceTd'>Identify by username, no auth (IPv6)</td>
</tr>
<tr>
<td class='confluenceTd'>26</td>
<td class='confluenceTd'>bind=[::1]:5060<br class="atl-forced-newline" />protocol=udp</td>
<td class='confluenceTd'>auth = alice-auth</td>
<td class='confluenceTd'>password = swordfish</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>SDP in INVITE</td>
<td class='confluenceTd'>Identify by username, userpass auth (IPv6)</td>
</tr>
<tr>
<td class='confluenceTd'>27</td>
<td class='confluenceTd'>bind=[::1]:5060<br class="atl-forced-newline" />protocol=udp</td>
<td class='confluenceTd'>auth = alice-auth</td>
<td class='confluenceTd'>auth_type=md5<br class="atl-forced-newline" />md5_cred=c9b9e23e2160fd69b19f99116da19711</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>SDP in INVITE</td>
<td class='confluenceTd'>Identify by username, md5 auth (IPv6)</td>
</tr>
<tr>
<td class='confluenceTd'>28</td>
<td class='confluenceTd'>bind=[::1]:5060<br class="atl-forced-newline" />protocol=udp</td>
<td class='confluenceTd'>host = [::1]:5061</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>noload =&gt; res_sip_endpoint_identifier_user.so</td>
<td class='confluenceTd'>SDP in INVITE</td>
<td class='confluenceTd'>Identify by host, no auth (IPv6)</td>
</tr>
<tr>
<td class='confluenceTd'>29</td>
<td class='confluenceTd'>bind=[::1]:5060<br class="atl-forced-newline" />protocol=udp</td>
<td class='confluenceTd'>host = [::1]:5061<br class="atl-forced-newline" />auth = alice-auth</td>
<td class='confluenceTd'>password = swordfish</td>
<td class='confluenceTd'>noload =&gt; res_sip_endpoint_identifier_user.so</td>
<td class='confluenceTd'>SDP in INVITE</td>
<td class='confluenceTd'>Identify by host, userpass auth (IPv6)</td>
</tr>
<tr>
<td class='confluenceTd'>30</td>
<td class='confluenceTd'>bind=[::1]:5060<br class="atl-forced-newline" />protocol=udp</td>
<td class='confluenceTd'>host = [::1]:5061<br class="atl-forced-newline" />auth = alice-auth</td>
<td class='confluenceTd'>auth_type=md5<br class="atl-forced-newline" />md5_cred=c9b9e23e2160fd69b19f99116da19711</td>
<td class='confluenceTd'>noload =&gt; res_sip_endpoint_identifier_user.so</td>
<td class='confluenceTd'>SDP in INVITE</td>
<td class='confluenceTd'>Identify by host, md5 auth (IPv6)</td>
</tr>
<tr>
<td class='confluenceTd'>31</td>
<td class='confluenceTd'>bind=[::1]:5060<br class="atl-forced-newline" />protocol=tcp</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>SDP in INVITE</td>
<td class='confluenceTd'>Identify by username, no auth (TCP) (IPv6)</td>
</tr>
<tr>
<td class='confluenceTd'>32</td>
<td class='confluenceTd'>bind=[::1]:5060<br class="atl-forced-newline" />protocol=tcp</td>
<td class='confluenceTd'>auth = alice-auth</td>
<td class='confluenceTd'>password = swordfish</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>SDP in INVITE</td>
<td class='confluenceTd'>Identify by username, userpass auth (TCP) (IPv6)</td>
</tr>
<tr>
<td class='confluenceTd'>33</td>
<td class='confluenceTd'>bind=[::1]:5060<br class="atl-forced-newline" />protocol=tcp</td>
<td class='confluenceTd'>auth = alice-auth</td>
<td class='confluenceTd'>auth_type=md5<br class="atl-forced-newline" />md5_cred=c9b9e23e2160fd69b19f99116da19711</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>SDP in INVITE</td>
<td class='confluenceTd'>Identify by username, md5 auth (TCP) (IPv6)</td>
</tr>
<tr>
<td class='confluenceTd'>34</td>
<td class='confluenceTd'>bind=[::1]:5060<br class="atl-forced-newline" />protocol=tcp</td>
<td class='confluenceTd'>host = [::1]:5061</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>noload =&gt; res_sip_endpoint_identifier_user.so</td>
<td class='confluenceTd'>SDP in INVITE</td>
<td class='confluenceTd'>Identify by host, no auth (TCP) (IPv6)</td>
</tr>
<tr>
<td class='confluenceTd'>35</td>
<td class='confluenceTd'>bind=[::1]:5060<br class="atl-forced-newline" />protocol=tcp</td>
<td class='confluenceTd'>host = [::1]:5061<br class="atl-forced-newline" />auth = alice-auth</td>
<td class='confluenceTd'>password = swordfish</td>
<td class='confluenceTd'>noload =&gt; res_sip_endpoint_identifier_user.so</td>
<td class='confluenceTd'>SDP in INVITE</td>
<td class='confluenceTd'>Identify by host, userpass auth (TCP) (IPv6)</td>
</tr>
<tr>
<td class='confluenceTd'>36</td>
<td class='confluenceTd'>bind=[::1]:5060<br class="atl-forced-newline" />protocol=tcp</td>
<td class='confluenceTd'>host = [::1]:5061<br class="atl-forced-newline" />auth = alice-auth</td>
<td class='confluenceTd'>auth_type=md5<br class="atl-forced-newline" />md5_cred=c9b9e23e2160fd69b19f99116da19711</td>
<td class='confluenceTd'>noload =&gt; res_sip_endpoint_identifier_user.so</td>
<td class='confluenceTd'>SDP in INVITE</td>
<td class='confluenceTd'>Identify by host, md5 auth (TCP) (IPv6)</td>
</tr>
<tr>
<td class='confluenceTd'>37</td>
<td class='confluenceTd'>bind=[::1]:5060<br class="atl-forced-newline" />protocol=udp</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>No SDP in INVITE</td>
<td class='confluenceTd'>Identify by username, no auth (IPv6)</td>
</tr>
<tr>
<td class='confluenceTd'>38</td>
<td class='confluenceTd'>bind=[::1]:5060<br class="atl-forced-newline" />protocol=udp</td>
<td class='confluenceTd'>auth = alice-auth</td>
<td class='confluenceTd'>password = swordfish</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>No SDP in INVITE</td>
<td class='confluenceTd'>Identify by username, userpass auth (IPv6)</td>
</tr>
<tr>
<td class='confluenceTd'>39</td>
<td class='confluenceTd'>bind=[::1]:5060<br class="atl-forced-newline" />protocol=udp</td>
<td class='confluenceTd'>auth = alice-auth</td>
<td class='confluenceTd'>auth_type=md5<br class="atl-forced-newline" />md5_cred=c9b9e23e2160fd69b19f99116da19711</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>No SDP in INVITE</td>
<td class='confluenceTd'>Identify by username, md5 auth (IPv6)</td>
</tr>
<tr>
<td class='confluenceTd'>40</td>
<td class='confluenceTd'>bind=[::1]:5060<br class="atl-forced-newline" />protocol=udp</td>
<td class='confluenceTd'>host = [::1]:5061</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>noload =&gt; res_sip_endpoint_identifier_user.so</td>
<td class='confluenceTd'>No SDP in INVITE</td>
<td class='confluenceTd'>Identify by host, no auth (IPv6)</td>
</tr>
<tr>
<td class='confluenceTd'>41</td>
<td class='confluenceTd'>bind=[::1]:5060<br class="atl-forced-newline" />protocol=udp</td>
<td class='confluenceTd'>host = [::1]:5061<br class="atl-forced-newline" />auth = alice-auth</td>
<td class='confluenceTd'>password = swordfish</td>
<td class='confluenceTd'>noload =&gt; res_sip_endpoint_identifier_user.so</td>
<td class='confluenceTd'>No SDP in INVITE</td>
<td class='confluenceTd'>Identify by host, userpass auth (IPv6)</td>
</tr>
<tr>
<td class='confluenceTd'>42</td>
<td class='confluenceTd'>bind=[::1]:5060<br class="atl-forced-newline" />protocol=udp</td>
<td class='confluenceTd'>host = [::1]:5061<br class="atl-forced-newline" />auth = alice-auth</td>
<td class='confluenceTd'>auth_type=md5<br class="atl-forced-newline" />md5_cred=c9b9e23e2160fd69b19f99116da19711</td>
<td class='confluenceTd'>noload =&gt; res_sip_endpoint_identifier_user.so</td>
<td class='confluenceTd'>No SDP in INVITE</td>
<td class='confluenceTd'>Identify by host, md5 auth (IPv6)</td>
</tr>
<tr>
<td class='confluenceTd'>43</td>
<td class='confluenceTd'>bind=[::1]:5060<br class="atl-forced-newline" />protocol=tcp</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>No SDP in INVITE</td>
<td class='confluenceTd'>Identify by username, no auth (TCP) (IPv6)</td>
</tr>
<tr>
<td class='confluenceTd'>44</td>
<td class='confluenceTd'>bind=[::1]:5060<br class="atl-forced-newline" />protocol=tcp</td>
<td class='confluenceTd'>auth = alice-auth</td>
<td class='confluenceTd'>password = swordfish</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>No SDP in INVITE</td>
<td class='confluenceTd'>Identify by username, userpass auth (TCP) (IPv6)</td>
</tr>
<tr>
<td class='confluenceTd'>45</td>
<td class='confluenceTd'>bind=[::1]:5060<br class="atl-forced-newline" />protocol=tcp</td>
<td class='confluenceTd'>auth = alice-auth</td>
<td class='confluenceTd'>auth_type=md5<br class="atl-forced-newline" />md5_cred=c9b9e23e2160fd69b19f99116da19711</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>No SDP in INVITE</td>
<td class='confluenceTd'>Identify by username, md5 auth (TCP) (IPv6)</td>
</tr>
<tr>
<td class='confluenceTd'>46</td>
<td class='confluenceTd'>bind=[::1]:5060<br class="atl-forced-newline" />protocol=tcp</td>
<td class='confluenceTd'>host = [::1]:5061</td>
<td class='confluenceTd'>none</td>
<td class='confluenceTd'>noload =&gt; res_sip_endpoint_identifier_user.so</td>
<td class='confluenceTd'>No SDP in INVITE</td>
<td class='confluenceTd'>Identify by host, no auth (TCP) (IPv6)</td>
</tr>
<tr>
<td class='confluenceTd'>47</td>
<td class='confluenceTd'>bind=[::1]:5060<br class="atl-forced-newline" />protocol=tcp</td>
<td class='confluenceTd'>host = [::1]:5061<br class="atl-forced-newline" />auth = alice-auth</td>
<td class='confluenceTd'>password = swordfish</td>
<td class='confluenceTd'>noload =&gt; res_sip_endpoint_identifier_user.so</td>
<td class='confluenceTd'>No SDP in INVITE</td>
<td class='confluenceTd'>Identify by host, userpass auth (TCP) (IPv6)</td>
</tr>
<tr>
<td class='confluenceTd'>48</td>
<td class='confluenceTd'>bind=[::1]:5060<br class="atl-forced-newline" />protocol=tcp</td>
<td class='confluenceTd'>host = [::1]:5061<br class="atl-forced-newline" />auth = alice-auth</td>
<td class='confluenceTd'>auth_type=md5<br class="atl-forced-newline" />md5_cred=c9b9e23e2160fd69b19f99116da19711</td>
<td class='confluenceTd'>noload =&gt; res_sip_endpoint_identifier_user.so</td>
<td class='confluenceTd'>No SDP in INVITE</td>
<td class='confluenceTd'>Identify by host, md5 auth (TCP) (IPv6)</td>
</tr>
</tbody></table>
</div>



<h5><a name="TestsforBasicCallFunctionality-Test1%3AFilePlayback"></a>Test 1: File Playback</h5>

<p>Procedure:<br/>
Alice places a call to extension playback@default</p>

<p>Pass conditions:<br/>
Ensure that the audio reaches Alice properly<br/>
Ensure that Asterisk sends a BYE to Alice</p>

<h5><a name="TestsforBasicCallFunctionality-Test2%3AEcho"></a>Test 2: Echo</h5>

<p>Procedure:<br/>
Alice places a call to extension echo@default.<br/>
Alice plays audio towards Asterisk. The audio is reflected back to her.<br/>
After 5 seconds, Alice hangs up.</p>

<p>Pass conditions:<br/>
Ensure that audio from Alice reaches Asterisk<br/>
Ensure that echoed audio from Asterisk reaches Alice<br/>
Ensure that Asterisk responds to Alice's BYE with a 200 OK</p>

<h3><a name="TestsforBasicCallFunctionality-Offnominalpaths"></a>Off-nominal paths</h3>

<p>All off-nominal tests will need to be run multiple times. Details on each iteration are given below:</p>

<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'>Iteration</th>
<th class='confluenceTh'>Transport-specific options</th>
<th class='confluenceTh'>Comment</th>
</tr>
<tr>
<td class='confluenceTd'>1</td>
<td class='confluenceTd'>bind = 127.0.0.1:5060<br class="atl-forced-newline" />protocol = udp</td>
<td class='confluenceTd'>IPv4 UDP</td>
</tr>
<tr>
<td class='confluenceTd'>2</td>
<td class='confluenceTd'>bind = 127.0.0.1:5060<br class="atl-forced-newline" />protocol = tcp</td>
<td class='confluenceTd'>IPv4 TCP</td>
</tr>
<tr>
<td class='confluenceTd'>3</td>
<td class='confluenceTd'>bind = [::1]:5060<br class="atl-forced-newline" />protocol = udp</td>
<td class='confluenceTd'>IPv6 UDP</td>
</tr>
<tr>
<td class='confluenceTd'>4</td>
<td class='confluenceTd'>bind = [::1]:5060<br class="atl-forced-newline" />protocol = tcp</td>
<td class='confluenceTd'>IPv6 TCP</td>
</tr>
</tbody></table>
</div>


<p>Note that if a specific test requires multiple iteration, the total number of test iterations will be the product of the test's number of iteration multiplied by the number of iterations in the above table.</p>

<h5><a name="TestsforBasicCallFunctionality-Test1%3AUnknownSource"></a>Test 1: Unknown Source</h5>

<p>Procedure:<br/>
Carol places a call to extension playback@default</p>

<p>Pass conditions:<br/>
Ensure Asterisk sends a 403 to Carol</p>

<h5><a name="TestsforBasicCallFunctionality-Test2%3AAuthenticationfailure"></a>Test 2: Authentication failure</h5>

<p>This test requires several iterations. The differences in each iteration are detailed in the table below</p>

<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'>Iteration</th>
<th class='confluenceTh'>Alice-specific Data</th>
<th class='confluenceTh'>Alice-auth-specific data</th>
<th class='confluenceTh'>Supplied Credentials</th>
<th class='confluenceTh'>Comment</th>
</tr>
<tr>
<td class='confluenceTd'>1</td>
<td class='confluenceTd'>auth=alice-auth</td>
<td class='confluenceTd'>password=swordfish</td>
<td class='confluenceTd'>realm=asterisk <br class="atl-forced-newline" /> username=alice <br class="atl-forced-newline" /> password=halibut</td>
<td class='confluenceTd'>Userpass authentication, wrong password</td>
</tr>
<tr>
<td class='confluenceTd'>2</td>
<td class='confluenceTd'>auth=alice-auth</td>
<td class='confluenceTd'>password=swordfish</td>
<td class='confluenceTd'>realm=asterisk <br class="atl-forced-newline" /> username=carol <br class="atl-forced-newline" /> password=swordfish</td>
<td class='confluenceTd'>Userpass authentication, wrong username</td>
</tr>
<tr>
<td class='confluenceTd'>3</td>
<td class='confluenceTd'>auth=alice-auth</td>
<td class='confluenceTd'>password=swordfish</td>
<td class='confluenceTd'>realm=ampersand <br class="atl-forced-newline" /> username=alice <br class="atl-forced-newline" /> password=swordfish</td>
<td class='confluenceTd'>Userpass authentication, wrong realm</td>
</tr>
<tr>
<td class='confluenceTd'>4</td>
<td class='confluenceTd'>auth=alice-auth</td>
<td class='confluenceTd'>auth_type=md5<br class="atl-forced-newline" />md5_cred=c9b9e23e2160fd69b19f99116da19711</td>
<td class='confluenceTd'>realm=asterisk <br class="atl-forced-newline" /> username=alice <br class="atl-forced-newline" /> password=halibut</td>
<td class='confluenceTd'>MD5 authentication, wrong password</td>
</tr>
<tr>
<td class='confluenceTd'>5</td>
<td class='confluenceTd'>auth=alice-auth</td>
<td class='confluenceTd'>auth_type=md5<br class="atl-forced-newline" />md5_cred=c9b9e23e2160fd69b19f99116da19711</td>
<td class='confluenceTd'>realm=asterisk <br class="atl-forced-newline" /> username=carol <br class="atl-forced-newline" /> password=swordfish</td>
<td class='confluenceTd'>MD5 authentication, wrong username</td>
</tr>
<tr>
<td class='confluenceTd'>6</td>
<td class='confluenceTd'>auth=alice-auth</td>
<td class='confluenceTd'>auth_type=md5<br class="atl-forced-newline" />md5_cred=c9b9e23e2160fd69b19f99116da19711</td>
<td class='confluenceTd'>realm=ampersand <br class="atl-forced-newline" /> username=alice <br class="atl-forced-newline" /> password=swordfish</td>
<td class='confluenceTd'>MD5 authentication, wrong realm</td>
</tr>
</tbody></table>
</div>



<p>Procedure:<br/>
Alice places a call to extension playback@default</p>

<p>Pass Conditions:<br/>
Ensure that Asterisk rejects all INVITEs with credentials with 401s.</p>

<h5><a name="TestsforBasicCallFunctionality-Test3%3AUnknownDestination"></a>Test 3: Unknown Destination</h5>

<p>Procedure:<br/>
Alice places a call to extension carol@default</p>

<p>Pass Conditions:<br/>
Ensure that Asterisk sends a 404 to Alice</p>

<h5><a name="TestsforBasicCallFunctionality-Test4%3AIncompatiblecodecs"></a>Test 4: Incompatible codecs</h5>

<p>Procedure:<br/>
Alice places a call to extension playback@default, offering G.729 audio.</p>

<p>Pass Conditions:<br/>
Ensure that Asterisk sends a 488 to Alice</p>

<h1><a name="TestsforBasicCallFunctionality-OutgoingCallTests"></a>Outgoing Call Tests</h1>

<p>These tests all describe calls from Asterisk to endpoint "bob".</p>

<p>All outgoing tests will require multiple iterations. The details of each iteration are given in the following table:</p>

<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'>Iteration</th>
<th class='confluenceTh'>Transport-specific data</th>
<th class='confluenceTh'>Originate channel</th>
<th class='confluenceTh'>Comment</th>
</tr>
<tr>
<td class='confluenceTd'>1</td>
<td class='confluenceTd'>bind = 127.0.0.1:5060<br class="atl-forced-newline" />protocol=udp</td>
<td class='confluenceTd'>GULP/sip:bob@127.0.0.1:5062</td>
<td class='confluenceTd'> IPv4 UDP</td>
</tr>
<tr>
<td class='confluenceTd'>2</td>
<td class='confluenceTd'>bind = 127.0.0.1:5060<br class="atl-forced-newline" />protocol=tcp</td>
<td class='confluenceTd'>GULP/sip:bob@127.0.0.1:5062</td>
<td class='confluenceTd'> IPv4 TCP</td>
</tr>
<tr>
<td class='confluenceTd'>3</td>
<td class='confluenceTd'>bind = [::1]:5060<br class="atl-forced-newline" />protocol=udp</td>
<td class='confluenceTd'>GULP/sip:bob@[::1]:5062</td>
<td class='confluenceTd'> IPv6 UDP</td>
</tr>
<tr>
<td class='confluenceTd'>4</td>
<td class='confluenceTd'>bind = [::1]:5060<br class="atl-forced-newline" />protocol=udp</td>
<td class='confluenceTd'>GULP/sip:bob@[::1]:5062</td>
<td class='confluenceTd'> IPv6 TCP</td>
</tr>
</tbody></table>
</div>


<h3><a name="TestsforBasicCallFunctionality-NominalTests"></a>Nominal Tests</h3>

<h5><a name="TestsforBasicCallFunctionality-Test1%3APlayback"></a>Test 1: Playback</h5>

<p>Procedure:<br/>
Originate a call from Asterisk to Bob and direct the answered call to playback@default</p>

<p>Pass Conditions:<br/>
Ensure that audio flows properly from Asterisk to Bob<br/>
Ensure that Asterisk sends a BYE to Bob after the playback has completed</p>

<h5><a name="TestsforBasicCallFunctionality-Test2%3AEcho"></a>Test 2: Echo</h5>

<p>Procedure:<br/>
Originate a call from Asterisk to Bob and direct the answered call to echo@default<br/>
Bob plays audio to Asterisk<br/>
After five seconds, Bob hangs up</p>

<p>Pass Conditions:<br/>
Ensure that audio flows properly from Bob to Asterisk<br/>
Ensure that audio from Bob to Asterisk is echoed properly back to Bob<br/>
Ensure that Asterisk responds to Bob's BYE with a 200 OK</p>

<h3><a name="TestsforBasicCallFunctionality-OffnominalTests"></a>Off-nominal Tests</h3>

<h5><a name="TestsforBasicCallFunctionality-Test1%3ABobdoesnotexist"></a>Test 1: Bob does not exist</h5>

<p>Procedure:<br/>
Remove Bob from the network.<br/>
Originate a call from Asterisk to Bob.</p>

<p>Pass Conditions:<br/>
Ensure that Asterisk tears down the created session properly after timer B expires (32 seconds by default)</p>

<h5><a name="TestsforBasicCallFunctionality-Test2%3ABobdoesnotanswer"></a>Test 2: Bob does not answer</h5>

<p>Procedure:<br/>
Originate a call from Asterisk to Bob.<br/>
Bob rings but never answers the phone.</p>

<p>Pass Conditions:<br/>
Ensure that Asterisk cancels the outgoing call after the Dial timeout is reached.</p>

<h5><a name="TestsforBasicCallFunctionality-Test3%3ABobisbusy"></a>Test 3: Bob is busy</h5>

<p>Procedure:<br/>
Originate a call from Asterisk to Bob.<br/>
Bob responds with a busy response.</p>

<p>Pass Conditions:<br/>
Ensure that Asterisk receives the 486 from Bob and ACKs it.<br/>
Ensure that this results in the outgoing session being destroyed.</p>

<h1><a name="TestsforBasicCallFunctionality-TwopartyCalltests"></a>Two-party Call tests</h1>

<h3><a name="TestsforBasicCallFunctionality-NominalTests%2CAliceinitiated"></a>Nominal Tests, Alice-initiated</h3>

<p>The following tests require multiple iterations. Details about each iteration are in the following table:</p>

<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'>Iteration</th>
<th class='confluenceTh'>Transport-specific data</th>
<th class='confluenceTh'>Extension Alice calls</th>
</tr>
<tr>
<td class='confluenceTd'>1</td>
<td class='confluenceTd'>bind = 127.0.0.1:5060<br class="atl-forced-newline" />protocol=udp</td>
<td class='confluenceTd'>bob@default</td>
</tr>
<tr>
<td class='confluenceTd'>2</td>
<td class='confluenceTd'>bind = 127.0.0.1:5060<br class="atl-forced-newline" />protocol=tcp</td>
<td class='confluenceTd'>bob@default</td>
</tr>
<tr>
<td class='confluenceTd'>3</td>
<td class='confluenceTd'>bind = [::1]:5060<br class="atl-forced-newline" />protocol=udp</td>
<td class='confluenceTd'>bobv6@default</td>
</tr>
<tr>
<td class='confluenceTd'>4</td>
<td class='confluenceTd'>bind = [::1]:5060<br class="atl-forced-newline" />protocol=tcp</td>
<td class='confluenceTd'>bobv6@default</td>
</tr>
</tbody></table>
</div>


<h5><a name="TestsforBasicCallFunctionality-Test1%3AAlicehangsup"></a>Test 1: Alice hangs up</h5>

<p>Procedure:<br/>
Alice calls Bob via Asterisk<br/>
Bob answers the call.<br/>
Alice and Bob exchange audio.<br/>
Alice hangs up the call after 5 seconds.</p>

<p>Pass Conditions:<br/>
Ensure that Alice can hear Bob's audio and Bob can hear Alice's audio.<br/>
Ensure that Asterisk sends a 200 OK to Alice's BYE<br/>
Ensure that Asterisk sends a BYE to Bob</p>

<h5><a name="TestsforBasicCallFunctionality-Test2%3ABobhangsup"></a>Test 2: Bob hangs up</h5>

<p>Procedure:<br/>
Alice calls Bob via Asterisk<br/>
Bob answers the call.<br/>
Alice and Bob exchange audio.<br/>
Bob Hangs up the call after 5 seconds.</p>

<p>Pass Conditions:<br/>
Ensure that Alice can hear Bob's audio and Bob can hear Alice's audio.<br/>
Ensure that Asterisk sends a 200 OK to Bob's BYE<br/>
Ensure that Asterisk sends a BYE to Alice</p>

<h3><a name="TestsforBasicCallFunctionality-NominalTests%2CAsteriskinitiated"></a>Nominal Tests, Asterisk-initiated</h3>

<p>The following tests require multiple iterations. Details about each iteration are in the following table:</p>

<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'>Iteration</th>
<th class='confluenceTh'>Transport-specific data</th>
<th class='confluenceTh'>Originate channel</th>
<th class='confluenceTh'>Originate extension</th>
</tr>
<tr>
<td class='confluenceTd'>1</td>
<td class='confluenceTd'>bind = 127.0.0.1:5060<br class="atl-forced-newline" />protocol=udp</td>
<td class='confluenceTd'>GULP/sip:alice@127.0.0.1:5061</td>
<td class='confluenceTd'>bob@default</td>
</tr>
<tr>
<td class='confluenceTd'>2</td>
<td class='confluenceTd'>bind = 127.0.0.1:5060<br class="atl-forced-newline" />protocol=tcp</td>
<td class='confluenceTd'>GULP/sip:alice@127.0.0.1:5061</td>
<td class='confluenceTd'>bob@default</td>
</tr>
<tr>
<td class='confluenceTd'>3</td>
<td class='confluenceTd'>bind = [::1]:5060<br class="atl-forced-newline" />protocol=udp</td>
<td class='confluenceTd'>GULP/sip:alice@[::1]:5061</td>
<td class='confluenceTd'>bobv6@default</td>
</tr>
<tr>
<td class='confluenceTd'>4</td>
<td class='confluenceTd'>bind = [::1]:5060<br class="atl-forced-newline" />protocol=tcp</td>
<td class='confluenceTd'>GULP/sip:alice@[::1]:5061</td>
<td class='confluenceTd'>bobv6@default</td>
</tr>
</tbody></table>
</div>


<h5><a name="TestsforBasicCallFunctionality-Test3%3AAlicehangsup"></a>Test 3: Alice hangs up</h5>

<p>Procedure:<br/>
Asterisk originates a call to Alice and directs the answered call to Bob<br/>
Bob answers the call.<br/>
Alice and Bob exchange audio.<br/>
Alice hangs up after 5 seconds.</p>

<p>Pass Conditions:<br/>
Ensure that Alice can hear Bob's audio and Bob can hear Alice's audio.<br/>
Ensure that Asterisk sends a 200 OK to Alice's BYE<br/>
Ensure that Asterisk sends a BYE to Bob</p>

<h5><a name="TestsforBasicCallFunctionality-Test4%3ABobhangsup"></a>Test 4: Bob hangs up</h5>

<p>Procedure:<br/>
Asterisk originates a call to Alice and directs the answered call to Bob<br/>
Bob answers the call.<br/>
Alice and Bob exchange audio.<br/>
Bob hangs up after 5 seconds.</p>

<p>Pass Conditions:<br/>
Ensure that Alice can hear Bob's audio and Bob can hear Alice's audio.<br/>
Ensure that Asterisk sends a 200 OK to Bob's BYE<br/>
Ensure that Asterisk sends a BYE to Alice</p>

<h3><a name="TestsforBasicCallFunctionality-OffnominalTests%2CAliceinitiated"></a>Off-nominal Tests, Alice-initiated</h3>

<p>The following tests require multiple iterations. Details about each iteration are in the following table:</p>

<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'>Iteration</th>
<th class='confluenceTh'>Transport-specific data</th>
<th class='confluenceTh'>Extension Alice calls</th>
</tr>
<tr>
<td class='confluenceTd'>1</td>
<td class='confluenceTd'>bind = 127.0.0.1:5060<br class="atl-forced-newline" />protocol=udp</td>
<td class='confluenceTd'>bob@default</td>
</tr>
<tr>
<td class='confluenceTd'>2</td>
<td class='confluenceTd'>bind = 127.0.0.1:5060<br class="atl-forced-newline" />protocol=tcp</td>
<td class='confluenceTd'>bob@default</td>
</tr>
<tr>
<td class='confluenceTd'>3</td>
<td class='confluenceTd'>bind = [::1]:5060<br class="atl-forced-newline" />protocol=udp</td>
<td class='confluenceTd'>bobv6@default</td>
</tr>
<tr>
<td class='confluenceTd'>4</td>
<td class='confluenceTd'>bind = [::1]:5060<br class="atl-forced-newline" />protocol=tcp</td>
<td class='confluenceTd'>bobv6@default</td>
</tr>
</tbody></table>
</div>


<h5><a name="TestsforBasicCallFunctionality-Test1%3ABobdoesnotexist"></a>Test 1: Bob does not exist</h5>

<p>Procedure:<br/>
Remove Bob from the network.<br/>
Alice places a call to Asterisk to Bob</p>

<p>Pass Conditions:<br/>
Ensure that Asterisk tears down the outgoing session properly after timer B expires (32 seconds by default)<br/>
Ensure that Asterisk sends an error response to Alice</p>

<h5><a name="TestsforBasicCallFunctionality-Test2%3ABobdoesnotanswer"></a>Test 2: Bob does not answer</h5>

<p>Procedure:<br/>
Alice places a call to Asterisk to Bob<br/>
Bob rings but never answers the phone.</p>

<p>Pass Conditions:<br/>
Ensure that Asterisk cancels the outgoing call to Bob after the Dial timeout is reached.<br/>
Ensure that Asterisk sends an error response to Alice</p>

<h5><a name="TestsforBasicCallFunctionality-Test3%3ABobisbusy"></a>Test 3: Bob is busy</h5>

<p>Procedure:<br/>
Alice places a call to Asterisk to Bob<br/>
Bob responds with a busy response.</p>

<p>Pass Conditions:<br/>
Ensure that Asterisk receives the 486 from Bob and ACKs it.<br/>
Ensure that Asterisk sends an error response (preferably a 486) to Alice.</p>

<h3><a name="TestsforBasicCallFunctionality-Offnominaltests%2CAsteriskinitiated"></a>Off-nominal tests, Asterisk-initiated</h3>

<p>The following tests require multiple iterations. Details about each iteration are in the following table:</p>

<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'>Iteration</th>
<th class='confluenceTh'>Transport-specific data</th>
<th class='confluenceTh'>Originate channel</th>
<th class='confluenceTh'>Originate extension</th>
</tr>
<tr>
<td class='confluenceTd'>1</td>
<td class='confluenceTd'>bind = 127.0.0.1:5060<br class="atl-forced-newline" />protocol=udp</td>
<td class='confluenceTd'>GULP/sip:alice@127.0.0.1:5061</td>
<td class='confluenceTd'>bob@default</td>
</tr>
<tr>
<td class='confluenceTd'>2</td>
<td class='confluenceTd'>bind = 127.0.0.1:5060<br class="atl-forced-newline" />protocol=tcp</td>
<td class='confluenceTd'>GULP/sip:alice@127.0.0.1:5061</td>
<td class='confluenceTd'>bob@default</td>
</tr>
<tr>
<td class='confluenceTd'>3</td>
<td class='confluenceTd'>bind = [::1]:5060<br class="atl-forced-newline" />protocol=udp</td>
<td class='confluenceTd'>GULP/sip:alice@[::1]:5061</td>
<td class='confluenceTd'>bobv6@default</td>
</tr>
<tr>
<td class='confluenceTd'>4</td>
<td class='confluenceTd'>bind = [::1]:5060<br class="atl-forced-newline" />protocol=tcp</td>
<td class='confluenceTd'>GULP/sip:alice@[::1]:5061</td>
<td class='confluenceTd'>bobv6@default</td>
</tr>
</tbody></table>
</div>


<h5><a name="TestsforBasicCallFunctionality-Test1%3ABobdoesnotexist"></a>Test 1: Bob does not exist</h5>

<p>Procedure:<br/>
Remove Bob from the network.<br/>
Asterisk originates a call to Alice and directs the answered call to Bob</p>

<p>Pass Conditions:<br/>
Ensure that Asterisk tears down Bob's session properly after timer B expires (32 seconds by default)<br/>
Ensure that Asterisk sends a BYE to Alice</p>

<h5><a name="TestsforBasicCallFunctionality-Test2%3ABobdoesnotanswer"></a>Test 2: Bob does not answer</h5>

<p>Procedure:<br/>
Asterisk originates a call to Alice and directs the answered call to Bob<br/>
Bob rings but never answers the phone.</p>

<p>Pass Conditions:<br/>
Ensure that Asterisk cancels the outgoing call to Bob after the Dial timeout is reached.<br/>
Ensure that Asterisk sends a BYE to Alice</p>

<h5><a name="TestsforBasicCallFunctionality-Test3%3ABobisbusy"></a>Test 3: Bob is busy</h5>

<p>Procedure:<br/>
Asterisk originates a call to Alice and directs the answered call to Bob<br/>
Bob responds with a busy response.</p>

<p>Pass Conditions:<br/>
Ensure that Asterisk receives the 486 from Bob and ACKs it.<br/>
Ensure that Asterisk sends a BYE to Alice</p>
    </div>
        <div id="commentsSection" class="wiki-content pageSection">
        <div style="float: right;" class="grey">
                        <a href="https://wiki.asterisk.org/wiki/users/removespacenotification.action?spaceKey=AST">Stop watching space</a>
            <span style="padding: 0px 5px;">|</span>
                <a href="https://wiki.asterisk.org/wiki/users/editmyemailsettings.action">Change email notification preferences</a>
</div>
        <a href="https://wiki.asterisk.org/wiki/display/AST/Tests+for+Basic+Call+Functionality">View Online</a>
        |
        <a href="https://wiki.asterisk.org/wiki/pages/diffpagesbyversion.action?pageId=22088169&revisedVersion=13&originalVersion=12">View Changes</a>
                |
        <a href="https://wiki.asterisk.org/wiki/display/AST/Tests+for+Basic+Call+Functionality?showComments=true&amp;showCommentArea=true#addcomment">Add Comment</a>
            </div>
</div>
</div>
</div>
</div>
</body>
</html>