[asterisk-dev] [Code Review] 4413: Testsuite: Simulate phones and control from YAML.
jbigelow
reviewboard at asterisk.org
Thu Feb 12 18:24:39 CST 2015
> On Feb. 12, 2015, 12:42 p.m., Mark Michelson wrote:
> > /asterisk/trunk/lib/python/asterisk/phones.py, lines 86-88
> > <https://reviewboard.asterisk.org/r/4413/diff/1/?file=71348#file71348line86>
> >
> > I think this is a good case for using "is" instead of equality. I imagine that callers of this function are going to be passing a reference to the same account object that is stored on the phone_obj rather than a separate object with equivalent properties.
> >
> > Also, to avoid the continue statement, you can just use a positive comparison instead of a negative one:
> >
> > if account is phone_obj.account:
> > return phone_obj
Yup, that's what I meant to do :)
> On Feb. 12, 2015, 12:42 p.m., Mark Michelson wrote:
> > /asterisk/trunk/lib/python/asterisk/phones.py, lines 115-117
> > <https://reviewboard.asterisk.org/r/4413/diff/1/?file=71348#file71348line115>
> >
> > A couple of PEP 8 points:
> >
> > 1) When catching exceptions, use the syntax "except ErrorType as ErrorInstance" instead of "except ErrorType, ErrorInstance". So here, it would be "except pj.Error as err"
> >
> > 2) A PEP 8 checker will complain about the indentation of str(err)) on the final line I've highlighted. It will claim it should be lined up like this:
> >
> > raise Exception("Exception occurred while making call: '%s'" %
> > str(err))
> >
> > See how "str" is lined up to show how it belongs to the parentheses?
I blame my python plugin for vim which just shifts twice. I installed the pep8 utility which pointed out a couple others which I have also fixed.
> On Feb. 12, 2015, 12:42 p.m., Mark Michelson wrote:
> > /asterisk/trunk/lib/python/asterisk/phones.py, line 156
> > <https://reviewboard.asterisk.org/r/4413/diff/1/?file=71348#file71348line156>
> >
> > self.current_call doesn't seem to be used for anything.
Removed.
> On Feb. 12, 2015, 12:42 p.m., Mark Michelson wrote:
> > /asterisk/trunk/lib/python/asterisk/phones.py, lines 190-191
> > <https://reviewboard.asterisk.org/r/4413/diff/1/?file=71348#file71348line190>
> >
> > Should this only be done if self.phone is None? Seems like this would be redundant after the initial setting.
That would make sense.
> On Feb. 12, 2015, 12:42 p.m., Mark Michelson wrote:
> > /asterisk/trunk/lib/python/asterisk/phones.py, line 192
> > <https://reviewboard.asterisk.org/r/4413/diff/1/?file=71348#file71348line192>
> >
> > I suspect it's not an issue, but is there ever a chance that self.call could be None when the on_state() callback is called?
As far as I know self.call would never be None when a pjsua callback is called such as on_state().
> On Feb. 12, 2015, 12:42 p.m., Mark Michelson wrote:
> > /asterisk/trunk/lib/python/asterisk/phones.py, lines 197-204
> > <https://reviewboard.asterisk.org/r/4413/diff/1/?file=71348#file71348line197>
> >
> > This seems overly complicated for what you are trying to do here. Why not just
> >
> > try:
> > self.phone.calls.remove(self.call)
> > except ValueError:
> > # Log an error or something
> >
> > If that doesn't work because equality of calls doesn't evaluate as you'd expect, then this is a situation where I expect that a single object reference is being passed around everywhere rather than separate call objects. You could take the approach of reconstructing the self.phone.calls list like this:
> >
> > self.phone.calls = [call for call in self.phone.calls if call is not self.call]
The first suggestion is actually what I initially was using. However I found that the call object wasn't always being removed from the list. Debugging showed the id() of self.call not matching any in the list which I believe is because self.call is set to weakref.proxy(call) in pjsua.CallCallback(). Comparing the SIP Call-ID of the call objects should be unique enough to find the one to remove from the list.
> On Feb. 12, 2015, 12:42 p.m., Mark Michelson wrote:
> > /asterisk/trunk/lib/python/asterisk/phones.py, line 246
> > <https://reviewboard.asterisk.org/r/4413/diff/1/?file=71348#file71348line246>
> >
> > This function's name is misleading because it does not actually log anything. It should either
> >
> > 1) Be renamed to something indicating that it is just gathering call information into a string
> >
> > or
> >
> > 2) Be altered to actually log the call info using LOGGER.debug()
Renamed.
> On Feb. 12, 2015, 12:42 p.m., Mark Michelson wrote:
> > /asterisk/trunk/lib/python/asterisk/phones.py, line 270
> > <https://reviewboard.asterisk.org/r/4413/diff/1/?file=71348#file71348line270>
> >
> > Can you add a comment about why the lock is being used here?
Fixed this by removing the locking :)
Apparently a lock isn't needed when making call. Unless perhaps a callback isn't passed and then set later using call.set_callback() but that's not the case here.
> On Feb. 12, 2015, 12:42 p.m., Mark Michelson wrote:
> > /asterisk/trunk/lib/python/asterisk/phones.py, lines 272-275
> > <https://reviewboard.asterisk.org/r/4413/diff/1/?file=71348#file71348line272>
> >
> > If this exception occurs, does lock get properly unlocked?
Fixed this by removing the locking :)
Apparently a lock isn't needed when making call. Unless perhaps a callback isn't passed and then set later using call.set_callback() but that's not the case here.
> On Feb. 12, 2015, 12:42 p.m., Mark Michelson wrote:
> > /asterisk/trunk/lib/python/asterisk/pjsua_mod.py, lines 258-259
> > <https://reviewboard.asterisk.org/r/4413/diff/1/?file=71349#file71349line258>
> >
> > Is this change necessary since you ended up overriding reg_success() in your new pluggable object?
If that condition is removed then it will blow up if callback_module & callback_method are not defined in YAML and pjsua_mod.PJsua is being used as a test module. If it remains with the same scenario then things won't blow up and no user code is called into(maybe there's a need for that?). Suggestions?
- jbigelow
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviewboard.asterisk.org/r/4413/#review14450
-----------------------------------------------------------
On Feb. 12, 2015, 10:25 a.m., jbigelow wrote:
>
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviewboard.asterisk.org/r/4413/
> -----------------------------------------------------------
>
> (Updated Feb. 12, 2015, 10:25 a.m.)
>
>
> Review request for Asterisk Developers and Mark Michelson.
>
>
> Bugs: ASTERISK-24578
> https://issues.asterisk.org/jira/browse/ASTERISK-24578
>
>
> Repository: testsuite
>
>
> Description
> -------
>
> Pluggable modules to place, receive, and transfer (blind/attended) calls to simulate phones using PJSUA and YAML configuration. Calls are placed and/or transferred using the new pluggable action module. This should allow many currrent and future tests to easily send/receive calls to/from Asterisk along with transferring calls within YAML configuration.
>
> The pluggable test module (phones.PjsuaPhoneController) initializes the PJSUA accounts and once all have registered, the account callbacks are setup and are ready to receive calls. The pluggable action module (pluggable_modules.PjsuaPhoneActionModule) provides the ability to place calls and transfer calls using the accounts from YAML and the action is referenced with 'pjsua_phone'. The only time a call is hung up by this is when a transfer is performed and a 200 OK sipfrag NOTIFY is received. None of the modules set a pass/fail result and are only for driving and manipulating calls.
>
> See attached file for YAML demo.
>
>
> Diffs
> -----
>
> /asterisk/trunk/lib/python/asterisk/pluggable_modules.py 6379
> /asterisk/trunk/lib/python/asterisk/pjsua_mod.py 6379
> /asterisk/trunk/lib/python/asterisk/phones.py PRE-CREATION
>
> Diff: https://reviewboard.asterisk.org/r/4413/diff/
>
>
> Testing
> -------
>
> * Tested placing calls, receiving calls, transfering via blind & attended.
> * Pylint score of 9.40/10 for phones.py
> * See attached test-config.yaml for a demonstration.
>
>
> File Attachments
> ----------------
>
> Demonstration
> https://reviewboard.asterisk.org/media/uploaded/files/2015/02/11/659ab31f-8401-4f24-be5e-da1db0be3156__test-config.yaml
>
>
> Thanks,
>
> jbigelow
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-dev/attachments/20150213/d233ee27/attachment-0001.html>
More information about the asterisk-dev
mailing list