diff options
author | Martin v. Löwis <martin@v.loewis.de> | 2008-03-06 06:55:22 (GMT) |
---|---|---|
committer | Martin v. Löwis <martin@v.loewis.de> | 2008-03-06 06:55:22 (GMT) |
commit | d2bbe526c37e0f3810c4acb3cc3a5d0fcbcbeae7 (patch) | |
tree | 0f545b0fec977fc0b4513d55e41751aee9eed3ed | |
parent | 1df03405fc30604e00d506ac0f8c112517d8526e (diff) | |
download | cpython-d2bbe526c37e0f3810c4acb3cc3a5d0fcbcbeae7.zip cpython-d2bbe526c37e0f3810c4acb3cc3a5d0fcbcbeae7.tar.gz cpython-d2bbe526c37e0f3810c4acb3cc3a5d0fcbcbeae7.tar.bz2 |
Patch #2232: os.tmpfile might fail on Windows if the user has no
permission to create files in the root directory.
Will backport to 2.5.
-rw-r--r-- | Lib/test/test_os.py | 38 | ||||
-rw-r--r-- | Misc/NEWS | 6 |
2 files changed, 44 insertions, 0 deletions
diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py index a6fe40e..ddda156 100644 --- a/Lib/test/test_os.py +++ b/Lib/test/test_os.py @@ -65,6 +65,44 @@ class TemporaryFileTests(unittest.TestCase): def test_tmpfile(self): if not hasattr(os, "tmpfile"): return + # As with test_tmpnam() below, the Windows implementation of tmpfile() + # attempts to create a file in the root directory of the current drive. + # On Vista and Server 2008, this test will always fail for normal users + # as writing to the root directory requires elevated privileges. With + # XP and below, the semantics of tmpfile() are the same, but the user + # running the test is more likely to have administrative privileges on + # their account already. If that's the case, then os.tmpfile() should + # work. In order to make this test as useful as possible, rather than + # trying to detect Windows versions or whether or not the user has the + # right permissions, just try and create a file in the root directory + # and see if it raises a 'Permission denied' OSError. If it does, then + # test that a subsequent call to os.tmpfile() raises the same error. If + # it doesn't, assume we're on XP or below and the user running the test + # has administrative privileges, and proceed with the test as normal. + if sys.platform == 'win32': + name = '\\python_test_os_test_tmpfile.txt' + if os.path.exists(name): + os.remove(name) + try: + fp = open(name, 'w') + except IOError, first: + # open() failed, assert tmpfile() fails in the same way. + # Although open() raises an IOError and os.tmpfile() raises an + # OSError(), 'args' will be (13, 'Permission denied') in both + # cases. + try: + fp = os.tmpfile() + except OSError, second: + self.assertEqual(first.args, second.args) + else: + self.fail("expected os.tmpfile() to raise OSError") + return + else: + # open() worked, therefore, tmpfile() should work. Close our + # dummy file and proceed with the test as normal. + fp.close() + os.remove(name) + fp = os.tmpfile() fp.write("foobar") fp.seek(0,0) @@ -28,6 +28,12 @@ Library On all linux systems the --with-system-ffi configure option defaults to "yes". +Tests +----- + +- Patch #2232: os.tmpfile might fail on Windows if the user has no + permission to create files in the root directory. + What's New in Python 2.6 alpha 1? ================================= |