summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAntoine Pitrou <solipsis@pitrou.net>2010-10-23 17:01:44 (GMT)
committerAntoine Pitrou <solipsis@pitrou.net>2010-10-23 17:01:44 (GMT)
commitacd0fda1a46fa7d356c1e5de508dd33ce21e7a8f (patch)
treec716502246812b5bc9ea14ebddfb41afdb758590
parent8035bc5c048ff08f652649754eb8ea769337afa0 (diff)
downloadcpython-acd0fda1a46fa7d356c1e5de508dd33ce21e7a8f.zip
cpython-acd0fda1a46fa7d356c1e5de508dd33ce21e7a8f.tar.gz
cpython-acd0fda1a46fa7d356c1e5de508dd33ce21e7a8f.tar.bz2
Fix SOCK_CLOEXEC and SOCK_NONBLOCK tests on recent glibcs with old Linux kernels.
-rw-r--r--Lib/test/test_socket.py18
1 files changed, 18 insertions, 0 deletions
diff --git a/Lib/test/test_socket.py b/Lib/test/test_socket.py
index 511e590..1f8f93f 100644
--- a/Lib/test/test_socket.py
+++ b/Lib/test/test_socket.py
@@ -13,6 +13,7 @@ import queue
import sys
import os
import array
+import platform
import contextlib
from weakref import proxy
import signal
@@ -1827,11 +1828,24 @@ class ContextManagersTest(ThreadedTCPSocketTest):
self.assertTrue(sock._closed)
self.assertRaises(socket.error, sock.sendall, b'foo')
+
+def linux_version():
+ try:
+ # platform.release() is something like '2.6.33.7-desktop-2mnb'
+ version_string = platform.release().split('-')[0]
+ return tuple(map(int, version_string.split('.')))
+ except ValueError:
+ return 0, 0, 0
+
@unittest.skipUnless(hasattr(socket, "SOCK_CLOEXEC"),
"SOCK_CLOEXEC not defined")
@unittest.skipUnless(fcntl, "module fcntl not available")
class CloexecConstantTest(unittest.TestCase):
def test_SOCK_CLOEXEC(self):
+ v = linux_version()
+ if v < (2, 6, 28):
+ self.skipTest("Linux kernel 2.6.28 or higher required, not %s"
+ % ".".join(map(str, v)))
s = socket.socket(socket.AF_INET,
socket.SOCK_STREAM | socket.SOCK_CLOEXEC)
self.assertTrue(s.type & socket.SOCK_CLOEXEC)
@@ -1850,6 +1864,10 @@ class NonblockConstantTest(unittest.TestCase):
self.assertEqual(s.gettimeout(), None)
def test_SOCK_NONBLOCK(self):
+ v = linux_version()
+ if v < (2, 6, 28):
+ self.skipTest("Linux kernel 2.6.28 or higher required, not %s"
+ % ".".join(map(str, v)))
# a lot of it seems silly and redundant, but I wanted to test that
# changing back and forth worked ok
s = socket.socket(socket.AF_INET,