homepage

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_pdb fails when only some tests are run
Type: Stage: resolved
Components: Tests Versions: Python 3.10, Python 3.9, Python 3.8
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: Nosy List: iritkatriel, miss-islington, vstinner
Priority: normal Keywords: patch

Created on 2021年04月27日 21:01 by vstinner, last changed 2022年04月11日 14:59 by admin. This issue is now closed.

Pull Requests
URL Status Linked Edit
PR 25673 merged iritkatriel, 2021年04月27日 22:52
PR 25681 closed miss-islington, 2021年04月28日 10:38
PR 25682 closed miss-islington, 2021年04月28日 10:39
PR 25691 merged iritkatriel, 2021年04月28日 14:07
PR 25692 merged miss-islington, 2021年04月28日 15:21
Messages (10)
msg392131 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2021年04月27日 21:01
test_pdb fails with the following commands. I tested on Linux, same/similar failure on Windows.
See also bpo-41914: "test_pdb fails".
$ cat bisect 
test.test_pdb.PdbTestCase.test_run_module
test.test_pdb.test_next_until_return_at_return_event
test.test_pdb.test_pdb_next_command_in_generator_for_loop
$ ./python -m test test_pdb --matchfile=bisect -v
== CPython 3.10.0a7+ (heads/master:6bd9288b80, Apr 27 2021, 22:16:25) [GCC 11.0.1 20210324 (Red Hat 11.0.1-0)]
== Linux-5.11.15-300.fc34.x86_64-x86_64-with-glibc2.33 little-endian
== cwd: /home/vstinner/python/master/build/test_python_7720æ
== CPU count: 8
== encodings: locale=UTF-8, FS=utf-8
0:00:00 load avg: 1.31 Run tests sequentially
0:00:00 load avg: 1.31 [1/1] test_pdb
test_run_module (test.test_pdb.PdbTestCase) ... ok
test_next_until_return_at_return_event (test.test_pdb)
Doctest: test.test_pdb.test_next_until_return_at_return_event ... ok
test_pdb_next_command_in_generator_for_loop (test.test_pdb)
Doctest: test.test_pdb.test_pdb_next_command_in_generator_for_loop ... FAIL
======================================================================
FAIL: test_pdb_next_command_in_generator_for_loop (test.test_pdb)
Doctest: test.test_pdb.test_pdb_next_command_in_generator_for_loop
----------------------------------------------------------------------
Traceback (most recent call last):
 File "/home/vstinner/python/master/Lib/doctest.py", line 2205, in runTest
 raise self.failureException(self.format_failure(new.getvalue()))
AssertionError: Failed doctest test for test.test_pdb.test_pdb_next_command_in_generator_for_loop
 File "/home/vstinner/python/master/Lib/test/test_pdb.py", line 1182, in test_pdb_next_command_in_generator_for_loop
----------------------------------------------------------------------
File "/home/vstinner/python/master/Lib/test/test_pdb.py", line 1195, in test.test_pdb.test_pdb_next_command_in_generator_for_loop
Failed example:
 with PdbTestInput(['break test_gen',
 'continue',
 'next',
 'next',
 'next',
 'continue']):
 test_function()
Expected:
 > <doctest test.test_pdb.test_pdb_next_command_in_generator_for_loop[1]>(3)test_function()
 -> for i in test_gen():
 (Pdb) break test_gen
 Breakpoint 1 at <doctest test.test_pdb.test_pdb_next_command_in_generator_for_loop[0]>:1
 (Pdb) continue
 > <doctest test.test_pdb.test_pdb_next_command_in_generator_for_loop[0]>(2)test_gen()
 -> yield 0
 (Pdb) next
 value 0
 > <doctest test.test_pdb.test_pdb_next_command_in_generator_for_loop[0]>(3)test_gen()
 -> return 1
 (Pdb) next
 Internal StopIteration: 1
 > <doctest test.test_pdb.test_pdb_next_command_in_generator_for_loop[1]>(3)test_function()
 -> for i in test_gen():
 (Pdb) next
 > <doctest test.test_pdb.test_pdb_next_command_in_generator_for_loop[1]>(5)test_function()
 -> x = 123
 (Pdb) continue
Got:
 > <doctest test.test_pdb.test_pdb_next_command_in_generator_for_loop[1]>(3)test_function()
 -> for i in test_gen():
 (Pdb) break test_gen
 Breakpoint 2 at <doctest test.test_pdb.test_pdb_next_command_in_generator_for_loop[0]>:1
 (Pdb) continue
 > <doctest test.test_pdb.test_pdb_next_command_in_generator_for_loop[0]>(2)test_gen()
 -> yield 0
 (Pdb) next
 value 0
 > <doctest test.test_pdb.test_pdb_next_command_in_generator_for_loop[0]>(3)test_gen()
 -> return 1
 (Pdb) next
 Internal StopIteration: 1
 > <doctest test.test_pdb.test_pdb_next_command_in_generator_for_loop[1]>(3)test_function()
 -> for i in test_gen():
 (Pdb) next
 > <doctest test.test_pdb.test_pdb_next_command_in_generator_for_loop[1]>(5)test_function()
 -> x = 123
 (Pdb) continue
----------------------------------------------------------------------
Ran 3 tests in 0.186s
FAILED (failures=1)
test test_pdb failed
test_pdb failed
== Tests result: FAILURE ==
1 test failed:
 test_pdb
Total duration: 480 ms
Tests result: FAILURE
msg392144 - (view) Author: Irit Katriel (iritkatriel) * (Python committer) Date: 2021年04月27日 22:47
I have a fix, I'll make a PR in a bit.
The issue here is the breakpoint number:
Breakpoint 1 at <doctest ...
vs 
Breakpoint 2 at <doctest ...
The breakpoint number is global state, so tests can impact each other.
I recently added a reset_Breakpoint() function that can be used to clear the global state at the beginning of the test: https://github.com/python/cpython/pull/21989/files
So I will make this test use it.
msg392146 - (view) Author: Irit Katriel (iritkatriel) * (Python committer) Date: 2021年04月27日 22:57
I scanned the file and I think this was the only test where this was missing. test_pdb_continue_in_bottomframe doesn't have a reset, but it doesn't expect a specific breakpoint number, it does:
Breakpoint ... at <doctest test
So with this patch I think the tests shouldn't interfere with each other anymore.
msg392181 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2021年04月28日 10:38
New changeset 21b02b5f4018474620676be04310f7d230a464ea by Irit Katriel in branch 'master':
bpo-43960: test_pdb resets breakpoints (GH-25673)
https://github.com/python/cpython/commit/21b02b5f4018474620676be04310f7d230a464ea
msg392186 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2021年04月28日 11:30
Irit: the automated backported failed, test_pdb fails with:
 NameError: name 'reset_Breakpoint' is not defined
Do you want to try to backport manually the change to Python 3.9 (and then I can automate the backport to 3.8).
test_pdb on Python 3.8 and 3.9 are also affected by this issue.
msg392188 - (view) Author: Irit Katriel (iritkatriel) * (Python committer) Date: 2021年04月28日 12:08
We didn't backport PR21989 because it was changing the way breakpoints hare maintained, so reset_Breakpoint is not there before 3.10. I can add that to the test file manually.
msg392201 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2021年04月28日 14:02
> We didn't backport PR21989 because it was changing the way breakpoints hare maintained, so reset_Breakpoint is not there before 3.10. I can add that to the test file manually.
Ah yes, it sounds reasonable to me to add reset_Breakpoint() to test_pdb with the bdb clearBreakpoints() code from master.
msg392217 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2021年04月28日 15:21
New changeset 2dc6b1789ec86dc80ea290fe33edd61140e47f6f by Irit Katriel in branch '3.9':
bpo-43960: test_pdb resets breakpoints to make tests deterministic (GH-25691)
https://github.com/python/cpython/commit/2dc6b1789ec86dc80ea290fe33edd61140e47f6f
msg392225 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2021年04月28日 15:43
New changeset b52cc7c5f1a6c5b48d51cd718719a766c37d6e38 by Miss Islington (bot) in branch '3.8':
bpo-43960: test_pdb resets breakpoints to make tests deterministic (GH-25691) (GH-25692)
https://github.com/python/cpython/commit/b52cc7c5f1a6c5b48d51cd718719a766c37d6e38
msg392226 - (view) Author: STINNER Victor (vstinner) * (Python committer) Date: 2021年04月28日 15:43
Thanks for the fix Irit!
History
Date User Action Args
2022年04月11日 14:59:44adminsetgithub: 88126
2021年04月28日 15:43:32vstinnersetmessages: + msg392226
2021年04月28日 15:43:10vstinnersetmessages: + msg392225
2021年04月28日 15:27:55vstinnersetstatus: open -> closed
stage: patch review -> resolved
resolution: fixed
versions: + Python 3.8, Python 3.9
2021年04月28日 15:21:28miss-islingtonsetpull_requests: + pull_request24382
2021年04月28日 15:21:20vstinnersetmessages: + msg392217
2021年04月28日 14:07:39iritkatrielsetpull_requests: + pull_request24381
2021年04月28日 14:02:38vstinnersetmessages: + msg392201
2021年04月28日 12:08:06iritkatrielsetmessages: + msg392188
2021年04月28日 11:30:14vstinnersetmessages: + msg392186
2021年04月28日 10:39:54miss-islingtonsetpull_requests: + pull_request24372
2021年04月28日 10:38:57vstinnersetmessages: + msg392181
2021年04月28日 10:38:48miss-islingtonsetnosy: + miss-islington
pull_requests: + pull_request24371
2021年04月27日 22:57:51iritkatrielsetmessages: + msg392146
2021年04月27日 22:52:18iritkatrielsetkeywords: + patch
stage: patch review
pull_requests: + pull_request24364
2021年04月27日 22:47:30iritkatrielsetnosy: + iritkatriel
messages: + msg392144
2021年04月27日 21:01:37vstinnercreate

AltStyle によって変換されたページ (->オリジナル) /