This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

classification
Title: test_traceback.test_walk_stack() fails when run directly (without regrtest)
Type: behavior Stage: resolved
Components: Tests Versions: Python 3.7, Python 3.6, Python 3.5
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: serhiy.storchaka Nosy List: Nan Wu, matrixise, python-dev, rbcollins, serhiy.storchaka, vstinner
Priority: normal Keywords: easy, patch

Created on 2015-12-02 17:44 by vstinner, last changed 2022-04-11 14:58 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
fix_test_walk_stack_failed_as_script_patch Nan Wu, 2015-12-04 03:10 review
test_walk_stack.patch serhiy.storchaka, 2016-03-14 05:33 review
Messages (11)
msg255737 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2015-12-02 17:44
Tested on Python 3.6 (default branch):

haypo@smithers$ ./python -m test test_traceback
[1/1] test_traceback
1 test OK.

haypo@smithers$ ./python Lib/test/test_traceback.py 
..........................................F...............
======================================================================
FAIL: test_walk_stack (__main__.TestStack)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "Lib/test/test_traceback.py", line 684, in test_walk_stack
    self.assertGreater(len(s), 10)
AssertionError: 10 not greater than 10

----------------------------------------------------------------------
Ran 58 tests in 2.184s

FAILED (failures=1)
msg255850 - (view) Author: Nan Wu (Nan Wu) * Date: 2015-12-04 03:10
Put in a fix. Let me know if it looks ok.
msg255857 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2015-12-04 10:55
I found a similar bug in other tests, I opened the new issue #25795.
msg255858 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2015-12-04 11:04
The test was introduced by the change 73afda5a4e4c of the issue ##17911 in Python 3.6:
---
changeset:   94850:73afda5a4e4c
parent:      94848:fc0201ccbcd4
user:        Robert Collins <rbtcollins@hp.com>
date:        Thu Mar 05 12:07:57 2015 +1300
files:       Doc/library/linecache.rst Doc/library/traceback.rst Lib/linecache.py Lib/test/test_linecache.py Lib/test/test_traceback.py L
description:
Issue #17911: traceback module overhaul

Provide a way to seed the linecache for a PEP-302 module without actually
loading the code.

Provide a new object API for traceback, including the ability to not lookup
lines at all until the traceback is actually rendered, without any trace of the
original objects being kept alive.
---

I would prefer that Robert reviews the change to make sure that it's correct.

It looks like running Lib/test/test_traceback.py creates a less deeper callback, the callback has 10 frames whereas the test ensures that we have *more* than 10 frames. Output of traceback.print_traceback():
---
..........................................
  File "Lib/test/test_traceback.py", line 923, in <module>
    unittest.main()
  File "/home/haypo/prog/python/default/Lib/unittest/main.py", line 94, in __init__
    self.runTests()
  File "/home/haypo/prog/python/default/Lib/unittest/main.py", line 255, in runTests
    self.result = testRunner.run(self.test)
  File "/home/haypo/prog/python/default/Lib/unittest/runner.py", line 176, in run
    test(result)
  File "/home/haypo/prog/python/default/Lib/unittest/suite.py", line 84, in __call__
    return self.run(*args, **kwds)
  File "/home/haypo/prog/python/default/Lib/unittest/suite.py", line 122, in run
    test(result)
  File "/home/haypo/prog/python/default/Lib/unittest/suite.py", line 84, in __call__
    return self.run(*args, **kwds)
  File "/home/haypo/prog/python/default/Lib/unittest/suite.py", line 122, in run
    test(result)
  File "/home/haypo/prog/python/default/Lib/unittest/case.py", line 648, in __call__
    return self.run(*args, **kwds)
  File "/home/haypo/prog/python/default/Lib/unittest/case.py", line 600, in run
    testMethod()
  File "Lib/test/test_traceback.py", line 683, in test_walk_stack
    traceback.print_stack()
---

I count 11 frames, but I guess that we should exclude the latest one.

If I understood correctly, we should modify the unit test to check that we have at least *9* frames instead of 10.

I don't think that it's ok to test the *exact* number of frames, because it's highly dependent of the implementation of the unittest module. Tomorrow, the unittest module may be modified to add new calls in the call stacks... or maybe even remove some calls, but IMHO this is less likely.

---

This issue remembers me a very complex issue related to sys.setrecursionlimit(), issue #25274. I factored deeply Lib/test/regrtest.py (which even became a "library", Lib/test/libregrtest/), and with this change, I added more calls to the call stack. As a consequence, I triggered a new complex bug in how Python handles RecursionError.

At the end, I modified sys.setrecursionlimit() to raise directly a RecursionError if the new limit is too low *depending on the depth of the current call stack* ;-)
msg258911 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2016-01-25 17:17
@Robert: Can you please take a look at the attached patch? Does it look good to you?
msg261715 - (view) Author: Robert Collins (rbcollins) * (Python committer) Date: 2016-03-14 02:34
Can we just stop running the test suite directly?

python -m unittest test.test_traceback

should work fine and as quickly, ... I'd like to delete all the __main__ in the test suite as cruft TBH.

The patch would be ok if ugly, its a bit of a magic number there. What the test really should do is create a recursive function of some depth, and then introspect the result of calling the function at the bottom of that recursion.
msg261724 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2016-03-14 05:33
I would use different test, not depending on outer stack depth.
msg261784 - (view) Author: Robert Collins (rbcollins) * (Python committer) Date: 2016-03-14 22:22
@serhiy, how is that different to what I said?
msg262521 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2016-03-27 13:09
Sorry, I meant different from current test and from previous patch. But it looks like what you were proposed.
msg278074 - (view) Author: Serhiy Storchaka (serhiy.storchaka) * (Python committer) Date: 2016-10-04 18:40
Ping.
msg278269 - (view) Author: Roundup Robot (python-dev) (Python triager) Date: 2016-10-07 20:47
New changeset 8d150de9edba by Serhiy Storchaka in branch '3.5':
Issue #25783: Fixed test_traceback when run directly (without regrtest).
https://hg.python.org/cpython/rev/8d150de9edba

New changeset 4646b64139c9 by Serhiy Storchaka in branch '3.6':
Issue #25783: Fixed test_traceback when run directly (without regrtest).
https://hg.python.org/cpython/rev/4646b64139c9

New changeset 696851f38c93 by Serhiy Storchaka in branch 'default':
Issue #25783: Fixed test_traceback when run directly (without regrtest).
https://hg.python.org/cpython/rev/696851f38c93
History
Date User Action Args
2022-04-11 14:58:24adminsetgithub: 69969
2016-10-07 20:48:21serhiy.storchakasetstatus: open -> closed
stage: patch review -> resolved
resolution: fixed
versions: + Python 3.5, Python 3.7
2016-10-07 20:47:41python-devsetnosy: + python-dev
messages: + msg278269
2016-10-07 20:40:12serhiy.storchakasetassignee: serhiy.storchaka
2016-10-04 18:40:59serhiy.storchakasetmessages: + msg278074
2016-03-27 13:09:12serhiy.storchakasetmessages: + msg262521
2016-03-14 22:22:15rbcollinssetmessages: + msg261784
2016-03-14 05:33:43serhiy.storchakasetfiles: + test_walk_stack.patch

type: behavior

keywords: + patch
nosy: + serhiy.storchaka
messages: + msg261724
stage: patch review
2016-03-14 02:34:57rbcollinssetmessages: + msg261715
2016-01-25 17:17:24vstinnersetmessages: + msg258911
2015-12-04 11:04:21vstinnersetmessages: + msg255858
2015-12-04 10:55:18vstinnersetmessages: + msg255857
2015-12-04 03:10:25Nan Wusetfiles: + fix_test_walk_stack_failed_as_script_patch
nosy: + Nan Wu
messages: + msg255850

2015-12-02 20:52:04serhiy.storchakasetnosy: + rbcollins
2015-12-02 17:44:46vstinnersetnosy: + matrixise
2015-12-02 17:44:38vstinnersetkeywords: + easy
2015-12-02 17:44:33vstinnercreate