<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>
        <div id="versionComment">
        <b>Comment:</b>
        Add a column to the nominal test case table showing which tests had been written.<br />
    </div>
        <br/>
                         <h4>Changes (19)</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" >All Nominal path tests will be run multiple times. Each iteration of the test is detailed in the table below. <br> <br></td></tr>
            <tr><td class="diff-changed-lines" >||Iteration||Transport-specific Data||Alice-specific Data||Alice-auth-specific data||modules.conf additions||INVITE <span class="diff-changed-words">details||Comment<span class="diff-added-chars"style="background-color: #dfd;">||Written?</span></span> <br></td></tr>
            <tr><td class="diff-changed-lines" >|1|bind=127.0.0.1:5060 protocol=udp|none|none|none|SDP in INVITE|Identify by username, no <span class="diff-changed-words">auth<span class="diff-added-chars"style="background-color: #dfd;">|{color:green}Yes{color}</span></span> <br></td></tr>
            <tr><td class="diff-changed-lines" >|2|bind=127.0.0.1:5060 protocol=udp|auth = alice-auth|password = swordfish|none|SDP in INVITE|Identify by username, userpass <span class="diff-changed-words">auth<span class="diff-added-chars"style="background-color: #dfd;">|{color:green}Yes{color}</span></span> <br></td></tr>
            <tr><td class="diff-changed-lines" >|3|bind=127.0.0.1:5060 protocol=udp|auth = alice-auth|auth_type=md5 md5_cred=c9b9e23e2160fd69b19f99116da19711|none|SDP in INVITE|Identify by username, md5 <span class="diff-changed-words">auth<span class="diff-added-chars"style="background-color: #dfd;">|{color:green}Yes{color}</span></span> <br></td></tr>
            <tr><td class="diff-changed-lines" >|4|bind=127.0.0.1:5060 protocol=udp|host = 127.0.0.1:5061|none|noload =&gt; res_sip_endpoint_identifier_user.so|SDP in INVITE|Identify by host, no <span class="diff-changed-words">auth<span class="diff-added-chars"style="background-color: #dfd;">|{color:green}Yes{color}</span></span> <br></td></tr>
            <tr><td class="diff-changed-lines" >|5|bind=127.0.0.1:5060 protocol=udp|host = 127.0.0.1:5061 auth = alice-auth|password = swordfish|noload =&gt; res_sip_endpoint_identifier_user.so|SDP in INVITE|Identify by host, userpass <span class="diff-changed-words">auth<span class="diff-added-chars"style="background-color: #dfd;">|{color:green}Yes{color}</span></span> <br></td></tr>
            <tr><td class="diff-changed-lines" >|6|bind=127.0.0.1:5060 protocol=udp|host = 127.0.0.1:5061 auth = alice-auth|auth_type=md5 md5_cred=c9b9e23e2160fd69b19f99116da19711|noload =&gt; res_sip_endpoint_identifier_user.so|SDP in INVITE|Identify by host, md5 <span class="diff-changed-words">auth<span class="diff-added-chars"style="background-color: #dfd;">|{color:green}Yes{color}</span></span> <br></td></tr>
            <tr><td class="diff-changed-lines" >|7|bind=127.0.0.1:5060 protocol=tcp|none|none|none|SDP in INVITE|Identify by username, no auth <span class="diff-changed-words">(TCP)<span class="diff-added-chars"style="background-color: #dfd;">|{color:green}Yes{color}</span></span> <br></td></tr>
            <tr><td class="diff-changed-lines" >|8|bind=127.0.0.1:5060 protocol=tcp|auth = alice-auth|password = swordfish|none|SDP in INVITE|Identify by username, userpass auth <span class="diff-changed-words">(TCP)<span class="diff-added-chars"style="background-color: #dfd;">|{color:green}Yes{color}</span></span> <br></td></tr>
            <tr><td class="diff-changed-lines" >|9|bind=127.0.0.1:5060 protocol=tcp|auth = alice-auth|auth_type=md5 md5_cred=c9b9e23e2160fd69b19f99116da19711|none|SDP in INVITE|Identify by username, md5 auth <span class="diff-changed-words">(TCP)<span class="diff-added-chars"style="background-color: #dfd;">|{color:green}Yes{color}</span></span> <br></td></tr>
            <tr><td class="diff-unchanged" >|10|bind=127.0.0.1:5060\\protocol=tcp|host = 127.0.0.1:5061|none|noload =&gt; res_sip_endpoint_identifier_user.so|SDP in INVITE|Identify by host, no auth (TCP) <br>|11|bind=127.0.0.1:5060\\protocol=tcp|host = 127.0.0.1:5061\\auth = alice-auth|password = swordfish|noload =&gt; res_sip_endpoint_identifier_user.so|SDP in INVITE|Identify by host, userpass auth (TCP) <br>|12|bind=127.0.0.1:5060\\protocol=tcp|host = 127.0.0.1:5061\\auth = alice-auth|auth_type=md5\\md5_cred=c9b9e23e2160fd69b19f99116da19711|noload =&gt; res_sip_endpoint_identifier_user.so|SDP in INVITE|Identify by host, md5 auth (TCP) <br></td></tr>
            <tr><td class="diff-changed-lines" >|13|bind=127.0.0.1:5060 protocol=udp|none|none|none|No SDP in INVITE|Identify by username, no <span class="diff-changed-words">auth<span class="diff-added-chars"style="background-color: #dfd;">|{color:green}Yes{color}</span></span> <br></td></tr>
            <tr><td class="diff-changed-lines" >|14|bind=127.0.0.1:5060 protocol=udp|auth = alice-auth|password = swordfish|none|No SDP in INVITE|Identify by username, userpass <span class="diff-changed-words">auth<span class="diff-added-chars"style="background-color: #dfd;">|{color:green}Yes{color}</span></span> <br></td></tr>
            <tr><td class="diff-changed-lines" >|15|bind=127.0.0.1:5060 protocol=udp|auth = alice-auth|auth_type=md5 md5_cred=c9b9e23e2160fd69b19f99116da19711|none|No SDP in INVITE|Identify by username, md5 <span class="diff-changed-words">auth<span class="diff-added-chars"style="background-color: #dfd;">|{color:green}Yes{color}</span></span> <br></td></tr>
            <tr><td class="diff-changed-lines" >|16|bind=127.0.0.1:5060 protocol=udp|host = 127.0.0.1:5061|none|noload =&gt; res_sip_endpoint_identifier_user.so|No SDP in INVITE|Identify by host, no <span class="diff-changed-words">auth<span class="diff-added-chars"style="background-color: #dfd;">|{color:green}Yes{color}</span></span> <br></td></tr>
            <tr><td class="diff-changed-lines" >|17|bind=127.0.0.1:5060 protocol=udp|host = 127.0.0.1:5061 auth = alice-auth|password = swordfish|noload =&gt; res_sip_endpoint_identifier_user.so|No SDP in INVITE|Identify by host, userpass <span class="diff-changed-words">auth<span class="diff-added-chars"style="background-color: #dfd;">|{color:green}Yes{color}</span></span> <br></td></tr>
            <tr><td class="diff-changed-lines" >|18|bind=127.0.0.1:5060 protocol=udp|host = 127.0.0.1:5061 auth = alice-auth|auth_type=md5 md5_cred=c9b9e23e2160fd69b19f99116da19711|noload =&gt; res_sip_endpoint_identifier_user.so|No SDP in INVITE|Identify by host, md5 <span class="diff-changed-words">auth<span class="diff-added-chars"style="background-color: #dfd;">|{color:green}Yes{color}</span></span> <br></td></tr>
            <tr><td class="diff-changed-lines" >|19|bind=127.0.0.1:5060 protocol=tcp|none|none|none|No SDP in INVITE|Identify by username, no auth <span class="diff-changed-words">(TCP)<span class="diff-added-chars"style="background-color: #dfd;">|{color:green}Yes{color}</span></span> <br></td></tr>
            <tr><td class="diff-changed-lines" >|20|bind=127.0.0.1:5060 protocol=tcp|auth = alice-auth|password = swordfish|none|No SDP in INVITE|Identify by username, userpass auth <span class="diff-changed-words">(TCP)<span class="diff-added-chars"style="background-color: #dfd;">|{color:green}Yes{color}</span></span> <br></td></tr>
            <tr><td class="diff-changed-lines" >|21|bind=127.0.0.1:5060 protocol=tcp|auth = alice-auth|auth_type=md5 md5_cred=c9b9e23e2160fd69b19f99116da19711|none|No SDP in INVITE|Identify by username, md5 auth <span class="diff-changed-words">(TCP)<span class="diff-added-chars"style="background-color: #dfd;">|{color:green}Yes{color}</span></span> <br></td></tr>
            <tr><td class="diff-unchanged" >|22|bind=127.0.0.1:5060\\protocol=tcp|host = 127.0.0.1:5061|none|noload =&gt; res_sip_endpoint_identifier_user.so|No SDP in INVITE|Identify by host, no auth (TCP) <br>|23|bind=127.0.0.1:5060\\protocol=tcp|host = 127.0.0.1:5061\\auth = alice-auth|password = swordfish|noload =&gt; res_sip_endpoint_identifier_user.so|No SDP in INVITE|Identify by host, userpass auth (TCP) <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>
    <li><a href='#TestsforBasicCallFunctionality-Test4%3ACallabandoned'>Test 4: Call abandoned</a></li>
    <li><a href='#TestsforBasicCallFunctionality-Test5%3ABobisincompatible'>Test 5: Bob is incompatible</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-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-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>
    <li><a href='#TestsforBasicCallFunctionality-Test4%3ACallabandoned'>Test 4: Call abandoned</a></li>
    <li><a href='#TestsforBasicCallFunctionality-Test5%3ABobisincompatible'>Test 5: Bob is incompatible</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>
    <li><a href='#TestsforBasicCallFunctionality-Test4%3ACallabandoned'>Test 4: Call abandoned</a></li>
    <li><a href='#TestsforBasicCallFunctionality-Test5%3ABobisincompatible'>Test 5: Bob is incompatible</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>
<th class='confluenceTh'>Written?</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>
<td class='confluenceTd'><font color="green">Yes</font></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>
<td class='confluenceTd'><font color="green">Yes</font></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>
<td class='confluenceTd'><font color="green">Yes</font></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>
<td class='confluenceTd'><font color="green">Yes</font></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>
<td class='confluenceTd'><font color="green">Yes</font></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>
<td class='confluenceTd'><font color="green">Yes</font></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>
<td class='confluenceTd'><font color="green">Yes</font></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>
<td class='confluenceTd'><font color="green">Yes</font></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>
<td class='confluenceTd'><font color="green">Yes</font></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>
<td class='confluenceTd'><font color="green">Yes</font></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>
<td class='confluenceTd'><font color="green">Yes</font></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>
<td class='confluenceTd'><font color="green">Yes</font></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>
<td class='confluenceTd'><font color="green">Yes</font></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>
<td class='confluenceTd'><font color="green">Yes</font></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>
<td class='confluenceTd'><font color="green">Yes</font></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>
<td class='confluenceTd'><font color="green">Yes</font></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>
<td class='confluenceTd'><font color="green">Yes</font></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>
<td class='confluenceTd'><font color="green">Yes</font></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>

<h5><a name="TestsforBasicCallFunctionality-Test4%3ACallabandoned"></a>Test 4: Call abandoned</h5>

<p>Procedure:<br/>
Originate a call from Asterisk to Bob.<br/>
Hang up the outbound call before Bob answers.</p>

<p>Pass Conditions:<br/>
Ensure that Asterisk sends a CANCEL to Bob.<br/>
Ensure that this results in the outgoing session being destroyed.</p>

<h5><a name="TestsforBasicCallFunctionality-Test5%3ABobisincompatible"></a>Test 5: Bob is incompatible</h5>

<p>Procedure:<br/>
Originate a call from Asterisk to Bob.<br/>
Bob answers the call but with codecs that are incompatible with what we offered.</p>

<p>Pass Conditions:<br/>
Ensure that Asterisk sends an immediate BYE after ACKing the 200 OK from Bob.</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>
<th class='confluenceTh'>INVITE details</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>
<td class='confluenceTd'>SDP in offer from Alice</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>
<td class='confluenceTd'>SDP in offer from Alice</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>
<td class='confluenceTd'>SDP in offer from Alice</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>
<td class='confluenceTd'>SDP in offer from Alice</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'>GULP/sip:alice@127.0.0.1:5061</td>
<td class='confluenceTd'>bob@default</td>
<td class='confluenceTd'>No SDP in offer from Alice</td>
</tr>
<tr>
<td class='confluenceTd'>6</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>
<td class='confluenceTd'>No SDP in offer from Alice</td>
</tr>
<tr>
<td class='confluenceTd'>7</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>
<td class='confluenceTd'>No SDP in offer from Alice</td>
</tr>
<tr>
<td class='confluenceTd'>8</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>
<td class='confluenceTd'>No SDP in offer from Alice</td>
</tr>
</tbody></table>
</div>


<h5><a name="TestsforBasicCallFunctionality-Test1%3AAlicehangsup"></a>Test 1: 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-Test2%3ABobhangsup"></a>Test 2: 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>

<h5><a name="TestsforBasicCallFunctionality-Test4%3ACallabandoned"></a>Test 4: Call abandoned</h5>

<p>Procedure:<br/>
Alice places a call to Asterisk to Bob.<br/>
Alice hangs up the outbound call before Bob answers.</p>

<p>Pass Conditions:<br/>
Ensure that Asterisk sends a CANCEL to Bob.<br/>
Ensure that Asterisk sends a 200 OK to Alice's CANCEL and a 487 to Alice's INVITE</p>

<h5><a name="TestsforBasicCallFunctionality-Test5%3ABobisincompatible"></a>Test 5: Bob is incompatible</h5>

<p>Procedure:<br/>
Alice places a call to Asterisk to Bob.<br/>
Bob answers the call but with codecs that are incompatible with what we offered.</p>

<p>Pass Conditions:<br/>
Ensure that Asterisk sends an immediate BYE after ACKing the 200 OK from Bob.<br/>
Ensure that Asterisk sends a BYE 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>

<h5><a name="TestsforBasicCallFunctionality-Test4%3ACallabandoned"></a>Test 4: Call abandoned</h5>

<p>Procedure:<br/>
Asterisk originates a call to Alice and directs the answered call to Bob<br/>
Hang up the outbound call before Bob answers.</p>

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

<h5><a name="TestsforBasicCallFunctionality-Test5%3ABobisincompatible"></a>Test 5: Bob is incompatible</h5>

<p>Procedure:<br/>
Asterisk originates a call to Alice and directs the answered call to Bob.<br/>
Bob answers the call but with codecs that are incompatible with what we offered.</p>

<p>Pass Conditions:<br/>
Ensure that Asterisk sends an immediate BYE after ACKing the 200 OK from Bob.<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=18&originalVersion=17">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>