summaryrefslogtreecommitdiffstats
path: root/Lib/test
diff options
context:
space:
mode:
authorThomas Wouters <thomas@python.org>2007-08-30 22:15:33 (GMT)
committerThomas Wouters <thomas@python.org>2007-08-30 22:15:33 (GMT)
commit47b49bf6dc5e57578baad3a591117e6da16cf6c8 (patch)
tree2dc915b2262343fb830a0bfa7d75917b547ddda6 /Lib/test
parentcf1be88b438f0e85f2053e4d444b23732757345b (diff)
downloadcpython-47b49bf6dc5e57578baad3a591117e6da16cf6c8.zip
cpython-47b49bf6dc5e57578baad3a591117e6da16cf6c8.tar.gz
cpython-47b49bf6dc5e57578baad3a591117e6da16cf6c8.tar.bz2
Merged revisions 57620-57771 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk ........ r57771 | thomas.wouters | 2007-08-30 23:54:39 +0200 (Thu, 30 Aug 2007) | 5 lines Don't lie in __all__ attributes when SSL is not available: only add the SSL classes when they are actually created. ........ r57620 | walter.doerwald | 2007-08-28 18:38:26 +0200 (Tue, 28 Aug 2007) | 5 lines Fix title endtag in HTMLCalender.formatyearpage(). Fix documentation for HTMLCalender.formatyearpage() (there's no themonth parameter). This fixes issue1046. ........ r57622 | georg.brandl | 2007-08-28 20:54:44 +0200 (Tue, 28 Aug 2007) | 2 lines Add a crasher for the thread-unsafety of file objects. ........ r57626 | skip.montanaro | 2007-08-29 01:22:52 +0200 (Wed, 29 Aug 2007) | 1 line fixes 813986 ........ r57628 | walter.doerwald | 2007-08-29 01:35:33 +0200 (Wed, 29 Aug 2007) | 2 lines Fix test output. ........ r57631 | skip.montanaro | 2007-08-29 03:24:11 +0200 (Wed, 29 Aug 2007) | 2 lines Install pygettext (once the scriptsinstall target is working again). ........ r57633 | skip.montanaro | 2007-08-29 03:33:45 +0200 (Wed, 29 Aug 2007) | 2 lines Recent items. ........ r57650 | neal.norwitz | 2007-08-29 08:15:33 +0200 (Wed, 29 Aug 2007) | 1 line Add Bill as a developer ........ r57651 | facundo.batista | 2007-08-29 12:28:28 +0200 (Wed, 29 Aug 2007) | 5 lines Ignore test failures caused by 'resource temporarily unavailable' exceptions raised during FailingServerTestCase tests. [GSoC - Alan McIntyre] ........ r57680 | bill.janssen | 2007-08-30 00:35:05 +0200 (Thu, 30 Aug 2007) | 17 lines This contains a number of things: 1) Improve the documentation of the SSL module, with a fuller explanation of certificate usage, another reference, proper formatting of this and that. 2) Fix Windows bug in ssl.py, and general bug in sslsocket.close(). Remove some unused code from ssl.py. Allow accept() to be called on sslsocket sockets. 3) Use try-except-else in import of ssl in socket.py. Deprecate use of socket.ssl(). 4) Remove use of socket.ssl() in every library module, except for test_socket_ssl.py and test_ssl.py. ........ r57714 | georg.brandl | 2007-08-30 12:09:42 +0200 (Thu, 30 Aug 2007) | 2 lines Stronger urge to convert filenames to str before using them as argument to ZipFile.write(). ........ r57716 | georg.brandl | 2007-08-30 12:38:56 +0200 (Thu, 30 Aug 2007) | 2 lines Patch #1680959: add test suite for pipes module. ........ r57717 | georg.brandl | 2007-08-30 14:32:23 +0200 (Thu, 30 Aug 2007) | 3 lines * Skip test_pipes on non-POSIX. * Don't raise TestSkipped within a test function. ........ r57723 | mark.summerfield | 2007-08-30 17:03:03 +0200 (Thu, 30 Aug 2007) | 3 lines Added more cross-references. ........ r57726 | walter.doerwald | 2007-08-30 17:30:09 +0200 (Thu, 30 Aug 2007) | 2 lines Rewrap line. ........ r57727 | walter.doerwald | 2007-08-30 17:34:55 +0200 (Thu, 30 Aug 2007) | 2 lines Set startinpos before calling the error handler. ........ r57730 | bill.janssen | 2007-08-30 19:07:28 +0200 (Thu, 30 Aug 2007) | 3 lines Added docstrings to methods and functions. ........ r57743 | bill.janssen | 2007-08-30 20:08:06 +0200 (Thu, 30 Aug 2007) | 1 line added note on new ssl module and deprecation of socket.ssl ........ r57747 | martin.v.loewis | 2007-08-30 20:14:01 +0200 (Thu, 30 Aug 2007) | 1 line Fix popen usage. ........ r57748 | martin.v.loewis | 2007-08-30 20:15:22 +0200 (Thu, 30 Aug 2007) | 1 line Fix typo. ........ r57750 | martin.v.loewis | 2007-08-30 20:25:47 +0200 (Thu, 30 Aug 2007) | 1 line Bug #1746880: Correctly install DLLs into system32 folder on Win64. ........ r57760 | martin.v.loewis | 2007-08-30 21:04:09 +0200 (Thu, 30 Aug 2007) | 1 line Bug #1709599: Run test_1565150 only if the file system is NTFS. ........ r57762 | martin.v.loewis | 2007-08-30 22:10:57 +0200 (Thu, 30 Aug 2007) | 2 lines Bump autoconf minimum version to 2.61. ........ r57764 | lars.gustaebel | 2007-08-30 22:24:31 +0200 (Thu, 30 Aug 2007) | 2 lines Warn about possible risks when extracting untrusted archives. ........ r57769 | thomas.wouters | 2007-08-30 23:01:17 +0200 (Thu, 30 Aug 2007) | 7 lines Somewhat-preliminary slice-object and extended slicing support for ctypes. The exact behaviour of omitted and negative indices for the Pointer type may need a closer look (especially as it's subtly different from simple slices) but there's time yet before 2.6, and not enough before 3.0a1 :-) ........
Diffstat (limited to 'Lib/test')
-rw-r--r--Lib/test/crashers/file_threads.py8
-rwxr-xr-xLib/test/regrtest.py1
-rw-r--r--Lib/test/test_calendar.py2
-rw-r--r--Lib/test/test_os.py18
-rw-r--r--Lib/test/test_pipes.py187
-rw-r--r--Lib/test/test_robotparser.py11
-rw-r--r--Lib/test/test_socket_ssl.py4
-rw-r--r--Lib/test/test_sundry.py1
-rw-r--r--Lib/test/test_winreg.py3
-rw-r--r--Lib/test/test_xmlrpc.py24
10 files changed, 240 insertions, 19 deletions
diff --git a/Lib/test/crashers/file_threads.py b/Lib/test/crashers/file_threads.py
new file mode 100644
index 0000000..d82ad3c
--- /dev/null
+++ b/Lib/test/crashers/file_threads.py
@@ -0,0 +1,8 @@
+# An example for http://bugs.python.org/issue815646
+
+import thread
+
+while 1:
+ f = open("/tmp/dupa", "w")
+ thread.start_new_thread(f.close, ())
+ f.close()
diff --git a/Lib/test/regrtest.py b/Lib/test/regrtest.py
index d26d618..552f14e 100755
--- a/Lib/test/regrtest.py
+++ b/Lib/test/regrtest.py
@@ -862,6 +862,7 @@ _expectations = {
test_mhlib
test_openpty
test_ossaudiodev
+ test_pipes
test_poll
test_posix
test_pty
diff --git a/Lib/test/test_calendar.py b/Lib/test/test_calendar.py
index 015b59f..5f9c057 100644
--- a/Lib/test/test_calendar.py
+++ b/Lib/test/test_calendar.py
@@ -49,7 +49,7 @@ result_2004_html = """
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ascii" />
<link rel="stylesheet" type="text/css" href="calendar.css" />
-<title>Calendar for 2004</title
+<title>Calendar for 2004</title>
</head>
<body>
<table border="0" cellpadding="0" cellspacing="0" class="year">
diff --git a/Lib/test/test_os.py b/Lib/test/test_os.py
index a3eb61b..05932f5 100644
--- a/Lib/test/test_os.py
+++ b/Lib/test/test_os.py
@@ -235,10 +235,20 @@ class StatAttributeTests(unittest.TestCase):
# Restrict test to Win32, since there is no guarantee other
# systems support centiseconds
if sys.platform == 'win32':
- def test_1565150(self):
- t1 = 1159195039.25
- os.utime(self.fname, (t1, t1))
- self.assertEquals(os.stat(self.fname).st_mtime, t1)
+ def get_file_system(path):
+ import os
+ root = os.path.splitdrive(os.path.realpath("."))[0] + '\\'
+ import ctypes
+ kernel32 = ctypes.windll.kernel32
+ buf = ctypes.create_string_buffer("", 100)
+ if kernel32.GetVolumeInformationA(root, None, 0, None, None, None, buf, len(buf)):
+ return buf.value
+
+ if get_file_system(test_support.TESTFN) == "NTFS":
+ def test_1565150(self):
+ t1 = 1159195039.25
+ os.utime(self.fname, (t1, t1))
+ self.assertEquals(os.stat(self.fname).st_mtime, t1)
def test_1686475(self):
# Verify that an open file can be stat'ed
diff --git a/Lib/test/test_pipes.py b/Lib/test/test_pipes.py
new file mode 100644
index 0000000..94c2231
--- /dev/null
+++ b/Lib/test/test_pipes.py
@@ -0,0 +1,187 @@
+import pipes
+import os
+import string
+import unittest
+from test.test_support import TESTFN, run_unittest, unlink, TestSkipped
+
+if os.name != 'posix':
+ raise TestSkipped('pipes module only works on posix')
+
+TESTFN2 = TESTFN + "2"
+
+class SimplePipeTests(unittest.TestCase):
+ def tearDown(self):
+ for f in (TESTFN, TESTFN2):
+ unlink(f)
+
+ def testSimplePipe1(self):
+ t = pipes.Template()
+ t.append('tr a-z A-Z', pipes.STDIN_STDOUT)
+ f = t.open(TESTFN, 'w')
+ f.write('hello world #1')
+ f.close()
+ self.assertEqual(open(TESTFN).read(), 'HELLO WORLD #1')
+
+ def testSimplePipe2(self):
+ open(TESTFN, 'w').write('hello world #2')
+ t = pipes.Template()
+ t.append('tr a-z A-Z < $IN > $OUT', pipes.FILEIN_FILEOUT)
+ t.copy(TESTFN, TESTFN2)
+ self.assertEqual(open(TESTFN2).read(), 'HELLO WORLD #2')
+
+ def testSimplePipe3(self):
+ open(TESTFN, 'w').write('hello world #2')
+ t = pipes.Template()
+ t.append('tr a-z A-Z < $IN', pipes.FILEIN_STDOUT)
+ self.assertEqual(t.open(TESTFN, 'r').read(), 'HELLO WORLD #2')
+
+ def testEmptyPipeline1(self):
+ # copy through empty pipe
+ d = 'empty pipeline test COPY'
+ open(TESTFN, 'w').write(d)
+ open(TESTFN2, 'w').write('')
+ t=pipes.Template()
+ t.copy(TESTFN, TESTFN2)
+ self.assertEqual(open(TESTFN2).read(), d)
+
+ def testEmptyPipeline2(self):
+ # read through empty pipe
+ d = 'empty pipeline test READ'
+ open(TESTFN, 'w').write(d)
+ t=pipes.Template()
+ self.assertEqual(t.open(TESTFN, 'r').read(), d)
+
+ def testEmptyPipeline3(self):
+ # write through empty pipe
+ d = 'empty pipeline test WRITE'
+ t = pipes.Template()
+ t.open(TESTFN, 'w').write(d)
+ self.assertEqual(open(TESTFN).read(), d)
+
+ def testQuoting(self):
+ safeunquoted = string.ascii_letters + string.digits + '!@%_-+=:,./'
+ unsafe = '"`$\\'
+
+ self.assertEqual(pipes.quote(safeunquoted), safeunquoted)
+ self.assertEqual(pipes.quote('test file name'), "'test file name'")
+ for u in unsafe:
+ self.assertEqual(pipes.quote('test%sname' % u),
+ "'test%sname'" % u)
+ for u in unsafe:
+ self.assertEqual(pipes.quote("test%s'name'" % u),
+ '"test\\%s\'name\'"' % u)
+
+ def testRepr(self):
+ t = pipes.Template()
+ self.assertEqual(repr(t), "<Template instance, steps=[]>")
+ t.append('tr a-z A-Z', pipes.STDIN_STDOUT)
+ self.assertEqual(repr(t),
+ "<Template instance, steps=[('tr a-z A-Z', '--')]>")
+
+ def testSetDebug(self):
+ t = pipes.Template()
+ t.debug(False)
+ self.assertEqual(t.debugging, False)
+ t.debug(True)
+ self.assertEqual(t.debugging, True)
+
+ def testReadOpenSink(self):
+ # check calling open('r') on a pipe ending with
+ # a sink raises ValueError
+ t = pipes.Template()
+ t.append('boguscmd', pipes.SINK)
+ self.assertRaises(ValueError, t.open, 'bogusfile', 'r')
+
+ def testWriteOpenSource(self):
+ # check calling open('w') on a pipe ending with
+ # a source raises ValueError
+ t = pipes.Template()
+ t.prepend('boguscmd', pipes.SOURCE)
+ self.assertRaises(ValueError, t.open, 'bogusfile', 'w')
+
+ def testBadAppendOptions(self):
+ t = pipes.Template()
+
+ # try a non-string command
+ self.assertRaises(TypeError, t.append, 7, pipes.STDIN_STDOUT)
+
+ # try a type that isn't recognized
+ self.assertRaises(ValueError, t.append, 'boguscmd', 'xx')
+
+ # shouldn't be able to append a source
+ self.assertRaises(ValueError, t.append, 'boguscmd', pipes.SOURCE)
+
+ # check appending two sinks
+ t = pipes.Template()
+ t.append('boguscmd', pipes.SINK)
+ self.assertRaises(ValueError, t.append, 'boguscmd', pipes.SINK)
+
+ # command needing file input but with no $IN
+ t = pipes.Template()
+ self.assertRaises(ValueError, t.append, 'boguscmd $OUT',
+ pipes.FILEIN_FILEOUT)
+ t = pipes.Template()
+ self.assertRaises(ValueError, t.append, 'boguscmd',
+ pipes.FILEIN_STDOUT)
+
+ # command needing file output but with no $OUT
+ t = pipes.Template()
+ self.assertRaises(ValueError, t.append, 'boguscmd $IN',
+ pipes.FILEIN_FILEOUT)
+ t = pipes.Template()
+ self.assertRaises(ValueError, t.append, 'boguscmd',
+ pipes.STDIN_FILEOUT)
+
+
+ def testBadPrependOptions(self):
+ t = pipes.Template()
+
+ # try a non-string command
+ self.assertRaises(TypeError, t.prepend, 7, pipes.STDIN_STDOUT)
+
+ # try a type that isn't recognized
+ self.assertRaises(ValueError, t.prepend, 'tr a-z A-Z', 'xx')
+
+ # shouldn't be able to prepend a sink
+ self.assertRaises(ValueError, t.prepend, 'boguscmd', pipes.SINK)
+
+ # check prepending two sources
+ t = pipes.Template()
+ t.prepend('boguscmd', pipes.SOURCE)
+ self.assertRaises(ValueError, t.prepend, 'boguscmd', pipes.SOURCE)
+
+ # command needing file input but with no $IN
+ t = pipes.Template()
+ self.assertRaises(ValueError, t.prepend, 'boguscmd $OUT',
+ pipes.FILEIN_FILEOUT)
+ t = pipes.Template()
+ self.assertRaises(ValueError, t.prepend, 'boguscmd',
+ pipes.FILEIN_STDOUT)
+
+ # command needing file output but with no $OUT
+ t = pipes.Template()
+ self.assertRaises(ValueError, t.prepend, 'boguscmd $IN',
+ pipes.FILEIN_FILEOUT)
+ t = pipes.Template()
+ self.assertRaises(ValueError, t.prepend, 'boguscmd',
+ pipes.STDIN_FILEOUT)
+
+ def testBadOpenMode(self):
+ t = pipes.Template()
+ self.assertRaises(ValueError, t.open, 'bogusfile', 'x')
+
+ def testClone(self):
+ t = pipes.Template()
+ t.append('tr a-z A-Z', pipes.STDIN_STDOUT)
+
+ u = t.clone()
+ self.assertNotEqual(id(t), id(u))
+ self.assertEqual(t.steps, u.steps)
+ self.assertNotEqual(id(t.steps), id(u.steps))
+ self.assertEqual(t.debugging, u.debugging)
+
+def test_main():
+ run_unittest(SimplePipeTests)
+
+if __name__ == "__main__":
+ test_main()
diff --git a/Lib/test/test_robotparser.py b/Lib/test/test_robotparser.py
index e1e8055..ad66b69 100644
--- a/Lib/test/test_robotparser.py
+++ b/Lib/test/test_robotparser.py
@@ -135,8 +135,19 @@ bad = [] # Bug report says "/" should be denied, but that is not in the RFC
RobotTest(7, doc, good, bad)
+class TestCase(unittest.TestCase):
+ def runTest(self):
+ test_support.requires('network')
+ # whole site is password-protected.
+ url = 'http://mueblesmoraleda.com'
+ parser = robotparser.RobotFileParser()
+ parser.set_url(url)
+ parser.read()
+ self.assertEqual(parser.can_fetch("*", url+"/robots.txt"), False)
+
def test_main():
test_support.run_unittest(tests)
+ TestCase().run()
if __name__=='__main__':
test_support.Verbose = 1
diff --git a/Lib/test/test_socket_ssl.py b/Lib/test/test_socket_ssl.py
index fd4383f..6aa451f 100644
--- a/Lib/test/test_socket_ssl.py
+++ b/Lib/test/test_socket_ssl.py
@@ -110,12 +110,12 @@ class BasicTests(unittest.TestCase):
if test_support.verbose:
print("test_978833 ...")
- import os, httplib
+ import os, httplib, ssl
with test_support.transient_internet():
s = socket.socket(socket.AF_INET)
s.connect(("www.sf.net", 443))
fd = s.fileno()
- sock = httplib.FakeSocket(s, socket.ssl(s))
+ sock = ssl.sslsocket(s)
s = None
sock.close()
try:
diff --git a/Lib/test/test_sundry.py b/Lib/test/test_sundry.py
index ed2f14d..d878e7a 100644
--- a/Lib/test/test_sundry.py
+++ b/Lib/test/test_sundry.py
@@ -83,7 +83,6 @@ with catch_warning():
import opcode
import os2emxpath
import pdb
- import pipes
import pstats
import py_compile
import pydoc
diff --git a/Lib/test/test_winreg.py b/Lib/test/test_winreg.py
index fc898b8..aaa57c9 100644
--- a/Lib/test/test_winreg.py
+++ b/Lib/test/test_winreg.py
@@ -147,8 +147,7 @@ class WinregTests(unittest.TestCase):
def testRemoteMachineRegistryWorks(self):
if not self.remote_name:
- raise test_support.TestSkipped("Remote machine name "
- "not specified.")
+ return # remote machine name not specified
remote_key = ConnectRegistry(self.remote_name, HKEY_CURRENT_USER)
self.TestAll(remote_key)
diff --git a/Lib/test/test_xmlrpc.py b/Lib/test/test_xmlrpc.py
index 07c7ad6..4d496cc 100644
--- a/Lib/test/test_xmlrpc.py
+++ b/Lib/test/test_xmlrpc.py
@@ -441,8 +441,10 @@ class FailingServerTestCase(unittest.TestCase):
p = xmlrpclib.ServerProxy('http://localhost:%d' % PORT)
self.assertEqual(p.pow(6,8), 6**8)
except xmlrpclib.ProtocolError as e:
- # protocol error; provide additional information in test output
- self.fail("%s\n%s" % (e, e.headers))
+ # ignore failures due to non-blocking socket 'unavailable' errors
+ if not is_unavailable_exception(e):
+ # protocol error; provide additional information in test output
+ self.fail("%s\n%s" % (e, e.headers))
def test_fail_no_info(self):
# use the broken message class
@@ -452,9 +454,11 @@ class FailingServerTestCase(unittest.TestCase):
p = xmlrpclib.ServerProxy('http://localhost:%d' % PORT)
p.pow(6,8)
except xmlrpclib.ProtocolError as e:
- # The two server-side error headers shouldn't be sent back in this case
- self.assertTrue(e.headers.get("X-exception") is None)
- self.assertTrue(e.headers.get("X-traceback") is None)
+ # ignore failures due to non-blocking socket 'unavailable' errors
+ if not is_unavailable_exception(e):
+ # The two server-side error headers shouldn't be sent back in this case
+ self.assertTrue(e.headers.get("X-exception") is None)
+ self.assertTrue(e.headers.get("X-traceback") is None)
else:
self.fail('ProtocolError not raised')
@@ -470,10 +474,12 @@ class FailingServerTestCase(unittest.TestCase):
p = xmlrpclib.ServerProxy('http://localhost:%d' % PORT)
p.pow(6,8)
except xmlrpclib.ProtocolError as e:
- # We should get error info in the response
- expected_err = "invalid literal for int() with base 10: 'I am broken'"
- self.assertEqual(e.headers.get("x-exception"), expected_err)
- self.assertTrue(e.headers.get("x-traceback") is not None)
+ # ignore failures due to non-blocking socket 'unavailable' errors
+ if not is_unavailable_exception(e):
+ # We should get error info in the response
+ expected_err = "invalid literal for int() with base 10: 'I am broken'"
+ self.assertEqual(e.headers.get("x-exception"), expected_err)
+ self.assertTrue(e.headers.get("x-traceback") is not None)
else:
self.fail('ProtocolError not raised')