[asterisk-dev] [Code Review] 2799: Update simple_bridge test for Asterisk 12; update CEL parsing

jrose reviewboard at asterisk.org
Tue Sep 3 13:34:13 CDT 2013


-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviewboard.asterisk.org/r/2799/#review9586
-----------------------------------------------------------


I tried running this test a few times with this patch in place after observing that in the disconnect test, LINKEDID_END events could occur on either channel. It ended up failing every time due to pretty much the same reason. LINKEDID_END events were able to come in on either channel. Sometimes they would hit Bob twice, sometimes they would hit Alice twice, sometimes they would hit Alice then Bob and sometimes Bob then Alice. I'm not sure this was intended, but I was able to accomodate this variance in the disconnect test by pulling out the LINKEDID_END events and putting them into a separate CEL type which matched against LINKEDID_END instead of the channel name and simply had a LINKEDID_END with an ID for each phase of the test.

- jrose


On Aug. 28, 2013, 3:34 p.m., Matt Jordan wrote:
> 
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviewboard.asterisk.org/r/2799/
> -----------------------------------------------------------
> 
> (Updated Aug. 28, 2013, 3:34 p.m.)
> 
> 
> Review request for Asterisk Developers.
> 
> 
> Bugs: ASTERISK-22323
>     https://issues.asterisk.org/jira/browse/ASTERISK-22323
> 
> 
> Repository: testsuite
> 
> 
> Description
> -------
> 
> This patch does a few things.
> 
> 1) It updates the simple_bridge test for Asterisk 12, such that it handles the correct AMI events, CDR entries, and CEL events.
> 2) It adds a tool (and I emphasize it as a tool to aid in development) that will snoop CEL AMI events and dump them out in YAML. I found this to be helpful when producing the expected CEL events for this test; it may help others as well.
> 3) It updates and simplifies the CEL parsing. More on that below.
> 
> -- CEL PARSING --
> 
> For a single channel, the CEL events related to that channel should always have a well-defined ordering. That is, for a given test, a channel should always transition through the same states in the same order, e.g.,
>   CHAN_START
>   APP_START
>   BRIDGE_ENTER
>   BRIDGE_EXIT
>   APP_END
>   HANGUP
>   CHAN_END
> 
> CEL gets tricky, however, because in addition to verifying that the events for a single channel occurred in the correct order, we also care whether or not events across channels occurred in the correct order.
> 
> For example, take this test, where Alice calls Bob. The events for each channel may look something like this (simplified greatly):
> 
>   Alice                   Bob
>  -------               ---------
>   CHAN_START           CHAN_START
>   APP_START            ANSWER
>   ANSWER               BRIDGE_ENTER
>   BRIDGE_ENTER         BRIDGE_EXIT
>   BRIDGE_EXIT          HANGUP
>   APP_END              CHAN_END
>   HANGUP
>   CHAN_END
> 
> Because Alice and Bob will be executing on separate threads, a total ordering of all events is impossible to verify. The notion that such an ordering was ever possible led to the downfall of the original CEL checking. The existing CEL checking handles this, but requires identifying all events and establishing more relationships than is strictly necessary. In reality, what we want to verify between Alice and Bob is closer to the following:
> 
>   Alice                   Bob
>  -------               ---------
>   CHAN_START           
>   APP_START            
>                        CHAN_START    (verify that Bob starts after Alice's application start)
>                        ANSWER
>   ANSWER                             (verify that Alice answers after Bob answers)
>   BRIDGE_ENTER         BRIDGE_ENTER  (verify that Bob enters the bridge after Alice answers)
>   BRIDGE_EXIT          BRIDGE_EXIT
>   APP_END
>   CHAN_END             CHAN_END
> 
> So what we need are just three orderings between the channels:
>  * Bob's CHAN_START must happen after Alice's APP_START
>  * Alice's ANSWER must happen after Bob's ANSWER
>  * Bob's BRIDGE_ENTER must happen after Alice's ANSWER
> 
> The CEL event checking now allows for this by letting an event be tagged with an identifier. Any other event can declare that they have a partial ordering with that event, and state that they must happen before or after that event. If they do not happen before or after that event, the test fails. However, unlike the previous implementation, we don't have to declare identifiers for all events, nor define an ordering for all events.
> 
> 
> Diffs
> -----
> 
>   /asterisk/trunk/tests/bridge/simple_bridge/test-config.yaml 4090 
>   /asterisk/trunk/lib/python/asterisk/cel.py 4090 
>   /asterisk/trunk/lib/python/asterisk/ami.py 4090 
> 
> Diff: https://reviewboard.asterisk.org/r/2799/diff/
> 
> 
> Testing
> -------
> 
> 
> Thanks,
> 
> Matt Jordan
> 
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-dev/attachments/20130903/df187570/attachment.htm>


More information about the asterisk-dev mailing list