summaryrefslogtreecommitdiff
path: root/Lib
diff options
context:
space:
mode:
authorChristian Heimes <christian@cheimes.de>2008-03-20 10:49:03 +0000
committerChristian Heimes <christian@cheimes.de>2008-03-20 10:49:03 +0000
commite25f35ecd832658d42e82ec1827c9f884056722a (patch)
treedc3998bb5c08e77466648a39d3c029a6a558b9ec /Lib
parent593cd6b843ea0ccbd3466bbd7e888e65835ec2aa (diff)
downloadcpython-git-e25f35ecd832658d42e82ec1827c9f884056722a.tar.gz
Merged revisions 61644,61646-61647,61649-61652,61656-61658,61663,61665,61667 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r61644 | trent.nelson | 2008-03-19 22:51:16 +0100 (Mi, 19 Mär 2008) | 1 line Force a clean of the tcltk/tcltk64 directories now that we've completely changed the tcl/tk build environment. ........ r61646 | gregory.p.smith | 2008-03-19 23:23:51 +0100 (Mi, 19 Mär 2008) | 2 lines Improve the error message when the CRCs don't match. ........ r61647 | trent.nelson | 2008-03-19 23:41:10 +0100 (Mi, 19 Mär 2008) | 1 line Comment out tcltk/tcltk64 removal. ........ r61649 | raymond.hettinger | 2008-03-19 23:47:48 +0100 (Mi, 19 Mär 2008) | 1 line Remove unnecessary traceback save/restore pair. ........ r61650 | trent.nelson | 2008-03-19 23:51:42 +0100 (Mi, 19 Mär 2008) | 1 line Bump the SIGALM delay from 3 seconds to 20 seconds, mainly in an effort to see if it fixes the alarm failures in this test experienced by some of the buildbots. ........ r61651 | brett.cannon | 2008-03-20 00:01:17 +0100 (Do, 20 Mär 2008) | 5 lines Make sure that the warnings filter is not reset or changed beyond the current running test file. Closes issue2407. Thanks Jerry Seutter. ........ r61652 | gregory.p.smith | 2008-03-20 00:03:25 +0100 (Do, 20 Mär 2008) | 10 lines Prevent ioctl op codes from being sign extended from int to unsigned long when used on platforms that actually define ioctl as taking an unsigned long. (the BSDs and OS X / Darwin) Adds a unittest for fcntl.ioctl that tests what happens with both positive and negative numbers. This was done because of issue1471 but I'm not able to reproduce -that- problem in the first place on Linux 32bit or 64bit or OS X 10.4 & 10.5 32bit or 64 bit. ........ r61656 | sean.reifschneider | 2008-03-20 01:46:50 +0100 (Do, 20 Mär 2008) | 2 lines Issue #2143: Fix embedded readline() hang on SSL socket EOF. ........ r61657 | sean.reifschneider | 2008-03-20 01:50:07 +0100 (Do, 20 Mär 2008) | 2 lines Forgot to add NEWS item about smtplib SSL readline hang fix. ........ r61658 | trent.nelson | 2008-03-20 01:58:44 +0100 (Do, 20 Mär 2008) | 1 line Revert r61650; the intent of this commit was to try and address alarm failures on some of the build slaves. As Neal points out, it's called after test_main(), so it's not going to factor into the test when run via regrtest.py (and removes the original functionality that Jeffrey wanted that would kill the test if it took longer than 3 seconds to run when executing it directly during development). ........ r61663 | sean.reifschneider | 2008-03-20 04:20:48 +0100 (Do, 20 Mär 2008) | 2 lines Issue 2188: Documentation hint about disabling proxy detection. ........ r61665 | gregory.p.smith | 2008-03-20 06:41:53 +0100 (Do, 20 Mär 2008) | 7 lines Attempt to fix the Solaris Sparc 10 buildbot. It was failing with an invalid argument error on ioctl. This was caused by the added test_fcntl ioctl test that hard coded 0 as the fd to use. Without a terminal, this fails on solaris. (it passed from the command line on sol 10, both 32 and 64 bit) Also, test_ioctl exists so I moved the test into there where it belongs. ........ r61667 | georg.brandl | 2008-03-20 08:25:55 +0100 (Do, 20 Mär 2008) | 2 lines #2383: remove obsolete XXX comment in stat.py. ........
Diffstat (limited to 'Lib')
-rw-r--r--Lib/bsddb/test/test_1413192.py9
-rw-r--r--Lib/gzip.py3
-rwxr-xr-xLib/smtplib.py1
-rw-r--r--Lib/stat.py7
-rwxr-xr-xLib/test/test_fcntl.py8
-rw-r--r--Lib/test/test_hmac.py6
-rw-r--r--Lib/test/test_ioctl.py29
-rw-r--r--Lib/test/test_unicode_file.py68
8 files changed, 87 insertions, 44 deletions
diff --git a/Lib/bsddb/test/test_1413192.py b/Lib/bsddb/test/test_1413192.py
index 1d4bd5624b..3a663e6e03 100644
--- a/Lib/bsddb/test/test_1413192.py
+++ b/Lib/bsddb/test/test_1413192.py
@@ -5,7 +5,9 @@
import shutil
import tempfile
+from test.test_support import catch_warning
import warnings
+
try:
# For Pythons w/distutils and add-on pybsddb
from bsddb3 import db
@@ -33,12 +35,11 @@ class Context:
del self.the_txn
-warnings.filterwarnings('ignore', 'DBTxn aborted in destructor')
-try:
+with catch_warning():
+ warnings.filterwarnings('ignore', 'DBTxn aborted in destructor')
context = Context()
del context
-finally:
- warnings.resetwarnings()
+
# try not to leave a turd
try:
diff --git a/Lib/gzip.py b/Lib/gzip.py
index 917c3f5279..aa8386e5fe 100644
--- a/Lib/gzip.py
+++ b/Lib/gzip.py
@@ -321,7 +321,8 @@ class GzipFile:
crc32 = read32(self.fileobj)
isize = U32(read32(self.fileobj)) # may exceed 2GB
if U32(crc32) != U32(self.crc):
- raise IOError("CRC check failed")
+ raise IOError("CRC check failed %s != %s" % (hex(U32(crc32)),
+ hex(U32(self.crc))))
elif isize != LOWU32(self.size):
raise IOError("Incorrect length of data produced")
diff --git a/Lib/smtplib.py b/Lib/smtplib.py
index 9a83559f87..63732c844f 100755
--- a/Lib/smtplib.py
+++ b/Lib/smtplib.py
@@ -174,6 +174,7 @@ else:
chr = None
while chr != b"\n":
chr = self.sslobj.read(1)
+ if not chr: break
str += chr
return str
diff --git a/Lib/stat.py b/Lib/stat.py
index c054fb8e0a..d29c63c1f7 100644
--- a/Lib/stat.py
+++ b/Lib/stat.py
@@ -3,12 +3,7 @@
Suggested usage: from stat import *
"""
-# XXX Strictly spoken, this module may have to be adapted for each POSIX
-# implementation; in practice, however, the numeric constants used by
-# stat() are almost universal (even for stat() emulations on non-UNIX
-# systems like MS-DOS).
-
-# Indices for stat struct members in tuple returned by os.stat()
+# Indices for stat struct members in the tuple returned by os.stat()
ST_MODE = 0
ST_INO = 1
diff --git a/Lib/test/test_fcntl.py b/Lib/test/test_fcntl.py
index 665f5b3bc1..136961237a 100755
--- a/Lib/test/test_fcntl.py
+++ b/Lib/test/test_fcntl.py
@@ -3,14 +3,14 @@
OS/2+EMX doesn't support the file locking operations.
"""
-import struct
import fcntl
-import os, sys
+import os
+import struct
+import sys
import unittest
from test.test_support import verbose, TESTFN, unlink, run_unittest
-# TODO - Write tests for ioctl(), flock() and lockf().
-
+# TODO - Write tests for flock() and lockf().
def get_lockdata():
if sys.platform.startswith('atheos'):
diff --git a/Lib/test/test_hmac.py b/Lib/test/test_hmac.py
index d8c03db4af..537f29854a 100644
--- a/Lib/test/test_hmac.py
+++ b/Lib/test/test_hmac.py
@@ -211,8 +211,8 @@ class TestVectorsTestCase(unittest.TestCase):
def digest(self):
return self._x.digest()
- warnings.simplefilter('error', RuntimeWarning)
- try:
+ with test_support.catch_warning():
+ warnings.simplefilter('error', RuntimeWarning)
try:
hmac.HMAC(b'a', b'b', digestmod=MockCrazyHash)
except RuntimeWarning:
@@ -227,8 +227,6 @@ class TestVectorsTestCase(unittest.TestCase):
pass
else:
self.fail('Expected warning about small block_size')
- finally:
- warnings.resetwarnings()
diff --git a/Lib/test/test_ioctl.py b/Lib/test/test_ioctl.py
index 2b127e2b4a..feea5bf4f6 100644
--- a/Lib/test/test_ioctl.py
+++ b/Lib/test/test_ioctl.py
@@ -14,6 +14,11 @@ try:
except IOError:
raise TestSkipped("Unable to open /dev/tty")
+try:
+ import pty
+except ImportError:
+ pty = None
+
class IoctlTests(unittest.TestCase):
def test_ioctl(self):
# If this process has been put into the background, TIOCGPGRP returns
@@ -34,6 +39,30 @@ class IoctlTests(unittest.TestCase):
self.assertEquals(r, 0)
self.assert_(rpgrp in ids, "%s not in %s" % (rpgrp, ids))
+ def test_ioctl_signed_unsigned_code_param(self):
+ if not pty:
+ raise TestSkipped('pty module required')
+ mfd, sfd = pty.openpty()
+ try:
+ if termios.TIOCSWINSZ < 0:
+ set_winsz_opcode_maybe_neg = termios.TIOCSWINSZ
+ set_winsz_opcode_pos = termios.TIOCSWINSZ & 0xffffffff
+ else:
+ set_winsz_opcode_pos = termios.TIOCSWINSZ
+ set_winsz_opcode_maybe_neg, = struct.unpack("i",
+ struct.pack("I", termios.TIOCSWINSZ))
+
+ # We're just testing that these calls do not raise exceptions.
+ saved_winsz = fcntl.ioctl(mfd, termios.TIOCGWINSZ, "\0"*8)
+ our_winsz = struct.pack("HHHH",80,25,0,0)
+ # test both with a positive and potentially negative ioctl code
+ new_winsz = fcntl.ioctl(mfd, set_winsz_opcode_pos, our_winsz)
+ new_winsz = fcntl.ioctl(mfd, set_winsz_opcode_maybe_neg, our_winsz)
+ fcntl.ioctl(mfd, set_winsz_opcode_maybe_neg, saved_winsz)
+ finally:
+ os.close(mfd)
+ os.close(sfd)
+
def test_main():
run_unittest(IoctlTests)
diff --git a/Lib/test/test_unicode_file.py b/Lib/test/test_unicode_file.py
index ede1b17bc4..5f0681e479 100644
--- a/Lib/test/test_unicode_file.py
+++ b/Lib/test/test_unicode_file.py
@@ -49,6 +49,22 @@ class TestUnicodeFiles(unittest.TestCase):
self.failUnless(base in file_list)
+ # Do as many "equivalancy' tests as we can - ie, check that although we
+ # have different types for the filename, they refer to the same file.
+ def _do_equivalent(self, filename1, filename2):
+ # Note we only check "filename1 against filename2" - we don't bother
+ # checking "filename2 against 1", as we assume we are called again with
+ # the args reversed.
+ self.failUnless(type(filename1)!=type(filename2),
+ "No point checking equivalent filenames of the same type")
+ # stat and lstat should return the same results.
+ self.failUnlessEqual(os.stat(filename1),
+ os.stat(filename2))
+ self.failUnlessEqual(os.lstat(filename1),
+ os.lstat(filename2))
+ # Copy/rename etc tests using equivalent filename
+ self._do_copyish(filename1, filename2)
+
# Tests that copy, move, etc one file to another.
def _do_copyish(self, filename1, filename2):
# Should be able to rename the file using either name.
@@ -58,31 +74,20 @@ class TestUnicodeFiles(unittest.TestCase):
os.rename(filename1 + ".new", filename2)
self.failUnless(os.path.isfile(filename2))
- # Try using shutil on the filenames.
- try:
- filename1==filename2
- except UnicodeDecodeError:
- # these filenames can't be compared - shutil.copy tries to do
- # just that. This is really a bug in 'shutil' - if one of shutil's
- # 2 params are Unicode and the other isn't, it should coerce the
- # string to Unicode with the filesystem encoding before comparison.
- pass
- else:
- # filenames can be compared.
- shutil.copy(filename1, filename2 + ".new")
- os.unlink(filename1 + ".new") # remove using equiv name.
- # And a couple of moves, one using each name.
- shutil.move(filename1, filename2 + ".new")
- self.failUnless(not os.path.exists(filename2))
- shutil.move(filename1 + ".new", filename2)
- self.failUnless(os.path.exists(filename1))
- # Note - due to the implementation of shutil.move,
- # it tries a rename first. This only fails on Windows when on
- # different file systems - and this test can't ensure that.
- # So we test the shutil.copy2 function, which is the thing most
- # likely to fail.
- shutil.copy2(filename1, filename2 + ".new")
- os.unlink(filename1 + ".new")
+ shutil.copy(filename1, filename2 + ".new")
+ os.unlink(filename1 + ".new") # remove using equiv name.
+ # And a couple of moves, one using each name.
+ shutil.move(filename1, filename2 + ".new")
+ self.failUnless(not os.path.exists(filename2))
+ shutil.move(filename1 + ".new", filename2)
+ self.failUnless(os.path.exists(filename1))
+ # Note - due to the implementation of shutil.move,
+ # it tries a rename first. This only fails on Windows when on
+ # different file systems - and this test can't ensure that.
+ # So we test the shutil.copy2 function, which is the thing most
+ # likely to fail.
+ shutil.copy2(filename1, filename2 + ".new")
+ os.unlink(filename1 + ".new")
def _do_directory(self, make_name, chdir_name, encoded):
cwd = os.getcwd()
@@ -127,6 +132,16 @@ class TestUnicodeFiles(unittest.TestCase):
finally:
os.unlink(filename)
+ def _test_equivalent(self, filename1, filename2):
+ remove_if_exists(filename1)
+ self.failUnless(not os.path.exists(filename2))
+ f = file(filename1, "w")
+ f.close()
+ try:
+ self._do_equivalent(filename1, filename2)
+ finally:
+ os.unlink(filename1)
+
# The 'test' functions are unittest entry points, and simply call our
# _test functions with each of the filename combinations we wish to test
def test_single_files(self):
@@ -135,6 +150,9 @@ class TestUnicodeFiles(unittest.TestCase):
self._test_single(TESTFN_UNICODE_UNENCODEABLE)
def test_directories(self):
+ # For all 'equivalent' combinations:
+ # Make dir with encoded, chdir with unicode, checkdir with encoded
+ # (or unicode/encoded/unicode, etc
ext = ".dir"
self._do_directory(TESTFN_UNICODE+ext, TESTFN_UNICODE+ext, False)
# Our directory name that can't use a non-unicode name.