<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/2130/">https://reviewboard.asterisk.org/r/2130/</a>
     </td>
    </tr>
   </table>
   <br />









<div>




<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/2130/diff/1/?file=31392#file31392line30" style="color: black; font-weight: bold; text-decoration: underline;">/asterisk/trunk/lib/python/asterisk/apptest.py</a>
    <span style="font-weight: normal;">

     (Diff revision 1)

    </span>
   </th>
  </tr>
 </thead>

 <tbody style="background-color: #e4d9cb; padding: 4px 8px; text-align: center;">
  <tr>

   <td colspan="2"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "></pre></td>
   <td colspan="2"><pre style="font-size: 8pt; line-height: 140%; margin: 0; ">class AppTest(TestCase):</pre></td>

  </tr>
 </tbody>




 
 



 <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">30</font></th>
    <td bgcolor="#c5ffc4" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; ">    <span class="nd">@staticmethod</span></pre></td>
  </tr>

  <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">31</font></th>
    <td bgcolor="#c5ffc4" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; ">    <span class="k">def</span> <span class="nf">get_instance</span><span class="p">():</span></pre></td>
  </tr>

  <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">32</font></th>
    <td bgcolor="#c5ffc4" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; ">        <span class="sd">&#39;&#39;&#39; Return the singleton instance of the application test_object &#39;&#39;&#39;</span></pre></td>
  </tr>

  <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">33</font></th>
    <td bgcolor="#c5ffc4" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; ">        <span class="k">return</span> <span class="n">AppTest</span><span class="o">.</span><span class="n">__singleton_instance</span></pre></td>
  </tr>

 </tbody>

</table>

<pre style="margin-left: 2em; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">Typically with a singleton, the get_instance() method will create the instance if it does not already exist. Is there any chance that some place might call get_instance prior to the creation of the instance and thus fail miserably?</pre>
</div>
<br />

<div>




<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/2130/diff/1/?file=31393#file31393line40" style="color: black; font-weight: bold; text-decoration: underline;">/asterisk/trunk/sample-yaml/apptest-config.yaml.sample</a>
    <span style="font-weight: normal;">

     (Diff revision 1)

    </span>
   </th>
  </tr>
 </thead>

 <tbody style="background-color: #e4d9cb; padding: 4px 8px; text-align: center;">
  <tr>

   <td colspan="4"><pre style="font-size: 8pt; line-height: 140%; margin: 0; "></pre></td>

  </tr>
 </tbody>




 
 



 <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">40</font></th>
    <td bgcolor="#c5ffc4" width="50%"><pre style="font-size: 8pt; line-height: 140%; margin: 0; ">            channel-id: &#39;Caller-1&#39;     # Required.  Used to uniquely idenfity a</pre></td>
  </tr>

 </tbody>

</table>

<pre style="margin-left: 2em; white-space: pre-wrap; white-space: -moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; word-wrap: break-word;">s/idenfity/identify/</pre>
</div>
<br />



<p>- Mark</p>


<br />
<p>On September 24th, 2012, 7:37 p.m., Matt Jordan wrote:</p>






<table bgcolor="#fefadf" width="100%" cellspacing="0" cellpadding="8" style="background-image: url('https://reviewboard.asterisk.org/media/rb/images/review_request_box_top_bg.png'); background-position: left top; background-repeat: repeat-x; border: 1px black solid;">
 <tr>
  <td>

<div>Review request for Asterisk Developers, Mark Michelson and Terry Wilson.</div>
<div>By Matt Jordan.</div>


<p style="color: grey;"><i>Updated Sept. 24, 2012, 7:37 p.m.</i></p>




<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;">Terry&#39;s patch on https://reviewboard.asterisk.org/r/2072/ addresses a fundamental problem in the initial design of ConfBridge, in that it did not adequately define or handle the interactions between Marked, Unmarked, and non-Marked users in a conference.  It fixed the various problems reported by users (in numerous ASTERISK issues) by implementing a state machine that moves the conference into various states based on the various types of users entering/leaving the conference.

Because the correct fix to these problems redoes a portion of ConfBridge, tests need to cover the functionality to (a) ensure things continue to work at least as well as they did and (b) that future changes to ConfBridge don&#39;t break the interaction behavior between users.  This patch provides the following to the Test Suite:

1) A python module (apptest) that allows orchestrating tests inside of a long running application using a configuration driven approach.  This uses the same approach as the VoiceMail tests and the existing two ConfBridge tests, but defers the logic of how responses to various events are handled to the YAML file.

2) A test using this that covers the interaction of Marked users in a conference.  This covers two scenarios from a ConfBridge test plan (which will be be put up on the wiki and linked to this review later):

Marked users:
  Conference should automatically start for marked users and those users should
  never be in an inactive conference state.

  Actors: Marked User One
          Marked User Two w/ Quiet flag

  Scenario:
    Marked User One enters conference.  Marked User One is notified they have
    entered conference.  Verify no MOH.  Marked User Two enters conference.
    Verify no announcements played to Marked User Two.  Marked User Two leaves
    conference.  Verify no MOH for Marked User One.  Marked User One leaves
    conference; verify conference ends.

  Scenario:
    Marked User Two enters conference.  Verify Marked User Two does not
    receive notification that they have entered the conference.  Verify no MOH.
    Marked User One enters conference.  Marked User One leaves conference.
    Verify no MOH for Marked User Two. Marked User Two leaves conference; verify
    conference ends.

</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/lib/python/asterisk/apptest.py <span style="color: grey">(PRE-CREATION)</span></li>

 <li>/asterisk/trunk/sample-yaml/apptest-config.yaml.sample <span style="color: grey">(PRE-CREATION)</span></li>

 <li>/asterisk/trunk/tests/apps/confbridge/confbridge_marked/configs/ast1/confbridge.conf <span style="color: grey">(PRE-CREATION)</span></li>

 <li>/asterisk/trunk/tests/apps/confbridge/confbridge_marked/configs/ast1/extensions.conf <span style="color: grey">(PRE-CREATION)</span></li>

 <li>/asterisk/trunk/tests/apps/confbridge/confbridge_marked/test-config.yaml <span style="color: grey">(PRE-CREATION)</span></li>

 <li>/asterisk/trunk/lib/python/asterisk/ami.py <span style="color: grey">(3437)</span></li>

 <li>/asterisk/trunk/tests/apps/confbridge/tests.yaml <span style="color: grey">(3437)</span></li>

</ul>

<p><a href="https://reviewboard.asterisk.org/r/2130/diff/" style="margin-left: 3em;">View Diff</a></p>




  </td>
 </tr>
</table>








  </div>
 </body>
</html>