[Python-checkins] r61266 - in python/branches/release25-maint: Lib/test/test_os.py Misc/NEWS

martin.v.loewis python-checkins at python.org
Thu Mar 6 07:57:08 CET 2008


Author: martin.v.loewis
Date: Thu Mar  6 07:57:02 2008
New Revision: 61266

Modified:
   python/branches/release25-maint/Lib/test/test_os.py
   python/branches/release25-maint/Misc/NEWS
Log:
Patch #2232: os.tmpfile might fail on Windows if the user has no
permission to create files in the root directory.


Modified: python/branches/release25-maint/Lib/test/test_os.py
==============================================================================
--- python/branches/release25-maint/Lib/test/test_os.py	(original)
+++ python/branches/release25-maint/Lib/test/test_os.py	Thu Mar  6 07:57:02 2008
@@ -59,6 +59,44 @@
     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)

Modified: python/branches/release25-maint/Misc/NEWS
==============================================================================
--- python/branches/release25-maint/Misc/NEWS	(original)
+++ python/branches/release25-maint/Misc/NEWS	Thu Mar  6 07:57:02 2008
@@ -28,6 +28,13 @@
 Extension Modules
 -----------------
 
+Tests
+-----
+
+- Patch #2232: os.tmpfile might fail on Windows if the user has no
+  permission to create files in the root directory.
+
+
 Documentation
 -------------
 


More information about the Python-checkins mailing list