[Development] Failure in tst_qwidget

Olivier Goffart olivier at woboq.com
Sat Mar 2 12:06:27 CET 2013

On Saturday 02 March 2013 09:45:28 Alberto Mardegan wrote:
> Hi all!
>   The CI bot reported a failure in tst_qwidget when merging
> https://codereview.qt-project.org/#change,42990,patchset=8
> (see the last comment from "Qt Continuous Integration System").
> I can reproduce the same failure under ubuntu 13.04 running XFCE.
> Then I removed my patch (by checking out an older version of the dev
> branch, c65ecc50ae4c322294f01685a2b2d2a748a9c940), and ran "make clean"
> from the qtbase root directory.
> After having rebuild everything (by just running "make"), I tried
> running the tst_qwidget again, but I still get the same failure.
> Interestingly, the failure does not occur if I run the individual test
> which is failing (both with my patch and without):
> tests/auto/widgets/kernel/qwidget$ ./tst_qwidget showHideShowX11
> ********* Start testing of tst_QWidget *********
> Config: Using QTest library 5.1.0, Qt 5.1.0
> PASS   : tst_QWidget::initTestCase()
> PASS   : tst_QWidget::showHideShowX11()
> PASS   : tst_QWidget::cleanupTestCase()
> Totals: 3 passed, 0 failed, 0 skipped
> ********* Finished testing of tst_QWidget *********
> So, I wonder:
> 1) Did I take to correct steps to rebuild qtbase?
> 2) Did someone else experience this failure as well? Or is it definitely
> related to my patch?
> 3) Any idea why the individual test works? Could it be a WM timing issue?

I beleive the test is "unstable".  That means that it may often passes, but on 
some cases, it does not.
If i understand the test properly, it waits two seconds for a window to 
receive some events.  But it may very well happen that the seconds are not 
enough, because the tests are run on some busy virtual machine or because the 
window manager is busy or anything.  
The test should be stabilized by sending a signal when they receive an event, 
and waiting for this event to be received.
Test that waits an arbitrary amount of time are flawed. It can either be too 
small and then the test is unstable, or too long and then the running time of 
the tests increase.  (If every test was taking two second, the CI system would 
take forever)
It is better to fire stop the event loop when the condition is met, or use 
QTRY_VERIFY or something.


Woboq - Qt services and support - http://woboq.com - http://code.woboq.org

More information about the Development mailing list