Clean up second arg to ADD_TEST_DIRECTORY()

Bug #874679 reported by Chris Hillery on 2011-10-14
8
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Zorba
High
Chris Hillery

Bug Description

The second (optional) argument to ADD_TEST_DIRECTORY() contains a list of test cases that should be skipped (ie, not created at all). This is extremely dangerous. By bypassing them entirely, there is no way of detecting when the bug is fixed. We have already had serious problems caused by test removal hiding the introduction of new bugs in the past.

I understand that removing a test that segfaults is necessary on Windows in order for the tests to run unattended. However, it should never be done on other platforms. So ADD_TEST_DIRECTORY() should instead mark the bugs as EXPECTED_FAILURE()s on other platforms. (I realize that *currently* all places that pass a list of segfaulting tests to ADD_TEST_DIRECTORY() are inside an IF(WIN32), but this is not sufficient - ADD_TEST_DIRECTORY() itself must enforce that the tests are skipped only on Windows, or else sooner or later someone will accidentally do it wrong. There's currently no documentation either, making this much more likely.)

In order to do this, ADD_TEST_DIRECTORY() needs to either accept a list of pairs of the form (testname, bug ID), or else accept two parallel lists (testnames and bug IDs), so it can pass the bug number to EXPECTED_FAILURE().

A slightly more difficult approach would be to introduce a new KNOWN_SEGFAULT() macro that handled this in conjunction with ADD_TEST_DIRECTORY(). I'm not totally sure this is a good idea, though, because it would (silently) not do anything for tests added by any means other than ADD_TEST_DIRECTORY().

Related branches

Chris Hillery (ceejatec) on 2011-10-14
Changed in zorba:
importance: Undecided → High
assignee: nobody → Gabriel Petrovay (gabipetrovay)
milestone: none → 2.1
Gabriel Petrovay (gabipetrovay) wrote :

You say:

"ADD_TEST_DIRECTORY() needs to [...] accept a list of pairs [...] so it can pass the bug number to EXPECTED_FAILURE()."

And how is this disabling tests on Windows? (because EXPECTED_FAILURE is not good enough on Windows)

Chris Hillery (ceejatec) wrote :

See the second paragraph of my description:

"I understand that removing a test that segfaults is necessary on Windows in order for the tests to run unattended. However, it should never be done on other platforms. So ADD_TEST_DIRECTORY() should instead mark the bugs as EXPECTED_FAILURE()s on other platforms."

The main point of this change is to move the IF(WIN32) *inside* of ADD_TEST_DIRECTORY() itself, so there's no way for anyone to use it incorrectly.

Changed in zorba:
milestone: 2.1 → 2.2
Changed in zorba:
assignee: Gabriel Petrovay (gabipetrovay) → Chris Hillery (ceejatec)
Gabriel Petrovay (gabipetrovay) wrote :

I was about to do this but I still have some question:

You say: "In order to do this, ADD_TEST_DIRECTORY() needs to either accept a list of pairs of the form (testname, bug ID), or else accept two parallel lists (testnames and bug IDs), so it can pass the bug number to EXPECTED_FAILURE()."

With this approach you cannot determine INSIDE the macro which of the following things to do:
1. ADD_TEST
2. EXPECTED_FAILURE on all platforms
3. EXPECTED_FAILURE on Windows

For the seg-faulting on Windows, EXPECTED_FAILURE can not be the solution.
For the tests failing only on Windows, there is no way to determine the correct logic inside ADD_TEST_DIRECTORY based only on a test name and a bug number.
This would only only for tests that failing uniformly on all platforms.

So probably a "KNOWN_SEGFAULT" solution would be the only solution (at least from the ones you mentioned). Please give detail/feedback on this.

Gabriel Petrovay (gabipetrovay) wrote :

Correction: This would only *work* for tests that failing uniformly on all platforms.

Chris Hillery (ceejatec) wrote :

I didn't intend for this solution to *replace* EXPECTED_FAILURE(). The list of bugs sent to this function should only be those which segfault on Windows, and hence they should be skipped entirely on Windows and marked as EXPECTED_FAILURE() on other platforms. Tests which fail for non-segfault reasons should continue to use the existing EXPECTED_FAILURE() mechanism.

Basically, it's an ugly solution to an ugly problem. The KNOWN_SEGFAULT() proposal is a slightly less ugly solution, but more work to implement.

Changed in zorba:
milestone: 2.2 → 2.5
Chris Hillery (ceejatec) on 2012-04-17
Changed in zorba:
status: New → Confirmed
Chris Hillery (ceejatec) on 2012-04-17
Changed in zorba:
status: Confirmed → In Progress
Chris Hillery (ceejatec) wrote :

I have revamped the "known-crashing test" list arguments to ADD_TEST_DIRECTORY(). It now defers to EXPECTED_FAILURE() on non-Win32 platforms. It also checks that all tests passed to it actually exist. I extended the macro documentation accordingly.

The only module currently making use of this functionality is the image module; I have modified it accordingly to pass bug numbers and name the tests correctly.

Chris Hillery (ceejatec) on 2012-04-17
Changed in zorba:
status: In Progress → Fix Committed
Changed in zorba:
status: Fix Committed → Fix Released
To post a comment you must log in.
This report contains Public information  Edit
Everyone can see this information.

Other bug subscribers