Convert test_dummy_threading and test_dbm to unittest.

This commit is contained in:
Brett Cannon 2008-03-18 01:50:25 +00:00
parent 5de250e823
commit ba17cfc66c
3 changed files with 79 additions and 106 deletions

View file

@ -1,60 +1,40 @@
#! /usr/bin/env python from test import test_support
"""Test script for the dbm module import unittest
Roger E. Masse
"""
import os import os
import random
import dbm import dbm
from dbm import error from dbm import error
from test.test_support import verbose, verify, TestSkipped, TESTFN
# make filename unique to allow multiple concurrent tests class DbmTestCase(unittest.TestCase):
# and to minimize the likelihood of a problem from an old file
filename = TESTFN
def cleanup(): def setUp(self):
for suffix in ['', '.pag', '.dir', '.db']: self.filename = test_support.TESTFN
try: self.d = dbm.open(self.filename, 'c')
os.unlink(filename + suffix) self.d.close()
except OSError, (errno, strerror):
# if we can't delete the file because of permissions,
# nothing will work, so skip the test
if errno == 1:
raise TestSkipped, 'unable to remove: ' + filename + suffix
def test_keys(): def tearDown(self):
d = dbm.open(filename, 'c') for suffix in ['', '.pag', '.dir', '.db']:
verify(d.keys() == []) test_support.unlink(self.filename + suffix)
d['a'] = 'b'
d['12345678910'] = '019237410982340912840198242'
d.keys()
if d.has_key('a'):
if verbose:
print 'Test dbm keys: ', d.keys()
d.close() def test_keys(self):
self.d = dbm.open(self.filename, 'c')
self.assert_(self.d.keys() == [])
self.d['a'] = 'b'
self.d['12345678910'] = '019237410982340912840198242'
self.d.keys()
self.assert_(self.d.has_key('a'))
self.d.close()
def test_modes(): def test_modes(self):
d = dbm.open(filename, 'r') for mode in ['r', 'rw', 'w', 'n']:
d.close() try:
d = dbm.open(filename, 'rw') self.d = dbm.open(self.filename, mode)
d.close() self.d.close()
d = dbm.open(filename, 'w') except dbm.error:
d.close() self.fail()
d = dbm.open(filename, 'n')
d.close()
def test_main(): def test_main():
cleanup() test_support.run_unittest(DbmTestCase)
try:
test_keys()
test_modes()
except:
cleanup()
raise
cleanup()
if __name__ == '__main__': if __name__ == '__main__':
test_main() test_main()

View file

@ -1,72 +1,63 @@
# Very rudimentary test of threading module from test import test_support
import unittest
# Create a bunch of threads, let each do some work, wait until all are done
from test.test_support import verbose
import dummy_threading as _threading import dummy_threading as _threading
import time import time
class DummyThreadingTestCase(unittest.TestCase):
class TestThread(_threading.Thread): class TestThread(_threading.Thread):
def run(self): def run(self):
global running
global sema
global mutex
# Uncomment if testing another module, such as the real 'threading'
# module.
#delay = random.random() * 2
delay = 0
if test_support.verbose:
print 'task', self.getName(), 'will run for', delay, 'sec'
sema.acquire()
mutex.acquire()
running += 1
if test_support.verbose:
print running, 'tasks are running'
mutex.release()
time.sleep(delay)
if test_support.verbose:
print 'task', self.getName(), 'done'
mutex.acquire()
running -= 1
if test_support.verbose:
print self.getName(), 'is finished.', running, 'tasks are running'
mutex.release()
sema.release()
def setUp(self):
self.numtasks = 10
global sema
sema = _threading.BoundedSemaphore(value=3)
global mutex
mutex = _threading.RLock()
global running global running
# Uncomment if testing another module, such as the real 'threading' running = 0
# module. self.threads = []
#delay = random.random() * 2
delay = 0
if verbose:
print 'task', self.getName(), 'will run for', delay, 'sec'
sema.acquire()
mutex.acquire()
running = running + 1
if verbose:
print running, 'tasks are running'
mutex.release()
time.sleep(delay)
if verbose:
print 'task', self.getName(), 'done'
mutex.acquire()
running = running - 1
if verbose:
print self.getName(), 'is finished.', running, 'tasks are running'
mutex.release()
sema.release()
def starttasks(): def test_tasks(self):
for i in range(numtasks): for i in range(self.numtasks):
t = TestThread(name="<thread %d>"%i) t = self.TestThread(name="<thread %d>"%i)
threads.append(t) self.threads.append(t)
t.start() t.start()
if test_support.verbose:
print 'waiting for all tasks to complete'
for t in self.threads:
t.join()
if test_support.verbose:
print 'all tasks done'
def test_main(): def test_main():
# This takes about n/3 seconds to run (about n/3 clumps of tasks, times test_support.run_unittest(DummyThreadingTestCase)
# about 1 second per clump).
global numtasks
numtasks = 10
# no more than 3 of the 10 can run at once
global sema
sema = _threading.BoundedSemaphore(value=3)
global mutex
mutex = _threading.RLock()
global running
running = 0
global threads
threads = []
starttasks()
if verbose:
print 'waiting for all tasks to complete'
for t in threads:
t.join()
if verbose:
print 'all tasks done'
if __name__ == '__main__': if __name__ == '__main__':
test_main() test_main()

View file

@ -75,6 +75,8 @@ Library
Tests Tests
----- -----
- GHOP 290: Convert test_dbm and test_dummy_threading to unittest.
- GHOP 293: Convert test_strftime, test_getargs, and test_pep247 to unittest. - GHOP 293: Convert test_strftime, test_getargs, and test_pep247 to unittest.
- Issue #2055: Convert test_fcntl to unittest. - Issue #2055: Convert test_fcntl to unittest.