Closed Bug 596782 Opened 14 years ago Closed 14 years ago

four Windows tests fail on Linux w/recent Firefox 4 builds

Categories

(Add-on SDK Graveyard :: General, defect)

x86
Linux
defect
Not set
normal

Tracking

(Not tracked)

RESOLVED FIXED

People

(Reporter: myk, Assigned: Felipe)

References

Details

Attachments

(1 file)

On Linux, with recent Firefox 4 builds (the latest nightly as well as 4.0b6), four Windows API tests fail.  The tests don't fail on Mac OS X, so this may be Linux only (haven't tested Windows yet).

Felipe, can you take a look at this?

Here's the console output:

error: fail: Non-browser windows aren't handled by this module (({get tabs () {var tabs = new TabModule(element);delete this.tabs;this.__defineGetter__("tabs", (function () tabs));return tabs;}, get title () element.document.title, close:(function (callback) {if (callback) {windowMap.addCloseCallback(element, callback);}element.close();})}) != null)
info: Traceback (most recent call last):
  File "resource://jetpack-core-jetpack-core-lib/timer.js", line 60, in notify
    this._callback.apply(null, this._params);
  File "resource://jetpack-core-jetpack-core-tests/test-windows.js", line 227, in nextStep
    testSteps.shift()();
  File "resource://jetpack-core-jetpack-core-tests/test-windows.js", line 194, in anonymous
    test.assertEqual(windows.activeWindow, null, "Non-browser windows aren't handled by this module");
  File "resource://jetpack-core-jetpack-core-lib/unit-test.js", line 227, in assertEqual
    this.fail(message);
  File "resource://jetpack-core-jetpack-core-lib/unit-test.js", line 145, in fail
    console.trace();
error: fail: Correct active window - 2 ("Minefield" != "window 2 - Minefield")
info: Traceback (most recent call last):
  File "resource://jetpack-core-jetpack-core-lib/timer.js", line 60, in notify
    this._callback.apply(null, this._params);
  File "resource://jetpack-core-jetpack-core-tests/test-windows.js", line 227, in nextStep
    testSteps.shift()();
  File "resource://jetpack-core-jetpack-core-tests/test-windows.js", line 198, in anonymous
    test.assertEqual(windows.activeWindow.title, window2.title, "Correct active window - 2");
  File "resource://jetpack-core-jetpack-core-lib/unit-test.js", line 227, in assertEqual
    this.fail(message);
  File "resource://jetpack-core-jetpack-core-lib/unit-test.js", line 145, in fail
    console.trace();
error: fail: Correct active window - 3 ("Minefield" != "window 3 - Minefield")
info: Traceback (most recent call last):
  File "resource://jetpack-core-jetpack-core-lib/timer.js", line 60, in notify
    this._callback.apply(null, this._params);
  File "resource://jetpack-core-jetpack-core-tests/test-windows.js", line 227, in nextStep
    testSteps.shift()();
  File "resource://jetpack-core-jetpack-core-tests/test-windows.js", line 202, in anonymous
    test.assertEqual(windows.activeWindow.title, window3.title, "Correct active window - 3");
  File "resource://jetpack-core-jetpack-core-lib/unit-test.js", line 227, in assertEqual
    this.fail(message);
  File "resource://jetpack-core-jetpack-core-lib/unit-test.js", line 145, in fail
    console.trace();
error: fail: Non-browser windows aren't handled by this module ("Minefield" != "window 3 - Minefield")
info: Traceback (most recent call last):
  File "resource://jetpack-core-jetpack-core-lib/timer.js", line 60, in notify
    this._callback.apply(null, this._params);
  File "resource://jetpack-core-jetpack-core-tests/test-windows.js", line 227, in nextStep
    testSteps.shift()();
  File "resource://jetpack-core-jetpack-core-tests/test-windows.js", line 206, in anonymous
    test.assertEqual(windows.activeWindow.title, window3.title, "Non-browser windows aren't handled by this module");
  File "resource://jetpack-core-jetpack-core-lib/unit-test.js", line 227, in assertEqual
    this.fail(message);
  File "resource://jetpack-core-jetpack-core-lib/unit-test.js", line 145, in fail
    console.trace();
Yes, looking.

Does it consistently fail? I recall that Linux had worse timing for setting active windows (at least on my VM), and the tests would fail sometimes, but not always.
But if it always happen maybe something broke it on trunk recently.
Assignee: nobody → felipc
Status: NEW → ASSIGNED
Hmm, I thought it was failing consistently, but once I isolated the tests by only runnings tests for that one module, it became inconsistent, and when it happens, there is only a single test failure (rather than four).  Nevertheless, it still happens frequently.
Ok yeah, this points out to the .focus() response time being incosistent, and it also depends on the system state (trying to interact with other windows at the same time might make the test fail).

I saw on some other similar tests the approach "retry the condition X times before considering it a failure", which also helps on not having to have a very big setTimeout value by default. I'm thinking this would be a good idea to do here.
Felipe: can you put together a patch using that approach?
First I tried to use "focus" or "activate" listeners directly, but they weren't working 100% on Linux, so I had to grab the waitForFocus code from the mochitest harness to make it more reliable.

It looks like it's much more stable now. Can you test the patch and let me know if it fixes the problem? If it doesn't feel free to drop the review request.

Also included a bigger timeout for test-widget which should help here and bug 597202. If you prefer that I include that in a separate patch just let me know and I'll remove that modification from this one.

Also included an extra check on testOnOpenOnCloseListeners to make it easier to detect when the test fails due to open windows left by other tests.
Attachment #476074 - Flags: review?(myk)
Comment on attachment 476074 [details] [diff] [review]
Make windows test more reliable

>+        childTargetWindow.removeEventListener("focus", arguments.callee, true);

Nit: we're slowly converting our code to ES5 strict, so arguments.callee will eventually become unavailable, and it'd be better to avoid using it.


> exports.testOnOpenOnCloseListeners = function(test) {
>   test.waitUntilDone();
>   let windows = require("windows").browserWindows;
> 
>+  test.assertEqual(windows.length, 1, "Only one window open");

I wish we could do this check after every test that might have opened windows. :-/


Otherwise, this looks great.  I do still see an intermittent timeout failure in testActiveWindow:

(jsdk)myk@myk:~/Projects/jsdk/packages/jetpack-core$ cfx test -F windows -b ~/Applications/firefox-trunk/firefox
Using binary at '/home/myk/Applications/firefox-trunk/firefox'.
Using profile at '/tmp/tmpm8tnsG.mozrunner'.

(firefox-bin:3801): GLib-WARNING **: g_set_prgname() called multiple times
........................error: TEST FAILED: test-windows.testActiveWindow (timed out)

24 of 25 tests passed.
FAIL
Total time: 12.230374 seconds
Program terminated unsuccessfully.


Nevertheless, this patch is still a big improvement, so I'm ok with landing it and then working on that intermittent failure in a separate bug.
Attachment #476074 - Flags: review?(myk) → review+
http://hg.mozilla.org/labs/jetpack-sdk/rev/c57cf845f179

I named the anonymous listeners to remove arguments.callee usage


>>+  test.assertEqual(windows.length, 1, "Only one window open");
>
> I wish we could do this check after every test that might have opened windows.
> :-/

That is a good idea, perhaps we could add something like that on the test harness
Status: ASSIGNED → RESOLVED
Closed: 14 years ago
Resolution: --- → FIXED
The Add-on SDK is no longer a Mozilla Labs experiment and has become a big enough project to warrant its own Bugzilla product, so the "Add-on SDK" product has been created for it, and I am moving its bugs to that product.

To filter bugmail related to this change, filter on the word "looptid".
Component: Jetpack SDK → General
Product: Mozilla Labs → Add-on SDK
QA Contact: jetpack-sdk → general
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: