On Fri, 2012-04-13 at 15:28 +0200, Patrick Ohly wrote: > This is just a quick-and-dirty solution, not committed anywhere. Shall I > do the base work for a few tests and then let you continue with adding > the rest?
Below are the commits, already merged into master after a quick test run: http://syncev.meego.com/2012-04-16-12-37_lucid-amd64_prebuilt-amd64_testing_dbus/ I started with your initial commit and then included the changes that we were discussing, plus a fix for a failure still visible in that test run. The reason is that your scanFiles() implementation is slightly different from the C++ version. In contrast to the C++ version it includes lines like: sources/addressbook/config.ini:# ActiveSync Address Book = eas-contacts sources/addressbook/config.ini:# ActiveSync Events = eas-events sources/addressbook/config.ini:# ActiveSync Todos = eas-todos sources/addressbook/config.ini:# ActiveSync Memos = eas-memos These need to be excluded by the comparison because these comments can change, depending on how the binaries were compiled or run. Your reference text in the ScheduleWorld config includes one particular variation and therefore it worked for me when testing manually, but the nightly testing differs. A good test for the assertEqualDiff() :-) See: http://syncev.meego.com/2012-04-16-12-37_lucid-amd64_prebuilt-amd64_testing_dbus/testing-amd64/7-dbus/Cmdline_SetupScheduleWorld.log.html With everything in place, do you still want to convert some more tests? I think one commit per converted test would be good, with C++ removed and Python added in the same test. I expect that most tests can and should be moved. The only reason for keeping a test in the C++ code would be if it explicitly tests some aspect that cannot be tested when going through D-Bus - not sure whether there is any such case. commit 2925b97bac45ae4dc4dac92b04b91683cad29ddc Author: Krzesimir Nowak <[email protected]> Date: Thu Apr 12 15:45:02 2012 +0200 D-Bus Testing: add Cmdline tests framework This is a translation of the corresponding C++ TestCmdline from Cmdline.cpp into Python. commit aa562e5ef97eba78b7c45ab095df5071134840dc Author: Patrick Ohly <[email protected]> Date: Mon Apr 16 09:56:50 2012 +0200 D-Bus Testing: added assertEqualDiff() Replaces the diffStrings() from the previous commit. Renamed it because it really is specifying an assertion and moved it to DBusUtil because it may be useful outside of the command line testing. Also made sure that the diff is part of the assertion because then it will be repeated when listing the failure. commit 5389b8eeeddc328e29a86c91aec8606ac3fb9741 Author: Patrick Ohly <[email protected]> Date: Mon Apr 16 10:54:52 2012 +0200 D-Bus Testing: ensure that we have assertRegexpMatches() unittest.assertRegexpMatches() is very useful for command line output testing. But it is not yet available in Ubuntu Lucid, the current base line for SyncEvolution releases. Therefore provide a fallback implementation. commit 0e63bc8e59b53a8821beff9f29d061cae48a66fc Author: Patrick Ohly <[email protected]> Date: Mon Apr 16 17:26:12 2012 +0200 D-Bus Testing: fixed scanFiles() The function must return all property assignments, including those which are commented out. The Python version accidentally included some comment lines which looked like assignments, partly because it ignored leading spaces, partly because it looked anywhere in the line for an equal sign. Fixed by using a regex for the matching. commit 67ce74b57fcb51f57b8cf29e353e13da16d60b8b Author: Patrick Ohly <[email protected]> Date: Mon Apr 16 12:13:14 2012 +0200 D-Bus Testing: eliminate TestCmdline.testdir All D-Bus tests already have their private xdg_root = 'temp-test-dbus' which is cleared before running each test. Use it also for TestCmdline instead of creating our own temporary directory, for the sake of consistency. Another advantage is that the syncevo-dbus-server is running with that same XDG root and reading/writing files in it automatically. The command line client currently *does* send its XDG env variables and the server uses them, but perhaps that feature will have to be removed, because it has a design mistake (*), so don't depend on it. (*) If different clients and the auto-syncing code in the server are allowed to use different config roots, the 'config name' alone no longer is a unique identifier for configs. commit 7c2de4ed5199f9c971d1474595f5a04988c1eac3 Author: Patrick Ohly <[email protected]> Date: Mon Apr 16 12:58:52 2012 +0200 D-Bus Testing: added running of command line tool The 'syncevolution' command line tool is started inside the same D-Bus session as the 'syncevo-dbus-server' that is started before running each test. They use the same XDG env variables. The test-dbus.py script is able to watch and report all D-Bus traffic between tool and server. Because tests are meant to be realistic, SYNCEVOLUTION_DEBUG has to be optional and must be turned off for all tests which test for real output as seen by users. Every single invocation of runCmdline() should check stdout and stderr, to detect unexpected output. The return code is already tested by runCmdline() itself, unless explicitly turned off (may be useful for tests which expect certain kind of failures). Ideally the entire string gets tested, either via an exact string comparison or a full regex match. Note that assertRegexpMatches() only does a search, so use ^ and $ to ensure full match. If (and only if) the command is expected to produce output on both stdout and stderr where the order matters (for example, syncing), then stdout and stderr should be combined into one stream. Otherwise the order cannot be tested. commit 470f0e7d7a56b96adff21e5e918c58ee0a9e3420 Author: Patrick Ohly <[email protected]> Date: Mon Apr 16 13:02:23 2012 +0200 D-Bus Testing: added testSetupScheduleWorld The test is a straight copy from Cmdline.cpp. Because the hard-coded default SSL certificate path is not known in test-dbus.py, it has to extract that string by printing a template once with the command line tool (only the command line exposes the comments, normal D-Bus API doesn't) and finding it in the output. This allows copying the C++ tests without making them less strict by filtering out the SSL certificate path before the result comparisons. commit a27f2af580a00d81107f69bc5802c079cef23766 Author: Patrick Ohly <[email protected]> Date: Mon Apr 16 14:38:34 2012 +0200 D-Bus Testing: work around Python 2.6 subprocess bug Explicitly pass an environment when running the command line tool. Otherwise subprocess.Popen() from Python 2.6 uses not os.environ (which would be okay) but rather the environment passed to a previous call to subprocess.Popen() (which will fail if the previous test ran with an environment which had SYNCEVOLUTION_DEBUG set). -- Best Regards, Patrick Ohly The content of this message is my personal opinion only and although I am an employee of Intel, the statements I make here in no way represent Intel's position on the issue, nor am I authorized to speak on behalf of Intel on this matter. _______________________________________________ SyncEvolution mailing list [email protected] http://lists.syncevolution.org/listinfo/syncevolution
