diff options
author | Mike Kazantsev <mk.fraggod@gmail.com> | 2013-02-11 13:56:03 +0100 |
---|---|---|
committer | Miklos Vajna <vmiklos@suse.cz> | 2013-02-11 13:56:03 +0100 |
commit | 3e238504209e998064f0906c9edfced9713ba94d (patch) | |
tree | 17f5fdeb9a36df827a5ab2571468c57295934d32 | |
parent | 7e5b4bd31383187b04dedec4854d8c89ae2aea7b (diff) |
skype: add ATTACH_GDB env flag, extend hacking instructions with info on pexpect/gdb
-rw-r--r-- | protocols/skype/HACKING | 29 | ||||
-rwxr-xr-x | protocols/skype/test.py | 14 |
2 files changed, 43 insertions, 0 deletions
diff --git a/protocols/skype/HACKING b/protocols/skype/HACKING index edca0a45..935856a7 100644 --- a/protocols/skype/HACKING +++ b/protocols/skype/HACKING @@ -17,10 +17,15 @@ python skyped.py -n -d 4) irssi + == Tests The plugin is tested with a mocked IRC client and a mocked skyped. +=== Requirements + +Python pexpect module is required to run the tests. + To run tests with bitlbee built in a development tree and not (the one) installed in the system (e.g. /usr), make sure to specify --plugindir= option to ./configure script during the build process: @@ -31,6 +36,30 @@ Otherwise bitlbee will try to load skype.so (among other things) from /usr/lib, which is probably not what you want to test, or produce "Unknown protocol" error. +=== Running + +Tests can be run by running test.py script in this ("protocols/skype") +directory. + +For more control over how/which tests are being run from there, use "python -m +unittest" command: + +bitlbee/protocols/skype% python -m unittest test +bitlbee/protocols/skype% python -m unittest -f test +bitlbee/protocols/skype% python -m unittest test.Test.testMsg + +If bitlbee crashes during tests with SIGSEGV (segmentation fault), it's likely +that there is some problem with skype.c plugin. +To get a backtrace of such crash, use: + +bitlbee/protocols/skype% ATTACH_GDB=true python -m unittest test.Test.testMsg + +Example shows running "testMsg" test with gdb attached to bitlbee, which will +produce full backtrace in "t/gdb-<pid>.log" files (see pid in pexpect error +output of the test). + +=== Adding new tests + To add a new test, the following steps are necessary: 1) Add a new -skyped.mock file: just do the test manually, copy&paste the diff --git a/protocols/skype/test.py b/protocols/skype/test.py index f20039e2..b3f25f46 100755 --- a/protocols/skype/test.py +++ b/protocols/skype/test.py @@ -24,6 +24,20 @@ class Test(unittest.TestCase): stdout=skyped_log, stderr=subprocess.STDOUT) try: bitlbee = pexpect.spawn('../../bitlbee', ['-d', 't/bitlbee'], logfile=pexpect_log) + if os.environ.get('ATTACH_GDB'): + subprocess.Popen(['gdb', '-batch-silent', + '-ex', 'set logging overwrite on', + '-ex', 'set logging file t/gdb-%s.log' % bitlbee.pid, + '-ex', 'set logging on', + '-ex', 'handle all pass nostop noprint', + '-ex', 'handle SIGSEGV pass stop print', + '-ex', 'set pagination 0', + '-ex', 'continue', + '-ex', 'backtrace full', + '-ex', 'info registers', + '-ex', 'thread apply all backtrace', + '-ex', 'quit', + '../../bitlbee', str(bitlbee.pid) ]) bitlbee_mock = open("t/%s-bitlbee.mock" % name) for i in bitlbee_mock.readlines(): line = i.strip() |