msg162870 - (view) |
Author: Eli Bendersky (eli.bendersky) *  |
Date: 2012-06-15 08:18 |
The XincludeTest test-case in test_xml_etree is now skipped, because it fails in an intermittent manner. I can reproduce the failure when running full regrtest with -j1, but not -j8, and not when run individually. The failure is most likely due to the test itself, in the way it imports the Python ET, leaving _elementtree out. This may be related to http://bugs.python.org/issue14035 |
|
|
msg162881 - (view) |
Author: Eli Bendersky (eli.bendersky) *  |
Date: 2012-06-15 10:01 |
After some tinkering I found which test when run before test_xml_etree causes it to crash: $ ./python -m test.regrtest test___all__ test_xml_etree [1/2] test___all__ [2/2] test_xml_etree Fatal Python error: Segmentation fault Current thread 0x00007f771ecec700: File "/home/eliben/python-src/33/Lib/xml/etree/ElementTree.py", line 895 in _namespaces File "/home/eliben/python-src/33/Lib/xml/etree/ElementTree.py", line 843 in write File "/home/eliben/python-src/33/Lib/test/test_xml_etree.py", line 103 in serialize File "/home/eliben/python-src/33/Lib/test/test_xml_etree.py", line 2020 in test_xinclude_default File "/home/eliben/python-src/33/Lib/unittest/case.py", line 385 in _executeTestPart File "/home/eliben/python-src/33/Lib/unittest/case.py", line 440 in run File "/home/eliben/python-src/33/Lib/unittest/case.py", line 492 in __call__ File "/home/eliben/python-src/33/Lib/unittest/suite.py", line 105 in run File "/home/eliben/python-src/33/Lib/unittest/suite.py", line 67 in __call__ File "/home/eliben/python-src/33/Lib/unittest/suite.py", line 105 in run File "/home/eliben/python-src/33/Lib/unittest/suite.py", line 67 in __call__ File "/home/eliben/python-src/33/Lib/test/support.py", line 1282 in run File "/home/eliben/python-src/33/Lib/test/support.py", line 1383 in _run_suite File "/home/eliben/python-src/33/Lib/test/support.py", line 1417 in run_unittest File "/home/eliben/python-src/33/Lib/test/test_xml_etree.py", line 2311 in test_main File "/home/eliben/python-src/33/Lib/test/regrtest.py", line 1238 in runtest_inner File "/home/eliben/python-src/33/Lib/test/regrtest.py", line 919 in runtest File "/home/eliben/python-src/33/Lib/test/regrtest.py", line 710 in main File "/home/eliben/python-src/33/Lib/test/regrtest.py", line 1829 in File "/home/eliben/python-src/33/Lib/runpy.py", line 75 in _run_code File "/home/eliben/python-src/33/Lib/runpy.py", line 162 in _run_module_as_main Segmentation fault (core dumped) Note that this is the Python test crashing. test_xml_etree_c works fine |
|
|
msg162884 - (view) |
Author: Eli Bendersky (eli.bendersky) *  |
Date: 2012-06-15 10:49 |
As suspected, the cause is that xinclude_loader manages to somehow import the C version of ET, although test_xml_etree tries to enforce the Python version. This is probably because test___all__ imports all modules and leaves stuff in the import cache. What causes the segfault itself is that C Elements are mixed with Python Elements, and they're incompatible. |
|
|
msg162925 - (view) |
Author: Eli Bendersky (eli.bendersky) *  |
Date: 2012-06-15 17:57 |
Here is a patch that solves the current problem. A longer term solution would be to have a cleaner test plan for ET in general, without monkey-patching at all, and without state that causes test-order dependencies. |
|
|
msg162951 - (view) |
Author: Roundup Robot (python-dev)  |
Date: 2012-06-16 03:49 |
New changeset 5782efaa8d68 by Eli Bendersky in branch 'default': Make the test more resilient to test-run order (closes #15075) http://hg.python.org/cpython/rev/5782efaa8d68 |
|
|
msg162953 - (view) |
Author: Eli Bendersky (eli.bendersky) *  |
Date: 2012-06-16 03:53 |
Opened #15083 to track the *actual* solution to this problem, which should restructure the tests to be safer. |
|
|
msg162957 - (view) |
Author: Florent Xicluna (flox) *  |
Date: 2012-06-16 07:35 |
> File "/home/eliben/python-src/33/Lib/test/regrtest.py", line 710 in main > File "/home/eliben/python-src/33/Lib/test/regrtest.py", line 1829 in > File "/home/eliben/python-src/33/Lib/runpy.py", line 75 in _run_code > File "/home/eliben/python-src/33/Lib/runpy.py", line 162 in _run_module_as_main > Segmentation fault (core dumped) Even if the ET tests are hacking sys.modules, I assume that the Python interpreter should not crash so badly. It reveals probably a flaw somewhere else. I suggest to re-open this to track the Segmentation fault. |
|
|
msg162967 - (view) |
Author: Eli Bendersky (eli.bendersky) *  |
Date: 2012-06-16 12:08 |
No need, the cause for the segfault is known. What happens is that Element objects from the Python module get intermixed with Element objects from the C module, and these are incompatible. The C module traversal functions assume they can cast Elements to a known structure (ElementObject), and when they get the invalid Elements they crash. Adding runtime checks everywhere is too costly. This situation cannot arise in a valid way. |
|
|
msg178654 - (view) |
Author: Stefan Behnel (scoder) *  |
Date: 2012-12-31 08:34 |
If runtime checks are needed to prevent mixing arbitrary objects into the tree, then I don't think they should be considered too costly. I agree with Florent that this is worth reopening. It doesn't look like a "Tests" bug to me rather a "Lib"/"XML" bug. |
|
|
msg179124 - (view) |
Author: Eli Bendersky (eli.bendersky) *  |
Date: 2013-01-05 15:01 |
I investigated a bit, and type checks were added to protect from such mixing. Please open a new patch with a speficic reproducer if you run into similar problems (interepreter crash). |
|
|