Issue 7944: Use the 'with' statement in conjunction with 'open' throughout test modules (original) (raw)

process

Status: closed Resolution: fixed
Dependencies: 7232 Superseder:
Assigned To: ezio.melotti Nosy List: BreamoreBoy, amaury.forgeotdarc, eric.araujo, evans.mungai, ezio.melotti, giampaolo.rodola, michael.foord, midnightdf, python-dev, rhettinger
Priority: normal Keywords: easy, patch

Created on 2010-02-16 17:43 by midnightdf, last changed 2022-04-11 14:56 by admin. This issue is now closed.

Files
File name Uploaded Description Edit
test_old_mailbox.py midnightdf,2010-02-16 17:43 Modified version of test_old_mailbox.py
test_old_mailbox.patch amaury.forgeotdarc,2010-02-16 18:23
issue7944_gzip.diff brian.curtin,2010-02-22 01:44
issue7944_marshal.diff brian.curtin,2010-02-22 01:48
issue7944_zipfile64.diff brian.curtin,2010-02-22 02:21
issue7944_tarfile.diff brian.curtin,2010-02-22 16:41 This depends on #7232
issue7944_tempfile.diff brian.curtin,2010-02-22 17:17 Updated with review comments from RDM
test_os.patch giampaolo.rodola,2010-10-13 17:57 review
issue7944_tarfile_2_7.diff evans.mungai,2014-08-02 13:36 review
Messages (22)
msg99425 - (view) Author: Dave Fugate (midnightdf) Date: 2010-02-16 17:43
Sprinkled throughout CPython's test modules are snippets of code such as the following taken from 2.7A3's test_old_mailbox.py (line 141): box = mailbox.UnixMailbox(open(self._path, 'r')) The key thing to observe here is the file being opened yet never has it's 'close' method explicitly called. While this is fine for CPython's rather predictable garbage collections, it's quite possible that in alternate implementations of Python this file object won't be destroyed until well after line 141. This can result in seemingly random failures of CPython's tests under alternate implementations of Python. The solution to this problem would be to consistently use the 'with' statement (or alternatively close all open file objects) throughout all CPython test modules. I've gone ahead and submitted an updated (2.7A3) version of test_old_mailbox.py which addresses this. We can find other places where this is going on as well, but for the most part the tests already seem to be doing the right thing.
msg99434 - (view) Author: Amaury Forgeot d'Arc (amaury.forgeotdarc) * (Python committer) Date: 2010-02-16 18:23
Please use patches to show where the code changed. (I generated one; it looks good to me) I would like this kind of patches applied to CPython. Looking at the Pypy test suite, the following test files seem easy to update: test_bz2 test_dumbdbm test_mailbox test_marshal test_mmap test_pkgimport test_tarfile test_tempfile test_traceback
msg99617 - (view) Author: Brian Curtin (brian.curtin) * (Python committer) Date: 2010-02-20 15:34
Does anyone prefer if this should be done on a patch-per-module basis, or just throw together one huge change? Also, I've found a few places where context managers aren't supported where they probably should be, so I'll spin off separate issues for those.
msg99618 - (view) Author: Michael Foord (michael.foord) * (Python committer) Date: 2010-02-20 15:37
There are several standard library modules that deliberately maintain compatibility with earlier versions of Python. The 'with' statement shouldn't be used for tests of any modules that still need compatibility with Python 2.4.
msg99619 - (view) Author: Ezio Melotti (ezio.melotti) * (Python committer) Date: 2010-02-20 15:39
Some are listed in the PEP-291 (http://www.python.org/dev/peps/pep-0291/) but I don't know if that list is really updated.
msg99699 - (view) Author: Brian Curtin (brian.curtin) * (Python committer) Date: 2010-02-22 01:44
I'm going to go ahead with the patch-per-module approach, but anyone feel free to stop me from doing that. Here's a patch for test_gzip on trunk.
msg99700 - (view) Author: Brian Curtin (brian.curtin) * (Python committer) Date: 2010-02-22 01:48
Here's a patch for test_marshal on trunk.
msg99703 - (view) Author: Brian Curtin (brian.curtin) * (Python committer) Date: 2010-02-22 02:21
Here's a patch for test_tempfile on trunk. The rest will just be silently added since this is already annoying.
msg99780 - (view) Author: Brian Curtin (brian.curtin) * (Python committer) Date: 2010-02-22 16:41
Patch for test_tarfile. However, #7232 needs to go in first.
msg118498 - (view) Author: Brian Curtin (brian.curtin) * (Python committer) Date: 2010-10-13 02:23
Fixed test_gzip in r85400.
msg118500 - (view) Author: Brian Curtin (brian.curtin) * (Python committer) Date: 2010-10-13 02:58
Fixed test_mailbox in r85401. Fixed test_marshal in r85402. Fixed test_bz2 in r85403.
msg118553 - (view) Author: Giampaolo Rodola' (giampaolo.rodola) * (Python committer) Date: 2010-10-13 17:57
Here is a patch for test_os.py.
msg118554 - (view) Author: Raymond Hettinger (rhettinger) * (Python committer) Date: 2010-10-13 18:10
I'm not sure that this is a worthwhile exercise unless it can be shown for certain that alternate implementations need this. Otherwise, it just changes tests in a way that isn't backwards compatible, makes it more difficult to apply patches cleanly, and risks damaging an otherwise good test.
msg118556 - (view) Author: Dave Fugate (midnightdf) Date: 2010-10-13 18:23
I guarantee you that IronPython needs this. I was a tester on IronPython for four years, and saw hundreds of random failures due to this specific issue. My best, Dave
msg118557 - (view) Author: Raymond Hettinger (rhettinger) * (Python committer) Date: 2010-10-13 18:25
If you're sure that is still the case, this can proceed.
msg118610 - (view) Author: Brian Curtin (brian.curtin) * (Python committer) Date: 2010-10-14 02:08
Backported test_gzip to to release27-maint in r85446. Backported test_mailbox to to release27-maint in r85447. Backported test_bz2 to to release27-maint in r85448. Fixed test_old_mailbox, the original problem file, in release27-maint in r85449.
msg185771 - (view) Author: Mark Lawrence (BreamoreBoy) * Date: 2013-04-01 21:20
#7232 has been closed so test_tarfile can presumably now be committed, also test_os.
msg185817 - (view) Author: Ezio Melotti (ezio.melotti) * (Python committer) Date: 2013-04-02 05:56
FWIW test_tarfile seems to use the "with" statement on 3.3+ already. On 2.7 is not always used, but I'm not sure it's worth backporting/fixing the remaining occurrences there. Most of the fixes in the test_os patch have already being applied too. Either someone updates the current patch and/or proposes new ones, or this can probably be closed.
msg224458 - (view) Author: Mark Lawrence (BreamoreBoy) * Date: 2014-07-31 23:53
Following on from I'd suggest this is closed.
msg224564 - (view) Author: Evans Mungai (evans.mungai) Date: 2014-08-02 13:36
Backport for test_tarfile.py
msg258166 - (view) Author: Roundup Robot (python-dev) (Python triager) Date: 2016-01-13 20:21
New changeset e3763d98c46e by Ezio Melotti in branch '2.7': #7944: close files explicitly in test_tarfile (backport d560eece0857). https://hg.python.org/cpython/rev/e3763d98c46e
msg258167 - (view) Author: Ezio Melotti (ezio.melotti) * (Python committer) Date: 2016-01-13 20:23
Thanks for the patch, however I got several errors while trying to apply it, so I ended up backporting d560eece0857 instead. This can be closed now.
History
Date User Action Args
2022-04-11 14:56:57 admin set github: 52192
2016-01-13 20:23:00 ezio.melotti set status: open -> closedmessages: + assignee: ezio.melottiresolution: fixedstage: patch review -> resolved
2016-01-13 20:21:30 python-dev set nosy: + python-devmessages: +
2014-08-02 13:36:43 evans.mungai set files: + issue7944_tarfile_2_7.diffversions: + Python 2.7, - Python 3.3, Python 3.4nosy: + evans.mungaimessages: +
2014-08-01 00:23:58 brian.curtin set nosy: - brian.curtin
2014-07-31 23:53:20 BreamoreBoy set nosy: + BreamoreBoymessages: +
2014-02-03 18:36:26 BreamoreBoy set nosy: - BreamoreBoy
2013-04-02 05:56:13 ezio.melotti set keywords: + easymessages: + versions: + Python 3.3, Python 3.4, - Python 3.2
2013-04-01 21:20:07 BreamoreBoy set nosy: + BreamoreBoymessages: +
2010-10-14 02:08:04 brian.curtin set messages: +
2010-10-13 18:25:03 rhettinger set messages: +
2010-10-13 18:23:05 midnightdf set messages: +
2010-10-13 18:14:37 rhettinger set resolution: accepted -> (no value)
2010-10-13 18:10:42 rhettinger set nosy: + rhettingermessages: +
2010-10-13 17:57:16 giampaolo.rodola set files: + test_os.patchnosy: + giampaolo.rodolamessages: +
2010-10-13 02:58:27 brian.curtin set messages: +
2010-10-13 02:23:55 brian.curtin set resolution: acceptedmessages: +
2010-08-01 01:03:42 eric.araujo set nosy: + eric.araujo
2010-07-11 00:01:53 terry.reedy set versions: + Python 3.2, - Python 2.6, Python 2.7
2010-02-22 17:17:10 brian.curtin set files: + issue7944_tempfile.diff
2010-02-22 17:16:38 brian.curtin set files: - issue7944_tempfile.diff
2010-02-22 16:42:01 brian.curtin set files: + issue7944_tarfile.diffmessages: +
2010-02-22 02:21:57 brian.curtin set files: + issue7944_zipfile64.diff
2010-02-22 02:21:43 brian.curtin set files: + issue7944_tempfile.diffmessages: +
2010-02-22 01:48:18 brian.curtin set files: + issue7944_marshal.diffmessages: +
2010-02-22 01:44:41 brian.curtin set files: + issue7944_gzip.diffmessages: +
2010-02-22 01:40:21 brian.curtin set dependencies: + Support of 'with' statement fo TarFile class
2010-02-20 15:39:10 ezio.melotti set messages: +
2010-02-20 15:37:24 michael.foord set nosy: + michael.foordmessages: +
2010-02-20 15:34:46 brian.curtin set messages: +
2010-02-16 23:41:46 ezio.melotti set nosy: + ezio.melottistage: needs patch -> patch review
2010-02-16 18:23:47 amaury.forgeotdarc set files: + test_old_mailbox.patchnosy: + amaury.forgeotdarcmessages: + keywords: + patch
2010-02-16 17:46:55 brian.curtin set priority: normalnosy: + brian.curtinstage: needs patch
2010-02-16 17:43:50 midnightdf create