<html>
<body>
<div style="font-family: Verdana, Arial, Helvetica, Sans-Serif;">
<table bgcolor="#f9f3c9" width="100%" cellpadding="8" style="border: 1px #c9c399 solid;">
<tr>
<td>
This is an automatically generated e-mail. To reply, visit:
<a href="https://reviewboard.asterisk.org/r/3660/">https://reviewboard.asterisk.org/r/3660/</a>
</td>
</tr>
</table>
<br />
<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
<p style="margin-top: 0;">On June 26th, 2014, 10:27 a.m. CDT, <b>Matt Jordan</b> wrote:</p>
<blockquote style="margin-left: 1em; border-left: 2px solid #d0d0d0; padding-left: 10px;">
<table width="100%" border="0" bgcolor="white" style="border: 1px solid #C0C0C0; border-collapse: collapse; margin: 2px padding: 2px;">
<thead>
<tr>
<th colspan="4" bgcolor="#F0F0F0" style="border-bottom: 1px solid #C0C0C0; font-size: 9pt; padding: 4px 8px; text-align: left;">
<a href="https://reviewboard.asterisk.org/r/3660/diff/1/?file=60057#file60057line39" style="color: black; font-weight: bold; text-decoration: underline;">/asterisk/trunk/tests/pbx/manager_extensions/ami_extension_control.py</a>
<span style="font-weight: normal;">
(Diff revision 1)
</span>
</th>
</tr>
</thead>
<tbody>
<tr>
<th bgcolor="#b1ebb0" style="border-right: 1px solid #C0C0C0;" align="right"><font size="2"></font></th>
<td bgcolor="#c5ffc4" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "></pre></td>
<th bgcolor="#b1ebb0" style="border-left: 1px solid #C0C0C0; border-right: 1px solid #C0C0C0;" align="right"><font size="2">39</font></th>
<td bgcolor="#c5ffc4" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "> <span class="bp">self</span><span class="o">.</span><span class="n">set_passed</span><span class="p">(</span><span class="bp">True</span><span class="p">)</span></pre></td>
</tr>
</tbody>
</table>
<pre style="white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">This should not set the test to pass here. You should only pass the test if the channels that are originated are successfully created (that is, answered).
You can use a deferred list to gather up the deferreds returned by the AMIProtocol originate. When all deferreds have fired, the deferred list will fire, which will call the callback you've defined for the deferred list. By default, the first parameter passed to a callback of a deferred list is a list of tuples (success, result) where success is a boolean indicating whether or not the callback succeeded. You can then set the test to passed if all of the originates succeeded.
Something like:
def _pass_test(results, test_object):
passed = all([result[0] for result in results if result[0])
test_object.set_passed(passed)
deferds = []
for channel in self.originates:
deferred = self.ami.originate(...)
deferred.addErrback(self.handle_originate_failure)
deferds.append(deferred)
deferred_list = defer.DeferredList(deferds)
deferred_list.addCallback(_pass_test, self)
</pre>
</blockquote>
</blockquote>
<pre style="margin-left: 1em; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">"You should only pass the test if the channels that are originated are successfully created (that is, answered)"
That isn't going to be the case for all originates by design. When attempting to originate to an extension that has been deleted, the call isn't meant to be answered.</pre>
<br />
<p>- Jonathan</p>
<br />
<p>On June 20th, 2014, 1:42 p.m. CDT, Jonathan Rose wrote:</p>
<table bgcolor="#fefadf" width="100%" cellspacing="0" cellpadding="8" style="background-image: url('https://reviewboard.asterisk.org/static/rb/images/review_request_box_top_bg.ab6f3b1072c9.png'); background-position: left top; background-repeat: repeat-x; border: 1px black solid;">
<tr>
<td>
<div>Review request for Asterisk Developers, kmoore and Matt Jordan.</div>
<div>By Jonathan Rose.</div>
<p style="color: grey;"><i>Updated June 20, 2014, 1:42 p.m.</i></p>
<div style="margin-top: 1.5em;">
<b style="color: #575012; font-size: 10pt;">Repository: </b>
testsuite
</div>
<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Description </h1>
<table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
<tr>
<td>
<pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">11 part test:
1 - Remove an extension with a priority
If the manager command fails, a failure token will be set
If the original extension runs, a user event will be generated that makes the test fail
2 - Remove an entire existing extension
If the manager command fails, a failure token will be set
If the original extension runs, a user event will be generated that makes the test fail
3 - Add an extension
If the manager command fails, a failure token will be set
If the extension fails to run, an expected user event will not be generated and the test will fail
4 - Add an extension with a CID match that doesn't match the originated channel
If the manager command fails, a failure token will be set
If the extension runs, a user event will be generated that makes the test fail
5 - Add an extension with a CID match that should match the originated channel
If the manager command fails, a failure token will be set
If the extension fails to run, an expected user event will not be generated and the test will fail
6 - Add an extension that replaces an existing priority
If the manager command fails, a failure token will be set
If the original extension runs, a user event will be generated that makes the test fail
If the replacement extension doesn't run, an expected user event will not be generated and the test will fail
7 - Attempt to add an extension that would replace an existing priority, but don't allow replacement
If the manager command doesn't fail, a failure token will be set
If the original extension doesn't run, an expected user event will not be generated and the test will fail
If the replacement extension runs, a user event will be generated that makes the test fail
8 - Remove an extension at a specific priority with caller ID matching
If the manager command fails, a failure token will be set
If the original extension runs, a user event will be generated that makes the test fail
The originate is checked by means of a user event on a separate priority taht is not removed
9 - Attempt DialplanAddExtension without priority set
If the manager command doesn't fail, a failure token will be set
10 - Attempt DialplanAddExtension without application set
If the manager command doesn't fail, a failure token will be set
11 - Attempt DialplanRemoveExtension on an extension that does not exist
If the manager command doesn't fail, a failure token will be set</pre>
</td>
</tr>
</table>
<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Testing </h1>
<table width="100%" bgcolor="#ffffff" cellspacing="0" cellpadding="10" style="border: 1px solid #b8b5a0">
<tr>
<td>
<pre style="margin: 0; padding: 0; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">Removed execution of many of the test AMI commands to guarantee that if above failures occurred that the test would fail</pre>
</td>
</tr>
</table>
<h1 style="color: #575012; font-size: 10pt; margin-top: 1.5em;">Diffs</b> </h1>
<ul style="margin-left: 3em; padding-left: 0;">
<li>/asterisk/trunk/tests/pbx/tests.yaml <span style="color: grey">(5144)</span></li>
<li>/asterisk/trunk/tests/pbx/manager_extensions/test-config.yaml <span style="color: grey">(PRE-CREATION)</span></li>
<li>/asterisk/trunk/tests/pbx/manager_extensions/configs/ast1/extensions.conf <span style="color: grey">(PRE-CREATION)</span></li>
<li>/asterisk/trunk/tests/pbx/manager_extensions/ami_extension_control.py <span style="color: grey">(PRE-CREATION)</span></li>
</ul>
<p><a href="https://reviewboard.asterisk.org/r/3660/diff/" style="margin-left: 3em;">View Diff</a></p>
</td>
</tr>
</table>
</div>
</body>
</html>