[Python-checkins] r88647 - python/branches/py3k/Lib/test/test_os.py

antoine.pitrou python-checkins at python.org
Sat Feb 26 15:29:24 CET 2011


Author: antoine.pitrou
Date: Sat Feb 26 15:29:24 2011
New Revision: 88647

Log:
Issue #11323: fix sendfile tests under 64-bit Solaris.



Modified:
   python/branches/py3k/Lib/test/test_os.py

Modified: python/branches/py3k/Lib/test/test_os.py
==============================================================================
--- python/branches/py3k/Lib/test/test_os.py	(original)
+++ python/branches/py3k/Lib/test/test_os.py	Sat Feb 26 15:29:24 2011
@@ -1374,7 +1374,7 @@
 @unittest.skipUnless(hasattr(os, 'sendfile'), "test needs os.sendfile()")
 class TestSendfile(unittest.TestCase):
 
-    DATA = b"12345abcde" * 1024 * 1024  # 10 Mb
+    DATA = b"12345abcde" * 16 * 1024  # 160 KB
     SUPPORT_HEADERS_TRAILERS = not sys.platform.startswith("linux") and \
                                not sys.platform.startswith("solaris") and \
                                not sys.platform.startswith("sunos")
@@ -1432,7 +1432,7 @@
         total_sent = 0
         offset = 0
         nbytes = 4096
-        while 1:
+        while total_sent < len(self.DATA):
             sent = self.sendfile_wrapper(self.sockno, self.fileno, offset, nbytes)
             if sent == 0:
                 break
@@ -1445,14 +1445,15 @@
         self.client.close()
         self.server.wait()
         data = self.server.handler_instance.get_data()
-        self.assertEqual(hash(data), hash(self.DATA))
+        self.assertEqual(data, self.DATA)
 
     def test_send_at_certain_offset(self):
         # start sending a file at a certain offset
         total_sent = 0
-        offset = len(self.DATA) / 2
+        offset = len(self.DATA) // 2
+        must_send = len(self.DATA) - offset
         nbytes = 4096
-        while 1:
+        while total_sent < must_send:
             sent = self.sendfile_wrapper(self.sockno, self.fileno, offset, nbytes)
             if sent == 0:
                 break
@@ -1463,15 +1464,21 @@
         self.client.close()
         self.server.wait()
         data = self.server.handler_instance.get_data()
-        expected = self.DATA[int(len(self.DATA) / 2):]
+        expected = self.DATA[len(self.DATA) // 2:]
         self.assertEqual(total_sent, len(expected))
-        self.assertEqual(hash(data), hash(expected))
+        self.assertEqual(data, expected)
 
     def test_offset_overflow(self):
         # specify an offset > file size
         offset = len(self.DATA) + 4096
-        sent = os.sendfile(self.sockno, self.fileno, offset, 4096)
-        self.assertEqual(sent, 0)
+        try:
+            sent = os.sendfile(self.sockno, self.fileno, offset, 4096)
+        except OSError as e:
+            # Solaris can raise EINVAL if offset >= file length, ignore.
+            if e.errno != errno.EINVAL:
+                raise
+        else:
+            self.assertEqual(sent, 0)
         self.client.close()
         self.server.wait()
         data = self.server.handler_instance.get_data()


More information about the Python-checkins mailing list