Issue #7449, last part (11): fix many tests if thread support is disabled

* Use try/except ImportError or test_support.import_module() to import thread
   and threading modules
 * Add @unittest.skipUnless(threading, ...) to testcases using threads
This commit is contained in:
Victor Stinner 2010-04-27 23:55:59 +00:00
parent c73a05f775
commit 6a10281d33
26 changed files with 101 additions and 41 deletions

View File

@ -23,8 +23,11 @@
import unittest
import sys
import threading
import sqlite3 as sqlite
try:
import threading
except ImportError:
threading = None
class ModuleTests(unittest.TestCase):
def CheckAPILevel(self):
@ -465,6 +468,7 @@ class CursorTests(unittest.TestCase):
except TypeError:
pass
@unittest.skipUnless(threading, 'This test requires threading.')
class ThreadTests(unittest.TestCase):
def setUp(self):
self.con = sqlite.connect(":memory:")

View File

@ -1,6 +1,6 @@
"""This test case provides support for checking forking and wait behavior.
To test different wait behavior, overrise the wait_impl method.
To test different wait behavior, override the wait_impl method.
We want fork1() semantics -- only the forking thread survives in the
child after a fork().
@ -12,7 +12,9 @@ While BeOS doesn't officially support fork and native threading in
the same application, the present example should work just fine. DC
"""
import os, sys, time, thread, unittest
import os, sys, time, unittest
import test.test_support as test_support
thread = test_support.import_module('thread')
LONGSLEEP = 2
SHORTSLEEP = 0.5

View File

@ -3,7 +3,6 @@ import unittest
import select
import os
import socket
import threading
import sys
import time
@ -11,6 +10,11 @@ from test import test_support
from test.test_support import TESTFN, run_unittest, unlink
from StringIO import StringIO
try:
import threading
except ImportError:
threading = None
HOST = test_support.HOST
class dummysocket:
@ -319,6 +323,7 @@ class DispatcherWithSendTests(unittest.TestCase):
def tearDown(self):
asyncore.close_all()
@unittest.skipUnless(threading, 'Threading required for this test.')
@test_support.reap_threads
def test_send(self):
evt = threading.Event()

View File

@ -7,7 +7,11 @@ from cStringIO import StringIO
import os
import subprocess
import sys
import threading
try:
import threading
except ImportError:
threading = None
bz2 = import_module('bz2')
from bz2 import BZ2File, BZ2Compressor, BZ2Decompressor
@ -307,6 +311,7 @@ class BZ2FileTest(BaseTest):
else:
self.fail("1 // 0 didn't raise an exception")
@unittest.skipUnless(threading, 'Threading required for this test.')
def testThreading(self):
# Using a BZ2File from several threads doesn't deadlock (issue #7205).
data = "1" * 2**20

View File

@ -3,9 +3,12 @@
import sys
import tempfile
import unittest
import threading
from contextlib import * # Tests __all__
from test import test_support
try:
import threading
except ImportError:
threading = None
class ContextManagerTestCase(unittest.TestCase):
@ -264,6 +267,7 @@ class FileContextTestCase(unittest.TestCase):
finally:
test_support.unlink(tfn)
@unittest.skipUnless(threading, 'Threading required for this test.')
class LockContextTestCase(unittest.TestCase):
def boilerPlate(self, lock, locked):

View File

@ -2,7 +2,7 @@ from DocXMLRPCServer import DocXMLRPCServer
import httplib
import sys
from test import test_support
import threading
threading = test_support.import_module('threading')
import time
import socket
import unittest

View File

@ -3,9 +3,12 @@ import os
import unittest
import itertools
import time
import threading
from array import array
from weakref import proxy
try:
import threading
except ImportError:
threading = None
from test import test_support
from test.test_support import TESTFN, run_unittest
@ -411,6 +414,7 @@ class FileSubclassTests(unittest.TestCase):
self.assertTrue(f.subclass_closed)
@unittest.skipUnless(threading, 'Threading required for this test.')
class FileThreadingTests(unittest.TestCase):
# These tests check the ability to call various methods of file objects
# (including close()) concurrently without crashing the Python interpreter.

View File

@ -6,10 +6,10 @@ import os
import signal
import sys
import time
import threading
from test.fork_wait import ForkWait
from test.test_support import run_unittest, reap_children, get_attribute
from test.test_support import run_unittest, reap_children, get_attribute, import_module
threading = import_module('threading')
#Skip test if fork does not exist.
get_attribute(os, 'fork')

View File

@ -4,7 +4,6 @@
# environment
import ftplib
import threading
import asyncore
import asynchat
import socket
@ -19,6 +18,7 @@ except ImportError:
from unittest import TestCase
from test import test_support
from test.test_support import HOST
threading = test_support.import_module('threading')
# the dummy data returned by server over the data channel when

View File

@ -16,10 +16,10 @@ import shutil
import urllib
import httplib
import tempfile
import threading
import unittest
from test import test_support
threading = test_support.import_module('threading')
class NoLogRequestHandler:

View File

@ -26,7 +26,6 @@ import os
import sys
import time
import array
import threading
import random
import unittest
import weakref
@ -38,6 +37,10 @@ from test import test_support as support
import codecs
import io # C implementation of io
import _pyio as pyio # Python implementation of io
try:
import threading
except ImportError:
threading = None
__metaclass__ = type
bytes = support.py3k_bytes
@ -749,6 +752,7 @@ class BufferedReaderTest(unittest.TestCase, CommonBufferedTests):
self.assertEquals(b"abcdefg", bufio.read())
@unittest.skipUnless(threading, 'Threading required for this test.')
def test_threads(self):
try:
# Write out many bytes with exactly the same number of 0's,
@ -996,6 +1000,7 @@ class BufferedWriterTest(unittest.TestCase, CommonBufferedTests):
with self.open(support.TESTFN, "rb", buffering=0) as f:
self.assertEqual(f.read(), b"abc")
@unittest.skipUnless(threading, 'Threading required for this test.')
def test_threads(self):
try:
# Write out many bytes from many threads and test they were
@ -2090,7 +2095,7 @@ class TextIOWrapperTest(unittest.TestCase):
with self.open(support.TESTFN, "w", errors="replace") as f:
self.assertEqual(f.errors, "replace")
@unittest.skipUnless(threading, 'Threading required for this test.')
def test_threads_write(self):
# Issue6750: concurrent writes could duplicate data
event = threading.Event()

View File

@ -41,11 +41,13 @@ import tempfile
from test.test_support import captured_stdout, run_with_locale, run_unittest,\
find_unused_port
import textwrap
import threading
import unittest
import warnings
import weakref
try:
import threading
except ImportError:
threading = None
class BaseTest(unittest.TestCase):
@ -765,6 +767,7 @@ class LogRecordSocketReceiver(ThreadingTCPServer):
self.server_close()
@unittest.skipUnless(threading, 'Threading required for this test.')
class SocketHandlerTest(BaseTest):
"""Test for SocketHandler objects."""
@ -1659,6 +1662,7 @@ class ConfigDictTest(BaseTest):
def test_config13_failure(self):
self.assertRaises(StandardError, self.apply_config, self.config13)
@unittest.skipUnless(threading, 'listen() needs threading to work')
def setup_via_listener(self, text):
port = find_unused_port()
t = logging.config.listen(port)

View File

@ -4,7 +4,6 @@
# a real test suite
import poplib
import threading
import asyncore
import asynchat
import socket
@ -15,6 +14,7 @@ import errno
from unittest import TestCase
from test import test_support
from test.test_support import HOST
threading = test_support.import_module('threading')
# the dummy data returned by server when LIST and RETR commands are issued

View File

@ -1,10 +1,10 @@
# Some simple queue module tests, plus some failure conditions
# to ensure the Queue locks remain stable.
import Queue
import threading
import time
import unittest
from test import test_support
threading = test_support.import_module('threading')
QUEUE_SIZE = 5

View File

@ -1,7 +1,6 @@
import asyncore
import email.utils
import socket
import threading
import smtpd
import smtplib
import StringIO
@ -9,9 +8,14 @@ import sys
import time
import select
from unittest import TestCase
import unittest
from test import test_support
try:
import threading
except ImportError:
threading = None
HOST = test_support.HOST
def server(evt, buf, serv):
@ -36,7 +40,8 @@ def server(evt, buf, serv):
serv.close()
evt.set()
class GeneralTests(TestCase):
@unittest.skipUnless(threading, 'Threading required for this test.')
class GeneralTests(unittest.TestCase):
def setUp(self):
self._threads = test_support.threading_setup()
@ -138,7 +143,8 @@ MSG_END = '------------ END MESSAGE ------------\n'
# test server times out, causing the test to fail.
# Test behavior of smtpd.DebuggingServer
class DebuggingServerTests(TestCase):
@unittest.skipUnless(threading, 'Threading required for this test.')
class DebuggingServerTests(unittest.TestCase):
def setUp(self):
# temporarily replace sys.stdout to capture DebuggingServer output
@ -233,7 +239,7 @@ class DebuggingServerTests(TestCase):
self.assertEqual(self.output.getvalue(), mexpect)
class NonConnectingTests(TestCase):
class NonConnectingTests(unittest.TestCase):
def testNotConnected(self):
# Test various operations on an unconnected SMTP object that
@ -254,7 +260,8 @@ class NonConnectingTests(TestCase):
# test response of client to a non-successful HELO message
class BadHELOServerTests(TestCase):
@unittest.skipUnless(threading, 'Threading required for this test.')
class BadHELOServerTests(unittest.TestCase):
def setUp(self):
self.old_stdout = sys.stdout
@ -378,7 +385,8 @@ class SimSMTPServer(smtpd.SMTPServer):
# Test various SMTP & ESMTP commands/behaviors that require a simulated server
# (i.e., something with more features than DebuggingServer)
class SMTPSimTests(TestCase):
@unittest.skipUnless(threading, 'Threading required for this test.')
class SMTPSimTests(unittest.TestCase):
def setUp(self):
self._threads = test_support.threading_setup()

View File

@ -6,7 +6,6 @@ from test import test_support
import errno
import socket
import select
import thread, threading
import time
import traceback
import Queue
@ -16,6 +15,13 @@ import array
from weakref import proxy
import signal
try:
import thread
import threading
except ImportError:
thread = None
threading = None
HOST = test_support.HOST
MSG = 'Michael Gilfix was here\n'
@ -550,6 +556,7 @@ class GeneralModuleTests(unittest.TestCase):
s.ioctl(socket.SIO_KEEPALIVE_VALS, (1, 100, 100))
@unittest.skipUnless(thread, 'Threading required for this test.')
class BasicTCPTest(SocketConnectedTest):
def __init__(self, methodName='runTest'):
@ -630,6 +637,7 @@ class BasicTCPTest(SocketConnectedTest):
self.serv_conn.send(MSG)
self.serv_conn.shutdown(2)
@unittest.skipUnless(thread, 'Threading required for this test.')
class BasicUDPTest(ThreadedUDPSocketTest):
def __init__(self, methodName='runTest'):
@ -658,6 +666,7 @@ class BasicUDPTest(ThreadedUDPSocketTest):
def _testRecvFromNegative(self):
self.cli.sendto(MSG, 0, (HOST, self.port))
@unittest.skipUnless(thread, 'Threading required for this test.')
class TCPCloserTest(ThreadedTCPSocketTest):
def testClose(self):
@ -673,6 +682,7 @@ class TCPCloserTest(ThreadedTCPSocketTest):
self.cli.connect((HOST, self.port))
time.sleep(1.0)
@unittest.skipUnless(thread, 'Threading required for this test.')
class BasicSocketPairTest(SocketPairTest):
def __init__(self, methodName='runTest'):
@ -692,6 +702,7 @@ class BasicSocketPairTest(SocketPairTest):
msg = self.cli.recv(1024)
self.assertEqual(msg, MSG)
@unittest.skipUnless(thread, 'Threading required for this test.')
class NonBlockingTCPTests(ThreadedTCPSocketTest):
def __init__(self, methodName='runTest'):
@ -760,6 +771,7 @@ class NonBlockingTCPTests(ThreadedTCPSocketTest):
time.sleep(0.1)
self.cli.send(MSG)
@unittest.skipUnless(thread, 'Threading required for this test.')
class FileObjectClassTestCase(SocketConnectedTest):
bufsize = -1 # Use default buffer size
@ -989,6 +1001,7 @@ class NetworkConnectionNoServer(unittest.TestCase):
lambda: socket.create_connection((HOST, port))
)
@unittest.skipUnless(thread, 'Threading required for this test.')
class NetworkConnectionAttributesTest(SocketTCPTest, ThreadableTest):
def __init__(self, methodName='runTest'):
@ -1051,6 +1064,7 @@ class NetworkConnectionAttributesTest(SocketTCPTest, ThreadableTest):
self.cli = socket.create_connection((HOST, self.port), 30)
self.assertEqual(self.cli.gettimeout(), 30)
@unittest.skipUnless(thread, 'Threading required for this test.')
class NetworkConnectionBehaviourTest(SocketTCPTest, ThreadableTest):
def __init__(self, methodName='runTest'):
@ -1220,6 +1234,7 @@ class TestLinuxAbstractNamespace(unittest.TestCase):
self.assertRaises(socket.error, s.bind, address)
@unittest.skipUnless(thread, 'Threading required for this test.')
class BufferIOTest(SocketConnectedTest):
"""
Test the buffer versions of socket.recv() and socket.send().

View File

@ -9,12 +9,15 @@ import select
import signal
import socket
import tempfile
import threading
import unittest
import SocketServer
import test.test_support
from test.test_support import reap_children, reap_threads, verbose
try:
import threading
except ImportError:
threading = None
test.test_support.requires("network")
@ -119,6 +122,7 @@ class SocketServerTest(unittest.TestCase):
self.assertEquals(server.server_address, server.socket.getsockname())
return server
@unittest.skipUnless(threading, 'Threading required for this test.')
@reap_threads
def run_server(self, svrcls, hdlrbase, testfunc):
server = self.make_server(self.pickaddr(svrcls.address_family),

View File

@ -1,11 +1,11 @@
import socket
import threading
import telnetlib
import time
import Queue
from unittest import TestCase
from test import test_support
threading = test_support.import_module('threading')
HOST = test_support.HOST
EOF_sigil = object()

View File

@ -2,7 +2,7 @@ import os
import unittest
import random
from test import test_support
import thread
thread = test_support.import_module('thread')
import time
import sys
import weakref

View File

@ -5,9 +5,9 @@
# complains several times about module random having no attribute
# randrange, and then Python hangs.
import thread
import unittest
from test.test_support import verbose, TestFailed
from test.test_support import verbose, TestFailed, import_module
thread = import_module('thread')
critical_section = thread.allocate_lock()
done = thread.allocate_lock()

View File

@ -16,11 +16,10 @@ provoking a 2.0 failure under Linux.
NUM_THREADS = 20
FILES_PER_THREAD = 50
import thread # If this fails, we can't test this module
import threading
import tempfile
from test.test_support import threading_setup, threading_cleanup, run_unittest
from test.test_support import threading_setup, threading_cleanup, run_unittest, import_module
threading = import_module('threading')
import unittest
import StringIO
from traceback import print_exc

View File

@ -5,8 +5,8 @@ from test.test_support import verbose
import random
import re
import sys
import threading
import thread
thread = test.test_support.import_module('thread')
threading = test.test_support.import_module('threading')
import time
import unittest
import weakref

View File

@ -1,7 +1,7 @@
import unittest
from doctest import DocTestSuite
from test import test_support
import threading
threading = test_support.import_module('threading')
import weakref
import gc

View File

@ -1,11 +1,11 @@
"""PyUnit testing that threads honor our signal semantics"""
import unittest
import thread
import signal
import os
import sys
from test.test_support import run_unittest
from test.test_support import run_unittest, import_module
thread = import_module('thread')
if sys.platform[:3] in ('win', 'os2') or sys.platform=='riscos':
raise unittest.SkipTest, "Can't test signal on %s" % sys.platform

View File

@ -1,6 +1,5 @@
#!/usr/bin/env python
import threading
import urlparse
import urllib2
import BaseHTTPServer
@ -8,6 +7,7 @@ import unittest
import hashlib
from test import test_support
mimetools = test_support.import_module('mimetools', deprecated=True)
threading = test_support.import_module('threading')
# Loopback http server infrastructure

View File

@ -112,7 +112,8 @@ Extension Modules
Tests
-----
- Issue #7449: Fix many tests to support Python compiled without thread support
- Issue #7449: Fix many tests to support Python compiled without thread
support. Patches written by Jerry Seutter.
- Issue #8108: test_ftplib's non-blocking SSL server now has proper handling
of SSL shutdowns.